当前位置

网站首页> 程序设计 > 开源项目 > 编程语言 > 浏览文章

C 的属性测试库 theft

作者:小梦 来源: 网络 时间: 2024-05-14 阅读:

程序员必上的开发者服务平台 —— DevStore

theft 是基于属性测试的 C 库。theft 并不是使用定义特定的输入,运行代码,然后测试和检测结果的方式,而是进行属性断言(“任意可能的输入,[条件]应该一直存在”),寻找反例。如果找到一个参数导致断言失败,将会继续寻找更简单的参数,如果仍然失败,打印最小的失败输入。

安装 & 依赖

theft 只依赖 C99。

构建:

$ make

构建和运行测试:

$ make test

安装 libtheft :

$ make install    # using sudo, if necessary

用法

首先,定义属性函数:

static theft_trial_resprop_encoded_and_decoded_data_should_match(buffer *input) {    // [compress & uncompress input, compare output & original input]    // return THEFT_TRIAL_PASS, FAIL, SKIP, or ERROR}

然后,生成测试参数:

static struct theft_type_info random_buffer_info = {    .alloc = random_buffer_alloc_cb,    // allocate random instance    .free = random_buffer_free_cb,      // free instance    .hash = random_buffer_hash_cb,      // get hash of instance    .shrink = random_buffer_shrink_cb,  // simplify instance    .print = random_buffer_print_cb,    // print instance};
最后,实例化:
struct theft *t = theft_init(0);   // 0 -> auto-size bloom filter// Configuration for the property teststruct theft_cfg cfg = {    // name of the property, used for failure messages (optional)    .name = __func__,    // the property function under test    .fun = prop_encoded_and_decoded_data_should_match,    // list of structs with argument info; the property function    // will be called with this many arguments    .type_info = { &random_buffer_info },    // number of trials to run; defaults to 100    .trials = 1000,};// Run the property test. Any failures will be printed, with seeds.theft_run_res result = theft_run(t, &cfg);theft_free(t);return result == THEFT_RUN_PASS;


相关阅读