doldol-0.4.1.0: test/Test/Flag/Phantom.hs
{-# LANGUAGE TemplateHaskell #-}
module Test.Flag.Phantom where
import Data.Flag.Phantom
import Data.Word
import Test.Framework
import Test.Framework.Providers.HUnit
import Test.Framework.Providers.QuickCheck2
import Test.Framework.TH
import Test.HUnit.Base
import Test.QuickCheck
import Test.Flag.Env
tests = $(testGroupGenerator)
test_isFlaggable =
[ testCase "isFlaggable A == True" c_if01
, testCase "isFlaggable X0 == False" c_if02
, testCase "isFlaggable Y1 == True" c_if03
]
c_if01 = assertBool "" (isFlaggable $ A)
c_if02 = assertBool "" (not . isFlaggable $ X0)
c_if03 = assertBool "" (isFlaggable $ Y1)
test_encDec =
[ testProperty "(getFlag . encodeFlag . (decodeFlag :: PhantomFlag X -> [X]) . PhFlag) i == i" p_ged01
, testProperty "(getFlag . encodeFlag . (decodeFlag :: PhantomFlag Y -> [Y]) . PhFlag) i == i" p_ged02
]
p_ged01 i = (getFlag . encodeFlag . (decodeFlag :: PhantomFlag X -> [X]) . PhFlag) i == i
where types = (i :: Flag)
p_ged02 i = (getFlag . encodeFlag . (decodeFlag :: PhantomFlag Y -> [Y]) . PhFlag) i == i
where types = (i :: Flag)
test_readShow =
[ testProperty "(getFlag . readFlag . showFlag . PhFlag) i == i" p_rs01
--, testProperty "(getFlag . readFlag . showFlagBy 16 . PhFlag) i == i" p_rs02
, testProperty "(getFlag . readFlag . showFlagFit X0 . PhFlag) i == i" p_rs03
, testProperty "(getFlag . readFlag . showFlagFit Y1 . PhFlag) i == i" p_rs04
]
p_rs01 i = (getFlag . readFlag . showFlag . PhFlag) i == i
where types = (i :: Flag)
-- NOTE: This test should fail because input is not limited by -2^15~2^15-1
p_rs02 i = (getFlag . readFlag . showFlagBy 16 . PhFlag) i == i
where types = (i :: Flag)
-- NOTE: This should not fail at test but assertion because input is limited in Flag representation
p_rs03 i = (getFlag . readFlag . showFlagFit X0 . PhFlag) i == i
where types = (i :: Flag)
p_rs04 i = (getFlag . readFlag . showFlagFit Y1 . PhFlag) i == i
where types = (i :: Flag)
test_showFlagBy =
[ testCase "showFlagBy 0 (PhFlag 1) == \"\"" c_sFB01
, testCase "showFlagBy 1 (PhFlag 1) == \"1\"" c_sFB02
, testCase "showFlagBy 9 (PhFlag 1) == \"000000001\"" c_sFB03
, testCase "showFlagBy 10 (PhFlag 1) == \"0000000001\"" c_sFB04
, testCase "showFlagBy 1 (PhFlag 2) == \"0\"" c_sFB05
, testCase "showFlagBy 2 (PhFlag 2) == \"10\"" c_sFB06
, testCase "showFlagBy 10 (PhFlag 2) == \"0000000010\"" c_sFB07
]
c_sFB01 = showFlagBy 0 (PhFlag 1) @?= ""
c_sFB02 = showFlagBy 1 (PhFlag 1) @?= "1"
c_sFB03 = showFlagBy 9 (PhFlag 1) @?= "000000001"
c_sFB04 = showFlagBy 10 (PhFlag 1) @?= "0000000001"
c_sFB05 = showFlagBy 1 (PhFlag 2) @?= "0"
c_sFB06 = showFlagBy 2 (PhFlag 2) @?= "10"
c_sFB07 = showFlagBy 10 (PhFlag 2) @?= "0000000010"
test_encodeFlag =
[ testCase "encodeFlag [X0,X1] == PhFlag 3" c_eF01
]
c_eF01 = PhFlag 3 @=? encodeFlag [X0,X1]
{-
Can't test because of type error
_test_equal =
[ testCase "x1 /= x2" c_eq01
, testCase "x1 == y1" c_eq02
]
c_eq01 = x1 @?= x2
c_eq02 = x1 @?= y1
_test_include =
[ testCase "include x1 y1" c_incl01
, testCase "include x1 x2" c_incl02
]
c_incl01 = assertBool "" (include x1 y1)
c_incl02 = assertBool "" (include x1 x2)
-}