[GIT] ppl/ppl(master): Added a test for deterministic timeouts in the C language interface.

Module: ppl/ppl Branch: master Commit: 42c630cd1c01b837e94a1285dcde2f3f23a1b4b4 URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=42c630cd1c01b...
Author: Enea Zaffanella zaffanella@cs.unipr.it Date: Sun Jul 12 18:58:15 2009 +0200
Added a test for deterministic timeouts in the C language interface.
---
interfaces/C/tests/Makefile.am | 19 +++++-- interfaces/C/tests/weightwatch1.c | 102 +++++++++++++++++++++++++++++++++++++ 2 files changed, 116 insertions(+), 5 deletions(-)
diff --git a/interfaces/C/tests/Makefile.am b/interfaces/C/tests/Makefile.am index 6e53a36..bdb7233 100644 --- a/interfaces/C/tests/Makefile.am +++ b/interfaces/C/tests/Makefile.am @@ -82,25 +82,34 @@ dummy.cc
watchdog1_SRCS = watchdog1.c
+weightwatch1_SRCS = weightwatch1.c + noinst_HEADERS = \ ppl_c_test.h
if BUILD_WATCHDOG_LIBRARY
WATCHDOG_TESTS = \ -watchdog1 - -watchdog1_SOURCES = $(watchdog1_SRCS) +watchdog1 \ +weightwatch1
-watchdog1_CPPFLAGS = \ +WATCHDOG_LIBRARY_CPPFLAGS = \ $(AM_CPPFLAGS) \ -I$(top_builddir)/Watchdog \ -I$(top_builddir)/Watchdog/src
-watchdog1_LDADD = \ +WATCHDOG_LIBRARY_LDADD = \ $(LDADD) \ $(top_builddir)/Watchdog/src/libpwl.la
+watchdog1_SOURCES = $(watchdog1_SRCS) +watchdog1_CPPFLAGS = $(WATCHDOG_LIBRARY_CPPFLAGS) +watchdog1_LDADD = $(WATCHDOG_LIBRARY_LDADD) + +weightwatch1_SOURCES = $(weightwatch1_SRCS) +weightwatch1_CPPFLAGS = $(WATCHDOG_LIBRARY_CPPFLAGS) +weightwatch1_LDADD = $(WATCHDOG_LIBRARY_LDADD) + endif BUILD_WATCHDOG_LIBRARY
TESTS = $(NORMAL_TESTS) $(WATCHDOG_TESTS) diff --git a/interfaces/C/tests/weightwatch1.c b/interfaces/C/tests/weightwatch1.c new file mode 100644 index 0000000..be17725 --- /dev/null +++ b/interfaces/C/tests/weightwatch1.c @@ -0,0 +1,102 @@ +/* Test the deterministic timeout facility of the PPL C interface library. + Copyright (C) 2001-2009 Roberto Bagnara bagnara@cs.unipr.it + +This file is part of the Parma Polyhedra Library (PPL). + +The PPL is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 3 of the License, or (at your +option) any later version. + +The PPL is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software Foundation, +Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1307, USA. + +For the most up-to-date information see the Parma Polyhedra Library +site: http://www.cs.unipr.it/ppl/ . */ + +#include "ppl_c.h" +#include <stdlib.h> + +void +open_hypercube(int dimension, ppl_Polyhedron_t ph) { + int i; + mpz_t z_one; + mpz_t z_minus_one; + ppl_Coefficient_t coeff_one; + ppl_Coefficient_t coeff_minus_one; + ppl_Linear_Expression_t le; + ppl_Constraint_t c; + ppl_Constraint_System_t cs; + + mpz_init_set_si(z_one, 1); + mpz_init_set_si(z_minus_one, -1); + ppl_new_Coefficient(&coeff_one); + ppl_assign_Coefficient_from_mpz_t(coeff_one, z_one); + ppl_new_Coefficient(&coeff_minus_one); + ppl_assign_Coefficient_from_mpz_t(coeff_minus_one, z_minus_one); + ppl_new_Linear_Expression_with_dimension(&le, dimension); + ppl_new_Constraint_System(&cs); + for (i = 0; i < dimension; ++i) { + ppl_Linear_Expression_add_to_coefficient(le, i, coeff_one); + /* Variable(i) > 0 */ + ppl_new_Constraint(&c, le, PPL_CONSTRAINT_TYPE_GREATER_THAN); + ppl_Constraint_System_insert_Constraint(cs, c); + ppl_delete_Constraint(c); + /* Variable(i) < 1 */ + ppl_Linear_Expression_add_to_inhomogeneous(le, coeff_minus_one); + ppl_new_Constraint(&c, le, PPL_CONSTRAINT_TYPE_LESS_THAN); + ppl_Constraint_System_insert_Constraint(cs, c); + ppl_delete_Constraint(c); + /* Zero `le' */ + ppl_Linear_Expression_add_to_coefficient(le, i, coeff_minus_one); + ppl_Linear_Expression_add_to_inhomogeneous(le, coeff_one); + } + ppl_Polyhedron_add_constraints(ph, cs); + ppl_delete_Constraint_System(cs); + ppl_delete_Linear_Expression(le); + ppl_delete_Coefficient(coeff_minus_one); + ppl_delete_Coefficient(coeff_one); + mpz_clear(z_minus_one); + mpz_clear(z_one); +} + +void +weighted_compute_open_hypercube_generators(unsigned weight, + int max_dimension) { + int i; + int result; + ppl_const_Generator_System_t gs; + ppl_Polyhedron_t ph; + + for (i = 0; i <= max_dimension; ++i) { + ppl_new_NNC_Polyhedron_from_space_dimension(&ph, i, 0); + open_hypercube(i, ph); + ppl_set_deterministic_timeout(weight); + result = ppl_Polyhedron_get_generators(ph, &gs); + ppl_reset_deterministic_timeout(); + ppl_delete_Polyhedron(ph); + if (result == PPL_TIMEOUT_EXCEPTION) + /* Deterministic timeout expired */ + return; + else if (result != 0) + /* Unexpected error */ + exit(1); + } + /* Should not reach this point */ + exit(1); +} + +int +main() { + ppl_initialize(); + weighted_compute_open_hypercube_generators(1000, 20); + ppl_finalize(); + return 0; +} +
participants (1)
-
Enea Zaffanella