{-# LANGUAGE OverloadedStrings #-}
module Pattern ( patternTests
) where
import Data.List.NonEmpty (NonEmpty (..))
import Language.Dickinson.Name
import Language.Dickinson.Pattern.Useless
import Language.Dickinson.Type
import Language.Dickinson.Unique
import Test.Tasty
import Test.Tasty.HUnit
patternTests :: TestTree
patternTests = testGroup "Pattern match unit tests"
[ testSpecializeTuple
, testSpecializeTag
]
-- just tests that they make sense as I understand them
testSpecializeTuple :: TestTree
testSpecializeTuple = testCase "specializeTuple" $ do
let patternMatrix = [[Wildcard ()]]
specializedMatrix = specializeTuple 2 patternMatrix
specializedMatrix @?= [[Wildcard (), Wildcard ()]]
testSpecializeTag :: TestTree
testSpecializeTag = testCase "specializeTag" $ do
let n0 = Name ("a0" :| []) (Unique 0) ()
n1 = Name ("a1" :| []) (Unique 1) ()
patternMatrix = [ [PatternCons () n0, Wildcard ()]
, [PatternCons () n1, Wildcard ()]
]
specializedMatrix = [ [Wildcard ()]
]
specializeTag n0 patternMatrix @?= specializedMatrix