packages feed

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)
-}