-
Notifications
You must be signed in to change notification settings - Fork 852
Closed
Description
I wrote the following test:
type Result<'a> =
| Success of 'a
| Error of string
let run f =
try
Success(f())
with
| exn -> Error exn.Message
let chunkBySize<'a when 'a : equality> (xs : 'a []) size =
let s = run (fun () -> xs |> Seq.chunkBySize size |> Seq.map Seq.toArray |> Seq.toArray)
let l = run (fun () -> xs |> List.ofArray |> List.chunkBySize size |> Seq.map Seq.toArray |> Seq.toArray)
let a = run (fun () -> xs |> Array.chunkBySize size |> Seq.map Seq.toArray |> Seq.toArray)
s = a && l = a
[<Test>]
let ``chunkBySize is consistent`` () =
Check.QuickThrowOnFailure chunkBySize<int>
Check.QuickThrowOnFailure chunkBySize<string>
Check.QuickThrowOnFailure chunkBySize<float>
which returned:
Test 'FSharp.Core.PropertyTests.CollectionModulesConsistency.chunkBySize is consistent' failed: System.Exception : Falsifiable, after 10 tests (16 shrinks) (StdGen (1102101551,296021308)):
[|0; 0; 0; 0; |]
3
at <StartupCode$FsCheck>.$Runner.get_throwingRunner@349-1.Invoke(String message)
at <StartupCode$FsCheck>.$Runner.get_throwingRunner@339.FsCheck-IRunner-OnFinished(String , TestResult )
at FsCheck.Runner.check[a](Config config, a p)
at FsCheck.Check.QuickThrowOnFailure[Testable](Testable property)
D:\code\visualfsharp\src\fsharp\FSharp.Core.PropertyTests\CollectionModulesConsistency.fs(102,0): at FSharp.Core.PropertyTests.CollectionModulesConsistency.chunkBySize is consistent()
So it seems this one revealed inconsistent behaviour between List, Seq and Array (which still might be OK)
so I investigated the case and created this test:
[<Test>]
let ``chunkBySize of zeros`` () =
let a = Seq.chunkBySize 3 [|0;0;0;0|]
let b = List.chunkBySize 3 [0;0;0;0]
let c = Array.chunkBySize 3 [|0;0;0;0|]
Assert.AreEqual(a = b && a = c) // false after converting to Array
which prints:
seq [[|0; 0; 0|]; [|0|]]
[[0; 0; 0]; [0]]
[|[|0; 0; 0|]; null|]
so where is this null coming from.
Reactions are currently unavailable