otel-effectful-1.0.0: test/Effectful/OpenTelemetry/Tracing/Trace/FlagsSpec.hs
{-# OPTIONS_GHC -Wno-orphans #-}
{-# OPTIONS_GHC -Wno-term-variable-capture #-}
{- HLINT ignore "Monoid law, left identity" -}
{- HLINT ignore "Monoid law, right identity" -}
module Effectful.OpenTelemetry.Tracing.Trace.FlagsSpec where
import Arbitrary ()
import Data.Aeson (Result (..), fromJSON, toJSON)
import Effectful
import Effectful.Hspec
import Effectful.OpenTelemetry.Tracing.Trace.Flags
import Effectful.OpenTelemetry.Tracing.Trace.Flags qualified as Trace
import Effectful.OpenTelemetry.Tracing.Trace.StateSpec ()
import Effectful.QuickCheck ((.&&.), (===))
import Prelude
spec :: (Hspec :> es) => Eff es ()
spec = parallel do
prop "associativity" \(a :: Trace.Flags) b c ->
(a <> b) <> c === a <> (b <> c)
prop "identity" \(a :: Trace.Flags) ->
(mempty <> a === a) .&&. (a <> mempty === a)
prop "toWord32/fromWord32 round trip" \flags ->
fromWord32 (toWord32 flags) === flags
prop "toJSON/fromJSON round trip" \(flags :: Trace.Flags) ->
fromJSON (toJSON flags) === Success flags