|
|
|
@ -30,7 +30,7 @@ tests = testGroup "Tricu Tests"
|
|
|
|
|
, parser
|
|
|
|
|
, simpleEvaluation
|
|
|
|
|
, lambdas
|
|
|
|
|
, baseLibrary
|
|
|
|
|
, providedLibraries
|
|
|
|
|
, fileEval
|
|
|
|
|
, modules
|
|
|
|
|
, demos
|
|
|
|
@ -343,137 +343,101 @@ lambdas = testGroup "Lambda Evaluation Tests"
|
|
|
|
|
runTricu input @?= "Fork Leaf (Fork (Stem Leaf) Leaf)"
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
baseLibrary :: TestTree
|
|
|
|
|
baseLibrary = testGroup "Library Tests"
|
|
|
|
|
[ testCase "K combinator 1" $ do
|
|
|
|
|
library <- evaluateFile "./lib/base.tri"
|
|
|
|
|
let input = "k (t) (t t)"
|
|
|
|
|
env = evalTricu library (parseTricu input)
|
|
|
|
|
result env @?= Leaf
|
|
|
|
|
|
|
|
|
|
, testCase "K combinator 2" $ do
|
|
|
|
|
library <- evaluateFile "./lib/base.tri"
|
|
|
|
|
let input = "k (t t) (t)"
|
|
|
|
|
env = evalTricu library (parseTricu input)
|
|
|
|
|
result env @?= Stem Leaf
|
|
|
|
|
|
|
|
|
|
, testCase "K combinator 3" $ do
|
|
|
|
|
library <- evaluateFile "./lib/base.tri"
|
|
|
|
|
let input = "k (t t t) (t)"
|
|
|
|
|
env = evalTricu library (parseTricu input)
|
|
|
|
|
result env @?= Fork Leaf Leaf
|
|
|
|
|
|
|
|
|
|
, testCase "S combinator" $ do
|
|
|
|
|
library <- evaluateFile "./lib/base.tri"
|
|
|
|
|
let input = "s (t) (t) (t)"
|
|
|
|
|
env = evalTricu library (parseTricu input)
|
|
|
|
|
result env @?= Fork Leaf (Stem Leaf)
|
|
|
|
|
|
|
|
|
|
, testCase "SKK == I (fully expanded)" $ do
|
|
|
|
|
library <- evaluateFile "./lib/base.tri"
|
|
|
|
|
let input = "s k k"
|
|
|
|
|
env = evalTricu library (parseTricu input)
|
|
|
|
|
result env @?= Fork (Stem (Stem Leaf)) (Stem Leaf)
|
|
|
|
|
|
|
|
|
|
, testCase "I combinator" $ do
|
|
|
|
|
library <- evaluateFile "./lib/base.tri"
|
|
|
|
|
let input = "i not?"
|
|
|
|
|
env = evalTricu library (parseTricu input)
|
|
|
|
|
result env @?= Fork (Fork (Stem Leaf) (Fork Leaf Leaf)) (Fork Leaf (Fork Leaf Leaf))
|
|
|
|
|
|
|
|
|
|
, testCase "Triage test Leaf" $ do
|
|
|
|
|
library <- evaluateFile "./lib/base.tri"
|
|
|
|
|
providedLibraries :: TestTree
|
|
|
|
|
providedLibraries = testGroup "Library Tests"
|
|
|
|
|
[ testCase "Triage test Leaf" $ do
|
|
|
|
|
library <- evaluateFile "./lib/list.tri"
|
|
|
|
|
let input = "test t"
|
|
|
|
|
env = decodeResult $ result $ evalTricu library (parseTricu input)
|
|
|
|
|
env @?= "\"Leaf\""
|
|
|
|
|
|
|
|
|
|
, testCase "Triage test (Stem Leaf)" $ do
|
|
|
|
|
library <- evaluateFile "./lib/base.tri"
|
|
|
|
|
library <- evaluateFile "./lib/list.tri"
|
|
|
|
|
let input = "test (t t)"
|
|
|
|
|
env = decodeResult $ result $ evalTricu library (parseTricu input)
|
|
|
|
|
env @?= "\"Stem\""
|
|
|
|
|
|
|
|
|
|
, testCase "Triage test (Fork Leaf Leaf)" $ do
|
|
|
|
|
library <- evaluateFile "./lib/base.tri"
|
|
|
|
|
library <- evaluateFile "./lib/list.tri"
|
|
|
|
|
let input = "test (t t t)"
|
|
|
|
|
env = decodeResult $ result $ evalTricu library (parseTricu input)
|
|
|
|
|
env @?= "\"Fork\""
|
|
|
|
|
|
|
|
|
|
, testCase "Boolean NOT: true" $ do
|
|
|
|
|
library <- evaluateFile "./lib/base.tri"
|
|
|
|
|
library <- evaluateFile "./lib/list.tri"
|
|
|
|
|
let input = "not? true"
|
|
|
|
|
env = result $ evalTricu library (parseTricu input)
|
|
|
|
|
env @?= Leaf
|
|
|
|
|
|
|
|
|
|
, testCase "Boolean NOT: false" $ do
|
|
|
|
|
library <- evaluateFile "./lib/base.tri"
|
|
|
|
|
library <- evaluateFile "./lib/list.tri"
|
|
|
|
|
let input = "not? false"
|
|
|
|
|
env = result $ evalTricu library (parseTricu input)
|
|
|
|
|
env @?= Stem Leaf
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
, testCase "Boolean AND TF" $ do
|
|
|
|
|
library <- evaluateFile "./lib/base.tri"
|
|
|
|
|
library <- evaluateFile "./lib/list.tri"
|
|
|
|
|
let input = "and? (t t) (t)"
|
|
|
|
|
env = evalTricu library (parseTricu input)
|
|
|
|
|
result env @?= Leaf
|
|
|
|
|
|
|
|
|
|
, testCase "Boolean AND FT" $ do
|
|
|
|
|
library <- evaluateFile "./lib/base.tri"
|
|
|
|
|
library <- evaluateFile "./lib/list.tri"
|
|
|
|
|
let input = "and? (t) (t t)"
|
|
|
|
|
env = evalTricu library (parseTricu input)
|
|
|
|
|
result env @?= Leaf
|
|
|
|
|
|
|
|
|
|
, testCase "Boolean AND FF" $ do
|
|
|
|
|
library <- evaluateFile "./lib/base.tri"
|
|
|
|
|
library <- evaluateFile "./lib/list.tri"
|
|
|
|
|
let input = "and? (t) (t)"
|
|
|
|
|
env = evalTricu library (parseTricu input)
|
|
|
|
|
result env @?= Leaf
|
|
|
|
|
|
|
|
|
|
, testCase "Boolean AND TT" $ do
|
|
|
|
|
library <- evaluateFile "./lib/base.tri"
|
|
|
|
|
library <- evaluateFile "./lib/list.tri"
|
|
|
|
|
let input = "and? (t t) (t t)"
|
|
|
|
|
env = evalTricu library (parseTricu input)
|
|
|
|
|
result env @?= Stem Leaf
|
|
|
|
|
|
|
|
|
|
, testCase "List head" $ do
|
|
|
|
|
library <- evaluateFile "./lib/base.tri"
|
|
|
|
|
library <- evaluateFile "./lib/list.tri"
|
|
|
|
|
let input = "head [(t) (t t) (t t t)]"
|
|
|
|
|
env = evalTricu library (parseTricu input)
|
|
|
|
|
result env @?= Leaf
|
|
|
|
|
|
|
|
|
|
, testCase "List tail" $ do
|
|
|
|
|
library <- evaluateFile "./lib/base.tri"
|
|
|
|
|
library <- evaluateFile "./lib/list.tri"
|
|
|
|
|
let input = "head (tail (tail [(t) (t t) (t t t)]))"
|
|
|
|
|
env = evalTricu library (parseTricu input)
|
|
|
|
|
result env @?= Fork Leaf Leaf
|
|
|
|
|
|
|
|
|
|
, testCase "List map" $ do
|
|
|
|
|
library <- evaluateFile "./lib/base.tri"
|
|
|
|
|
library <- evaluateFile "./lib/list.tri"
|
|
|
|
|
let input = "head (tail (map (\\a : (t t t)) [(t) (t) (t)]))"
|
|
|
|
|
env = evalTricu library (parseTricu input)
|
|
|
|
|
result env @?= Fork Leaf Leaf
|
|
|
|
|
|
|
|
|
|
, testCase "Empty list check" $ do
|
|
|
|
|
library <- evaluateFile "./lib/base.tri"
|
|
|
|
|
library <- evaluateFile "./lib/list.tri"
|
|
|
|
|
let input = "emptyList? []"
|
|
|
|
|
env = evalTricu library (parseTricu input)
|
|
|
|
|
result env @?= Stem Leaf
|
|
|
|
|
|
|
|
|
|
, testCase "Non-empty list check" $ do
|
|
|
|
|
library <- evaluateFile "./lib/base.tri"
|
|
|
|
|
library <- evaluateFile "./lib/list.tri"
|
|
|
|
|
let input = "not? (emptyList? [(1) (2) (3)])"
|
|
|
|
|
env = evalTricu library (parseTricu input)
|
|
|
|
|
result env @?= Stem Leaf
|
|
|
|
|
|
|
|
|
|
, testCase "Concatenate strings" $ do
|
|
|
|
|
library <- evaluateFile "./lib/base.tri"
|
|
|
|
|
library <- evaluateFile "./lib/list.tri"
|
|
|
|
|
let input = "append \"Hello, \" \"world!\""
|
|
|
|
|
env = decodeResult $ result $ evalTricu library (parseTricu input)
|
|
|
|
|
env @?= "\"Hello, world!\""
|
|
|
|
|
|
|
|
|
|
, testCase "Verifying Equality" $ do
|
|
|
|
|
library <- evaluateFile "./lib/base.tri"
|
|
|
|
|
library <- evaluateFile "./lib/list.tri"
|
|
|
|
|
let input = "equal? (t t t) (t t t)"
|
|
|
|
|
env = evalTricu library (parseTricu input)
|
|
|
|
|
result env @?= Stem Leaf
|
|
|
|
@ -490,12 +454,12 @@ fileEval = testGroup "File evaluation tests"
|
|
|
|
|
res @?= Fork (Stem Leaf) Leaf
|
|
|
|
|
|
|
|
|
|
, testCase "Mapping and Equality" $ do
|
|
|
|
|
library <- liftIO $ evaluateFile "./lib/base.tri"
|
|
|
|
|
library <- liftIO $ evaluateFile "./lib/list.tri"
|
|
|
|
|
fEnv <- liftIO $ evaluateFileWithContext library "./test/map.tri"
|
|
|
|
|
(mainResult fEnv) @?= Stem Leaf
|
|
|
|
|
|
|
|
|
|
, testCase "Eval and decoding string" $ do
|
|
|
|
|
library <- liftIO $ evaluateFile "./lib/base.tri"
|
|
|
|
|
library <- liftIO $ evaluateFile "./lib/list.tri"
|
|
|
|
|
res <- liftIO $ evaluateFileWithContext library "./test/string.tri"
|
|
|
|
|
decodeResult (result res) @?= "\"String test!\""
|
|
|
|
|
]
|
|
|
|
|