Fscheck does not generate random data

I play with FsCheck, so I have this implementation:

let add ab = if a > 100 then failwith "nasty bug" else a + b 

... and this test based on FsCheck:

 fun (a:int) -> (add a 0) = a |> Check.QuickThrowOnFailure 

and the test is never interrupted. I assume that 100 values โ€‹โ€‹generated by a random generator do not exceed 100.

Should the values โ€‹โ€‹be more "random"?

+6
source share
1 answer

When you use Check.QuickThrowOnFailure , it uses the Config.QuickThrowOnFailure configuration, which has the following meanings:

 > Config.QuickThrowOnFailure;; val it : Config = {MaxTest = 100; MaxFail = 1000; Replay = null; Name = ""; StartSize = 1; EndSize = 100; QuietOnSuccess = false; Every = <fun: get_Quick@342 >; EveryShrink = <fun: get_Quick@343-1 >; Arbitrary = []; Runner = <StartupCode$FsCheck> .$Runner+get_throwingRunner@355 ;} 

The important values โ€‹โ€‹here are StartSize , but especially EndSize . Some of the generators in FsCheck use a size context to determine the size or range of values โ€‹โ€‹that it generates.

If you change EndSize to, for example, 1,000 you can make your test fail:

 > Check.One({Config.QuickThrowOnFailure with EndSize = 1000}, fun (a:int) -> (add a 0) = a);; System.Exception: Falsifiable, after 15 tests (0 shrinks) (StdGen (1912816373,296229213)): Original: 101 with exception: > System.Exception: nasty bug at FSI_0040.add(Int32 a, Int32 b) at FSI_0055.it@69-6.Invoke (Int32 a) at FsCheck.Testable.evaluate[a,b](FSharpFunc`2 body, aa) in C:\Users\Kurt\Projects\FsCheck\FsCheck\src\FsCheck\Testable.fs:line 161 at <StartupCode$FsCheck> .$Runner.get_throwingRunner@365-1.Invoke (String message) in C:\Users\Kurt\Projects\FsCheck\FsCheck\src\FsCheck\Runner.fs:line 365 at <StartupCode$FsCheck> .$Runner.get_throwingRunner@355.FsCheck-IRunner-OnFinished (String , TestResult ) in C:\Users\Kurt\Projects\FsCheck\FsCheck\src\FsCheck\Runner.fs:line 365 at FsCheck.Runner.check[a](Config config, ap) in C:\Users\Kurt\Projects\FsCheck\FsCheck\src\FsCheck\Runner.fs:line 275 at <StartupCode$FSI_0055> .$FSI_0055.main@ () Stopped due to error 
+11
source

Source: https://habr.com/ru/post/1012308/


All Articles