haskus-utils-0.6.0.0: src/tests/Haskus/Tests/Utils/HArray.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE AllowAmbiguousTypes #-}
module Haskus.Tests.Utils.HArray
( testsHArray
)
where
import Test.Tasty
import Test.Tasty.QuickCheck as QC
import Haskus.Utils.HArray
testsHArray :: TestTree
testsHArray = testGroup "HArray" $
[ testGroup "Getters"
[ testProperty "Get by index 0" (getHArrayN @0 arr1 == 10)
, testProperty "Get by index 1" (getHArrayN @1 arr1 == "Hello")
, testProperty "Get by index 2" (getHArrayN @2 arr1 == False)
, testProperty "Get by type 0" (getHArrayT arr1 == (10 :: Int))
, testProperty "Get by type 1" (getHArrayT arr1 == "Hello")
, testProperty "Get by type 2" (getHArrayT arr1 == False)
]
, testGroup "Setters"
[ testProperty "Set by index 0" (testSetGetN @0 20 arr1)
, testProperty "Set by index 1" (testSetGetN @1 "World" arr1)
, testProperty "Set by index 2" (testSetGetN @2 True arr1)
, testProperty "Set by type 0" (testSetGetT (20 :: Int) arr1)
, testProperty "Set by type 1" (testSetGetT "World" arr1)
, testProperty "Set by type 2" (testSetGetT True arr1)
]
, testGroup "Concat"
[ testProperty "Get by type 0" (getHArrayT arr12 == (10 :: Int))
, testProperty "Get by type 1" (getHArrayT arr12 == "Hello")
, testProperty "Get by type 2" (getHArrayT arr12 == False)
, testProperty "Get by type 3" (getHArrayT arr12 == (2.5 :: Double))
, testProperty "Get by type 4" (getHArrayT arr12 == 'E')
, testProperty "Get by type 0" (getHArrayT arr21 == (10 :: Int))
, testProperty "Get by type 1" (getHArrayT arr21 == "Hello")
, testProperty "Get by type 2" (getHArrayT arr21 == False)
, testProperty "Get by type 3" (getHArrayT arr21 == (2.5 :: Double))
, testProperty "Get by type 4" (getHArrayT arr21 == 'E')
, testProperty "Get by index 0" (getHArrayN @0 arr12 == 10)
, testProperty "Get by index 1" (getHArrayN @1 arr12 == "Hello")
, testProperty "Get by index 2" (getHArrayN @2 arr12 == False)
, testProperty "Get by index 3" (getHArrayN @3 arr12 == 2.5)
, testProperty "Get by index 4" (getHArrayN @4 arr12 == 'E')
, testProperty "Get by index 0" (getHArrayN @0 arr21 == 2.5)
, testProperty "Get by index 1" (getHArrayN @1 arr21 == 'E')
, testProperty "Get by index 2" (getHArrayN @2 arr21 == 10)
, testProperty "Get by index 3" (getHArrayN @3 arr21 == "Hello")
, testProperty "Get by index 4" (getHArrayN @4 arr21 == False)
]
, testGroup "TryGetHArray"
[ testProperty "Try get by type valid" (tryGetHArrayT arr1 == Just "Hello")
, testProperty "Try get by type invalid" (tryGetHArrayT arr1 == (Nothing :: Maybe Char))
]
]
arr1 :: HArray '[Int,String,Bool]
arr1 = prependHArray 10
$ prependHArray "Hello"
$ prependHArray False
$ emptyHArray
testSetGetN :: forall n t ts.
( Eq t
, HArrayIndex n t ts
) => t -> HArray ts -> Bool
testSetGetN a as = getHArrayN @n (setHArrayN @n a as) == a
testSetGetT ::
( Eq t
, HArrayIndexT t ts
) => t -> HArray ts -> Bool
testSetGetT a as = getHArrayT (setHArrayT a as) == a
arr2 :: HArray '[Double,Char]
arr2 = prependHArray 2.5
$ prependHArray 'E'
$ emptyHArray
arr12 :: HArray '[Int,String,Bool,Double,Char]
arr12 = concatHArray arr1 arr2
arr21 :: HArray '[Double,Char,Int,String,Bool]
arr21 = concatHArray arr2 arr1