large-anon-0.3.4: test/Test/Sanity/Simple.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE OverloadedLabels #-}
{-# LANGUAGE TypeOperators #-}
{-# OPTIONS_GHC -fplugin=Data.Record.Anon.Plugin #-}
-- | Tests for the @Simple@ interface
--
-- The @Simple@ is a thin wrapper around the @Advanced@ interface, so a few
-- select sanity tests suffice.
module Test.Sanity.Simple (tests) where
import Test.Tasty
import Test.Tasty.HUnit
import Data.Record.Anon
import Data.Record.Anon.Simple (Record)
import qualified Data.Record.Anon.Simple as Anon
tests :: TestTree
tests = testGroup "Test.Sanity.Simple" [
testCase "hasField" test_hasField
, testCase "merge" test_merge
]
{-------------------------------------------------------------------------------
Example values
-------------------------------------------------------------------------------}
recordA :: Record [ "a" := Bool, "b" := Char ]
recordA =
Anon.insert #a True
$ Anon.insert #b 'a'
$ Anon.empty
recordA' :: Record [ "a" := Bool, "b" := Char ]
recordA' =
Anon.insert #a False
$ Anon.insert #b 'a'
$ Anon.empty
{-------------------------------------------------------------------------------
Tests proper
-------------------------------------------------------------------------------}
test_hasField :: Assertion
test_hasField = do
assertEqual "get" True $ Anon.get #a recordA
assertEqual "set" recordA' $ Anon.set #a False recordA
test_merge :: Assertion
test_merge = do
assertEqual "left" recordA $ Anon.project $ Anon.merge Anon.empty recordA
assertEqual "right" recordA $ Anon.project $ Anon.merge recordA Anon.empty