以下是LLVM异常处理库libcxxabi(顺便使用LLVM的堆栈展开库libunwind)的测试:
// libcxxabi\test\test_guard.pass.cpp
...
// Ensure that we initialize each variable once and only once.
namespace test1 {
static int run_count = 0;
int increment() {
++run_count;
return 0;
}
void helper() {
static int a = increment();
((void)a);
}
void test() {
static int a = increment(); ((void)a);
assert(run_count == 1);
static int b = increment(); ((void)b);
assert(run_count == 2);
helper();
assert(run_count == 3);
helper();
assert(run_count == 3);
}
}
...
int main()
{
test1::test();
}
也许我遗漏了一些明显的东西,但是我不确定该测试背后的想法是什么(它测试什么以及如何测试)。你有什么想法吗?
为什么这三个变量
static int run_count
static int a (in test(), not in helper())
static int b
声明为静态吗?
答案 0 :(得分:1)
这是确保编译器正常工作的测试。它应该传递任何可确认的c ++编译器。
我想这是一项快速的健全性检查,将会有更多的深入测试,可能很难理解为什么它们在错误的编译器上失败。
将变量声明为静态变量,以确保各种形式的静态变量正确初始化,并且初始化程序仅被调用一次。