ocaml/otherlibs/num/test/test.ml

78 lines
1.8 KiB
OCaml

open Printf;;
let flush_all () = flush stdout; flush stderr;;
let message s = print_string s; print_newline ();;
let error_occurred = ref false;;
let immediate_failure = ref true;;
let error () =
if !immediate_failure then exit 2 else begin
error_occurred := true; flush_all (); false
end;;
let success () = flush_all (); true;;
let function_tested = ref "";;
let testing_function s =
flush_all ();
function_tested := s;
print_newline();
message s;;
let test test_number eq_fun (answer, correct_answer) =
flush_all ();
if not (eq_fun answer correct_answer) then begin
fprintf stderr ">>> Bad result (%s, test %d)\n" !function_tested test_number;
error ()
end else begin
printf " %d..." test_number;
success ()
end;;
let failure_test test_number fun_to_test arg =
flush_all ();
try
fun_to_test arg;
fprintf stderr ">>> Failure expected (%s, test %d)\n"
!function_tested test_number;
error ()
with _ ->
printf " %d..." test_number;
success ();;
let failwith_test test_number fun_to_test arg correct_failure =
flush_all ();
try
fun_to_test arg;
fprintf stderr ">>> Failure expected (%s, test %d)\n"
!function_tested test_number;
error ()
with x ->
if x = correct_failure then begin
printf " %d..." test_number;
success ()
end else begin
fprintf stderr ">>> Bad failure (%s, test %d)\n"
!function_tested test_number;
error ()
end;;
let end_tests () =
flush_all ();
print_newline ();
if !error_occurred then begin
prerr_endline "************* TESTS FAILED ****************"; exit 2
end else begin
prerr_endline "************* TESTS COMPLETED SUCCESSFULLY ****************";
exit 0
end;;
let eq = (==);;
let eq_int = (==);;
let eq_string = (=);;
let sixtyfour = (1 lsl 31) <> 0;;