musig2-0.1.0: test/MonoidPubNonce.hs
{-# LANGUAGE OverloadedStrings #-}
{-# OPTIONS_GHC -Wno-unrecognised-pragmas #-}
{-# HLINT ignore "Monoid law, right identity" #-}
{-# HLINT ignore "Monoid law, left identity" #-}
module MonoidPubNonce (propertyMonoidPubNonce) where
import Crypto.Curve.Secp256k1.MuSig2 (PubNonce)
import Test.Tasty
import Test.Tasty.QuickCheck as QC
import Util ()
propertyMonoidPubNonce :: TestTree
propertyMonoidPubNonce =
testGroup
"Monoid Laws for PubNonce"
[ testProperty "Left Identity" prop_leftIdentity
, testProperty "Right Identity" prop_rightIdentity
, testProperty "Associativity" prop_associativity
]
-- | Left identity 'Monoid' law.
prop_leftIdentity :: PubNonce -> Property
prop_leftIdentity x = mempty <> x === x
-- | Right identity 'Monoid' law.
prop_rightIdentity :: PubNonce -> Property
prop_rightIdentity x = x <> mempty === x
-- | Associativity 'Monoid' law.
prop_associativity :: PubNonce -> PubNonce -> PubNonce -> Property
prop_associativity x y z = (x <> y) <> z === x <> (y <> z)