小编use*_*ame的帖子

如何在Haskell中使用SmallCheck?

我正在尝试使用SmallCheck来测试Haskell程序,但我无法理解如何使用该库来测试我自己的数据类型.显然,我需要使用Test.SmallCheck.Series.但是,我发现它的文档非常混乱.我对菜谱式解决方案和逻辑(monadic?)结构的可理解解释感兴趣.以下是我的一些问题(全部相关):

  • 如果我有数据类型data Person = SnowWhite | Dwarf Integer,我smallCheck该如何解释有效值是Dwarf 1通过Dwarf 7(或SnowWhite)?如果我有一个复杂的FairyTale数据结构和构造函数makeTale :: [Person] -> FairyTale,并且我想smallCheck使用构造函数从Person-s列表中制作FairyTale-s怎么办?

    我设法quickCheck通过使用Control.Monad.liftM类似功能的明智应用程序来完成这样的工作,而不会让 我的手太脏makeTale.我无法想办法解决这个问题smallCheck(请向我解释一下!).

  • 什么是类型之间的关系Serial,Series等等?

  • (可选)有什么意义coSeries?我如何使用Positive来自的类型SmallCheck.Series

  • (可选)在smallCheck的上下文中,任何阐明应该是monadic表达式的逻辑是什么,以及什么只是常规函数,将会受到赞赏.

如果有任何介绍/教程使用smallCheck,我会很感激一个链接.非常感谢你!

更新:我应该补充一点,我找到的最有用和可读的文档smallCheck本文(PDF).第一眼看我在那里找不到我的问题的答案; 它更像是一个有说服力的广告而不是教程.

更新2:我把关于Identity在类型Test.SmallCheck.list和其他地方出现的怪异问题转移到一个单独的问题上.

testing monads automated-tests haskell smallcheck

15
推荐指数
1
解决办法
1629
查看次数

泛型系列生成无限列表

使用此片段和smallcheck-1.0.1

data Foo = A | B | Pair Foo Foo deriving Show
deriving instance Generic Foo
instance (Monad m) => Serial m Foo
Run Code Online (Sandbox Code Playgroud)

那么这个

list 1 (series :: Series Identity Foo)
Run Code Online (Sandbox Code Playgroud)

生成一个看似无限的列表.

我认为有些东西是相同的,直到smallcheck-0.6.1只生成[A,B]并且是我所期望的.

这是对smallcheck系列的预期更改,如果是这样,是否有一种简单的方法来取回0.6.1行为.

这里有可编辑的程序来证明这一点:http: //hpaste.org/83927

haskell smallcheck

6
推荐指数
1
解决办法
144
查看次数

为什么两个查找素数的算法速度差异很大,即使它们看起来迭代次数相同?

我有两种在Python中查找素数的算法.每个的内循环似乎执行相同的次数,并且同样简单.但是,其中一个需要10倍于另一个.我的问题是:

为什么?这是一些可以优化掉的Python的怪癖(如何?),还是我错过了其他的东西?

我要解决的问题主要来自http://www.spoj.pl/problems/PRIME1/.在我的情况下,我有N = 10**9,delta = 10**5,我想找到N-delta和delta之间的所有素数.我还有smallprimes一个预先制作的所有素数小于或等于N的平方根的列表.第一个算法非常简单:

def range_f1(lo, hi, smallprimes):
  """Finds all primes p with lo <= p <= hi. 

  smallprimes is the sorted list of all primes up to (at least) square root of hi.
  hi & lo might be large, but hi-lo+1 miust fit into a long."""

  primes =[]
  for i in xrange(hi-lo+1):
    n = lo + i

    isprime = True
    for p in smallprimes:
        if n % p == 0:
            isprime = …
Run Code Online (Sandbox Code Playgroud)

python algorithm optimization primes profiling

5
推荐指数
1
解决办法
357
查看次数