# LANGUAGE NumericUnderscores #
# LANGUAGE NegativeLiterals #

module T1803 where

import Clash.Prelude

import Clash.Explicit.Testbench


  - Negative zero becomes positive zero , all NaNs I tried become infinity . 
 
 - 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)
{-# NOINLINE 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
# NOINLINE 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 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 : :      =     0 
             :> -0 
             :> 1/0 
             :> -1/0 
             :> 0/0 
             :> -0/0 
             :> Nil 

 doubleData : :    
 doubleData =      0 
              :> -0 
              :> 1/0 
              :> -1/0 
              :> 0/0 
              :> -0/0 
              :> Nil 

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

# NOINLINE topEntity #
 Quiet NaN with no payload
 Negative version
 Negative version
 Negative version
 Negative version
 Negative version
 Quiet NaN with maximum-valued payload
 Negative version
 Negative version
 Quiet NaN with random payload
 Negative version
 Negative version
 Quiet NaN with random payload
 Negative version
 Negative version
 Quiet NaN with random payload
 Negative version
 Negative version
 Quiet NaN with random payload
 Negative version
 Negative version
 Smallest subnormal number
 Negative version
 Negative version
 Largest subnormal number
 Negative version
 Random subnormal positive number
 Negative version
 Random subnormal positive number
 Negative version
 Random subnormal positive number
 Negative version
 Random subnormal positive number
 Negative version
 Quiet NaN with no payload
 Negative version
 Negative version
 Negative version
 Negative version
 Negative version
 Quiet NaN with maximum-valued payload
 Negative version
 Negative version
 Quiet NaN with random payload
 Negative version
 Negative version
 Quiet NaN with random payload
 Negative version
 Negative version
 Quiet NaN with random payload
 Negative version
 Negative version
 Quiet NaN with random payload
 Negative version
 Negative version
 Smallest subnormal number
 Negative version
 Negative version
 Largest subnormal number
 Negative version
 Random subnormal positive number
 Negative version
 Random subnormal positive number
 Negative version
 Random subnormal positive number
 Negative version
 Random subnormal positive number
 Negative version
# LANGUAGE NumericUnderscores #
# LANGUAGE NegativeLiterals #

module T1803 where

import Clash.Prelude

import Clash.Explicit.Testbench


  - Negative zero becomes positive zero , all NaNs I tried become infinity . 
 
 - 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)

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
# NOINLINE 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 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 : :      =     0 
             :> -0 
             :> 1/0 
             :> -1/0 
             :> 0/0 
             :> -0/0 
             :> Nil 

 doubleData : :    
 doubleData =      0 
              :> -0 
              :> 1/0 
              :> -1/0 
              :> 0/0 
              :> -0/0 
              :> Nil 

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

qNaN0PLF :: BitVector 32
qNaN0PLF
  = 0b0111_1111_1100_0000_0000_0000_0000_0000

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

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

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

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

negSNaNMsbF :: BitVector 32
negSNaNMsbF
  = 0b1111_1111_1010_0000_0000_0000_0000_0000

qNaNMaxF :: BitVector 32
qNaNMaxF
  = 0b0111_1111_1111_1111_1111_1111_1111_1111

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

negSNaNMaxF :: BitVector 32
negSNaNMaxF
  = 0b1111_1111_1011_1111_1111_1111_1111_1111

qNaNR1F :: BitVector 32
qNaNR1F
  = 0b0111_1111_1110_0000_1011_0001_0011_1100

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

negSNaNR1F :: BitVector 32
negSNaNR1F
  = 0b1111_1111_1010_0000_1011_0001_0011_1100

qNaNR2F :: BitVector 32
qNaNR2F
  = 0b0111_1111_1100_0010_0011_0000_1110_0101

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

negSNaNR2F :: BitVector 32
negSNaNR2F
  = 0b1111_1111_1000_0010_0011_0000_1110_0101

qNaNR3F :: BitVector 32
qNaNR3F
  = 0b0111_1111_1100_1101_0001_1011_1111_0100

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

negSNaNR3F :: BitVector 32
negSNaNR3F
  = 0b1111_1111_1000_1101_0001_1011_1111_0100

qNaNR4F :: BitVector 32
qNaNR4F
  = 0b0111_1111_1100_1000_0110_0100_1011_0010

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

negSNaNR4F :: BitVector 32
negSNaNR4F
  = 0b1111_1111_1000_1000_0110_0100_1011_0010

subNormMinF :: BitVector 32
subNormMinF
  = 0b0000_0000_0000_0000_0000_0000_0000_0001

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

negSubNormMsbF :: BitVector 32
negSubNormMsbF
  = 0b1000_0000_0100_0000_0000_0000_0000_0000

