Advertisement
Guest User

PROC Test

a guest
Feb 28th, 2020
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 6.61 KB | None | 0 0
  1. open OUnit2
  2. open Proc.Ds
  3. open Proc.Interp
  4.  
  5. (* A few test cases *)
  6. let tests_let = [
  7.   "int"  >:: (fun _ -> assert_equal (Ok (NumVal 22)) (interp "22"));
  8.   "add"  >:: (fun _ -> assert_equal (Ok (NumVal 22)) (interp "11+11"));
  9.   "adds" >:: (fun _ -> assert_equal (Ok (NumVal 22)) (interp "(10+1)+(5+6)"));
  10.   "let"  >:: (fun _ -> assert_equal (Ok (NumVal 22)) (interp "let x=22 in x"));
  11.   "lets" >:: (fun _ -> assert_equal (Ok (NumVal 22))
  12.                  (interp "let x = 0 in let x = 22 in x"));
  13.     "add"  >:: (fun _ -> assert_equal
  14.                    (*                 ~printer:string_of_expval *)
  15.                  (Ok (NumVal 22))
  16.                  (interp "11+11"));
  17.  
  18.   "adds" >:: (fun _ -> assert_equal
  19.                  (Ok (NumVal 22))
  20.                  (interp "(10+1)+(5+6)"));
  21.  
  22.   "subs" >:: (fun _ -> assert_equal
  23.                  (Ok (NumVal 20))
  24.                  (interp "(10-1)+(5+6)"));
  25.  
  26.   "mults" >:: (fun _ -> assert_equal
  27.                  (Ok (NumVal 21))
  28.                  (interp "(10*1)+(5+6)"));
  29.  
  30.   "divs" >:: (fun _ -> assert_equal
  31.                  (Ok (NumVal 16))
  32.                  (interp "(10/2)+(5+6)"));
  33.  
  34.   "let"  >:: (fun _ -> assert_equal
  35.                  (Ok (NumVal 44))
  36.                  (interp "let x=22 in x+x"));
  37.  
  38.   "lets" >:: (fun _ -> assert_equal
  39.                  (Ok (NumVal 22))
  40.                  (interp "let x = 0 in let x = 22 in (x+x)/2"));
  41. ]
  42.  
  43.  
  44. let tests_proc = [
  45.   "int"  >:: (fun _ -> assert_equal (Ok (NumVal 3))
  46.                  (interp "(proc (x) { x+1 } 2)"))
  47. ]
  48.  
  49.  
  50. let tests_extensions = [
  51.   "abs_0"  >:: (fun _ -> assert_equal
  52.                  (Ok (NumVal 0))
  53.                  (interp "abs(0)"));
  54.  
  55.   "abs_pos"  >:: (fun _ -> assert_equal
  56.                  (Ok (NumVal 22))
  57.                  (interp "abs(22)"));
  58.  
  59.   "abs_neg"  >:: (fun _ -> assert_equal
  60.                  (Ok (NumVal 22))
  61.                  (interp "abs((-22))"));
  62.  
  63.   "emptylist" >:: (fun _ -> assert_equal
  64.                  (Ok (ListVal []))
  65.                  (interp "emptylist"));
  66.  
  67.   "cons_singleton" >:: (fun _ -> assert_equal                
  68.                  (Ok (ListVal [NumVal 1]))
  69.                  (interp "cons(1, emptylist)"));
  70.  
  71.   "cons_list" >:: (fun _ -> assert_equal                
  72.                  (Ok (ListVal [NumVal 3; NumVal 2; NumVal 1]))
  73.                  (interp "cons(3, cons(2, cons(1, emptylist)))"));
  74.  
  75.   "cons_not_list" >:: (fun _ -> assert_equal
  76.                  (Error ("Expected a list!"))
  77.                  (interp "cons(1, 2)"));
  78.  
  79.   "hd_singleton" >:: (fun _ -> assert_equal                
  80.                  (Ok (NumVal 1))
  81.                  (interp "hd(cons(1, emptylist))"));
  82.  
  83.   "hd_list" >:: (fun _ -> assert_equal              
  84.                  (Ok (NumVal 3))
  85.                  (interp "hd(cons(3, cons(2, cons(1, emptylist))))"));
  86.  
  87.   "hd_not_list" >:: (fun _ -> assert_equal
  88.                  (Error ("Expected a list!"))
  89.                  (interp "hd(1)"));
  90.  
  91.   "tl_singleton" >:: (fun _ -> assert_equal                
  92.                  (Ok (ListVal []))
  93.                  (interp "tl(cons(1, emptylist))"));
  94.  
  95.   "tl_list1" >:: (fun _ -> assert_equal                
  96.                  (Ok (ListVal [NumVal 1]))
  97.                  (interp "tl(cons(3, cons(1, emptylist)))"));
  98.  
  99.   "tl_list1" >:: (fun _ -> assert_equal                
  100.                  (Ok (ListVal [NumVal 2; NumVal 1]))
  101.                  (interp "tl(cons(3, cons(2, cons(1, emptylist))))"));
  102.  
  103.   "tl_not_list" >:: (fun _ -> assert_equal
  104.                  (Error ("Expected a list!"))
  105.                  (interp "tl(1)"));
  106.  
  107.   "tl_empty" >:: (fun _ -> assert_equal
  108.                  (Error ("Cannot get tail of empty list!"))
  109.                  (interp "tl(emptylist)"));
  110.  
  111.   "null_true" >:: (fun _ -> assert_equal                
  112.                  (Ok (BoolVal true))
  113.                  (interp "empty?(tl(cons(1, emptylist)))"));
  114.  
  115.   "null_false" >:: (fun _ -> assert_equal              
  116.                  (Ok (BoolVal false))
  117.                  (interp "empty?(tl(cons(2, cons(1, emptylist))))"));
  118.    
  119.     "empty_tree" >:: (fun _ -> assert_equal
  120.                 (Ok (TreeVal Empty))
  121.                 (interp "emptytree"));
  122.    
  123.     "int_tree" >:: (fun _ -> assert_equal
  124.                 (Ok (TreeVal
  125.                     (Node (NumVal 5,
  126.                         Node (NumVal 6, Empty, Empty),
  127.                         Empty)
  128.                     )
  129.                 ))
  130.                 (interp "node(5, node(6, emptytree, emptytree), emptytree)"));
  131.    
  132.     "case_empty_tree" >:: (fun _ -> assert_equal
  133.                 (Ok (TreeVal Empty))
  134.                 (interp "caseT emptytree of {
  135.                    emptytree -> emptytree,
  136.                    node(a,l,r) -> l
  137.                }"));
  138.    
  139.     "case_int_tree" >:: (fun _ -> assert_equal
  140.                 (Ok (NumVal 1))
  141.                 (interp "let t =
  142.                node(
  143.                    2,
  144.                    node(4, emptytree, emptytree),
  145.                    node(0,
  146.                        node(6, emptytree, emptytree),
  147.                        emptytree
  148.                    )
  149.                ) in caseT t of {
  150.                    emptytree -> 0,
  151.                    node(a,l,r) ->
  152.                        if zero?(a)
  153.                        then 1
  154.                        else caseT r of {
  155.                            emptytree -> 0,
  156.                            node(b,ll,rr) ->
  157.                                if zero?(b)
  158.                                then 1
  159.                                else 0
  160.                        }
  161.                }"));
  162.    
  163.     "case_list_tree" >:: (fun _ -> assert_equal
  164.                 (Ok (NumVal 99))
  165.                 (interp "let t = node(emptylist, node(cons(5, cons(2, cons(1, emptylist ))),emptytree,node(emptylist,emptytree,emptytree)),node(tl(cons(5, emptylist)),node(cons(10, cons(9, cons(8, emptylist))),emptytree,emptytree),node(emptylist,node(cons(9, emptylist),emptytree,emptytree),emptytree)))
  166.                in caseT t of {
  167.                    emptytree -> 10,
  168.                    node(a,l,r) ->
  169.                        if empty?(a)
  170.                        then caseT l of {
  171.                            emptytree -> 21,
  172.                            node(b,ll,rr) -> if empty?(b)
  173.                                            then 4
  174.                                            else if zero?(hd(b))
  175.                                                then 22
  176.                                                else 99
  177.                        }
  178.                        else 5
  179.                }");
  180.     );
  181. ]
  182.  
  183. let _ = run_test_tt_main ("suite" >::: (tests_let @ tests_proc @ tests_extensions))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement