[PPL-devel] [GIT] ppl/ppl(master): Improved a few timeout and exception tests.
Enea Zaffanella
zaffanella at cs.unipr.it
Sat May 16 09:19:14 CEST 2009
Module: ppl/ppl
Branch: master
Commit: f62a4633701eda94f86bfd2cb9bced1b10436a6d
URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=f62a4633701eda94f86bfd2cb9bced1b10436a6d
Author: Enea Zaffanella <zaffanella at cs.unipr.it>
Date: Sat May 16 09:16:46 2009 +0200
Improved a few timeout and exception tests.
Make sure an out_of_memory exception is thrown as expected even when a large
amount of memory is available. Do not set timeouts out of catch constructs.
---
interfaces/Prolog/tests/pl_check.pl | 54 +++++++++++++++-------------------
1 files changed, 24 insertions(+), 30 deletions(-)
diff --git a/interfaces/Prolog/tests/pl_check.pl b/interfaces/Prolog/tests/pl_check.pl
index 9a91609..ff16d1b 100644
--- a/interfaces/Prolog/tests/pl_check.pl
+++ b/interfaces/Prolog/tests/pl_check.pl
@@ -1957,38 +1957,37 @@ build_hypercube_constraints(Dim, [V|Vars], [V >= 0, V =< 1|CS]) :-
% Find the dimension and constraints for
% a hypercube that causes a timeout exception.
-compute_timeout_hypercube(T, Dim_in, Dim_out, CS_out) :-
+compute_timeout_hypercube(Hsecs, T, Dim_in, Dim_out, CS_out) :-
Dim_in =< 100,
clean_ppl_new_Polyhedron_from_space_dimension(T, Dim_in, universe, P),
make_vars(Dim_in, Vars),
build_hypercube_constraints(Dim_in, Vars, CS),
ppl_timeout_exception_atom(Time_Out_Atom),
- catch(add_constraints_and_get_minimized_constraints(P, CS),
- Time_Out_Atom, Catch_Exception = ok),
+ catch((ppl_set_timeout(Hsecs),
+ add_constraints_and_get_minimized_constraints(P, CS)),
+ Time_Out_Atom, Catch_Exception = ok),
+ ppl_reset_timeout,
(Catch_Exception == ok ->
Dim_out = Dim_in,
CS_out = CS
;
Dim1 is Dim_in+1,
ppl_delete_Polyhedron(P),
- compute_timeout_hypercube(T, Dim1, Dim_out, CS_out)
+ compute_timeout_hypercube(Hsecs, T, Dim1, Dim_out, CS_out)
).
time_out(T) :-
ppl_set_timeout_exception_atom(pl_time_out),
\+ ppl_timeout_exception_atom(pl_x),
ppl_timeout_exception_atom(pl_time_out),
- ppl_set_timeout(10),
- compute_timeout_hypercube(T, 1, Dim, CS),
+ compute_timeout_hypercube(10, T, 1, Dim, CS),
!,
N1 is 1,
- ppl_reset_timeout,
- ppl_set_timeout_exception_atom(pl_time_out),
- ppl_set_timeout(N1),
- ppl_timeout_exception_atom(Time_Out_Atom),
clean_ppl_new_Polyhedron_from_space_dimension(T, Dim, universe, P),
- catch(add_constraints_and_get_minimized_constraints(P, CS),
- Time_Out_Atom, Catch_Exception = ok),
+ catch((ppl_set_timeout(N1),
+ add_constraints_and_get_minimized_constraints(P, CS)),
+ pl_time_out, Catch_Exception = ok),
+ ppl_reset_timeout,
(Catch_Exception == ok ->
display_message(['while testing time_out, polyhedron with topology',
T, 'timeout after', N1, ms])
@@ -2001,13 +2000,11 @@ time_out(T) :-
!,
ppl_delete_Polyhedron(P),
N2 is 40,
- ppl_reset_timeout,
- ppl_set_timeout_exception_atom(pl_time_out),
- ppl_set_timeout(N2),
- ppl_timeout_exception_atom(Time_Out_Atom1),
clean_ppl_new_Polyhedron_from_space_dimension(T, Dim, universe, Q),
- catch(ppl_Polyhedron_is_universe(Q),
- Time_Out_Atom1, Catch_Exception = not_ok),
+ catch((ppl_set_timeout(N2),
+ ppl_Polyhedron_is_universe(Q)),
+ pl_time_out, Catch_Exception = not_ok),
+ ppl_reset_timeout,
(Catch_Exception == not_ok ->
display_message(['while testing time_out, polyhedron with topology',
T, 'timeout after', N2, ms]),
@@ -2446,23 +2443,21 @@ exception_prolog1(N, V) :-
%% TEST: Prolog_unsigned_out_of_range.
%% This test accepts any one of three exceptions:
-%% ppl_invalid_argument: with a 32 bit system, the number 1 << 34 is expected
+%% ppl_invalid_argument: with a 32 bit system, the number 1 << 59 is expected
%% to throw this Prolog exception;
-%% out_of_memory: with a 64 bit system, the number 1 << 34 does not
-%% throw an exception on the Prolog side, but, with
-%% unbounded integers, the large number of dimensions
-%% will throw a bad_alloc exception in C++;
-%% ppl_overflow_error: with bounded integers, when the number is too large,
-%% an overflow exception may be thrown.
+%% out_of_memory: with a 64 bit system, the number 1 << 59 does not
+%% throw an exception on the Prolog side, but the
+%% large number of dimensions will cause a bad_alloc
+%% exception in C++.
%%
exception_prolog(1, _) :-
pl_check_prolog_flag(bounded, Y),
(Y == true ->
true
;
- (I is 1 << 34,
- must_catch(ppl_new_C_Polyhedron_from_generators([point('$VAR'(I))], _),
- prolog_exception_error)
+ (I is 1 << 59,
+ must_catch(ppl_new_C_Polyhedron_from_generators([point('$VAR'(I))], _),
+ prolog_exception_error)
)
).
@@ -2479,8 +2474,7 @@ exception_prolog(2, _) :-
%% TEST: not_unsigned_integer
exception_prolog(3, _) :-
- must_catch(ppl_set_timeout(-1), ppl_invalid_argument).
-
+ must_catch(ppl_set_timeout(-1), ppl_invalid_argument).
%% TEST: not_unsigned_integer
exception_prolog(4, _) :-
More information about the PPL-devel
mailing list