packages feed

hw-bits-0.7.1.1: test/HaskellWorks/Data/Bits/BitReadSpec.hs

{-# OPTIONS_GHC -fno-warn-incomplete-patterns #-}
{-# LANGUAGE OverloadedLists     #-}
{-# LANGUAGE ScopedTypeVariables #-}

module HaskellWorks.Data.Bits.BitReadSpec (spec) where

import Data.Word
import HaskellWorks.Data.Bits.BitRead
import HaskellWorks.Data.Bits.BitShow
import HaskellWorks.Hspec.Hedgehog
import Hedgehog
import Test.Hspec

import qualified Data.Bit            as Bit
import qualified Data.Vector         as DV
import qualified Data.Vector.Unboxed as DVU

{-# ANN module ("HLint: ignore Redundant do" :: String) #-}

spec :: Spec
spec = describe "HaskellWorks.Data.BitReadSpec" $ do
  it "bitRead \"10000000 101\" :: Maybe [Word8]" . requireTest $ do
    let w = bitRead "10000000 101" :: Maybe [Bool]
    w === Just [True, False, False, False, False, False, False, False, True, False, True]
  it "bitRead \"10000000 101\" :: Maybe [Word8]" $ requireTest $ do
    let w = bitRead "10000000 101" :: Maybe [Word8]
    w === Just [1, 5]
  it "bitRead \"11100100 10101111 1\" :: Maybe [Word8]" . requireTest $ do
    let ws = bitRead "11100100 10101111 1" :: Maybe [Word8]
    ws === Just [39, 245, 1]
  it "bitRead \"\" :: Maybe [Word8]" . requireTest $ do
    let ws = bitRead "" :: Maybe [Word8]
    ws === Just []

  it "bitRead \"10000000 101\" :: Maybe (DV.Vector Word8)" . requireTest $ do
    let v = bitRead "10000000 101" :: Maybe (DV.Vector Word8)
    v === Just [1, 5]
  it "bitRead \"11100100 10101111 1\" :: Maybe (DV.Vector Word8)" . requireTest $ do
    let v = bitRead "11100100 10101111 1" :: Maybe (DV.Vector Word8)
    v === Just [39, 245, 1]
  it "bitRead \"11100100 10101111 1\" :: Maybe (DV.Vector Word16)" . requireTest $ do
    let v = bitRead "11100100 10101111 1" :: Maybe (DV.Vector Word16)
    v === Just [39 + 62720, 1]
  it "bitRead \"\" :: Maybe (DV.Vector Word8)" . requireTest $ do
    let v = bitRead "" :: Maybe (DV.Vector Word8)
    v === Just []

  it "bitRead \"10000000 101\" :: Maybe (DVU.Vector Bit.Bit)" . requireTest $ do
    let v = bitRead "10000000 101" :: Maybe (DVU.Vector Bit.Bit)
    v === Just [1,0,0,0,0,0,0,0, 1,0,1]
  it "bitRead \"11100100 10101111 1\" :: Maybe (DVU.Vector Bit.Bit)" . requireTest $ do
    let v = bitRead "11100100 10101111 1" :: Maybe (DVU.Vector Bit.Bit)
    v === Just [1,1,1,0,0,1,0,0, 1,0,1,0,1,1,1,1, 1]
  it "bitRead \"11100100 10101111 1\" :: Maybe (DVU.Vector Bit.Bit)" . requireTest $ do
    let v = bitRead "11100100 10101111 1" :: Maybe (DVU.Vector Bit.Bit)
    v === Just [1,1,1,0,0,1,0,0, 1,0,1,0,1,1,1,1, 1]
  it "bitRead \"\" :: Maybe (DVU.Vector Bit.Bit)" . requireTest $ do
    let v = bitRead "" :: Maybe (DVU.Vector Bit.Bit)
    v === Just []

  it "bitShow (8 :: Word8)" . requireTest $ do
    let bs = bitShow (8 :: Word8)
    bs === "00010000"
  it "bitShow (8 :: Word64)" . requireTest $ do
    let bs = bitShow (8 :: Word64)
    bs === "00010000 00000000 00000000 00000000 00000000 00000000 00000000 00000000"
  it "bitShow [0x0102040810204080 :: Word64]" . requireTest $ do
    let bs = bitShow ([0x0102040810204080] :: [Word64])
    bs === "00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000"