Lit学习笔记

348 阅读2分钟

这是一个测试框架,能够把源码与测试代码合并在一个文件中。

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.py or lit.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: 类似命名空间,用作分段,

llvm.org/docs/Comman…