diff --git a/assembler/test/dune b/assembler/test/dune new file mode 100644 index 0000000..ac39ea9 --- /dev/null +++ b/assembler/test/dune @@ -0,0 +1,3 @@ +(tests + (names test_hack) + (libraries hack ounit2)) diff --git a/assembler/test/test_hack.ml b/assembler/test/test_hack.ml new file mode 100644 index 0000000..6ff60d7 --- /dev/null +++ b/assembler/test/test_hack.ml @@ -0,0 +1,27 @@ +open OUnit2 +open Hack.Ast +open Hack.Translate + +let peq case value = assert_equal value (parse case) +let test_parse_g_instr _ = peq "(LOOP)" (Ginstr "LOOP") + +let test_parse_a_instr _ = + peq "@100" (Aconst 100); + peq "@ABC" (Ainstr "ABC") +;; + +let test_parse_c_instr _ = + peq "M-D" (Cinstr ("", "M-D", "")); + peq "0;JMP" (Cinstr ("", "0", "JMP")); + peq "D=A+1" (Cinstr ("D", "A+1", "")) +;; + +let suite = + "suite" + >::: [ "G Instruction" >:: test_parse_g_instr + ; "A Instruction" >:: test_parse_a_instr + ; "C Instruction" >:: test_parse_c_instr + ] +;; + +let () = run_test_tt_main suite