Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions nri-prelude/src/Test.hs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ module Test
Internal.fuzz,
Internal.fuzz2,
Internal.fuzz3,
Internal.hedgehog,

-- * Serialize test execution
Internal.serialize,
Expand Down
27 changes: 21 additions & 6 deletions nri-prelude/src/Test/Internal.hs
Original file line number Diff line number Diff line change
Expand Up @@ -216,15 +216,15 @@ serialize groupKey (Test tests) =
-- elsewhere called property-based tests, generative tests, or QuickCheck-style
-- tests.
fuzz :: (Stack.HasCallStack, Show a) => Fuzzer a -> Text -> (a -> Expectation) -> Test
fuzz fuzzer name expectation =
fuzz (Fuzzer gen) name expectation =
Test
[ SingleTest
{ describes = [],
name = name,
loc = Stack.withFrozenCallStack getFrame name,
group = Ungrouped,
label = None,
body = fuzzBody fuzzer expectation
body = fuzzBody gen expectation
}
]

Expand All @@ -240,7 +240,7 @@ fuzz2 (Fuzzer genA) (Fuzzer genB) name expectation =
label = None,
body =
fuzzBody
(Fuzzer (map2 (,) genA genB))
(map2 (,) genA genB)
(\(a, b) -> expectation a b)
}
]
Expand All @@ -257,13 +257,28 @@ fuzz3 (Fuzzer genA) (Fuzzer genB) (Fuzzer genC) name expectation =
label = None,
body =
fuzzBody
(Fuzzer (map3 (,,) genA genB genC))
(map3 (,,) genA genB genC)
(\(a, b, c) -> expectation a b c)
}
]

fuzzBody :: (Show a) => Fuzzer a -> (a -> Expectation) -> Expectation
fuzzBody (Fuzzer gen) expectation = do
-- | Run a fuzz test using a hedgehog generator
hedgehog :: (Stack.HasCallStack, Show a) => Hedgehog.Gen a -> Text -> (a -> Expectation) -> Test
hedgehog gen name expectation =
Comment on lines +265 to +267
Test
[ SingleTest
{ describes = [],
name = name,
loc = Stack.withFrozenCallStack getFrame name,
group = Ungrouped,
label = None,
body = fuzzBody gen expectation
}
]


fuzzBody :: (Show a) => Hedgehog.Gen a -> (a -> Expectation) -> Expectation
fuzzBody gen expectation = do
Expectation <|
Platform.Internal.Task
( \_log -> do
Expand Down
Loading