如果 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 标准库的任何功能?

例如套件本身可能使用memsetfopen等,但memsetfopen等实际上正在测试中,可能是越野车。

困惑。需要澄清/经验。

更新。检查套件的源代码后澄清。该套件使用两个编译器:

  1. 参考编译器用于构建套件本身。
  2. IUT (Implementation Under Test) 编译器用于 运行 对其进行测试。

是的,使用实现 X 测试实现 X 是不正确的(例外情况见下文)。在我的特殊情况下,在检查套件的源代码后,情况就清楚了。该套件使用两个编译器:

  1. 参考编译器用于构建套件本身。
  2. 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.

我想说的是,测试测试本身的正确性总是很重要的。