nlu*_*oni 21 language-agnostic testing unit-testing
我想测试一个带有一组边缘情况和正常值的元组的函数.例如,在测试一个函数,该函数true在给定三个形成有效三角形的长度时返回,我将具有特定情况,负数/小数/大数,接近溢出的值等等; 更重要的是,主要目的是生成这些值的组合,有或没有重复,以获得一组测试数据.
(inf,0,-1), (5,10,1000), (10,5,5), (0,-1,5), (1000,inf,inf),
...
作为一个注释:我实际上知道答案,但它可能对其他人有帮助,对这里的人们来说是一个挑战! - 稍后会发布我的回答.
nlu*_*oni 15
当然,特别是处理大量的这些排列/组合我绝对可以看到第一遍是一个问题.
python中有趣的实现,虽然我在C和Ocaml中写了一个很好的基于"算法515"(见下文).他在Fortran中写了他的所有"算法XX"论文,那就是组装或c.我不得不重新编写它并进行一些小改进以使用不是数字范围的数组.这个随机访问,我仍在努力获得Knuth第4卷第2卷中提到的一些很好的实现.我将向读者解释这是如何工作的.虽然如果有人好奇,我也不会反对写点什么.
/** [combination c n p x]
 * get the [x]th lexicographically ordered set of [p] elements in [n]
 * output is in [c], and should be sizeof(int)*[p] */
void combination(int* c,int n,int p, int x){
    int i,r,k = 0;
    for(i=0;i<p-1;i++){
        c[i] = (i != 0) ? c[i-1] : 0;
        do {
            c[i]++;
            r = choose(n-c[i],p-(i+1));
            k = k + r;
        } while(k < x);
        k = k - r;
    }
    c[p-1] = c[p-2] + x - k;
}
〜"算法515:从字典索引生成矢量"; Buckles,BP和Lybanon,M.ACM数学软件交易,卷.1977年6月3日第2号.
| 归档时间: | 
 | 
| 查看次数: | 8851 次 | 
| 最近记录: |