packages feed

hset-2.0.0: test/Main.hs

module Main where

import Control.Monad
import Data.HSet
import Data.Proxy
import Data.Tagged
import Test.HUnit

hset :: HSet '[Int, Double, Integer, Float]
hset = HSCons 1
      $ HSCons 2
      $ HSCons 3
      $ HSCons 4
      $ HSNil

hsetEq :: Bool
hsetEq = hset == hset

hsetCompare :: Ordering
hsetCompare = compare hset hset

hsetInt :: Int
hsetInt = hget hset

hsetDoube :: Double
hsetDoube = hget hset

hsetInteger :: Integer
hsetInteger = hget hset

hsetFloat :: Float
hsetFloat = hget hset

data Label = This | That

labeledHSet :: HSet '[Tagged 'This Int, Tagged 'That Int, Tagged "hello" String]
labeledHSet = HSCons (Tagged 1)
              $ HSCons (Tagged 2)
              $ HSCons (Tagged "olleh")
              HSNil

main :: IO ()
main = void $ runTestTT $ TestList
    [ TestList
      [ TestCase $ hsetEq @?= True
      , TestCase $ hsetCompare @?= EQ
      , TestCase $ hsetInt @?= 1
      , TestCase $ hsetDoube @?= 2
      , TestCase $ hsetInteger @?= 3
      , TestCase $ hsetFloat @?= 4
      ]
    , TestList
      [ TestCase $ (hgetTagged (Proxy :: Proxy 'This) labeledHSet) @?= (1 :: Int)
      , TestCase $ (hgetTagged (Proxy :: Proxy 'That) labeledHSet) @?= (2 :: Int)
      , TestCase $ (hgetTagged (Proxy :: Proxy "hello") labeledHSet) @?= "olleh"
      ]
    ]