[PPL-devel] [GIT] ppl/ppl(products): Added new method frequency() for Grids.
Patricia Hill
p.m.hill at leeds.ac.uk
Thu May 14 08:57:05 CEST 2009
Module: ppl/ppl
Branch: products
Commit: 4f5a7d280e521fb9e657b6b45798b98637f50229
URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=4f5a7d280e521fb9e657b6b45798b98637f50229
Author: Patricia Hill <p.m.hill at leeds.ac.uk>
Date: Thu May 14 07:41:22 2009 +0100
Added new method frequency() for Grids.
---
tests/Grid/frequency1.cc | 284 ++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 284 insertions(+), 0 deletions(-)
diff --git a/tests/Grid/frequency1.cc b/tests/Grid/frequency1.cc
new file mode 100644
index 0000000..d4727e4
--- /dev/null
+++ b/tests/Grid/frequency1.cc
@@ -0,0 +1,284 @@
+/* Test Grid::frequency().
+ Copyright (C) 2001-2009 Roberto Bagnara <bagnara at 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_test.hh"
+
+using namespace Parma_Polyhedra_Library::IO_Operators;
+
+namespace {
+
+// Universe and empty grid.
+bool
+test01() {
+ Variable A(0);
+
+ Grid gr1(1);
+
+ Grid gr2(1, EMPTY);
+
+ Coefficient num1;
+ Coefficient den1;
+ Coefficient valn1;
+ Coefficient vald1;
+ Coefficient num2;
+ Coefficient den2;
+ Coefficient valn2;
+ Coefficient vald2;
+ bool ok = (!gr1.frequency(A, num1, den1, valn1, vald1)
+ && !gr2.frequency(A, num2, den2, valn2, vald2));
+ print_congruences(gr1, "*** gr1 ***");
+ print_congruences(gr2, "*** gr2 ***");
+
+ return ok;
+}
+
+// 0-dimension grids.
+bool
+test02() {
+ Grid gr1(0);
+
+ Grid gr2(0, EMPTY);
+
+ Coefficient num1;
+ Coefficient den1;
+ Coefficient valn1;
+ Coefficient vald1;
+ Coefficient num2;
+ Coefficient den2;
+ Coefficient valn2;
+ Coefficient vald2;
+ bool ok = (gr1.frequency(Linear_Expression(0), num1, den1, valn1, vald1)
+ && num1 == 0 && den1 == 1 && valn1 == 0 && vald1 == 1
+ && !gr2.frequency(Linear_Expression(0), num2, den2, valn2, vald2));
+ print_congruences(gr1, "*** gr1 ***");
+ print_congruences(gr2, "*** gr2 ***");
+
+ return ok;
+}
+
+// Non-relational test.
+bool
+test03() {
+ Variable A(0);
+
+ Grid gr(1);
+ gr.add_congruence(A %= 0);
+
+ Coefficient num;
+ Coefficient den;
+ Coefficient valn;
+ Coefficient vald;
+ bool ok = (gr.frequency(Linear_Expression(A), num, den, valn, vald)
+ && num == 1 && den == 1 && valn == 0 && vald == 1);
+ print_congruences(gr, "*** gr ***");
+
+ return ok;
+}
+
+bool
+test04() {
+ Variable A(0);
+ Variable B(1);
+
+ Grid gr(2);
+ gr.add_congruence(A %= 0);
+
+ Coefficient num;
+ Coefficient den;
+ Coefficient valn;
+ Coefficient vald;
+ bool ok = (!gr.frequency(Linear_Expression(B), num, den, valn, vald));
+ print_congruences(gr, "*** gr ***");
+
+ return ok;
+}
+
+bool
+test05() {
+ Variable A(0);
+ Variable B(1);
+
+ Grid gr(2);
+ gr.add_congruence(A %= 0);
+ gr.add_congruence(B %= 0);
+
+ Coefficient num;
+ Coefficient den;
+ Coefficient valn;
+ Coefficient vald;
+ bool ok = (gr.frequency(Linear_Expression(A + B - 3), num, den, valn, vald)
+ && num == 1 && den == 1 && valn == 0 && vald == 1);
+ print_congruences(gr, "*** gr ***");
+
+ return ok;
+}
+
+bool
+test06() {
+ Variable A(0);
+ Variable B(1);
+
+ Grid gr(2);
+ gr.add_congruence(A %= 0);
+ gr.add_congruence((B %= 1) / 2);
+
+ Coefficient num;
+ Coefficient den;
+ Coefficient valn;
+ Coefficient vald;
+ bool ok = (gr.frequency(Linear_Expression(2*A + B), num, den, valn, vald)
+ && num == 2 && den == 1 && valn == 1 && vald == 1);
+ print_congruences(gr, "*** gr ***");
+
+ return ok;
+}
+
+bool
+test07() {
+ Variable A(0);
+ Variable B(1);
+
+ Grid gr(2);
+ gr.add_congruence(A %= 0);
+ gr.add_congruence((B %= 1) / 2);
+
+ Coefficient num;
+ Coefficient den;
+ Coefficient valn;
+ Coefficient vald;
+ bool ok = (gr.frequency(Linear_Expression(2*A + 3*B), num, den, valn, vald)
+ && num == 2 && den == 1 && valn == 1 && vald == 1);
+ print_congruences(gr, "*** gr ***");
+
+ return ok;
+}
+
+bool
+test08() {
+ Variable A(0);
+ Variable B(1);
+
+ Grid gr(2);
+ gr.add_congruence(3*A %= 0);
+ gr.add_congruence((B %= 0) / 2);
+
+ Coefficient num;
+ Coefficient den;
+ Coefficient valn;
+ Coefficient vald;
+ bool ok = (gr.frequency(Linear_Expression(2*A + 3*B - 1),
+ num, den, valn, vald)
+ && num == 2 && den == 3 && valn == -1 && vald == 3);
+ print_congruences(gr, "*** gr ***");
+
+ return ok;
+}
+
+bool
+test09() {
+ Variable A(0);
+ Variable B(1);
+
+ Grid gr(2);
+ gr.add_congruence((A %= 1) / 2);
+ gr.add_congruence((B %= 1) / 2);
+
+ Coefficient num;
+ Coefficient den;
+ Coefficient valn;
+ Coefficient vald;
+ bool ok = (gr.frequency(Linear_Expression(3*A + 2*B + 5),
+ num, den, valn, vald)
+ && num == 2 && den == 1 && valn == 0 && vald == 1);
+ print_congruences(gr, "*** gr ***");
+
+ return ok;
+}
+
+bool
+test10() {
+ Variable A(0);
+ Variable B(1);
+ Variable C(2);
+ Variable D(3);
+
+ Grid gr(4, EMPTY);
+ gr.add_grid_generator(grid_point((-2*A - C + 2*D), 2));
+ gr.add_grid_generator(parameter(10*A, 2));
+ gr.add_grid_generator(grid_line(2*B + C));
+ gr.add_grid_generator(parameter(5*C, 2));
+ gr.add_grid_generator(parameter(10*D, 2));
+
+ Coefficient num;
+ Coefficient den;
+ Coefficient valn;
+ Coefficient vald;
+ bool ok = (gr.frequency(Linear_Expression(3*A - B + 2*C - 17),
+ num, den, valn, vald)
+ && num == 5 && den == 1 && valn == -1 && vald == 1);
+
+ Grid known_gr(gr);
+ known_gr.add_congruence((3*A - B + 2*C - 17 %= -1) / 5);
+ print_congruences(gr, "*** gr ***");
+
+ return ok && (gr == known_gr);
+}
+
+bool
+test11() {
+ Variable A(0);
+ Variable B(1);
+
+ Grid gr(2, EMPTY);
+ gr.add_grid_generator(grid_point((2*A - B), 4));
+ gr.add_grid_generator(parameter(B));
+
+ Coefficient num;
+ Coefficient den;
+ Coefficient valn;
+ Coefficient vald;
+ bool ok = (gr.frequency(Linear_Expression(A),
+ num, den, valn, vald)
+ && num == 0 && den == 1 && valn == 1 && vald == 2);
+
+ Grid known_gr(gr);
+ known_gr.add_congruence((2*A %= 1) / 0);
+ print_congruences(gr, "*** gr ***");
+
+ return ok && (gr == known_gr);
+}
+
+} // namespace
+
+BEGIN_MAIN
+ DO_TEST(test01);
+ DO_TEST(test02);
+ DO_TEST(test03);
+ DO_TEST(test04);
+ DO_TEST(test05);
+ DO_TEST(test06);
+ DO_TEST(test07);
+ DO_TEST(test08);
+ DO_TEST(test09);
+ DO_TEST(test10);
+ DO_TEST(test11);
+END_MAIN
More information about the PPL-devel
mailing list