hw2: init

This commit is contained in:
2026-02-21 21:09:49 -08:00
parent 10451c7cdd
commit 4cda0266e1
5 changed files with 420 additions and 0 deletions

36
hw2/hs/test.hs Normal file
View File

@@ -0,0 +1,36 @@
import WhileInterp
-- Here are a few tests that you can use to check your implementation.
w_test = (Sequence (Assign "X" (Op Plus (Op Minus (Op Plus (Val (IntVal 1)) (Val (IntVal 2))) (Val (IntVal 3))) (Op Plus (Val (IntVal 1)) (Val (IntVal 3))))) (Sequence (Assign "Y" (Val (IntVal 0))) (While (Op Gt (Var "X") (Val (IntVal 0))) (Sequence (Assign "Y" (Op Plus (Var "Y") (Var "X"))) (Assign "X" (Op Minus (Var "X") (Val (IntVal 1))))))))
w_fact = (Sequence (Assign "N" (Val (IntVal 2))) (Sequence (Assign "F" (Val (IntVal 1))) (While (Op Gt (Var "N") (Val (IntVal 0))) (Sequence (Assign "X" (Var "N")) (Sequence (Assign "Z" (Var "F")) (Sequence (While (Op Gt (Var "X") (Val (IntVal 1))) (Sequence (Assign "F" (Op Plus (Var "Z") (Var "F"))) (Assign "X" (Op Minus (Var "X") (Val (IntVal 1)))))) (Assign "N" (Op Minus (Var "N") (Val (IntVal 1))))))))))
testUnit :: IO ()
testUnit = do
-- Should be: (IntVal 1,fromList [])
putStrLn $ show $ WhileInterp.run (Val (IntVal 1))
-- Should be: (BoolVal True,fromList [("X",BoolVal True)])
putStrLn $ show $ WhileInterp.run (Assign "X" (Val (BoolVal True)))
-- Should be: (IntVal 2,fromList [])
putStrLn $ show $ WhileInterp.run (Sequence (Val (IntVal 1)) (Val (IntVal 2)))
-- Should be: (IntVal 11,fromList [])
putStrLn $ show $ WhileInterp.run (Op Plus (Val (IntVal 9)) (Val (IntVal 2)))
-- Should be: (IntVal 1,fromList [])
putStrLn $ show $ WhileInterp.run (If (Val (BoolVal True)) (Val (IntVal 1)) (Val (IntVal 2)))
-- Should be: (IntVal 2,fromList [])
putStrLn $ show $ WhileInterp.run (If (Val (BoolVal False)) (Val (IntVal 1)) (Val (IntVal 2)))
-- Should be: (BoolVal False,fromList [])
putStrLn $ show $ WhileInterp.run (While (Val (BoolVal False)) (Val (IntVal 42)))
-- Should be: (IntVal 666,fromList [("X",IntVal 666)])
putStrLn $ show $ WhileInterp.run (Sequence
(Assign "X" (Val (IntVal 666)))
(Var "X"))
main :: IO ()
main = do
testUnit
-- Should be: fromList [("X",IntVal 0),("Y",IntVal 10)]
putStrLn $ show $ WhileInterp.testProgram w_test
-- Should be: fromList [("F",IntVal 2),("N",IntVal 0),("X",IntVal 1),("Z",IntVal 2)]
putStrLn $ show $ WhileInterp.testProgram w_fact