]> matita.cs.unibo.it Git - fireball-separation.git/commitdiff
Added very simple generator of tests with bombs/pacmans, run it with --with-pac
authoracondolu <andrea.condoluci@unibo.it>
Mon, 24 Jul 2017 12:44:47 +0000 (14:44 +0200)
committeracondolu <andrea.condoluci@unibo.it>
Mon, 24 Jul 2017 12:44:47 +0000 (14:44 +0200)
ocaml/test.ml

index 3b6d904fd1f231db2f585f3fbdaedd3810d216e2..32d60aa62c054c28579858b1666e9f5962ab3b4c 100644 (file)
@@ -12,6 +12,16 @@ let acaso2 l1 l2 =
   if n >= n1 then List.nth l2 (n - n1) else List.nth l1 n
 ;;
 
+(** with bombs and pacmans too *)
+let acaso3 l1 l2 =
+ if Random.int 10 = 0 then (
+  if Random.int 2 = 0 then "BOMB" else "PAC"
+ ) else
+  let n1 = List.length l1 in
+  let n = Random.int (n1 + List.length l2) in
+  if n >= n1 then List.nth l2 (n - n1) else List.nth l1 n
+;;
+
 (* let rec take l n =
   if n = 0 then []
   else match l with
@@ -35,6 +45,22 @@ let gen n vars =
   in aux (2*n) vars []
 ;;
 
+let gen_pac n vars =
+ let rec take' l n =
+  if n = 0 then [], []
+  else match l with
+  | [] -> [], []
+  | [_] -> assert false
+  | x1::x2::xs -> let a, b = take' xs (n-1) in x1::a,x2::b in
+ let rec aux n inerts lams =
+  if n = 0 then List.hd inerts, take' (Util.sort_uniq (List.tl inerts)) 5
+  else let inerts, lams = if Random.int 2 = 0
+    then inerts, ("(" ^ acaso vars ^ ". " ^ acaso3 inerts lams ^ ")") :: lams
+    else ("(" ^ acaso inerts ^ " " ^ acaso3 inerts lams^ ")") :: inerts, lams
+  in aux (n-1) inerts lams
+ in aux (2*n) vars []
+;;
+
 
 let rec repeat f n =
   prerr_endline "\n########################### NEW TEST ###########################";
@@ -54,16 +80,27 @@ let solve div convs nums =
 ;;
 
 let main =
-  Random.self_init ();
-  let num = 100 in
-  let complex = 200 in
-  let vars = ["x"; "y"; "z"; "v" ; "w"; "a"; "b"; "c"] in
+ Random.self_init ();
+ (* num = number of tests to run *)
+ let num = 100 in
+ (* if flag --with-pac active, then more general tests *)
+ let with_pac = List.mem "--with-pac" (Array.to_list Sys.argv) in
+
+ let f = if with_pac
+  then (
+   let complex = 10 in
+   let vars = ["x"; "y"; "z"; "v" ; "w"; "a"; "b"; "c"] in
+   fun () -> gen_pac complex vars
+  ) else (
+   let complex = 200 in
+   let vars = ["x"; "y"; "z"; "v" ; "w"; "a"; "b"; "c"] in
+   fun () -> gen complex vars
+   ) in
 
-  repeat (fun _ ->
-    let div, (conv, nums) = gen complex vars in
-    solve div conv nums
-  ) num
-  ;
+ repeat (fun _ ->
+   let div, (conv, nums) = f () in
+   solve div conv nums
+ ) num;
 
 prerr_endline "\n---- ALL TESTS COMPLETED ----"
+ prerr_endline "\n---- ALL TESTS COMPLETED ----"
 ;;