large-anon-0.1.0.0: test/Test/Sanity/Applicative.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE OverloadedLabels #-}
{-# OPTIONS_GHC -fplugin=Data.Record.Anon.Plugin #-}
module Test.Sanity.Applicative (tests) where
import Validation
import Data.Record.Anon
import Data.Record.Anon.Simple (Record)
import qualified Data.Record.Anon.Simple as Anon
import Test.Tasty
import Test.Tasty.HUnit
tests :: TestTree
tests = testGroup "Test.Sanity.Applicative" [
testCase "insertA" test_insertA
]
test_insertA :: Assertion
test_insertA =
case example of
Failure _ -> error "unexpected failure"
Success r -> assertEqual "" r validated
{-------------------------------------------------------------------------------
Example values
-------------------------------------------------------------------------------}
example :: Validation [String] (Record [ "a" := Int, "b" := Bool, "c" := Char ])
example =
Anon.insertA #a validateInt
$ Anon.insertA #b validateBool
$ Anon.insertA #c validateChar
$ pure Anon.empty
where
validateInt :: Validation [String] Int
validateBool :: Validation [String] Bool
validateChar :: Validation [String] Char
validateInt = Success 1
validateBool = Success True
validateChar = Success 'a'
validated :: Record [ "a" := Int, "b" := Bool, "c" := Char ]
validated =
Anon.insert #a 1
$ Anon.insert #b True
$ Anon.insert #c 'a'
$ Anon.empty