subNormMaxF :: BitVector 32
subNormMaxF
  = 0b0000_0000_0111_1111_1111_1111_1111_1111

negSubNormMaxF :: BitVector 32
negSubNormMaxF
  = 0b1000_0000_0111_1111_1111_1111_1111_1111

  The randomness is equal to the NaN case
subNormR1F :: BitVector 32
subNormR1F
  = 0b0000_0000_0110_0000_1011_0001_0011_1100

negSubNormR1F :: BitVector 32
negSubNormR1F
  = 0b1000_0000_0110_0000_1011_0001_0011_1100

  The randomness is equal to the NaN case
subNormR2F :: BitVector 32
subNormR2F
  = 0b0000_0000_0100_0010_0011_0000_1110_0101

negSubNormR2F :: BitVector 32
negSubNormR2F
  = 0b1000_0000_0100_0010_0011_0000_1110_0101

  The randomness is equal to the NaN case
subNormR3F :: BitVector 32
subNormR3F
  = 0b0000_0000_0000_1101_0001_1011_1111_0100

negSubNormR3F :: BitVector 32
negSubNormR3F
  = 0b1000_0000_0000_1101_0001_1011_1111_0100

  The randomness is equal to the NaN case
subNormR4F :: BitVector 32
subNormR4F
  = 0b0000_0000_0100_1000_0110_0100_1011_0010

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

qNaN0PLD :: BitVector 64
qNaN0PLD
  = 0b0111_1111_1111_1000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000

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

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

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

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

negSNaNMsbD :: BitVector 64
negSNaNMsbD
  = 0b1111_1111_1111_0100_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000

qNaNMaxD :: BitVector 64
qNaNMaxD
  = 0b0111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111

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

negSNaNMaxD :: BitVector 64
negSNaNMaxD
  = 0b1111_1111_1111_0111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111

qNaNR1D :: BitVector 64
qNaNR1D
  = 0b0111_1111_1111_1010_1000_1001_0001_1001_1101_0110_1010_0010_1111_0101_1100_1111

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

negSNaNR1D :: BitVector 64
negSNaNR1D
  = 0b1111_1111_1111_0010_1000_1001_0001_1001_1101_0110_1010_0010_1111_0101_1100_1111

qNaNR2D :: BitVector 64
qNaNR2D
  = 0b0111_1111_1111_1010_0001_1001_1011_0111_0110_0111_0100_1110_1010_1001_0000_0010

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

negSNaNR2D :: BitVector 64
negSNaNR2D
  = 0b1111_1111_1111_0010_0001_1001_1011_0111_0110_0111_0100_1110_1010_1001_0000_0010

qNaNR3D :: BitVector 64
qNaNR3D
  = 0b0111_1111_1111_1011_0110_0011_0101_0011_1110_1110_1000_1010_0011_0000_0111_0101

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

negSNaNR3D :: BitVector 64
negSNaNR3D
  = 0b1111_1111_1111_0011_0110_0011_0101_0011_1110_1110_1000_1010_0011_0000_0111_0101

qNaNR4D :: BitVector 64
qNaNR4D
  = 0b0111_1111_1111_1001_0110_1101_0011_0111_0100_1110_0011_1100_0000_0100_0001_1011

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

negSNaNR4D :: BitVector 64
negSNaNR4D
  = 0b1111_1111_1111_0001_0110_1101_0011_0111_0100_1110_0011_1100_0000_0100_0001_1011

subNormMinD :: BitVector 64
subNormMinD
  = 0b0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0001

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

negSubNormMsbD :: BitVector 64
negSubNormMsbD
  = 0b1000_0000_0000_1000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000

subNormMaxD :: BitVector 64
subNormMaxD
  = 0b0000_0000_0000_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111

negSubNormMaxD :: BitVector 64
negSubNormMaxD
  = 0b1000_0000_0000_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111

  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

negSubNormR1D :: BitVector 64
negSubNormR1D
  = 0b1000_0000_0000_1010_1000_1001_0001_1001_1101_0110_1010_0010_1111_0101_1100_1111

  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

negSubNormR2D :: BitVector 64
negSubNormR2D
  = 0b1000_0000_0000_0010_0001_1001_1011_0111_0110_0111_0100_1110_1010_1001_0000_0010

  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

negSubNormR3D :: BitVector 64
negSubNormR3D
  = 0b1000_0000_0000_011_0110_0011_0101_0011_1110_1110_1000_1010_0011_0000_0111_01010

  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

negSubNormR4D :: BitVector 64
negSubNormR4D
  = 0b1000_0000_0000_1001_0110_1101_0011_0111_0100_1110_0011_1100_0000_0100_0001_1011
