sifflet-2.3.0: tests/Testing/Unit/ExprTreeTests.hs
module Testing.Unit.ExprTreeTests (tests, runU)
where
import Test.HUnit
import Data.Number.Sifflet
import Data.Sifflet.Geometry
import Data.Sifflet.Tree as T
import Data.Sifflet.TreeGraph
import Data.Sifflet.TreeLayout
import Data.Sifflet.WGraph
import Language.Sifflet.Examples
import Language.Sifflet.Expr
import Language.Sifflet.ExprTree
import Text.Sifflet.Repr ()
import Testing.Common.ExprTreeTests
import Testing.TestUtil
-- ============================================================
-- UNIT TESTS
utestGNode :: Test
utestGNode =
let tpp = "The Purple Platypus"
gnode = makeGNode testStyle zeroIoletCounter (Name tpp)
Size w h = measureText testStyle tpp
m = 18.0 -- style textMargin
mm = 2.0 * m
x = m
y = 36.5 -- where does this come from????
w' = w + mm
h' = h + mm
in assertAll
[assertEqual "GNode of The Purple Platypus"
CloseEnough
(gnodeDiff
(GNode (Name tpp)
[TextBox tpp
(BBox x y w h)
(BBox 0 0 w' h')]
(BBox 0 0 w' h')
[]
[])
gnode)
,
assertEqual "Translation of GNode by 10, 20"
CloseEnough
(gnodeDiff
(GNode (Name tpp)
[TextBox tpp
(BBox (x + 10.0) (y + 20.0) w h)
(BBox 10.0 20.0 w' h')]
(BBox 10.0 20.0 w' h') [] [])
(translate 10 20 gnode))
]
utestRepr :: Test
utestRepr = TestCase $
assertEqual "repr of aDemoExpr"
("(if (> ant (+ butterfly 5)) " ++
"(+ ant (+ butterfly cheetah)) (* (+ ant 7) (- butterfly 12)))")
(repr aDemoExpr)
utestEval :: Test
utestEval = TestCase $
assertEqual "value of aDemoExpr"
(EvalOk (VNumber (Exact (-24))))
(eval aDemoExpr demoEnv)
utestGraphToExprTree :: Test
utestGraphToExprTree = TestCase $
do
let expr = ePlus (eTimes (eSymbol "x") (eInt 5))
(eMinus (eInt 7) (eSymbol "y"))
exprTree = exprToTree expr
layoutTree = treeLayout testStyle zeroIoletCounter exprTree
graph = treeLayoutToGraph layoutTree
assertEqual "recover expr from tlo tree" exprTree
(graphToExprTree graph 1)
utest1 :: Test
utest1 = TestCase $
do
let factFunction = envGetFunction exampleEnv "fact"
factTree = exprToTree (functionBody factFunction)
tlo = treeLayout defaultStyle zeroIoletCounter factTree
let g = orderedTreeToGraph (fmap WSimple tlo)
assertEqual "graph extract expr tree" factTree
(grExtractExprTree g 1)
utest2 :: Test
utest2 = TestCase $
do
let nSymbol s = ENode (NSymbol (Symbol s)) EvalUntried
t1 = fmap nSymbol (T.Node "horse" [leaf "saddle", leaf "rider"])
t2 = fmap nSymbol (T.Node "mule" [leaf "plough", leaf "farmer"])
y1 :: TreeLayout ExprNode
y1 = treeLayout wstyle zeroIoletCounter t1
y2 :: TreeLayout ExprNode
y2 = treeLayout wstyle zeroIoletCounter t2
g1 = treeLayoutToGraph y1 :: WGraph
g2 = grUpdateTreeLayout g1 1 y2 :: WGraph
assertEqual "grUpdateLayout" y2 (grExtractLayoutTree g2 1)
tests :: Test
tests = TestList [TestLabel "GNode test" utestGNode,
TestLabel "repr of Expr" utestRepr,
TestLabel "eval of Expr" utestEval,
TestLabel "tlo to expr" utestGraphToExprTree,
utest1, utest2]
runU :: IO Counts
runU = runTestTT tests