content: {-# LANGUAGE CPP #-}
  {-# LANGUAGE NegativeLiterals #-}
  {-# LANGUAGE NumericUnderscores #-}
  
  module T1803 where
  
  import Clash.Prelude
  
  import Clash.Explicit.Testbench
  
  {-
   - Negative zero becomes positive zero, all NaNs I tried become infinity.
   -}
  
  topEntity
    :: Clock System
    -> Reset System
    -> Signal System (BitVector 32, BitVector 64)
  topEntity clk rst =
    let f :: Signal System Float
        f = stimuliGenerator clk rst (map unpack floatData)
        d :: Signal System Double
        d = stimuliGenerator clk rst (map unpack doubleData)
    in bundle (pack <$> f, pack <$> d)
  -- See: https://github.com/clash-lang/clash-compiler/pull/2511
  {-# CLASH_OPAQUE topEntity #-}
  
  testBench
    :: Signal System Bool
  testBench = done
    where
      expectOutput = outputVerifier' clk rst (zip floatData doubleData)
      done = expectOutput $ topEntity clk rst
      clk = tbSystemClockGen (not <$> done)
      rst = systemResetGen
  -- See: https://github.com/clash-lang/clash-compiler/pull/2511
  {-# CLASH_OPAQUE testBench #-}
  
  {-
   - floatData should end up in the top entity as:
   -
   -                 Hex:                    Binary:
   - posZeroF        00000000                00000000000000000000000000000000
   - negZeroF        80000000                10000000000000000000000000000000
   - posInfF         7F800000                01111111100000000000000000000000
   - negInfF         FF800000                11111111100000000000000000000000
   - qNaN0PLF        7FC00000                01111111110000000000000000000000
   - negQNaN0PLF     FFC00000                11111111110000000000000000000000
   - qNaN1F          7FC00001                01111111110000000000000000000001
   - negQNaN1F       FFC00001                11111111110000000000000000000001
   - sNaN1F          7F800001                01111111100000000000000000000001
   - negSNaN1F       FF800001                11111111100000000000000000000001
   - qNaNMsbF        7FE00000                01111111111000000000000000000000
   - negQNaNMsbF     FFE00000                11111111111000000000000000000000
   - sNaNMsbF        7FA00000                01111111101000000000000000000000
   - negSNaNMsbF     FFA00000                11111111101000000000000000000000
   - qNaNMaxF        7FFFFFFF                01111111111111111111111111111111
   - negQNaNMaxF     FFFFFFFF                11111111111111111111111111111111
   - sNaNMaxF        7FBFFFFF                01111111101111111111111111111111
   - negSNaNMaxF     FFBFFFFF                11111111101111111111111111111111
   - qNaNR1F         7FE0B13C                01111111111000001011000100111100
   - negQNaNR1F      FFE0B13C                11111111111000001011000100111100
   - sNaNR1F         7FA0B13C                01111111101000001011000100111100
   - negSNaNR1F      FFA0B13C                11111111101000001011000100111100
   - qNaNR2F         7FC230E5                01111111110000100011000011100101
   - negQNaNR2F      FFC230E5                11111111110000100011000011100101
   - sNaNR2F         7F8230E5                01111111100000100011000011100101
   - negSNaNR2F      FF8230E5                11111111100000100011000011100101
   - qNaNR3F         7FCD1BF4                01111111110011010001101111110100
   - negQNaNR3F      FFCD1BF4                11111111110011010001101111110100
   - sNaNR3F         7F8D1BF4                01111111100011010001101111110100
   - negSNaNR3F      FF8D1BF4                11111111100011010001101111110100
   - qNaNR4F         7FC864B2                01111111110010000110010010110010
   - negQNaNR4F      FFC864B2                11111111110010000110010010110010
   - sNaNR4F         7F8864B2                01111111100010000110010010110010
   - negSNaNR4F      FF8864B2                11111111100010000110010010110010
   - subNormMinF     00000001                00000000000000000000000000000001
   - negSubNormMinF  80000001                10000000000000000000000000000001
   - subNormMsbF     00400000                00000000010000000000000000000000
   - negSubNormMsbF  80400000                10000000010000000000000000000000
   - subNormMaxF     007FFFFF                00000000011111111111111111111111
   - negSubNormMaxF  807FFFFF                10000000011111111111111111111111
   - subNormR1F      0060B13C                00000000011000001011000100111100
   - negSubNormR1F   8060B13C                10000000011000001011000100111100
   - subNormR2F      004230E5                00000000010000100011000011100101
   - negSubNormR2F   804230E5                10000000010000100011000011100101
   - subNormR3F      000D1BF4                00000000000011010001101111110100
   - negSubNormR3F   800D1BF4                10000000000011010001101111110100
   - subNormR4F      004864B2                00000000010010000110010010110010
   - negSubNormR4F   804864B2                10000000010010000110010010110010
   -
   - doubleData should end up in the top entity as:
   -
   -                 Hex:                    Binary:
   - posZeroD        0000000000000000        0000000000000000000000000000000000000000000000000000000000000000
   - negZeroD        8000000000000000        1000000000000000000000000000000000000000000000000000000000000000
   - posInfD         7FF0000000000000        0111111111110000000000000000000000000000000000000000000000000000
   - negInfD         FFF0000000000000        1111111111110000000000000000000000000000000000000000000000000000
   - qNaN0PLD        7FF8000000000000        0111111111111000000000000000000000000000000000000000000000000000
   - negQNaN0PLD     7FF8000000000000        0111111111111000000000000000000000000000000000000000000000000000
   - qNaN1D          7FF8000000000001        0111111111111000000000000000000000000000000000000000000000000001
   - negQNaN1D       FFF8000000000001        1111111111111000000000000000000000000000000000000000000000000001
   - sNaN1D          7FF0000000000001        0111111111110000000000000000000000000000000000000000000000000001
   - negSNaN1D       FFF0000000000001        1111111111110000000000000000000000000000000000000000000000000001
   - qNaNMsbD        7FFC000000000000        0111111111111100000000000000000000000000000000000000000000000000
   - negQNaNMsbD     FFFC000000000000        1111111111111100000000000000000000000000000000000000000000000000
   - sNaNMsbD        7FF4000000000000        0111111111110100000000000000000000000000000000000000000000000000
   - negSNaNMsbD     FFF4000000000000        1111111111110100000000000000000000000000000000000000000000000000
   - qNaNMaxD        7FFFFFFFFFFFFFFF        0111111111111111111111111111111111111111111111111111111111111111
   - negQNaNMaxD     FFFFFFFFFFFFFFFF        1111111111111111111111111111111111111111111111111111111111111111
   - sNaNMaxD        7FF7FFFFFFFFFFFF        0111111111110111111111111111111111111111111111111111111111111111
   - negSNaNMaxD     FFF7FFFFFFFFFFFF        1111111111110111111111111111111111111111111111111111111111111111
   - qNaNR1D         7FFA8919D6A2F5CF        0111111111111010100010010001100111010110101000101111010111001111
   - negQNaNR1D      FFFA8919D6A2F5CF        1111111111111010100010010001100111010110101000101111010111001111
   - sNaNR1D         7FF28919D6A2F5CF        0111111111110010100010010001100111010110101000101111010111001111
   - negSNaNR1D      FFF28919D6A2F5CF        1111111111110010100010010001100111010110101000101111010111001111
   - qNaNR2D         7FFA19B7674EA902        0111111111111010000110011011011101100111010011101010100100000010
   - negQNaNR2D      FFFA19B7674EA902        1111111111111010000110011011011101100111010011101010100100000010
   - sNaNR2D         7FF219B7674EA902        0111111111110010000110011011011101100111010011101010100100000010
   - negSNaNR2D      FFF219B7674EA902        1111111111110010000110011011011101100111010011101010100100000010
   - qNaNR3D         7FFB6353EE8A3075        0111111111111011011000110101001111101110100010100011000001110101
   - negQNaNR3D      FFFB6353EE8A3075        1111111111111011011000110101001111101110100010100011000001110101
   - sNaNR3D         7FF36353EE8A3075        0111111111110011011000110101001111101110100010100011000001110101
   - negSNaNR3D      FFF36353EE8A3075        1111111111110011011000110101001111101110100010100011000001110101
   - qNaNR4D         7FF96D374E3C041B        0111111111111001011011010011011101001110001111000000010000011011
   - negQNaNR4D      FFF96D374E3C041B        1111111111111001011011010011011101001110001111000000010000011011
   - sNaNR4D         7FF16D374E3C041B        0111111111110001011011010011011101001110001111000000010000011011
   - negSNaNR4D      FFF16D374E3C041B        1111111111110001011011010011011101001110001111000000010000011011
   - subNormMinD     0000000000000001        0000000000000000000000000000000000000000000000000000000000000001
   - negSubNormMinD  8000000000000001        1000000000000000000000000000000000000000000000000000000000000001
   - subNormMsbD     0008000000000000        0000000000001000000000000000000000000000000000000000000000000000
   - negSubNormMsbD  8008000000000000        1000000000001000000000000000000000000000000000000000000000000000
   - subNormMaxD     000FFFFFFFFFFFFF        0000000000001111111111111111111111111111111111111111111111111111
   - negSubNormMaxD  800FFFFFFFFFFFFF        1000000000001111111111111111111111111111111111111111111111111111
   - subNormR1D      000A8919D6A2F5CF        0000000000001010100010010001100111010110101000101111010111001111
   - negSubNormR1D   800A8919D6A2F5CF        1000000000001010100010010001100111010110101000101111010111001111
   - subNormR2D      000219B7674EA902        0000000000000010000110011011011101100111010011101010100100000010
   - negSubNormR2D   800219B7674EA902        1000000000000010000110011011011101100111010011101010100100000010
   - subNormR3D      0006C6A7DD1460EA        0000000000000110110001101010011111011101000101000110000011101010
   - negSubNormR3D   8006C6A7DD1460EA        1000000000000110110001101010011111011101000101000110000011101010
   - subNormR4D      00096D374E3C041B        0000000000001001011011010011011101001110001111000000010000011011
   - negSubNormR4D   80096D374E3C041B        1000000000001001011011010011011101001110001111000000010000011011
   -}
  
  {-
  floatData :: Vec 6 Float
  floatData =    0
              :> -0
              :> 1/0
              :> -1/0
              :> 0/0
              :> -0/0
              :> Nil
  
  doubleData :: Vec 6 Double
  doubleData =     0
               :> -0
               :> 1/0
               :> -1/0
               :> 0/0
               :> -0/0
               :> Nil
  -}
  
  floatData :: Vec 48 (BitVector 32)
  floatData
    =    posZeroF
      :> negZeroF
      :> posInfF
      :> negInfF
      :> qNaN0PLF
      :> negQNaN0PLF
      :> qNaN1F
      :> negQNaN1F
      :> sNaN1F
      :> negSNaN1F
      :> qNaNMsbF
      :> negQNaNMsbF
      :> sNaNMsbF
      :> negSNaNMsbF
      :> qNaNMaxF
      :> negQNaNMaxF
      :> sNaNMaxF
      :> negSNaNMaxF
      :> qNaNR1F
      :> negQNaNR1F
      :> sNaNR1F
      :> negSNaNR1F
      :> qNaNR2F
      :> negQNaNR2F
      :> sNaNR2F
      :> negSNaNR2F
      :> qNaNR3F
      :> negQNaNR3F
      :> sNaNR3F
      :> negSNaNR3F
      :> qNaNR4F
      :> negQNaNR4F
      :> sNaNR4F
      :> negSNaNR4F
      :> subNormMinF
      :> negSubNormMinF
      :> subNormMsbF
      :> negSubNormMsbF
      :> subNormMaxF
      :> negSubNormMaxF
      :> subNormR1F
      :> negSubNormR1F
      :> subNormR2F
      :> negSubNormR2F
      :> subNormR3F
      :> negSubNormR3F
      :> subNormR4F
      :> negSubNormR4F
      :> Nil
  
  doubleData :: Vec 48 (BitVector 64)
  doubleData
    =    posZeroD
      :> negZeroD
      :> posInfD
      :> negInfD
      :> qNaN0PLD
      :> negQNaN0PLD
      :> qNaN1D
      :> negQNaN1D
      :> sNaN1D
      :> negSNaN1D
      :> qNaNMsbD
      :> negQNaNMsbD
      :> sNaNMsbD
      :> negSNaNMsbD
      :> qNaNMaxD
      :> negQNaNMaxD
      :> sNaNMaxD
      :> negSNaNMaxD
      :> qNaNR1D
      :> negQNaNR1D
      :> sNaNR1D
      :> negSNaNR1D
      :> qNaNR2D
      :> negQNaNR2D
      :> sNaNR2D
      :> negSNaNR2D
      :> qNaNR3D
      :> negQNaNR3D
      :> sNaNR3D
      :> negSNaNR3D
      :> qNaNR4D
      :> negQNaNR4D
      :> sNaNR4D
      :> negSNaNR4D
      :> subNormMinD
      :> negSubNormMinD
      :> subNormMsbD
      :> negSubNormMsbD
      :> subNormMaxD
      :> negSubNormMaxD
      :> subNormR1D
      :> negSubNormR1D
      :> subNormR2D
      :> negSubNormR2D
      :> subNormR3D
      :> negSubNormR3D
      :> subNormR4D
      :> negSubNormR4D
      :> Nil
  
  posZeroF :: BitVector 32
  posZeroF
    = 0b0000_0000_0000_0000_0000_0000_0000_0000
  
  negZeroF :: BitVector 32
  negZeroF
    = 0b1000_0000_0000_0000_0000_0000_0000_0000
  
  posInfF :: BitVector 32
  posInfF
    = 0b0111_1111_1000_0000_0000_0000_0000_0000
  
  negInfF :: BitVector 32
  negInfF
    = 0b1111_1111_1000_0000_0000_0000_0000_0000
  
  -- Quiet NaN with no payload
  qNaN0PLF :: BitVector 32
  qNaN0PLF
    = 0b0111_1111_1100_0000_0000_0000_0000_0000
  
  -- Negative version
  negQNaN0PLF :: BitVector 32
  negQNaN0PLF
    = 0b1111_1111_1100_0000_0000_0000_0000_0000
  
  -- Quiet NaN with payload 1
  qNaN1F :: BitVector 32
  qNaN1F
    = 0b0111_1111_1100_0000_0000_0000_0000_0001
  
  -- Negative version
  negQNaN1F :: BitVector 32
  negQNaN1F
    = 0b1111_1111_1100_0000_0000_0000_0000_0001
  
  -- Signaling NaN with payload 1
  sNaN1F :: BitVector 32
  sNaN1F
    = 0b0111_1111_1000_0000_0000_0000_0000_0001
  
  -- Negative version
  negSNaN1F :: BitVector 32
  negSNaN1F
    = 0b1111_1111_1000_0000_0000_0000_0000_0001
  
  -- Quiet NaN with payload with only MSB set
  qNaNMsbF :: BitVector 32
  qNaNMsbF
    = 0b0111_1111_1110_0000_0000_0000_0000_0000
  
  -- Negative version
  negQNaNMsbF :: BitVector 32
  negQNaNMsbF
    = 0b1111_1111_1110_0000_0000_0000_0000_0000
  
  -- Signaling NaN with payload with only MSB set
  sNaNMsbF :: BitVector 32
  sNaNMsbF
    = 0b0111_1111_1010_0000_0000_0000_0000_0000
  
  -- Negative version
  negSNaNMsbF :: BitVector 32
  negSNaNMsbF
    = 0b1111_1111_1010_0000_0000_0000_0000_0000
  
  -- Quiet NaN with maximum-valued payload
  qNaNMaxF :: BitVector 32
  qNaNMaxF
    = 0b0111_1111_1111_1111_1111_1111_1111_1111
  
  -- Negative version
  negQNaNMaxF :: BitVector 32
  negQNaNMaxF
    = 0b1111_1111_1111_1111_1111_1111_1111_1111
  
  -- Signaling NaN with maximum-valued payload
  sNaNMaxF :: BitVector 32
  sNaNMaxF
    = 0b0111_1111_1011_1111_1111_1111_1111_1111
  
  -- Negative version
  negSNaNMaxF :: BitVector 32
  negSNaNMaxF
    = 0b1111_1111_1011_1111_1111_1111_1111_1111
  
  -- Quiet NaN with random payload
  qNaNR1F :: BitVector 32
  qNaNR1F
    = 0b0111_1111_1110_0000_1011_0001_0011_1100
  
  -- Negative version
  negQNaNR1F :: BitVector 32
  negQNaNR1F
    = 0b1111_1111_1110_0000_1011_0001_0011_1100
  
  -- Signaling NaN with random payload
  sNaNR1F :: BitVector 32
  sNaNR1F
    = 0b0111_1111_1010_0000_1011_0001_0011_1100
  
  -- Negative version
  negSNaNR1F :: BitVector 32
  negSNaNR1F
    = 0b1111_1111_1010_0000_1011_0001_0011_1100
  
  -- Quiet NaN with random payload
  qNaNR2F :: BitVector 32
  qNaNR2F
    = 0b0111_1111_1100_0010_0011_0000_1110_0101
  
  -- Negative version
  negQNaNR2F :: BitVector 32
  negQNaNR2F
    = 0b1111_1111_1100_0010_0011_0000_1110_0101
  
  -- Signaling NaN with random payload
  sNaNR2F :: BitVector 32
  sNaNR2F
    = 0b0111_1111_1000_0010_0011_0000_1110_0101
  
  -- Negative version
  negSNaNR2F :: BitVector 32
  negSNaNR2F
    = 0b1111_1111_1000_0010_0011_0000_1110_0101
  
  -- Quiet NaN with random payload
  qNaNR3F :: BitVector 32
  qNaNR3F
    = 0b0111_1111_1100_1101_0001_1011_1111_0100
  
  -- Negative version
  negQNaNR3F :: BitVector 32
  negQNaNR3F
    = 0b1111_1111_1100_1101_0001_1011_1111_0100
  
  -- Signaling NaN with random payload
  sNaNR3F :: BitVector 32
  sNaNR3F
    = 0b0111_1111_1000_1101_0001_1011_1111_0100
  
  -- Negative version
  negSNaNR3F :: BitVector 32
  negSNaNR3F
    = 0b1111_1111_1000_1101_0001_1011_1111_0100
  
  -- Quiet NaN with random payload
  qNaNR4F :: BitVector 32
  qNaNR4F
    = 0b0111_1111_1100_1000_0110_0100_1011_0010
  
  -- Negative version
  negQNaNR4F :: BitVector 32
  negQNaNR4F
    = 0b1111_1111_1100_1000_0110_0100_1011_0010
  
  -- Signaling NaN with random payload
  sNaNR4F :: BitVector 32
  sNaNR4F
    = 0b0111_1111_1000_1000_0110_0100_1011_0010
  
  -- Negative version
  negSNaNR4F :: BitVector 32
  negSNaNR4F
    = 0b1111_1111_1000_1000_0110_0100_1011_0010
  
  -- Smallest subnormal number
  subNormMinF :: BitVector 32
  subNormMinF
    = 0b0000_0000_0000_0000_0000_0000_0000_0001
  
  -- Negative version
  negSubNormMinF :: BitVector 32
  negSubNormMinF
    = 0b1000_0000_0000_0000_0000_0000_0000_0001
  
  -- Subnormal number with MSB of mantissa set
  subNormMsbF :: BitVector 32
  subNormMsbF
    = 0b0000_0000_0100_0000_0000_0000_0000_0000
  
  -- Negative version
  negSubNormMsbF :: BitVector 32
  negSubNormMsbF
    = 0b1000_0000_0100_0000_0000_0000_0000_0000
  
  -- Largest subnormal number
  subNormMaxF :: BitVector 32
  subNormMaxF
    = 0b0000_0000_0111_1111_1111_1111_1111_1111
  
  -- Negative version
  negSubNormMaxF :: BitVector 32
  negSubNormMaxF
    = 0b1000_0000_0111_1111_1111_1111_1111_1111
  
  -- Random subnormal positive number
  -- The randomness is equal to the NaN case
  subNormR1F :: BitVector 32
  subNormR1F
    = 0b0000_0000_0110_0000_1011_0001_0011_1100
  
  -- Negative version
  negSubNormR1F :: BitVector 32
  negSubNormR1F
    = 0b1000_0000_0110_0000_1011_0001_0011_1100
  
  -- Random subnormal positive number
  -- The randomness is equal to the NaN case
  subNormR2F :: BitVector 32
  subNormR2F
    = 0b0000_0000_0100_0010_0011_0000_1110_0101
  
  -- Negative version
  negSubNormR2F :: BitVector 32
  negSubNormR2F
    = 0b1000_0000_0100_0010_0011_0000_1110_0101
  
  -- Random subnormal positive number
  -- The randomness is equal to the NaN case
  subNormR3F :: BitVector 32
  subNormR3F
    = 0b0000_0000_0000_1101_0001_1011_1111_0100
  
  -- Negative version
  negSubNormR3F :: BitVector 32
  negSubNormR3F
    = 0b1000_0000_0000_1101_0001_1011_1111_0100
  
  -- Random subnormal positive number
  -- The randomness is equal to the NaN case
  subNormR4F :: BitVector 32
  subNormR4F
    = 0b0000_0000_0100_1000_0110_0100_1011_0010
  
  -- Negative version
  negSubNormR4F :: BitVector 32
  negSubNormR4F
    = 0b1000_0000_0100_1000_0110_0100_1011_0010
  
  posZeroD :: BitVector 64
  posZeroD
    = 0b0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000
  
  negZeroD :: BitVector 64
  negZeroD
    = 0b1000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000
  
  posInfD :: BitVector 64
  posInfD
    = 0b0111_1111_1111_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000
  
  negInfD :: BitVector 64
  negInfD
    = 0b1111_1111_1111_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000
  
  -- Quiet NaN with no payload
  qNaN0PLD :: BitVector 64
  qNaN0PLD
    = 0b0111_1111_1111_1000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000
  
  -- Negative version
  negQNaN0PLD :: BitVector 64
  negQNaN0PLD
    = 0b0111_1111_1111_1000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000
  
  -- Quiet NaN with payload 1
  qNaN1D :: BitVector 64
  qNaN1D
    = 0b0111_1111_1111_1000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0001
  
  -- Negative version
  negQNaN1D :: BitVector 64
  negQNaN1D
    = 0b1111_1111_1111_1000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0001
  
  -- Signaling NaN with payload 1
  sNaN1D :: BitVector 64
  sNaN1D
    = 0b0111_1111_1111_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0001
  
  -- Negative version
  negSNaN1D :: BitVector 64
  negSNaN1D
    = 0b1111_1111_1111_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0001
  
  -- Quiet NaN with payload with only MSB set
  qNaNMsbD :: BitVector 64
  qNaNMsbD
    = 0b0111_1111_1111_1100_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000
  
  -- Negative version
  negQNaNMsbD :: BitVector 64
  negQNaNMsbD
    = 0b1111_1111_1111_1100_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000
  
  -- Signaling NaN with payload with only MSB set
  sNaNMsbD :: BitVector 64
  sNaNMsbD
    = 0b0111_1111_1111_0100_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000
  
  -- Negative version
  negSNaNMsbD :: BitVector 64
  negSNaNMsbD
    = 0b1111_1111_1111_0100_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000
  
  -- Quiet NaN with maximum-valued payload
  qNaNMaxD :: BitVector 64
  qNaNMaxD
    = 0b0111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111
  
  -- Negative version
  negQNaNMaxD :: BitVector 64
  negQNaNMaxD
    = 0b1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111
  
  -- Signaling NaN with maximum-valued payload
  sNaNMaxD :: BitVector 64
  sNaNMaxD
    = 0b0111_1111_1111_0111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111
  
  -- Negative version
  negSNaNMaxD :: BitVector 64
  negSNaNMaxD
    = 0b1111_1111_1111_0111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111
  
  -- Quiet NaN with random payload
  qNaNR1D :: BitVector 64
  qNaNR1D
    = 0b0111_1111_1111_1010_1000_1001_0001_1001_1101_0110_1010_0010_1111_0101_1100_1111
  
  -- Negative version
  negQNaNR1D :: BitVector 64
  negQNaNR1D
    = 0b1111_1111_1111_1010_1000_1001_0001_1001_1101_0110_1010_0010_1111_0101_1100_1111
  
  -- Signaling NaN with random payload
  sNaNR1D :: BitVector 64
  sNaNR1D
    = 0b0111_1111_1111_0010_1000_1001_0001_1001_1101_0110_1010_0010_1111_0101_1100_1111
  
  -- Negative version
  negSNaNR1D :: BitVector 64
  negSNaNR1D
    = 0b1111_1111_1111_0010_1000_1001_0001_1001_1101_0110_1010_0010_1111_0101_1100_1111
  
  -- Quiet NaN with random payload
  qNaNR2D :: BitVector 64
  qNaNR2D
    = 0b0111_1111_1111_1010_0001_1001_1011_0111_0110_0111_0100_1110_1010_1001_0000_0010
  
  -- Negative version
  negQNaNR2D :: BitVector 64
  negQNaNR2D
    = 0b1111_1111_1111_1010_0001_1001_1011_0111_0110_0111_0100_1110_1010_1001_0000_0010
  
  -- Signaling NaN with random payload
  sNaNR2D :: BitVector 64
  sNaNR2D
    = 0b0111_1111_1111_0010_0001_1001_1011_0111_0110_0111_0100_1110_1010_1001_0000_0010
  
  -- Negative version
  negSNaNR2D :: BitVector 64
  negSNaNR2D
    = 0b1111_1111_1111_0010_0001_1001_1011_0111_0110_0111_0100_1110_1010_1001_0000_0010
  
  -- Quiet NaN with random payload
  qNaNR3D :: BitVector 64
  qNaNR3D
    = 0b0111_1111_1111_1011_0110_0011_0101_0011_1110_1110_1000_1010_0011_0000_0111_0101
  
  -- Negative version
  negQNaNR3D :: BitVector 64
  negQNaNR3D
    = 0b1111_1111_1111_1011_0110_0011_0101_0011_1110_1110_1000_1010_0011_0000_0111_0101
  
  -- Signaling NaN with random payload
  sNaNR3D :: BitVector 64
  sNaNR3D
    = 0b0111_1111_1111_0011_0110_0011_0101_0011_1110_1110_1000_1010_0011_0000_0111_0101
  
  -- Negative version
  negSNaNR3D :: BitVector 64
  negSNaNR3D
    = 0b1111_1111_1111_0011_0110_0011_0101_0011_1110_1110_1000_1010_0011_0000_0111_0101
  
  -- Quiet NaN with random payload
  qNaNR4D :: BitVector 64
  qNaNR4D
    = 0b0111_1111_1111_1001_0110_1101_0011_0111_0100_1110_0011_1100_0000_0100_0001_1011
  
  -- Negative version
  negQNaNR4D :: BitVector 64
  negQNaNR4D
    = 0b1111_1111_1111_1001_0110_1101_0011_0111_0100_1110_0011_1100_0000_0100_0001_1011
  
  -- Signaling NaN with random payload
  sNaNR4D :: BitVector 64
  sNaNR4D
    = 0b0111_1111_1111_0001_0110_1101_0011_0111_0100_1110_0011_1100_0000_0100_0001_1011
  
  -- Negative version
  negSNaNR4D :: BitVector 64
  negSNaNR4D
    = 0b1111_1111_1111_0001_0110_1101_0011_0111_0100_1110_0011_1100_0000_0100_0001_1011
  
  -- Smallest subnormal number
  subNormMinD :: BitVector 64
  subNormMinD
    = 0b0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0001
  
  -- Negative version
  negSubNormMinD :: BitVector 64
  negSubNormMinD
    = 0b1000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0001
  
  -- Subnormal number with MSB of mantissa set
  subNormMsbD :: BitVector 64
  subNormMsbD
    = 0b0000_0000_0000_1000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000
  
  -- Negative version
  negSubNormMsbD :: BitVector 64
  negSubNormMsbD
    = 0b1000_0000_0000_1000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000
  
  -- Largest subnormal number
  subNormMaxD :: BitVector 64
  subNormMaxD
    = 0b0000_0000_0000_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111
  
  -- Negative version
  negSubNormMaxD :: BitVector 64
  negSubNormMaxD
    = 0b1000_0000_0000_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111
  
  -- Random subnormal positive number
  -- The randomness is equal to the NaN case
  subNormR1D :: BitVector 64
  subNormR1D
    = 0b0000_0000_0000_1010_1000_1001_0001_1001_1101_0110_1010_0010_1111_0101_1100_1111
  
  -- Negative version
  negSubNormR1D :: BitVector 64
  negSubNormR1D
    = 0b1000_0000_0000_1010_1000_1001_0001_1001_1101_0110_1010_0010_1111_0101_1100_1111
  
  -- Random subnormal positive number
  -- The randomness is equal to the NaN case
  subNormR2D :: BitVector 64
  subNormR2D
    = 0b0000_0000_0000_0010_0001_1001_1011_0111_0110_0111_0100_1110_1010_1001_0000_0010
  
  -- Negative version
  negSubNormR2D :: BitVector 64
  negSubNormR2D
    = 0b1000_0000_0000_0010_0001_1001_1011_0111_0110_0111_0100_1110_1010_1001_0000_0010
  
  -- Random subnormal positive number
  -- The randomness is equal to the NaN case
  subNormR3D :: BitVector 64
  subNormR3D
    = 0b0000_0000_0000_011_0110_0011_0101_0011_1110_1110_1000_1010_0011_0000_0111_01010
  
  -- Negative version
  negSubNormR3D :: BitVector 64
  negSubNormR3D
    = 0b1000_0000_0000_011_0110_0011_0101_0011_1110_1110_1000_1010_0011_0000_0111_01010
  
  -- Random subnormal positive number
  -- The randomness is equal to the NaN case
  subNormR4D :: BitVector 64
  subNormR4D
    = 0b0000_0000_0000_1001_0110_1101_0011_0111_0100_1110_0011_1100_0000_0100_0001_1011
  
  -- Negative version
  negSubNormR4D :: BitVector 64
  negSubNormR4D
    = 0b1000_0000_0000_1001_0110_1101_0011_0111_0100_1110_0011_1100_0000_0100_0001_1011
  