packages feed

hw-succinct-0.0.0.1: test/HaskellWorks/Data/Bits/FromBoolsSpec.hs

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

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

import           Data.Word
import           HaskellWorks.Data.Bits.FromBools
import           Test.Hspec

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

spec :: Spec
spec = describe "HaskellWorks.Data.Bits.FromBoolsSpec" $ do
  describe "for Word8" $ do
    it "fromBool works for 0 bits" $ do
      let result = fromBools [] :: Maybe (Word8, [Bool])
      result `shouldBe` Nothing
    it "fromBool works for 4 bits" $ do
      let result = fromBools  [ True, False, True, False] :: Maybe (Word8, [Bool])
      result `shouldBe` Just (0x5, [])
    it "fromBool works for 8 bits" $ do
      let result = fromBools  [ True, False, True, False, True, False, True, False
                              ] :: Maybe (Word8, [Bool])
      result `shouldBe` Just (0x55, [])
    it "fromBool works for 12 bits" $ do
      let result = fromBools  [ True, False, True, False, True, False, True, False
                              , True, False, True, False
                              ] :: Maybe (Word8, [Bool])
      result `shouldBe` Just (0x55, [True, False, True, False])
  describe "for Word16" $ do
    it "fromBool works for 0 bits" $ do
      let result = fromBools [] :: Maybe (Word16, [Bool])
      result `shouldBe` Nothing
    it "fromBool works for 4 bits" $ do
      let result = fromBools  [ True, False, True, False
                              ] :: Maybe (Word16, [Bool])
      result `shouldBe` Just (0x5, [])
    it "fromBool works for 8 bits" $ do
      let result = fromBools  [ True, False, True, False, True, False, True, False
                              ] :: Maybe (Word16, [Bool])
      result `shouldBe` Just (0x55, [])
    it "fromBool works for 12 bits" $ do
      let result = fromBools  [ True, False, True, False, True, False, True, False
                              , True, False, True, False
                              ] :: Maybe (Word16, [Bool])
      result `shouldBe` Just (0x555, [])
    it "fromBool works for 16 bits" $ do
      let result = fromBools  [ True, False, True, False, True, False, True, False
                              , True, False, True, False, True, False, True, False
                              ] :: Maybe (Word16, [Bool])
      result `shouldBe` Just (0x5555, [])
    it "fromBool works for 20 bits" $ do
      let result = fromBools  [ True, False, True, False, True, False, True, False
                              , True, False, True, False, True, False, True, False
                              , True, False, True, False
                              ] :: Maybe (Word16, [Bool])
      result `shouldBe` Just (0x5555, [True, False, True, False])
  describe "for Word32" $ do
    it "fromBool works for 0 bits" $ do
      let result = fromBools [] :: Maybe (Word32, [Bool])
      result `shouldBe` Nothing
    it "fromBool works for 4 bits" $ do
      let result = fromBools  [ True, False, True, False
                              ] :: Maybe (Word32, [Bool])
      result `shouldBe` Just (0x5, [])
    it "fromBool works for 8 bits" $ do
      let result = fromBools  [ True, False, True, False, True, False, True, False
                              ] :: Maybe (Word32, [Bool])
      result `shouldBe` Just (0x55, [])
    it "fromBool works for 12 bits" $ do
      let result = fromBools  [ True, False, True, False, True, False, True, False
                              , True, False, True, False
                              ] :: Maybe (Word32, [Bool])
      result `shouldBe` Just (0x555, [])
    it "fromBool works for 20 bits" $ do
      let result = fromBools  [ True, False, True, False, True, False, True, False
                              , True, False, True, False, True, False, True, False
                              , True, False, True, False
                              ] :: Maybe (Word32, [Bool])
      result `shouldBe` Just (0x55555, [])
    it "fromBool works for 32 bits" $ do
      let result = fromBools  [ True, False, True, False, True, False, True, False
                              , True, False, True, False, True, False, True, False
                              , True, False, True, False, True, False, True, False
                              , True, False, True, False, True, False, True, False
                              ] :: Maybe (Word32, [Bool])
      result `shouldBe` Just (0x55555555, [])
    it "fromBool works for 36 bits" $ do
      let result = fromBools  [ True, False, True, False, True, False, True, False
                              , True, False, True, False, True, False, True, False
                              , True, False, True, False, True, False, True, False
                              , True, False, True, False, True, False, True, False
                              , True, False, True, False
                              ] :: Maybe (Word32, [Bool])
      result `shouldBe` Just (0x55555555, [True, False, True, False])
  describe "for Word64" $ do
    it "fromBool works for 0 bits" $ do
      let result = fromBools [] :: Maybe (Word64, [Bool])
      result `shouldBe` Nothing
    it "fromBool works for 4 bits" $ do
      let result = fromBools  [ True, False, True, False
                              ] :: Maybe (Word64, [Bool])
      result `shouldBe` Just (0x5, [])
    it "fromBool works for 8 bits" $ do
      let result = fromBools  [ True, False, True, False, True, False, True, False
                              ] :: Maybe (Word64, [Bool])
      result `shouldBe` Just (0x55, [])
    it "fromBool works for 12 bits" $ do
      let result = fromBools  [ True, False, True, False, True, False, True, False
                              , True, False, True, False
                              ] :: Maybe (Word64, [Bool])
      result `shouldBe` Just (0x555, [])
    it "fromBool works for 20 bits" $ do
      let result = fromBools  [ True, False, True, False, True, False, True, False
                              , True, False, True, False, True, False, True, False
                              , True, False, True, False
                              ] :: Maybe (Word64, [Bool])
      result `shouldBe` Just (0x55555, [])
    it "fromBool works for 32 bits" $ do
      let result = fromBools  [ True, False, True, False, True, False, True, False
                              , True, False, True, False, True, False, True, False
                              , True, False, True, False, True, False, True, False
                              , True, False, True, False, True, False, True, False
                              ] :: Maybe (Word64, [Bool])
      result `shouldBe` Just (0x55555555, [])
    it "fromBool works for 36 bits" $ do
      let result = fromBools  [ True, False, True, False, True, False, True, False
                              , True, False, True, False, True, False, True, False
                              , True, False, True, False, True, False, True, False
                              , True, False, True, False, True, False, True, False
                              , True, False, True, False
                              ] :: Maybe (Word64, [Bool])
      result `shouldBe` Just (0x555555555, [])
    it "fromBool works for 64 bits" $ do
      let result = fromBools  [ True, False, True, False, True, False, True, False
                              , True, False, True, False, True, False, True, False
                              , True, False, True, False, True, False, True, False
                              , True, False, True, False, True, False, True, False
                              , True, False, True, False, True, False, True, False
                              , True, False, True, False, True, False, True, False
                              , True, False, True, False, True, False, True, False
                              , True, False, True, False, True, False, True, False
                              ] :: Maybe (Word64, [Bool])
      result `shouldBe` Just (0x5555555555555555, [])
    it "fromBool works for 68 bits" $ do
      let result = fromBools  [ True, False, True, False, True, False, True, False
                              , True, False, True, False, True, False, True, False
                              , True, False, True, False, True, False, True, False
                              , True, False, True, False, True, False, True, False
                              , True, False, True, False, True, False, True, False
                              , True, False, True, False, True, False, True, False
                              , True, False, True, False, True, False, True, False
                              , True, False, True, False, True, False, True, False
                              , True, False, True, False
                              ] :: Maybe (Word64, [Bool])
      result `shouldBe` Just (0x5555555555555555, [True, False, True, False])