小检查"但是n不符合==>"我怎么知道

时间:2016-09-27 14:52:14

标签: haskell testing smallcheck

我写了这个属性

prop_lookupsymbol = forAll $ \name table scope -> case lookupsymbol name table scope of
                                                  Just (s,_) -> property $ is_ancestor s scope
                                                  Nothing ->  forAll $ \s->is_ancestor s ==> (lookupsymbol name table s) == Nothing

并使用smallCheck 3 prop_lookupsymbol运行,结果为:

  

完成了9000次测试而没有失败   但是9000不符合==>条件。

我知道它涉及财产中的==>来电,但did not meet是什么意思?我应该担心吗?如果是,那么我如何得到不符合条件的测试?

修改

我有一个错误,is_ancestor缺少第二个参数,所以属性就是这样:

   prop_lookupsymbol = forAll $ \name table scope -> case lookupsymbol name table scope of
                                                  Just (s,_) -> property $ is_ancestor s scope
                                                  Nothing ->  forAll $ \s->is_ancestor s scope ==> (lookupsymbol name table s) == Nothing

但是从9000开始,有8340没有达到这个条件。

以下是上述类型和功能的说明:

SymbolTableHashMap (Scope,String) Symbol(来自无序容器包的HashMap.Strict)的类型同义词,这仅用于构建编译器:)。

Symbol有各种构造函数(变量,函数,类型等),Scope定义了符号定义的范围,我们有文件,类,函数,方法(类中的函数),接口。 / p>

Scope具有名称(文件名,类名等)和上限作用域,对于类,它还具有父作用域(父作为继承)和接口作用域列表(类实现),接口作用域具有父范围及其范围。

函数is_ancestor s1 s2返回s1是s2的上观(或上 - 上或上 - 上......),还是父范围(或父母 - 父母 - 父母 - 父母 - ... 。)或其中一个接口(或父接口等),我应该提到is_ancestor s s总是如此。

最后lookupsymbol name table scope尝试查找名称为name且范围为s的符号,其中is_ancestor s scope为真,其返回类型为Maybe (Scope,Symbol),表示它返回找到的符号以及定义符号的范围(当没有找到任何内容时,则返回Nothing。)

我的属性声明:对于任何名称表范围,如果lookupsymbol返回Just (s,_),则s必须是is_ancestor scope,但如果它没有返回任何内容,那么它将对is_ancestor scope的任何范围都不返回任何内容。

0 个答案:

没有答案