- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑以下类别定义:
trait Category[~>[_, _]] {
def id[A]: A ~> A
def compose[A, B, C](f: A ~> B)(g: B ~> C): A ~> C
}
object Category {
implicit def fCat = new Category[Function1] {
def id[A] = identity
def compose[A, B, C](f: A => B)(g: B => C) = g.compose(f)
}
}
.
)和标识(
id
):
forall f: categoryArrow -> id . f == f . id == f
"Categories" should {
import Category._
val intG = { (_ : Int) - 5 }
"left identity" ! check {
forAll { (a: Int) => fCat.compose(fCat.id[Int])(intG)(a) == intG(a) }
}
"right identity" ! check {
forAll { (a: Int) => fCat.compose(intG)(fCat.id)(a) == intG(a) }
}
}
Int
)和(ii)特定函数(
intG
)量化的。所以这是我的问题:在概括上述测试方面我能走多远?或者换句话说,是否有可能创建任意
A => B
函数的生成器,并将其提供给ScalaCheck?
最佳答案
我不完全了解希尔伯特的epsilon,我会采用更基本的方法,并使用ScalaCheck的Arbitrary
和Gen
选择要使用的函数。
首先,为要生成的函数定义一个基类。通常,可能会生成结果不确定的函数(例如被零除),因此我们将PartialFunction
用作基类。
trait Fn[A, B] extends PartialFunction[A, B] {
def isDefinedAt(a: A) = true
}
toString
,因此ScalaCheck的错误消息可理解。
object Identity extends Fn[Int, Int] {
def apply(a: Int) = a
override def toString = "a"
}
object Square extends Fn[Int, Int] {
def apply(a: Int) = a * a
override def toString = "a * a"
}
// etc.
case class Summation(b: Int) extends Fn[Int, Int] {
def apply(a: Int) = a + b
override def toString = "a + %d".format(b)
}
case class Quotient(b: Int) extends Fn[Int, Int] {
def apply(a: Int) = a / b
override def isDefinedAt(a: Int) = b != 0
override def toString = "a / %d".format(b)
}
// etc.
Fn[Int, Int]
的生成器,并将其定义为隐式
Arbitrary[Fn[Int, Int]]
。您可以一直添加生成器,直到脸色发青(多项式,由简单的函数组成复杂的函数等)。
val funcs = for {
b <- arbitrary[Int]
factory <- Gen.oneOf[Int => Fn[Int, Int]](
Summation(_), Difference(_), Product(_), Sum(_), Quotient(_),
InvDifference(_), InvQuotient(_), (_: Int) => Square, (_: Int) => Identity)
} yield factory(b)
implicit def arbFunc: Arbitrary[Fn[Int, Int]] = Arbitrary(funcs)
intG.isDefinedAt(a)
避免产生不确定的结果。
property("left identity simple funcs") = forAll { (a: Int, intG: Fn[Int, Int]) =>
intG.isDefinedAt(a) ==> (fCat.compose(fCat.id[Int])(intG)(a) == intG(a))
}
property("right identity simple funcs") = forAll { (a: Int, intG: Fn[Int, Int]) =>
intG.isDefinedAt(a) ==> (fCat.compose(intG)(fCat.id)(a) == intG(a))
}
关于scala - 高阶ScalaCheck,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10518015/
我知道我可以 make scalacheck tests deterministic ,但我有一个更普遍的问题:scalacheck默认的非确定性行为是否会导致实际问题?我一直认为测试应该是确定性的和
这是在 https://stackoverflow.com/questions/12639454/make-scalacheck-tests-deterministic 中作为“奖金问题”提出的,但没
有没有办法使用 Scalacheck 为属性测试生成随机日期。我想同时生成 future 日期和过去日期。但是现有的 Scalacheck.Gen 类没有提供任何预定义的方法来这样做。 最佳答案 以下
在我的测试中,我非常广泛地使用 Specs2 + ScalaCheck,并且有一些模式需要考虑。我仍然没有确定我的函数是否应该使用 Arbitrary[T] 或 Gen[T],因为它们非常相似: se
我试图确保我的 ScalaCheck 属性运行 500 次而不是默认的 100 次。我在配置这个时遇到了麻烦。 class BlockSpec extends Properties("BlockSpe
我正在尝试实现一个简单的属性检查,但 Scalacheck 忽略了我的生成器。我在这里做错了什么? object AlgorithmTest extends Properties("Algorithm
我对 ScalaCheck(以及整个 Scala)相当陌生,所以这可能是一个相当简单的解决方案 我正在使用 ScalaCheck 为 AST 生成测试并验证编写器/解析器是否工作。我有这些文件 AST
我是第一次尝试 ScalaCheck,我想生成一个有序的 Int 数组。 我阅读了文档并进行了一些搜索,但没有找到方法。 有人可以对此有所了解吗? 谢谢 最佳答案 我假设您想要一个已排序的任意整数数组
我想在 ScalaCheck 中创建一个生成器,它可以生成介于 1 和 100 之间的数字,但对接近 1 的数字有钟形偏差。 Gen.choose()在最小值和最大值之间随机分配数字: scala>
我想生成一个与ScalaCheck中的生成器列表相对应的整数列表。 import org.scalacheck._ import Arbitrary.arbitrary val
在这样的上下文中,生成非空字符串的最佳方法是什么 private def createIndexFn() = { for{ someChar <- Gen.alpha
我看到 scalacheck 似乎是一个非常明显的错误,如果它真的存在,我看不到人们如何将它用于递归数据结构。 这个程序失败了 StackOverflowError在 scalacheck 接管之前,
我看到 scalacheck 似乎是一个非常明显的错误,如果它真的存在,我看不到人们如何将它用于递归数据结构。 这个程序失败了 StackOverflowError在 scalacheck 接管之前,
我已经实现了以下功能: /** * Returns a function h , which is the composition of the functions f and g. */ d
我正在尝试使用 Scalacheck 生成随机数据。我有一个具有许多属性的案例类层次结构。到目前为止,我发现填充案例类的唯一方法是这样的: case class Data(a: String,
我该如何写Gen[A]使用永远不会返回相同对象两次的 ScalaCheck? Gen.oneOf(a,b,c) 可以重复选择同一个对象,所以不起作用。 我正在 specs2 中编写一个可变规范,我
我正在尝试使用 ScalaCheck 为 BST 创建一个 Gen,但是当我调用 .sample 方法时,它给了我 java.lang.NullPointerException。我哪里错了? seal
我正在使用 ScalaCheck 在 ScalaTest 中进行一些基于属性的测试。假设我想测试一个函数,f(x: Double): Double仅针对 x >= 0.0 定义的, 并返回 NaN对于
UserGuide scalacheck 项目提到了大小的生成器。解释代码 def matrix[T](g:Gen[T]):Gen[Seq[Seq[T]]] = Gen.sized {size =>
我想用 scalatest 和 scalacheck 测试通用堆栈。到目前为止我有这个: "Stack" should "pop the last value pushed" in { check
我是一名优秀的程序员,十分优秀!