hw-bits-0.7.0.4: test/HaskellWorks/Data/Bits/Writer/StorableSpec.hs
{-# LANGUAGE BinaryLiterals #-}
{-# LANGUAGE ScopedTypeVariables #-}
module HaskellWorks.Data.Bits.Writer.StorableSpec where
import Data.Word
import HaskellWorks.Hspec.Hedgehog
import Hedgehog
import Test.Hspec
import qualified Data.Vector.Storable as DVS
import qualified HaskellWorks.Data.Bits.Writer.Storable as WS
{-# ANN module ("HLint: Ignore Redundant do" :: String) #-}
spec :: Spec
spec = describe "HaskellWorks.Data.Bits.Writer.StorableSpec" $ do
it "unsafeWriteBit" $ requireTest $ do
let v :: DVS.Vector Word64 = DVS.create $ do
mw <- WS.newWriter 10
WS.unsafeWriteBit mw 1
WS.unsafeWriteBit mw 0
WS.unsafeWriteBit mw 1
WS.unsafeWriteBit mw 1
WS.unsafeWriteBit mw 0
WS.unsafeWriteBit mw 0
WS.unsafeWriteBit mw 1
WS.unsafeWriteBit mw 1
WS.unsafeWriteBit mw 1
WS.unsafeWriteBit mw 0
WS.unsafeWriteBit mw 0
WS.unsafeWriteBit mw 0
WS.written mw
v === DVS.fromList [0b111001101]
it "unsafeWriteBits 1" $ requireTest $ do
let v :: DVS.Vector Word64 = DVS.create $ do
mw <- WS.newWriter 10
WS.unsafeWriteBits mw 1 1
WS.unsafeWriteBits mw 1 0
WS.unsafeWriteBits mw 1 1
WS.unsafeWriteBits mw 1 1
WS.unsafeWriteBits mw 1 0
WS.unsafeWriteBits mw 1 0
WS.unsafeWriteBits mw 1 1
WS.unsafeWriteBits mw 1 1
WS.unsafeWriteBits mw 1 1
WS.unsafeWriteBits mw 1 0
WS.unsafeWriteBits mw 1 0
WS.unsafeWriteBits mw 1 0
WS.written mw
v === DVS.fromList [0b111001101]
it "unsafeWriteBits 2" $ requireTest $ do
let v :: DVS.Vector Word64 = DVS.create $ do
mw <- WS.newWriter 10
WS.unsafeWriteBits mw 1 0b1
WS.unsafeWriteBits mw 1 0b0
WS.unsafeWriteBits mw 2 0b11
WS.unsafeWriteBits mw 2 0b00
WS.unsafeWriteBits mw 3 0b111
WS.unsafeWriteBits mw 3 0b000
WS.written mw
v === DVS.fromList [0b111001101]
it "unsafeWriteBits 2" $ requireTest $ do
let v :: DVS.Vector Word64 = DVS.create $ do
mw <- WS.newWriter 10
WS.unsafeWriteBits mw 1 0b1
WS.unsafeWriteBits mw 1 0b0
WS.unsafeWriteBits mw 2 0b11
WS.unsafeWriteBits mw 2 0b00
WS.unsafeWriteBits mw 3 0b111
WS.unsafeWriteBits mw 3 0b000
WS.unsafeWriteBits mw 4 0b1111
WS.unsafeWriteBits mw 4 0b0000
WS.unsafeWriteBits mw 5 0b11111
WS.unsafeWriteBits mw 5 0b00000
WS.unsafeWriteBits mw 6 0b111111
WS.unsafeWriteBits mw 6 0b000000
WS.unsafeWriteBits mw 7 0b1111111
WS.unsafeWriteBits mw 7 0b0000000
WS.unsafeWriteBits mw 8 0b11111111
WS.unsafeWriteBits mw 8 0b00000000
WS.unsafeWriteBits mw 9 0b111111111
WS.unsafeWriteBits mw 9 0b000000000
WS.written mw
v === DVS.fromList
[ 0b1111111100000001111111000000111111000001111100001111000111001101
, 0b0000000000000000000000000000000000000000000000011111111100000000
]
it "unsafeWriteBits 2" $ requireTest $ do
let v :: DVS.Vector Word64 = DVS.create $ do
mw <- WS.newWriter 10
WS.unsafeWriteBits mw 9 0b111111111
WS.unsafeWriteBits mw 9 0b000000000
WS.unsafeWriteBits mw 8 0b11111111
WS.unsafeWriteBits mw 8 0b00000000
WS.unsafeWriteBits mw 7 0b1111111
WS.unsafeWriteBits mw 7 0b0000000
WS.unsafeWriteBits mw 6 0b111111
WS.unsafeWriteBits mw 6 0b000000
WS.unsafeWriteBits mw 5 0b11111
WS.unsafeWriteBits mw 5 0b00000
WS.unsafeWriteBits mw 4 0b1111
WS.unsafeWriteBits mw 4 0b0000
WS.unsafeWriteBits mw 3 0b111
WS.unsafeWriteBits mw 3 0b000
WS.unsafeWriteBits mw 2 0b11
WS.unsafeWriteBits mw 2 0b00
WS.unsafeWriteBits mw 1 0b1
WS.unsafeWriteBits mw 1 0b0
WS.written mw
v === DVS.fromList
[ 0b1111000000111111000000011111110000000011111111000000000111111111
, 0b0000000000000000000000000000000000000001001100011100001111000001
]