packages feed

cold-widow-0.1.2: tests/Codec/Binary/ColdwidowSpec.hs

-- File: tests/Codec/Binary/ColdwidowSpec.hs

module Codec.Binary.ColdwidowSpec (spec) where

import Test.Hspec
import Codec.Binary.Coldwidow

import Data.ByteString.Lazy (singleton, pack)

spec :: Spec
spec = do
  describe "encode" $ do
    it "returns character \"0\" when encoding value 0" $
      encode 0 `shouldBe` "0"
    it "returns character \":\" when encoding vlaue 44" $
      encode 44 `shouldBe` ":"
    it "returns characters \"10\" when encoding value 45" $
      encode 45 `shouldBe` "10"
    it "returns charcters \"11\" when encoding value 46" $
      encode 46 `shouldBe` "11"
    it "returns charcters \"1:\" when encoding value 89" $
      encode 89 `shouldBe` "1:"
    it "returns characters \":0\" when encoding value 45*44" $
      encode (45*44) `shouldBe` ":0"
    it "returns characters \"::\" when encoding value 45*44+44" $
      encode (45*44+44) `shouldBe` "::"
      
  describe "decode" $ do
    it "decodes \"0\" as 0" $
      decode "0" `shouldBe` 0
    it "decodes \":\" as 44" $
      decode ":" `shouldBe` 44
    it "decodes \"10\" as 45" $
      decode "10" `shouldBe` 45
    it "decodes \"11\" as 46" $
      decode "11" `shouldBe` 46
    it "decodes \"1:\" as 89" $
      decode "1:" `shouldBe` 89
    it "decodes \":0\" as 45*44" $
      decode ":0" `shouldBe` (45*44)
    it "decodes \"::\" as 45*44+44" $
      decode "::" `shouldBe` (45*44+44)
    it "decodes \"Q\" as 26" $
      decode "Q" `shouldBe` 26

  describe "packInteger" $ do
    it "packs [0] as 0" $
      packInteger (singleton 0) `shouldBe` 0
    it "packs [0, 0] as 0" $
      packInteger (pack [0, 0]) `shouldBe` 0
    it "packs [1] as 1" $
      packInteger (singleton 1) `shouldBe` 1
    it "packs [0, 1] as 1" $
      packInteger (pack [0, 1]) `shouldBe` 1
    it "packs [1, 0] as 256" $
      packInteger (pack [1, 0]) `shouldBe` 256

  describe "unpackInteger" $ do
    it "unpacks 0 as [0]" $
      unpackInteger 0 `shouldBe` (singleton 0)
    it "unpacks 1 as [1]" $
      unpackInteger 1 `shouldBe` (singleton 1)
    it "unpacks 256 as [1, 0]" $
      unpackInteger 256 `shouldBe` (pack [1, 0])
    it "unpacks 65535 as [255, 255]" $
      unpackInteger 65535 `shouldBe` (pack [255, 255])
    it "unpacks 1+2*256+3*256*256+4*256*256*256 as [4, 3, 2, 1]" $
      unpackInteger (1+2*256+3*256*256+4*256*256*256) `shouldBe` (pack [4, 3, 2, 1])