参考:1)https://gcc.gnu.org/wiki/HowToPrepareATestcase
2)Test Directives (GNU Compiler Collection (GCC) Internals)
编写测试用例建议
1)针对bug问题,测试用例尽可能小。需要掌握裁剪测试用例的工具,将项目或者工程中的遇到的问题,裁剪成较小的测试用例。
2)针对新特性的测试用例应该尽可能冗长些,要尽可能涵盖有该问题有关的情况。
3)如果提交的patch是解决同一类问题,但是测试用例的可能存在不同的代码序列,尽可能将所有的测试用例放到同一个测试文件中。
4)如果是针对已知的错误(gnu官方的bug 数据库),那么提交的PR的commit需要按照通常的语法命名,并在注释中添加良好的摘要(例如,c++/2204:检查函数入参的抽象性)
5)如果是解决未提交到官方bug数据库的bug,可以在测试用例中添加简短描述。
测试用例存放位置
每种语言都有自己的目录,通常有两个目录:一个用于酷刑测试(torture),另一个用于正常测试。酷刑测试是一种测试用例,它可以用许多不同的优化级别编译和执行,旨在强调GCC优化器。正常的测试是为了测试前端功能(不受优化级别的影响),或者需要特定命令行选项的测试,因此不适合酷刑测试套件。
Active directories in the testsuite | |
gcc/testsuite/gcc.c-torture/ | C torture tests. |
gcc/testsuite/gcc.dg/ | C normal tests. |
gcc/testsuite/g++.dg/ | C++ tests. |
gcc/testsuite/gfortran.dg/ | F95 tests. |
gcc/testsuite/gfortran.fortran-torture/ | F95 torture tests. |
gcc/testsuite/gnat.dg/ | Ada tests. |
gcc/testsuite/objc/ | Objective C torture tests. |
gcc/testsuite/objc.dg/ | Objective C normal tests. |
lib*/testsuite/*/ | tests for the target libraries. |
测试自己编写的测试用例
Node:假设测试用例名称:awiden-compare-1.c , ... , awiden-compare-8.c
1、构建GCC成功后,制定gcc的path:export PATH="path to gcc install"
2、安装dejagnu:
./configure --prefix=${DEJAGNU_PATH}
make -j${PARALLEL} && make install
export PATH=${DEJAGNU_PATH}/bin:$PATH
3、cd gcc/testsuit/(这里是源码目录,并非build目录)
4、
- 首先找到这个测试用例所在的目录,即
./gcc.dg/tree-ssa/awiden-compare*
- 在该目录下存在一个
*.exp
文件,即./gcc.dg/tree-ssa/tree-ssa.exp
,如果不存在,则往上一个目录寻找*.exp
文件 - 在
testsuite
目录下执行runtest --tool gcc tree-ssa.exp=awiden-compare*
,如果需要执行整个 exp 的测试用例,则执行runtest --tool gcc tree-ssa.exp
- 测试结果保存在当前
testsuite
目录下的*.log
和*.sum
文件中
Note:由于awiden-compare相关测试用例放在gcc目录下,所以 --tool后面是gcc,如果是g++目录下的测试用例,使用--tool g++,类似gfortran目录下,使用--tool gfortran