과제의 일부로 Scalacheck을 사용하여 결함을 찾습니다. 믿을 수 없을 정도로 아마, 나는 그것이 0이 아닌 정수들의 쌍을 생성 할 때 막혔다. 내 IntelliJ에 워크 시트에서 ScalaCheck : 지정된 범위를 벗어나는 값을 출력합니다.
, 광고는 그대로는 :import org.scalacheck._
import Arbitrary._
import Gen._
import Prop._
implicit lazy val genUnequalIntPairs = for {
i <- Gen.choose(1,1000)
j <- Gen.choose(i+1,1000)
if (i < j)
} yield (i,j)
val kk = forAll (genUnequalIntPairs) {
case (x,y) => println("x =" + x + ", y =" + y)
x == y
}
kk.check
내가 명시 적으로 비제로 선택된 값의 최소값을 언급하고, 때문에, 나는 재산 내부의 영을 볼 수 없습니다해야 , 권리? 적어도 그것은 내 이해입니다. 그러나 이것이 제가 본 것입니다 :
x =134, y =547
x =0, y =547
x =0, y =0
x =0, y =274
x =0, y =0
x =0, y =137
x =0, y =0
x =0, y =69
x =0, y =0
x =0, y =35
x =0, y =0
x =0, y =18
x =0, y =0
x =0, y =9
x =0, y =0
x =0, y =5
x =0, y =0
x =0, y =3
x =0, y =0
x =0, y =2
x =0, y =0
x =0, y =1
x =0, y =0
! Falsified after 0 passed tests.
> ARG_0: (0,1)
> ARG_0_ORIGINAL: (134,547)
res0: Unit =()
어디에서 오는가? 내가 누락 된 것? 아마도 명백한 것이지만 내 눈으로는 그들을 잡을 수 없습니다.
나는 감사, Scalcheck 버전 1.12.1
Seq("org.scalacheck" %% "scalacheck" % "1.12.1")
에게 어떤 도움을 사용하고 있습니다.
업데이트 I : @samar (gitbook에서도 동일한 참조를 찾았습니다.)에서 제안한대로 발전기를 과 같은 것으로 필터링하려고했습니다.. 하지만별로 행운이 없습니다 (아래 코드) :
implicit lazy val genUnequalIntPairs = for {
i <- Gen.choose(1,1000).suchThat(_ > 0)
j <- Gen.choose(i+1,1000).suchThat(_ > 0)
if (i < j)
} yield (i,j)
val kk = forAll (genUnequalIntPairs) {
case (x,y) => println("x =" + x + ", y =" + y)
x == y
}
kk.check
이 코드를 약 6-7 회 실행했습니다. 이것은 하나의 임의 출력입니다.
x =536, y =730
x =0, y =730
x =0, y =0
x =0, y =365
x =0, y =0
x =0, y =183
x =0, y =0
x =0, y =92
x =0, y =0
x =0, y =46
x =0, y =0
x =0, y =23
x =0, y =0
x =0, y =12
x =0, y =0
x =0, y =6
x =0, y =0
x =0, y =3
x =0, y =0
x =0, y =2
x =0, y =0
x =0, y =1
x =0, y =0
! Falsified after 0 passed tests.
> ARG_0: (0,1)
> ARG_0_ORIGINAL: (536,730)
res0: Unit =()
업데이트 II : 그냥 확인을 위해, 나는 에릭의 제안을 따랐다이 행한 :
implicit lazy val genUnequalIntPairs = for {
i <- Gen.choose(1,1000)
j <- Gen.choose(i+1,1000)
if (i != 0 && j != 0)
} yield {
(i,j)
}
val kk = forAllNoShrink(genUnequalIntPairs) {
case (x,y) => println("x =" + x + ", y =" + y)
x < y
}
kk.check
이 작동 :
x =805, y =1000
x =742, y =926
x =772, y =919
x =219, y =686
x =999, y =1000
x =752, y =792
x =163, y =585
x =721, y =735
x =251, y =866
x =383, y =887
x =797, y =939
x =925, y =947
x =291, y =951
x =502, y =619
x =422, y =756
x =159, y =886
x =49, y =955
x =624, y =819
x =922, y =979
x =881, y =894
x =936, y =952
x =908, y =975
x =802, y =976
x =918, y =946
x =564, y =823
x =544, y =751
x =916, y =938
x =57, y =762
x =614, y =963
x =497, y =986
x =102, y =332
x =264, y =643
x =611, y =720
x =542, y =797
x =704, y =784
Output exceeds cutoff limit.
업데이트 III : FWIW를, 내가 찾은 Scalacheck 버전 1.13.1 (원래 1.12.x)로 이동하면 다음과 같은 동작을 보게됩니다.
implicit lazy val genUnequalIntPairs = for {
i <- Gen.choose(1,1000)
j <- Gen.choose(1,1000)
if (i < j)
} yield {
(i,j)
}
val kk = forAll(genUnequalIntPairs) {
case (x,y) => println("x =" + x + ", y =" + y)
x == y
}
kk.check
은, 분명히 조건을
x =370, y =585
x =0, y =585
x =0, y =0
x =0, y =293
x =0, y =0
x =0, y =147
x =0, y =0
x =0, y =74
x =0, y =0
x =0, y =37
x =0, y =0
x =0, y =19
x =0, y =0
x =0, y =10
x =0, y =0
x =0, y =5
x =0, y =0
x =0, y =3
을 생성합니다
implicit lazy val genUnequalIntPairs = for {
i <- Gen.choose(1,1000)
j <- Gen.choose(1,1000)
if (i < j)
} yield {
(i,j)
}
val kk = forAll(genUnequalIntPairs) {
case (x,y) => println("x =" + x + ", y =" + y)
x < y
}
kk.check
은 덜보다, 이런
x =56, y =752
x =395, y =532
x =468, y =828
x =326, y =749
x =203, y =973
x =294, y =393
x =589, y =975
x =44, y =75
x =406, y =533
x =33, y =381
x =405, y =767
x =13, y =883
x =201, y =341
x =593, y =991
x =636, y =913
x =508, y =782
x =333, y =861
x =306, y =863
x =428, y =537
x =373, y =775
x =74, y =462
x =196, y =299
x =245, y =535
x =312, y =993
x =940, y =989
x =12, y =708
하지만하여
이 에서 평등에 조건을 변경 생산 appling 은 Generator를 사용하여 명시한 지침을 무시합니다. 다소 직관적이지 않다? 다른 사람들은 어떻게 생각합니까?
나는 이것이 버그라고 생각하고 그것을 제기했다 : https : // github.com/rickynils/scalacheck/issues/253 –
이상한. 시도해 볼 수 있습니까? Gen.choose (1,1000) suchThat (_> 0) – Samar
@Samar, 범위는 술어를 의미하므로 반드시 필요하지 않아야합니다. 그런데도 문제를 해결하지는 못합니다. –