c - C 解释器的测试用例

标签 c testing compiler-construction case interpreter

我想测试一个 ANSI C 解释器。 我的工具解释我的 C 程序。它不产生机器代码;并且执行后我无法访问堆/堆栈! 我正在考虑针对 GCC 或类似的东西验证返回值/输出。

我一直在寻找适合我的东西,但我几乎找不到任何免费或开源的东西。

有人对如何测试我的解释器有想法/建议吗? 任何人都可以推荐类似测试套件的东西吗?或者测试用例包?

最佳答案

我还写了一个C解释器,主要依赖于gcc.c - 折磨/执行测试用例。该测试套件包含 "code fragments which have historically broken easily" 。该测试用例的优点是,必须执行它们才能提供结果(而不是例如仅编译),然后将结果与预期结果相匹配。您不需要将它与由 GCC 编译的执行程序的结果进行比较。您基本上只需要在目录中包含文件并执行它们,这与其他一些测试套件形成鲜明对比,在这些测试套件中您必须从配置文件或类似文件中解析预期结果。您可以从GCC repository下载测试。 .

对您来说,一个缺点可能是,测试用例通常很广泛,并且还可能包含 GNU 扩展,例如用于执行汇编代码的 asm 语句或有关如何对齐内存内容的属性。它们还包括一些旧 K&C 函数样式表示法的测试用例,如下例所示(并非取自套件):

int func(a)
int a; 
{
    return a + 1;
}

但是,我仍然建议您仔细查看测试用例并查看可以执行什么,因为它们还测试了 ASNI C 的许多“正常”极端情况。

关于c - C 解释器的测试用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11500928/

相关文章:

c - 在 C 中创建大小在运行时决定的数组时出错

c - 映射库函数分配的间接指针 - C - OSX

php - 如何在 PHPUnit 中测试 cmp()

compiler-construction - 编译器是如何开发的,它们如何翻译您的代码?

c - 我是否需要在编译时添加一个 _REENTRANT 宏以使我的 errno 线程安全?

有人可以帮我解释一下这个递归函数吗?

c - #define PORTX.x 在 Avr Studio 5 (ATmega16)

testing - 在线测试我的网站

ruby-on-rails - 如何为复杂的 Rails 索引编写集成测试(最佳实践)

c# - C# 或 JIT 编译器是否足够智能以处理此问题?