mirror of
https://github.com/ROCm/composable_kernel.git
synced 2026-03-25 17:47:47 +00:00
Adds new testing functionality: an inline diff for string comparison.
Example usage:
EXPECT_THAT("Actual string", ck_tile::test::StringEqWithDiff("Expected string"));
Failure message:
Value of: "Actual string"
Expected: "Expected string"
Actual: "Actual string" (of type char [14]),
Diff: "[Expe|A]ct[ed|ual] string"
The inline-diff function uses the Wagner-Fischer algorithm to find the minimum edit distance and generate diff markers, which has O(N^2) complexity. It has optional color codes that are enabled with the matcher.
53 lines
1.6 KiB
C++
53 lines
1.6 KiB
C++
// SPDX-License-Identifier: MIT
|
|
// Copyright (c) 2018-2025, Advanced Micro Devices, Inc. All rights reserved.
|
|
|
|
#include <gtest/gtest.h>
|
|
|
|
#include "testing_utils.hpp"
|
|
|
|
namespace ck_tile::builder {
|
|
namespace {
|
|
|
|
TEST(InlineDiff, simpleColorDiff)
|
|
{
|
|
std::string str1{"hello"};
|
|
std::string str2{"hello"};
|
|
std::string str3{"world"};
|
|
|
|
// some easy tests
|
|
// you can veryfy the ungodly strings are meaningful by running echo -e "<string>"
|
|
EXPECT_THAT(test::inlineDiff(str1, str2, true), "hello");
|
|
EXPECT_THAT(test::inlineDiff(str1, str3, true),
|
|
"[\x1B[36mwor\x1B[0m|\x1B[35mhel\x1B[0m]l[\x1B[36md\x1B[0m|\x1B[35mo\x1B[0m]");
|
|
}
|
|
|
|
TEST(InlineDiff, noColorDiff)
|
|
{
|
|
std::string str1{"hello"};
|
|
std::string str2{"hello"};
|
|
std::string str3{"world"};
|
|
|
|
// some easy tests without color
|
|
EXPECT_THAT(test::inlineDiff(str1, str2, false), "hello");
|
|
EXPECT_THAT(test::inlineDiff(str1, str3, false), "[wor|hel]l[d|o]");
|
|
}
|
|
|
|
TEST(InlineDiff, complexColorDiff)
|
|
{
|
|
|
|
// now something more interesting
|
|
std::string str4{"this part has changed, this part has been left out, this part, this part has "
|
|
"an extra letter"};
|
|
std::string str5{
|
|
"this part has degeahc, this part has, this part added, this part has ana extra letter"};
|
|
|
|
EXPECT_THAT(
|
|
test::inlineDiff(str5, str4, true),
|
|
"this part has [\x1B[36mchanged\x1B[0m|\x1B[35mdegeahc\x1B[0m], this part has[\x1B[36m "
|
|
"been left out\x1B[0m|\x1B[35m\x1B[0m], this part[\x1B[36m\x1B[0m|\x1B[35m added\x1B[0m], "
|
|
"this part has an[\x1B[36m\x1B[0m|\x1B[35ma\x1B[0m] extra letter");
|
|
};
|
|
|
|
} // namespace
|
|
} // namespace ck_tile::builder
|