diff --git a/generator/tests/calc.js b/generator/tests/calc.js deleted file mode 100644 index fe530f1bd830ff71f0401befd03abceddcb123a5..0000000000000000000000000000000000000000 --- a/generator/tests/calc.js +++ /dev/null @@ -1,61 +0,0 @@ -Stack = { - -var is_empty = function (s) { - return s === Nil; -}; - -var push = function (x, stack) { - return {type: "Cons", value: x, stack: stack}; -}; - -var pop = function (stack) { - return (function () { - switch (stack.type) { - case "Cons": var x = stack.value, xs = stack.stack; - return x; - case "Nil": - return stuck("Empty list"); - } - }()); -}; - -} -var eval_ = function (expr) { - return (function () { - switch (expr.type) { - case "Const": var n = expr.value; - return n; - case "Add": var ls = expr.left, rs = expr.right; - return eval_(ls) + eval_(rs); - case "Sub": var ls = expr.left, rs = expr.right; - return eval_(ls) - eval_(rs); - case "Mul": var ls = expr.left, rs = expr.right; - return eval_(ls) * eval_(rs); - case "Div": var ls = expr.left, rs = expr.right; - return eval_(ls) / eval_(rs); - } - }()); -}; - -var print_expr = function (expr) { - return (function () { - switch (expr.type) { - case "Const": var n = expr.value; - return to_string(n); - case "Add": var ls = expr.left, rs = expr.right; - return "(" + print_expr(ls) + ")" + " + " + print_expr(rs); - case "Sub": var ls = expr.left, rs = expr.right; - return "(" + print_expr(ls) + ")" + " - " + print_expr(rs); - case "Mul": var ls = expr.left, rs = expr.right; - return "(" + print_expr(ls) + ")" + " * " + print_expr(rs); - case "Div": var ls = expr.left, rs = expr.right; - return "(" + print_expr(ls) + ")" + " / " + print_expr(rs); - } - }()); -}; - -var f = (function () { - var source = parse("((1972 / 29) / 2) + 8"); - - return print(print_expr(source) + " = " + to_string(eval_(source))); -}()); diff --git a/generator/tests/calc.ml b/generator/tests/calc.ml index 7469ddde2f0744668e1a018b07120417e81ed1d8..25425e7f701733fa92f5fc08a0fd315cd7191189 100644 --- a/generator/tests/calc.ml +++ b/generator/tests/calc.ml @@ -22,5 +22,6 @@ let rec print_expr expr = match expr with | Div (ls, rs) -> "(" + (print_expr ls) + ")" + " / " + (print_expr rs) let f = + let rec bli = Stack.C(1, Stack.N) in let source = parse "((1972 / 29) / 2) + 8" in print ((print_expr source) + " = " + to_string (eval_ source)) diff --git a/generator/tests/mylist.ml b/generator/tests/mylist.ml index 7f1277b551ec72d76cd53aa65de7ad842e668ea6..3d07348ad3ca4ef81875f58a67d83e70c01bc789 100644 --- a/generator/tests/mylist.ml +++ b/generator/tests/mylist.ml @@ -32,10 +32,11 @@ let rec fold_right f l acc = match l with let rev_map f l = fold_left (fun acc x -> Cons(f x, acc)) Nil l let map f l = fold_right (fun acc x -> Cons(f x, acc)) l Nil +let rev l = fold_left (fun acc x -> Cons(x, acc)) Nil l let length l = fold_left (fun acc x -> incr acc) 0 l -let rec range i j acc = if le i j then range (incr i) j (Cons (i, acc)) else acc +let rec range i j acc = if i <= j then range (incr i) j (Cons (i, acc)) else acc (* Test *) @@ -43,11 +44,18 @@ let list0 = Nil let list1 = range 0 1 Nil let list2 = range 1 5 Nil -let sqr x = mul x x;; - -length list0;; -length list1;; -length list2;; -map sqr list0;; -map sqr list1;; -map sqr list2;; +let sqr x = mul x x + +let print_list l = + let rec aux acc l = match l with + | Nil -> acc + | Cons (x, xs) -> print xs; if xs === Nil then aux (x + acc) xs else aux (x + "," + acc) xs + in "[" + aux "" (rev l) + "]" +;; +let f = 1 in + print (length list0); + print (length list1); + print (length list2); + print (print_list (map sqr list0)); + print (print_list (map sqr list1)); + print (print_list (map sqr list2)); diff --git a/generator/tests/stack.ml b/generator/tests/stack.ml index 8c59fca3b9adcb089547fc2c73ca84bebbfd8c3e..832a69f131a56b682bb47fc08daea4303f1ad587 100644 --- a/generator/tests/stack.ml +++ b/generator/tests/stack.ml @@ -1,13 +1,17 @@ -type 'a stack = - | Nil - | Cons [@f value, stack] of 'a * 'a stack +type stack = + | C [@f value, stack] of int * stack + | K [@f value, stack] of int * stack + | N [@f] + | B [@f] -let is_empty s = s === Nil +let is_empty s = s === N -let push x stack = Cons(x, stack) +let push x stack = C(x, stack) let pop stack = match stack with - | Cons (x, xs) -> x - | Nil -> stuck "Empty list" + | C (x, xs) -> x + | K (x, xs) -> x + | B -> stuck "Empty list" + | N -> stuck "Empty list"