如果 C 标准库确实在测试中,为什么 C 编译器验证套件本身可能会使用 C 标准库?
Why C compiler validation suites themselves may use the C standard library if the C standard library is actually under test?
如果 C 标准库确实在测试中并且可能有错误(这会使验证套件本身失效),那么 C 编译器验证套件如何可能使用 C 标准库的任何功能?
例如套件本身可能使用memset
、fopen
等,但memset
、fopen
等实际上正在测试中,可能是越野车。
困惑。需要澄清/经验。
更新。检查套件的源代码后澄清。该套件使用两个编译器:
- 参考编译器用于构建套件本身。
- IUT (Implementation Under Test) 编译器用于 运行 对其进行测试。
是的,使用实现 X 测试实现 X 是不正确的(例外情况见下文)。在我的特殊情况下,在检查套件的源代码后,情况就清楚了。该套件使用两个编译器:
- 参考编译器用于构建套件本身。
- IUT (Implementation Under Test) 编译器用于 运行 对其进行测试。
例外情况。正如用户 Steve Summit 提到的:
A good test suite may consist of many stages or layers. First you test A against something fundamental. Then, once you know A is correct, you can use A as part of your test to validate B. Then, you can use A and B to validate C, etc.
这是可行的方法。悬停,由于无法测试第一层(上层)(例如 ==
运算符的正确性),我们将第一层无错误作为公理。
也继续引用用户Steve Summit的话:
Sometimes it's even important to test your tests.
我想说的是,测试测试本身的正确性总是很重要的。
如果 C 标准库确实在测试中并且可能有错误(这会使验证套件本身失效),那么 C 编译器验证套件如何可能使用 C 标准库的任何功能?
例如套件本身可能使用memset
、fopen
等,但memset
、fopen
等实际上正在测试中,可能是越野车。
困惑。需要澄清/经验。
更新。检查套件的源代码后澄清。该套件使用两个编译器:
- 参考编译器用于构建套件本身。
- IUT (Implementation Under Test) 编译器用于 运行 对其进行测试。
是的,使用实现 X 测试实现 X 是不正确的(例外情况见下文)。在我的特殊情况下,在检查套件的源代码后,情况就清楚了。该套件使用两个编译器:
- 参考编译器用于构建套件本身。
- IUT (Implementation Under Test) 编译器用于 运行 对其进行测试。
例外情况。正如用户 Steve Summit 提到的:
A good test suite may consist of many stages or layers. First you test A against something fundamental. Then, once you know A is correct, you can use A as part of your test to validate B. Then, you can use A and B to validate C, etc.
这是可行的方法。悬停,由于无法测试第一层(上层)(例如 ==
运算符的正确性),我们将第一层无错误作为公理。
也继续引用用户Steve Summit的话:
Sometimes it's even important to test your tests.
我想说的是,测试测试本身的正确性总是很重要的。