packages feed

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