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" $ [ add ] evalsTo :: List Val -> List Block -> Assertion evalsTo rs bs = Sut.eval (MkProgram bs) @?= rs add = testCase "lit int" do evalsTo [ValLit (LitInt 3)] [ MkBlock "main" [] [ PopCont "ktail" , CallReg "ktail" [ValLit (LitInt 3)] ]]