@@ -25,6 +25,7 @@ import Data.ByteString.Short qualified as SBS
2525import Data.List (sortOn )
2626import Data.Text (Text )
2727import Data.Text qualified as T
28+ import GHC.Stack (callStack )
2829import GHC.Stack qualified as GHC
2930
3031import Test.Gen.Cardano.Api.Hardcoded
@@ -380,15 +381,27 @@ prop_canonicalise_cbor = property $ do
380381 , (TBytes " bb" , TString " h" )
381382 , (TBytes " ba" , TListI [TString " i" , TString " j" ])
382383 ]
383- inputMapBs = CBOR. serialize' inputMap
384- inputMapTerm <- decodeExampleTerm inputMapBs
384+ inputMapInIndefiniteList = TListI [ inputMap]
385+ inputMapInDefiniteList = TList [inputMap]
385386
386- inputMapCanonicalisedBs <- H. leftFail $ canonicaliseCborBs inputMapBs
387+ input <- forAll $ Gen. element [inputMap, inputMapInIndefiniteList, inputMapInDefiniteList]
388+ let inputBs = CBOR. serialize' input
387389
388- inputMapCanonicalisedTerm@ (TMap elemTerms) <- decodeExampleTerm inputMapCanonicalisedBs
390+ inputTerm <- decodeExampleTerm inputBs
391+
392+ inputCanonicalisedBs <- H. leftFail $ canonicaliseCborBs inputBs
393+
394+ decodedTerm <- decodeExampleTerm inputCanonicalisedBs
395+ inputMapCanonicalisedTerm@ (TMap elemTerms) <-
396+ case decodedTerm of
397+ TMap elemTerms -> pure $ TMap elemTerms
398+ TList [TMap elemTerms] -> pure $ TMap elemTerms
399+ t ->
400+ H. failMessage callStack $
401+ " Expected canonicalised term to be a map or a list with a single map: " <> show t
389402
390403 H. annotate " sanity check that cbor round trip does not change the order"
391- inputMap === inputMapTerm
404+ input === inputTerm
392405
393406 H. annotate " Print bytes hex representation of the keys in the map"
394407 H. annotateShow
0 commit comments