From d996cf6c47fdea2409dfb2e94430b0d080b8e8ae Mon Sep 17 00:00:00 2001 From: acondolu Date: Mon, 24 Jul 2017 14:44:47 +0200 Subject: [PATCH] Added very simple generator of tests with bombs/pacmans, run it with --with-pac --- ocaml/test.ml | 57 ++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 47 insertions(+), 10 deletions(-) diff --git a/ocaml/test.ml b/ocaml/test.ml index 3b6d904..32d60aa 100644 --- a/ocaml/test.ml +++ b/ocaml/test.ml @@ -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 ----" ;; -- 2.39.2