content: {-# LANGUAGE DerivingStrategies #-}
  {-# LANGUAGE OverloadedStrings #-}
  {-# OPTIONS_GHC -Wno-type-defaults #-}
  
  module OpenTelemetry.Propagator.DatadogSpec where
  
  import qualified Data.ByteString as B
  import qualified Data.ByteString.Short as SB
  import OpenTelemetry.Internal.Trace.Id
  import OpenTelemetry.Propagator.Datadog
  import Test.Hspec
  import Test.QuickCheck
  
  
  spec :: Spec
  spec = do
    context "convertOpenTelemetrySpanIdToDatadogSpanId" $ do
      it "can conert values" $
        property $ \(x1, x2, x3, x4, x5, x6, x7, x8) -> do
          let v =
                fromIntegral x1 * (2 ^ 8) ^ 7
                  + fromIntegral x2 * (2 ^ 8) ^ 6
                  + fromIntegral x3 * (2 ^ 8) ^ 5
                  + fromIntegral x4 * (2 ^ 8) ^ 4
                  + fromIntegral x5 * (2 ^ 8) ^ 3
                  + fromIntegral x6 * (2 ^ 8) ^ 2
                  + fromIntegral x7 * (2 ^ 8) ^ 1
                  + fromIntegral x8
              spanId = SpanId $ SB.toShort $ B.pack [x1, x2, x3, x4, x5, x6, x7, x8]
          convertOpenTelemetrySpanIdToDatadogSpanId spanId `shouldBe` v
  
    context "convertOpenTelemetryTraceIdToDatadogTraceId" $ do
      it "can conert values" $
        property $ \(x1, x2, x3, x4, x5, x6, x7, x8) -> do
          let v =
                fromIntegral x1 * (2 ^ 8) ^ 7
                  + fromIntegral x2 * (2 ^ 8) ^ 6
                  + fromIntegral x3 * (2 ^ 8) ^ 5
                  + fromIntegral x4 * (2 ^ 8) ^ 4
                  + fromIntegral x5 * (2 ^ 8) ^ 3
                  + fromIntegral x6 * (2 ^ 8) ^ 2
                  + fromIntegral x7 * (2 ^ 8) ^ 1
                  + fromIntegral x8
              traceId = TraceId $ SB.toShort $ B.pack $ replicate 8 0 ++ [x1, x2, x3, x4, x5, x6, x7, x8]
          convertOpenTelemetryTraceIdToDatadogTraceId traceId `shouldBe` v
  