这是一个测试框架,能够把源码与测试代码合并在一个文件中。
test script
create a x.c file with following code.
// RUN: cc %s -o %t
// RUN: %t | grep -e "hello world"
#include <stdio.h>
int main() {
puts("hello world");
return 0;
}
configuration
create lit.cfg.py with following code.
import lit.formats
config.name = "My Example"
config.test_format = lit.formats.ShTest(True)
config.suffixes = ['.c']
run commands
lit .
- lit可以指定具体的文件或者目录, 他会一直通过目录向上找文件
lit.cfg.pyorlit.site.cfg.pyfile。这里官方文档不准确。- 0代表成功,其他代表失败
- 也可以自己写python调用main函数
- 输出的结果会在Output目录下
- Reference: medium.com/@mshockwave…
FileCheck
LLVM 的一个tools,类似增强版本的grep, 它接受两个输入,一个是standard input,这个是待检查的数据,还有一个命令行传入的文件,这个文件一般都包含源码与注释,两个作用,源码用于编译出ir文件。注释里面包含FileCheck需要校验的规则。
以下上常用语法:
- CHECK: 按顺序出现;tab 与 空格不区分;空格的数量也不区分;两个CHECK之间可以任意插入;这里匹配的是某个字段,并非整行。
- CHECK-PREFIX: 可以进行条件判断,根据不同平台执行不同的判断。
- COM:加注释
- CHECK-NEXT: 匹配成功的位置恰好是上面check的下一行;不能作为第一次出现;
- CHECK-SAME: 检查CHECK后面的第一次出现某个name时,值是否为某个value;不能第一次出现;
- CHECK-EMPTY: 保证有空行
- CHECK-NOT: 保证两次CHECK之间不出现某个值。
- CHECK-COUNT: 可以进行多次重复匹配。
- CHECK-DAG: 相比于CHECK,它能匹配无序,
- CHECK-LABEL: 类似命名空间,用作分段,