swarm-0.1.0.0: test/unit/TestPretty.hs
{-# LANGUAGE OverloadedStrings #-}
-- | Swarm unit tests
module TestPretty where
import Swarm.Language.Pretty
import Swarm.Language.Syntax hiding (mkOp)
import Test.Tasty
import Test.Tasty.HUnit
testPrettyConst :: TestTree
testPrettyConst =
testGroup
"Language - pretty"
[ testCase
"operators #8 - function application unchanged"
( equalPretty "f say" $
TApp (TVar "f") (TConst Say)
)
, testCase
"operators #8 - double function application unchanged"
( equalPretty "f () ()" $
TApp (TApp (TVar "f") TUnit) TUnit
)
, testCase
"operators #8 - embrace operator parameter"
( equalPretty "f (==)" $
TApp (TVar "f") (TConst Eq)
)
, testCase
"operators #8 - unary negation"
( equalPretty "-3" $
TApp (TConst Neg) (TInt 3)
)
, testCase
"operators #8 - double unary negation"
( equalPretty "-(-1)" $
TApp (TConst Neg) $ TApp (TConst Neg) (TInt 1)
)
, testCase
"operators #8 - unary negation with strongly fixing binary operator"
( equalPretty "-1 ^ (-2)" $
TApp (TConst Neg) $ mkOp' Exp (TInt 1) $ TApp (TConst Neg) (TInt 2)
)
, testCase
"operators #8 - unary negation with weakly fixing binary operator"
( equalPretty "-(1 + -2)" $
TApp (TConst Neg) $ mkOp' Add (TInt 1) $ TApp (TConst Neg) (TInt 2)
)
, testCase
"operators #8 - simple infix operator"
( equalPretty "1 == 2" $
mkOp' Eq (TInt 1) (TInt 2)
)
, testCase
"operators #8 - infix operator with less fixing inner operator"
( equalPretty "1 * (2 + 3)" $
mkOp' Mul (TInt 1) (mkOp' Add (TInt 2) (TInt 3))
)
, testCase
"operators #8 - infix operator with more fixing inner operator"
( equalPretty "1 + 2 * 3" $
mkOp' Add (TInt 1) (mkOp' Mul (TInt 2) (TInt 3))
)
, testCase
"operators #8 - infix operator right associativity"
( equalPretty "2 ^ 4 ^ 8" $
mkOp' Exp (TInt 2) (mkOp' Exp (TInt 4) (TInt 8))
)
, testCase
"operators #8 - infix operator right associativity not applied to left"
( equalPretty "(2 ^ 4) ^ 8" $
mkOp' Exp (mkOp' Exp (TInt 2) (TInt 4)) (TInt 8)
)
, testCase
"pairs #225 - nested pairs are printed right-associative"
( equalPretty "(1, 2, 3)" $
TPair (TInt 1) (TPair (TInt 2) (TInt 3))
)
]
where
equalPretty :: String -> Term -> Assertion
equalPretty expected term = assertEqual "" expected . show $ ppr term