Add more unit tests for Virtual Machine #4
This commit is contained in:
@@ -716,7 +716,7 @@ spec = do
|
|||||||
actual `shouldBe` expected
|
actual `shouldBe` expected
|
||||||
|
|
||||||
describe "ld" $ do
|
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\
|
let input = " push 14 \n\
|
||||||
\ call &f \n\
|
\ call &f \n\
|
||||||
\ nop \n\
|
\ nop \n\
|
||||||
@@ -725,7 +725,7 @@ spec = do
|
|||||||
let expected = done [14, 4, -1, 14] 7 1
|
let expected = done [14, 4, -1, 14] 7 1
|
||||||
actual <- run input
|
actual <- run input
|
||||||
actual `shouldBe` expected
|
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\
|
let input = " push 14 \n\
|
||||||
\ push 11 \n\
|
\ push 11 \n\
|
||||||
\ push 4 \n\
|
\ push 4 \n\
|
||||||
@@ -824,4 +824,39 @@ spec = do
|
|||||||
\ ret "
|
\ ret "
|
||||||
let expected = done [25] 8 (-1)
|
let expected = done [25] 8 (-1)
|
||||||
actual <- run input
|
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
|
||||||
Reference in New Issue
Block a user