39 lines
830 B
Haskell
39 lines
830 B
Haskell
module Gyehoek.Test.Stack.VM (root) where
|
|
|
|
import Test.Tasty (TestTree, testGroup)
|
|
import Test.Tasty.HUnit
|
|
import Gyehoek.Stack.Syntax
|
|
import Gyehoek.Stack.VM qualified as Sut
|
|
import Data.List (List)
|
|
import Control.Lens
|
|
import Data.Generics.Labels
|
|
|
|
|
|
root :: IO TestTree
|
|
root = pure . testGroup "stack machine" $
|
|
[ lit_int
|
|
, arith
|
|
]
|
|
|
|
|
|
|
|
evalsTo :: List Val -> List Block -> Assertion
|
|
evalsTo rs bs = Sut.eval (MkProgram bs) @?= rs
|
|
|
|
|
|
|
|
lit_int = testCase "lit int" do
|
|
evalsTo [ValLit (LitInt 3)]
|
|
[ MkBlock "main" []
|
|
[ PopCont "ktail"
|
|
, CallReg "ktail" [ValLit (LitInt 3)]
|
|
]]
|
|
|
|
arith = testCase "arith" do
|
|
evalsTo [ValLit (LitInt 12)]
|
|
[ MkBlock "main" []
|
|
[ PopCont "ktail"
|
|
, Prim "x1" (PrimAdd (ValLit $ LitInt 3) (ValLit $ LitInt 4))
|
|
, CallReg "ktail" [ValReg "x1"]
|
|
]]
|