primus-0.3.0.0: test/TestTypeLevel.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
module TestTypeLevel where
import Data.List.NonEmpty (NonEmpty (..))
import Data.Pos
import Primus.TypeLevel
import Test.Tasty
import Test.Tasty.HUnit
doit :: IO ()
doit = defaultMain suite
suite :: TestTree
suite =
testGroup
"TestTypeLevel"
[ testCase "LengthT" $
pnat @(LengthT '[]) @?= 0
, testCase "LengthT" $
pnat @(LengthT '[1, 2, 3]) @?= 3
, testCase "LengthT" $
pnat @(LengthT '[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) @?= 10
, testCase "LengthT" $
pnat @(LengthT '[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]) @?= 11
, testCase "LengthT" $
pnat @(LengthT '[1, 2, 3, 4, 5, 6, 7, 8, 9]) @?= 9
, testCase "LastT" $
pnat @(LastT '[1, 2, 3]) @?= 3
, testCase "InitT" $
fromNSP @(InitT '[1, 2, 3]) @?= _1P :| [_2P]
, testCase "SnocT" $
fromNSP @(SnocT '[1, 2, 3] 5) @?= _1P :| [_2P, _3P, _5P]
, testCase "UnsnocT Fst" $
fromNSP @(Fst (UnsnocT '[1, 2, 3, 4])) @?= _1P :| [_2P, _3P]
, testCase "UnsnocT Snd" $
fromNP @(Snd (UnsnocT '[1, 2, 3, 4])) @?= _4P
]