我有一个测试套件(更像是我们在工作中使用的本土测试迷宫),正如标题中所提到的,它是由宏定义参数化的。为了给出粗略的图片,代码如下所示:
输入创建
void make_input(vector<data> &v)
{
#if INPT_RANDOM_GENERATION
/* fill v accordingly */
#elif INPT_READ_FROM_FILE
/* fill v accordingly */
#else
#error Not a valid input generation method
#endif
}
预处理
void pre_process_input(vector<data> &v)
{
#if PP_SANITIZE
/* mutate v accordingly */
#elif PP_DO_NADA
/* leave v alone */
#else
#error Not a valid input pre-processing method
#endif
}
运行算法
void run_algorithms(vector<data> &v)
{
#if RUN_SERIAL
/* ... */
#elif RUN_PARALLEL
/* ... */
#else
#error Not a valid algorithm
#endif
}
后处理
// well you get the gist
所以,运行这个东西有点麻烦,不是因为#define
你需要切换,而是因为可能会遗漏某些东西。现在,我实际上正在调整宏列表并重新编译以进行不同的运行。有没有更好的办法?
我正在使用Visual Studio 2015专业版,没有人会将此测试套件移植到VS测试框架。我想也许一个批处理文件技巧是个好主意,但我不知道该怎么做。如果存在完全不同的替代方案,那么我想知道。