LLVM:测试基础(一),llvm-lit、FileCheck

文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。

前期的 MLIR 系列文章中,没有介入测试工作。测试本身也是一个比较大的主题,这里希望用几篇文章讲明白如何利用 LLVM 的基础设施完成所编写代码的测试工作。

本文为第 1 期,将使用一个例子介绍如何使用 llvm-lit 和 FileCheck 这两个最常用的工具完成测试工作。

  • llvm-lit,LLVM Integrated Tester,通过 Python 语法编写配置文件,完成对某个项目的测试工作
  • FileCheck,一个比 grep 功能更多的文本查找与匹配验证工具,可以帮助程序员确认代码是否正确生成

这两个工具都可以通过 pip 安装,分别叫 litfilecheck如果使用了 pip 安装,下面的相关工具名请自行更改替换。

关于两个工具的更多使用细节请自行前往相关网站。

下面用一个小例子说明如何使用这两个工具,

文件结构

1
2
3
.
|-- lit.cfg
`-- main.c

main.c

首先编写一个待测试的文件,

1
2
3
4
5
6
7
8
// RUN: cc %s -o %t && %t | FileCheck %s
// CHECK: Hello world

#include <stdio.h>
int main() {
printf("Hello world\n");
return 0;
}

在测试文件的顶部加入了待 llvm-lit 去驱动执行的标记以及待执行代码。

很简单,通过 cc 编译当前文件 %s 为一个临时文件 %t,然后执行这个 %t,最后通过 FileCheck 去和原文件中的 CHECK 标记的语句对比,看是否符合预期。

lit.cfg

接下来编写配置文件,

1
2
3
4
5
6
import lit.formats

config.name = "My example"
config.test_format = lit.formats.ShTest(True)

config.suffixes = [".c"]

这里也比较简单,就说明了测试项目的名称、类型、对应文件类型。

运行

在这两个文件的所在目录,执行

1
2
3
4
5
6
❯ llvm-lit main.c
-- Testing: 1 tests, 1 workers --
PASS: My example :: main.c (1 of 1)

Testing Time: 0.11s
Passed: 1

可以看到,这一个测试用例通过了。

结语

当然,这只是一个很简单的例子。但在更复杂的工程中,他们同样能发挥很好的作用。下期继续介绍如何在一个 cmake 项目中引入 LLVM 测试套件完成测试。

~~

都看到这儿了,不如关注每日推送的“科文路”、互动起来~

至少点个赞再走吧~

LLVM:测试基础(一),llvm-lit、FileCheck

https://xlindo.com/kewenlu2022/posts/65410c85/

Author

xlindo

Posted on

2023-02-16

Updated on

2024-01-16

Licensed under

Comments