cybus-0.1.0.0: test/TestNatHelper.hs
{-# LANGUAGE AllowAmbiguousTypes #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
module TestNatHelper where
import Cybus.NatHelper
import Data.List.NonEmpty (NonEmpty (..))
import Data.Pos
import Test.Tasty
import Test.Tasty.HUnit
doit :: IO ()
doit = defaultMain suite
suite :: TestTree
suite =
testGroup
"TestNatHelper"
[ testCase "nestedNonEmptyToList nestedListToNonEmpty" $
let m = [[[1 :: Int, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]], [[13, 14, 15], [16, 17, 18]]]
in (nestedNonEmptyToList @(NN 323) =<< nestedListToNonEmpty @(NN 323) m) @?= Right m
, testCase "nestedNonEmptyToList" $
let m = [[[1 :: Int, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]], [[13, 14, 15], [16, 17, 18]]]
in nestedListToNonEmpty @(NN 323) m @?= Right (((1 :| [2, 3]) :| [4 :| [5, 6]]) :| [(7 :| [8, 9]) :| [10 :| [11, 12]], (13 :| [14, 15]) :| [16 :| [17, 18]]])
, testCase "validateNestedList" $
validateNestedList [True, False, True]
@?= Right (_3P :| [])
, testCase "validateNestedList" $
validateNestedList [[[True, False, True]]]
@?= Right (_1P :| [_1P, _3P])
, testCase "validateNestedList" $
validateNestedList [[[True, False, True], [False, False, False]]]
@?= Right (_1P :| [_2P, _3P])
, testCase "validateNestedList" $
validateNestedList [()]
@?= Right (_1P :| [])
, testCase "validateNestedList" $
validateNestedList ([] :: [()])
@?= Left "validateNestedListC: ixes=[]:no data!"
, testCase "validateNestedList" $
validateNestedList [[1 :: Int, 2], [1, 2], [1, 2, 3]] @?= Left "validateNestedListC: lengths=[2,2,3] ixes=[3P]"
]