OSDN Git Service

Implement --use-network option parser
[happyabc/happyabc.git] / driver / ruleTest.ml
1 open OUnit
2 open Base
3 open Rule
4
5
6 let rules = [
7   one_to_one "c" "o"
8     (fun ctx input output ->
9        assert_equal 42 ctx;
10        [Printf.sprintf "gcc -c -o%s %s" output input]);
11   one_to_one "c" "s"
12     (fun ctx input output ->
13        assert_equal 42 ctx;
14        (* this option is not correct *)
15        [Printf.sprintf "gcc -s -o%s %s" output input]);
16   many_to_one ["o"] "exe"
17     (fun ctx inputs output ->
18        assert_equal 42 ctx;
19        [Printf.sprintf "gcc -o%s %s" output @@ String.concat " " inputs]);
20   many_to_one ["o"] "o"
21     (fun ctx inputs output ->
22        assert_equal 42 ctx;
23        [Printf.sprintf "gcc -o%s %s" output @@ String.concat " " inputs]);
24   many_to_one ["o"; "c"] "o"
25     (fun ctx inputs output ->
26        assert_equal 42 ctx;
27        [Printf.sprintf "gcc -o%s %s" output @@ String.concat " " inputs])
28 ]
29
30 let cmds =
31   commands 42 rules
32
33 let temp =
34   temp_files 42 rules
35
36 let tests =
37   ("rule.ml" >::: [
38      "If nodes is direct connected, return it" >::
39        (fun _ ->
40           assert_equal ["gcc -s -ofoo.s foo.c"] @@
41             cmds ["foo.c"] "foo.s");
42      "If two routes exits, choice shorter one." >::
43        (fun _ ->
44           assert_equal ["gcc -c -ofoo.o foo.c"] @@
45             cmds ["foo.c"] "foo.o");
46      "If nodes is not direct connected, return the routes" >::
47        (fun _ ->
48           assert_equal
49             ["gcc -c -ofoo.o foo.c";
50              "gcc -ofoo.exe foo.o"] @@
51             cmds ["foo.c"] "foo.exe");
52
53      "If commands generate tmp files, return it" >::
54        (fun _ ->
55           assert_equal [] @@ temp ["foo.c"] "foo.o";
56           assert_equal ["foo.o"] @@ temp ["foo.c"] "foo.exe");
57      "contain loop" >::
58        (fun _ ->
59           assert_equal ~printer:Std.dump ["gcc -ofoo.o foo.o bar.o"] @@ cmds ["foo.o"; "bar.o"] "foo.o";
60           assert_equal ~printer:Std.dump ["gcc -ofoo.o foo.o bar.c"] @@ cmds ["foo.o"; "bar.c"] "foo.o")
61 ]) +> run_test_tt_main