gpt4 book ai didi

c++ - C++ 测试用例的基本字符串差异

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:58:06 25 4
gpt4 key购买 nike

我有一个返回多行 std::string 的 C++ 函数。在这个测试用例中,我将每一行与已知值进行比较——类似于:

std::string known = "good\netc";
std::string output = "bad\netc";

std::vector<std::string> knownvec;
pystring::splitlines(known, knownvec); // splits on \n

std::vector<std::string> outvec;
pystring::splitlines(output, outvec);

CHECK_EQUAL(osvec.size(), resvec.size());

for(unsigned int i = 0; i < std::min(outvec.size(), knownvec.size()); ++i)
CHECK_EQUAL(pystring::strip(outvec[i]), pystring::strip(knownvec[i]));

这行得通,但是假设添加了一个换行符,所有后续的 CHECK_EQUAL 断言都会失败,这会使输出难以阅读

有没有更好的方法来比较这两个字符串,最好是以一种很好的、​​独立的方式(即不链接 giantdifflib,或者将字符串写入文件并调用 diff 命令! )

[编辑] 我正在使用 OpenImageIO's rather simple unittest.h

被比较的数据主要是 YAML 或颜色查找表。 Here's an example test case - 基本上是几行标题,然后是很多数字:

 Version 1
Format any
Type ...
LUT:
Pre {
0.0
0.1
...
1.0
}
3D {
0.0
0.1
...
1.0
}

最佳答案

最简单的做法是在字符串不再匹配时跳出循环:

for(unsigned int i = 0; i < std::min(outvec.size(), knownvec.size()); ++i)
{
bool areEqual = pystring::strip(outvec[i]) == pystring::strip(knownvec[i]);
CHECK_EQUAL(pystring::strip(outvec[i]), pystring::strip(knownvec[i]));
if (!areEqual)
break;
}

如果 CHECK_EQUAL 返回一个 bool 值,那么您显然可以稍微简化上面的示例。

如果希望您的单元测试框架在比较多行字符串时提供与 diff 相同的输出,那么恐怕您对单元测试框架的期望太高了。如果您不想链接到外部库,或者不想从您的测试程序中执行 diff,那么您必须自己编写某种diff 算法。

查看其他 question关于 diff 算法和库的信息。

如果您发现自己实现差异算法不值得(很可能不值得),那么请查看 Google Diff-Match-Patch图书馆。

关于c++ - C++ 测试用例的基本字符串差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6832123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com