X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=ocaml%2Ftest.ml;h=629bf894ac082d9dfe564b0a31c349c3e7e6b812;hb=632f83a9f7fbf8a09e323314dde76189692d6f07;hp=f5bf55a50280c7ac20c3048761d8f0e9bc984065;hpb=0991fc5486c3158fc361e84cbba5aefa67893ba4;p=fireball-separation.git diff --git a/ocaml/test.ml b/ocaml/test.ml index f5bf55a..629bf89 100644 --- a/ocaml/test.ml +++ b/ocaml/test.ml @@ -1,4 +1,5 @@ open Lambda4;; +open Util;; let acaso l = let n = Random.int (List.length l) in @@ -11,24 +12,24 @@ let acaso2 l1 l2 = if n >= n1 then List.nth l2 (n - n1) else List.nth l1 n ;; -let rec take l 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 | [] -> [] | x::xs -> x :: (take xs (n-1)) -;; - -let test3 n vars = - let rec aux n inerts lams = - if n = 0 then take (Util.sort_uniq inerts) 5 - else let inerts, lams = if Random.int 2 = 0 - then inerts, ("(" ^ acaso vars ^ ". " ^ acaso2 inerts lams ^ ")") :: lams - else ("(" ^ acaso inerts ^ " " ^ acaso2 inerts lams^ ")") :: inerts, lams - in aux (n-1) inerts lams - in aux (2*n) vars [] -;; +;; *) -let test4 n vars = +let gen n vars = let rec take' l n = if n = 0 then [], [] else match l with @@ -44,45 +45,65 @@ let test4 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 ***************************"; + prerr_endline "\n########################### NEW TEST ###########################"; f () ; if n > 0 then repeat f (n-1) ;; -(* let call_main3 tms = - let _ = ( - List.iter prerr_endline tms; prerr_newline (); - ) in Lambda3.main [Lambda3.magic tms ["*"]] -;; *) -let call_main4 div convs nums = - let _ = ( - (match div with Some div -> prerr_endline ("DIV: " ^ div) | None -> ()); - print_endline "CONV:"; List.iter prerr_endline convs; - print_endline "NUMS:"; List.iter prerr_endline nums; - prerr_newline (); - ) in Lambda4.solve (Lambda4.problem_of div convs nums) +let solve div convs nums label = + let p = String.concat "\n" ( + ("$! randomly generated test " ^ label) :: + ("D " ^ div) :: + List.map ((^) "C ") convs @ + List.map (fun s -> "N " ^ s ^ " Z") nums + ) in + prerr_endline p; + match (Lambda4.solve ++ Lambda4.problem_of ++ Parser.problem_of_string) p with + | `Uncomplete, `Unseparable _ -> + failwith ("Test4.solve: unseparable, and cannot tell if that's right or not.") + | _ -> () ;; 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 open Parser in *) + let label, f = if with_pac + then ( + let complex = 10 in + let vars = ["x"; "y"; "z"; "v" ; "w"; "a"; "b"; "c"] in + "with pacmans & bombs", 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 - (* if three then repeat (fun _ -> - let tms = test3 complex vars in - call_main3 tms - ) num - else *) - repeat (fun _ -> - let div, (conv, nums) = test4 complex vars in - call_main4 (Some div) conv nums - ) num - ; + repeat (fun _ -> + let div, (conv, nums) = f () in + solve div conv nums label + ) num; - prerr_endline "\n---- ALL TESTS COMPLETED ----" + prerr_endline "\n---- ALL TESTS COMPLETED ----" ;;