gpt4 book ai didi

c++ - 在 C++ 中自动/模板化生成测试 vector

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:26:49 28 4
gpt4 key购买 nike

我想找到一种自动生成测试 vector 的好方法。举例来说,我正在通过调用一个函数来测试音频处理模块,该函数使用指定的测试 vector 来执行被测模块,并在此过程中对模块输出的正确操作和正确性进行各种检查。

void runTest(const char *source, double gain, int level);

测试 vector 是sourcegainlevel 的三元组。这是我要测试的多维空间:

const char *sources[] = {"guitar.mp3", "vocals.mp3", "drums.mp3"};
double gains[] = {1., 10., 100.};
int levels[] = {1, 2, 3, 4};

值可以有其他属性,例如,如果 vocals.mp3 的动态范围为 2,吉他为 5,鼓为 10,我们可以设想这样的表示:

int dynamicRange(const char *source);

我希望能够配置各种测试运行。例如,我希望能够运行:

// all permutations (total 36 vectors)
runTest("guitar.mp3", 1., 1);
runTest("guitar.mp3", 1., 2);
runTest("guitar.mp3", 1., 3);
runTest("guitar.mp3", 1., 4);
runTest("guitar.mp3", 1., 1);
runTest("guitar.mp3", 10., 2);
runTest("guitar.mp3", 10., 3);
// ...

// corner cases (according to dynamicRange)
runTest("vocals.mp3", 1., 1);
runTest("vocals.mp3", 1., 4);
runTest("vocals.mp3", 100., 1);
runTest("vocals.mp3", 100., 4);
runTest("drums.mp3", 1., 1);
runTest("drums.mp3", 1., 4);
runTest("drums.mp3", 100., 1);
runTest("drums.mp3", 100., 4);

// sparse / minimal tests touching every value for each parameter
runTest("guitar.mp3", 1., 1);
runTest("vocals.mp3", 10., 2);
runTest("drums.mp3", 100., 3);
runTest("guitar.mp3", 1., 4);

// quick test
runTest("guitar.mp3", 1., 1);

我想创建上面的代码而无需动态复制和粘贴大量代码或使用我的编译器来完成跑腿工作,例如:

// syntax tentative here, could be class/template instantiations
allPermutations(runTest, sources, gains, levels);
cornerCases(runTest, lookup(sources, dynamicRange), gains, levels);
minimal(runTest, sources, gains, levels);
quick(runTest, sources, gains, levels);

上面看起来像动态 C,但我的语言是 C++,我希望使用模板和一些动态和静态技术的组合。甚至元编程。

组合和变化也很有趣。例如,我可能只想使用最短的输入文件。或者我可能想运行所有带有 gainlevel 边界案例的源代码。或者 gain 也可以是 1 到 100 的连续范围,但我们暂时保持离散。

在我开始设计类型、模板、表示等之前。我想知道这是否是一个以前已经解决的问题,或者如果没有,是否有任何现有的库,例如Boost MPL,有用吗?

最佳答案

我认为如果您 self 介绍 All-pairs testing 的概念会很有用, 并快速检查 QuickCheck (Haskell 测试框架根据给定的规范随机生成测试用例,然后检查某些属性是否成立;存在C++ version of it)。

特别是关于 Boost.MPL,我认为它根本不会帮助您完成这项任务:您不是在处理这里的类型列表,是吗。

我对您即将推出的设计的另一个建议是:不要过度概括。在您开始使用类型、模板等之前,实现 3(三)个合理不同的实现,然后概括您手头已有的东西。

关于c++ - 在 C++ 中自动/模板化生成测试 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5417992/

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