Tcl工具类似于Quickcheck或ScalaCheck

Tcl工具类似于Quickcheck或ScalaCheck,tcl,Tcl,是否有为Tcl生成的自动测试用例?类似于快速检查或scala检查?互联网搜索没有发现任何图书馆 tl;dr:我什么都不知道,但是你可以很容易地在tcltest上编写代码 我查阅了一些QuickCheck和ScalaCheck教程。有意思,但他们有一个问题,就是不能保证找到问题。这些例子都很好地说明了当短输入出现问题时,事情是如何运作的,但是使用随机输入模型(我怀疑是泊松分布?),我真的不认为有太多机会找到上界或特定值失败,除非你确实输入了大量数据 还有一个问题,Tcl代码通常是有状态的;当您了

是否有为Tcl生成的自动测试用例?类似于快速检查或scala检查?互联网搜索没有发现任何图书馆

tl;dr:我什么都不知道,但是你可以很容易地在tcltest上编写代码


我查阅了一些QuickCheck和ScalaCheck教程。有意思,但他们有一个问题,就是不能保证找到问题。这些例子都很好地说明了当短输入出现问题时,事情是如何运作的,但是使用随机输入模型(我怀疑是泊松分布?),我真的不认为有太多机会找到上界或特定值失败,除非你确实输入了大量数据

还有一个问题,Tcl代码通常是有状态的;当您了解状态时进行测试需要更复杂的方法。基本上,您通常需要一段额外的代码将系统置于您想要测试的状态,另一段代码将系统移出该状态并使其返回静止状态。好的测试框架有这样的东西,所以它实际上不是一个真正的问题。这只是一个你需要注意的复杂问题

但我们可以利用Tcl几乎都是一种特定领域的语言这一事实来制作我们自己的小型模糊测试仪。(对于这类事情,
upvar
uplevel
命令非常有用。)

软件包需要测试2
proc fuzzInteger{var from to count test}{
upvar 1$var v
对于{set i 0}{$i<$count}{incr i}{
集合v[expr{$from+int(rand()*($to-$from))}]
上一级$1测试
}
}
proc fuzzList{var P语言计数测试}{
upvar 1$var v
对于{set i 0}{$i<$count}{incr i}{
集合v{}

虽然{rand()不是我所知道的。事实上,我以前没有听说过QuickCheck;它只是在做一些DSL驱动的模糊测试吗?你到底怎么能相信它所断言的是有意义的?
package require tcltest 2

proc fuzzInteger {var from to count test} {
    upvar 1 $var v
    for {set i 0} {$i < $count} {incr i} {
        set v [expr {$from+int(rand()*($to-$from))}]
        uplevel 1 $test
    }
}
proc fuzzList {var P language count test} {
    upvar 1 $var v
    for {set i 0} {$i < $count} {incr i} {
        set v {}
        while {rand() <= $P} {
            lappend v [lindex $language [expr {int(rand() * [llength $language])}]]
        }
        uplevel 1 $test
    }
}

# Demonstrate by throwing random crap into 'lindex'; it should never produce an error
fuzzList abcList 0.5 {a b c} 500 {
    fuzzInteger foobar 0 20 500 {
        tcltest::test lindex-fuzztest-[incr count] "fuzzed: lindex {$abcList} $foobar" -body {
            lindex $abcList $foobar
        } -match glob -result *
    }
}
# Print the final report
tcltest::cleanupTests