Add more unit tests for Virtual Machine #4

This commit is contained in:
2021-11-10 23:04:53 +01:00
parent f84e10a019
commit bc4350205e

View File

@@ -716,7 +716,7 @@ spec = do
actual `shouldBe` expected
describe "ld" $ do
it "should lift the function argument to the stack top" $ do
it "lifts the function argument to the stack top" $ do
let input = " push 14 \n\
\ call &f \n\
\ nop \n\
@@ -725,7 +725,7 @@ spec = do
let expected = done [14, 4, -1, 14] 7 1
actual <- run input
actual `shouldBe` expected
it "should lift multiple function arguments to the stack top" $ do
it "lifts multiple function arguments to the stack top" $ do
let input = " push 14 \n\
\ push 11 \n\
\ push 4 \n\
@@ -824,4 +824,39 @@ spec = do
\ ret "
let expected = done [25] 8 (-1)
actual <- run input
actual `shouldBe` expected
actual `shouldBe` expected
describe "examples" $ do
it "example #1" $ do
let input = " main: push 2 \n\
\ push 3 \n\
\ call &prd \n\
\ clr 2 \n\
\ push 5 \n\
\ call &sum \n\
\ clr 2 \n\
\ halt \n\
\ \n\
\ sum: ld 0 \n\
\ ld 1 \n\
\ add \n\
\ ret \n\
\ \n\
\ prd: ld 0 \n\
\ ld 1 \n\
\ mul \n\
\ ret "
let expected = done [2*3+5] 14 (-01)
actual <- run input
actual `shouldBe` expected
it "example #2" $ do
let input = " main: push 100 \n\
\ loop: push 1 \n\
\ sub \n\
\ dup \n\
\ jne &loop \n\
\ halt "
let expected = done [0] 8 (-1)
actual <- run input
actual `shouldBe` expected