packages feed

popkey-0.0.0.1: test/Spec.hs

{-# OPTIONS_GHC -fno-warn-orphans #-}

import Data.Foldable
import qualified Data.Map as M
import GHC.Word
import Test.Hspec
import Test.QuickCheck

import PopKey


main :: IO ()
main = hspec $ do
  describe "PopKey" $ do
    it "sanity checks for fixed-size data" $ property \(xs :: [ Int ]) ->
      toList (makePopKey' xs) == xs

    it "sanity checks for fixed-size data" $ property \(xs :: [ (Int , Word8) ]) ->
      toList (makePopKey' xs) == xs

    it "sanity checks for var-size data" $ property \(xs :: [ [ Int ] ]) ->
      toList (makePopKey' xs) == xs

    it "sanity checks for var-size data" $ property \(xs :: [ String ]) ->
      toList (makePopKey' xs) == xs

    it "sanity checks for key data" $ property \(xs :: [ (Int , Word8) ]) -> do
      let m = M.fromList xs
          pk = makePopKey xs
          ks = fst <$> xs
      all (\k -> m M.! k == pk ! k) ks