diff --git a/Directory.Build.props b/Directory.Build.props
index 640cb81..19a68f4 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -10,7 +10,7 @@
FS3388,FS3559
-
+
diff --git a/WoofWare.Myriad.Plugins.Attributes/Test/WoofWare.Myriad.Plugins.Attributes.Test.fsproj b/WoofWare.Myriad.Plugins.Attributes/Test/WoofWare.Myriad.Plugins.Attributes.Test.fsproj
index ebcc26b..ba20e11 100644
--- a/WoofWare.Myriad.Plugins.Attributes/Test/WoofWare.Myriad.Plugins.Attributes.Test.fsproj
+++ b/WoofWare.Myriad.Plugins.Attributes/Test/WoofWare.Myriad.Plugins.Attributes.Test.fsproj
@@ -17,7 +17,7 @@
-
+
diff --git a/WoofWare.Myriad.Plugins.Test/TestJsonSerialize/TestJsonSerde.fs b/WoofWare.Myriad.Plugins.Test/TestJsonSerialize/TestJsonSerde.fs
index f78284f..1638732 100644
--- a/WoofWare.Myriad.Plugins.Test/TestJsonSerialize/TestJsonSerde.fs
+++ b/WoofWare.Myriad.Plugins.Test/TestJsonSerialize/TestJsonSerde.fs
@@ -3,7 +3,7 @@ namespace WoofWare.Myriad.Plugins.Test
open System
open System.Collections.Generic
open System.Text.Json.Nodes
-open FsCheck.Random
+open FsCheck.FSharp
open Microsoft.FSharp.Reflection
open NUnit.Framework
open FsCheck
@@ -15,21 +15,21 @@ module TestJsonSerde =
let uriGen : Gen =
gen {
- let! suffix = Arb.generate
+ let! suffix = ArbMap.generate ArbMap.defaults
return Uri $"https://example.com/%i{suffix}"
}
let rec innerGen (count : int) : Gen =
gen {
- let! guid = Arb.generate
- let! mapKeys = Gen.listOf Arb.generate>
+ let! guid = ArbMap.generate ArbMap.defaults
+ let! mapKeys = Gen.listOf (ArbMap.generate> ArbMap.defaults)
let mapKeys = mapKeys |> List.map _.Get |> List.distinct
let! mapValues = Gen.listOfLength mapKeys.Length uriGen
let map = List.zip mapKeys mapValues |> Map.ofList
let! concreteDictKeys =
if count > 0 then
- Gen.listOf Arb.generate>
+ Gen.listOf (ArbMap.generate> ArbMap.defaults)
else
Gen.constant []
@@ -50,13 +50,16 @@ module TestJsonSerde =
|> List.map KeyValuePair
|> Dictionary
- let! readOnlyDictKeys = Gen.listOf Arb.generate>
+ let! readOnlyDictKeys = Gen.listOf (ArbMap.generate> ArbMap.defaults)
let readOnlyDictKeys = readOnlyDictKeys |> List.map _.Get |> List.distinct
- let! readOnlyDictValues = Gen.listOfLength readOnlyDictKeys.Length (Gen.listOf Arb.generate)
+
+ let! readOnlyDictValues =
+ Gen.listOfLength readOnlyDictKeys.Length (Gen.listOf (ArbMap.generate ArbMap.defaults))
+
let readOnlyDict = List.zip readOnlyDictKeys readOnlyDictValues |> readOnlyDict
let! dictKeys = Gen.listOf uriGen
- let! dictValues = Gen.listOfLength dictKeys.Length Arb.generate
+ let! dictValues = Gen.listOfLength dictKeys.Length (ArbMap.generate ArbMap.defaults)
let dict = List.zip dictKeys dictValues |> dict
return
@@ -71,28 +74,38 @@ module TestJsonSerde =
let outerGen : Gen =
gen {
- let! a = Arb.generate
- let! b = Arb.generate>
- let! c = Gen.listOf Arb.generate
+ let! a = ArbMap.generate ArbMap.defaults
+ let! b = ArbMap.generate> ArbMap.defaults
+ let! c = Gen.listOf (ArbMap.generate ArbMap.defaults)
let! depth = Gen.choose (0, 2)
let! d = innerGen depth
- let! e = Gen.arrayOf Arb.generate>
- let! arr = Gen.arrayOf Arb.generate
- let! byte = Arb.generate
- let! sbyte = Arb.generate
- let! i = Arb.generate
- let! i32 = Arb.generate
- let! i64 = Arb.generate
- let! u = Arb.generate
- let! u32 = Arb.generate
- let! u64 = Arb.generate
- let! f = Arb.generate |> Gen.filter (fun s -> Double.IsFinite (s / 1.0))
- let! f32 = Arb.generate |> Gen.filter (fun s -> Single.IsFinite (s / 1.0f))
- let! single = Arb.generate |> Gen.filter (fun s -> Single.IsFinite (s / 1.0f))
- let! intMeasureOption = Arb.generate
- let! intMeasureNullable = Arb.generate
+ let! e = Gen.arrayOf (ArbMap.generate> ArbMap.defaults)
+ let! arr = Gen.arrayOf (ArbMap.generate ArbMap.defaults)
+ let! byte = ArbMap.generate ArbMap.defaults
+ let! sbyte = ArbMap.generate ArbMap.defaults
+ let! i = ArbMap.generate ArbMap.defaults
+ let! i32 = ArbMap.generate ArbMap.defaults
+ let! i64 = ArbMap.generate ArbMap.defaults
+ let! u = ArbMap.generate ArbMap.defaults
+ let! u32 = ArbMap.generate ArbMap.defaults
+ let! u64 = ArbMap.generate ArbMap.defaults
+
+ let! f =
+ ArbMap.generate ArbMap.defaults
+ |> Gen.filter (fun s -> Double.IsFinite (s / 1.0))
+
+ let! f32 =
+ ArbMap.generate ArbMap.defaults
+ |> Gen.filter (fun s -> Single.IsFinite (s / 1.0f))
+
+ let! single =
+ ArbMap.generate ArbMap.defaults
+ |> Gen.filter (fun s -> Single.IsFinite (s / 1.0f))
+
+ let! intMeasureOption = ArbMap.generate ArbMap.defaults
+ let! intMeasureNullable = ArbMap.generate ArbMap.defaults
let! someEnum = Gen.choose (0, 1)
- let! timestamp = Arb.generate
+ let! timestamp = ArbMap.generate ArbMap.defaults
return
{
@@ -270,10 +283,10 @@ module TestJsonSerde =
match case with
| 0 -> return FirstDu.EmptyCase
| 1 ->
- let! s = Arb.generate>
+ let! s = ArbMap.generate> ArbMap.defaults
return FirstDu.Case1 s.Get
| 2 ->
- let! i = Arb.generate
+ let! i = ArbMap.generate ArbMap.defaults
let! record = outerGen
return FirstDu.Case2 (record, i)
| _ -> return failwith $"unexpected: %i{case}"
@@ -293,7 +306,6 @@ module TestJsonSerde =
[]
let ``DU generator covers all cases`` () =
- let rand = Random ()
let cases = FSharpType.GetUnionCases typeof
let counts = Array.zeroCreate cases.Length
@@ -301,11 +313,13 @@ module TestJsonSerde =
let mutable i = 0
- while i < 10_000 && Array.exists (fun i -> i = 0) counts do
- let du = Gen.eval 10 (StdGen.StdGen (rand.Next (), rand.Next ())) duGen
+ let property (du : FirstDu) =
let tag = decompose du
counts.[tag] <- counts.[tag] + 1
i <- i + 1
+ true
+
+ Check.One (Config.Quick, Prop.forAll (Arb.fromGen duGen) property)
for i in counts do
i |> shouldBeGreaterThan 0
diff --git a/WoofWare.Myriad.Plugins.Test/WoofWare.Myriad.Plugins.Test.fsproj b/WoofWare.Myriad.Plugins.Test/WoofWare.Myriad.Plugins.Test.fsproj
index c35dc32..2b4b5f0 100644
--- a/WoofWare.Myriad.Plugins.Test/WoofWare.Myriad.Plugins.Test.fsproj
+++ b/WoofWare.Myriad.Plugins.Test/WoofWare.Myriad.Plugins.Test.fsproj
@@ -41,8 +41,8 @@
-
-
+
+
diff --git a/nix/deps.json b/nix/deps.json
index ec86b96..2f96da0 100644
--- a/nix/deps.json
+++ b/nix/deps.json
@@ -1,8 +1,8 @@
[
{
"pname": "ApiSurface",
- "version": "4.1.15",
- "hash": "sha256-E0J62c/viqvVBvBA5lBPG90BgPCrA6+cS/h4MZjKz+k="
+ "version": "4.1.16",
+ "hash": "sha256-3F+dY2nZMFukUjIGrvB/h3ZsZYdLJ9jvQKRxX33qk2E="
},
{
"pname": "fantomas",
@@ -21,19 +21,14 @@
},
{
"pname": "FsCheck",
- "version": "2.16.6",
- "hash": "sha256-1hR2SaJTkqBzU3D955MvLNVzkQHkx0Z/QzOXZfzk2Zw="
+ "version": "3.0.0",
+ "hash": "sha256-/5FqiNeTVFairRtInS0cjQ3uGlqVfVJG2FsKIo8mdZ4="
},
{
"pname": "fsharp-analyzers",
"version": "0.28.0",
"hash": "sha256-BqGk9MzHHA3oRPNfWuANcM1YELsdhzWI+kLF4mUDUx8="
},
- {
- "pname": "FSharp.Core",
- "version": "4.2.3",
- "hash": "sha256-yMGMrMUY+4Lwnh9JIbD2/3FBGIFcSK7leGURWaSQsLQ="
- },
{
"pname": "FSharp.Core",
"version": "4.3.4",
@@ -191,8 +186,8 @@
},
{
"pname": "Nerdbank.GitVersioning",
- "version": "3.7.112",
- "hash": "sha256-vrItlaH5MpBHa4MI1cQgI11NAe4W3XsxR9DizFE7fus="
+ "version": "3.7.115",
+ "hash": "sha256-sqn+i7vvBgBUtm7j82mH+SpApgI2hsmL5DYfLm1Z7gw="
},
{
"pname": "NETStandard.Library",