[GIT] ppl/ppl(floating_point): Fixed Cast_Floating_Point_Expression.inlines .hh and added a test.

Module: ppl/ppl Branch: floating_point Commit: eab71496fec3819d941c5c444cb09041aea7eb0f URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=eab71496fec38...
Author: Roberto Amadini r.amadini@virgilio.it Date: Tue Feb 16 15:11:53 2010 +0100
Fixed Cast_Floating_Point_Expression.inlines.hh and added a test.
---
src/Cast_Floating_Point_Expression.inlines.hh | 2 +- src/Makefile.am | 4 ++ .../floatingpointexpr1.cc | 35 ++++++++++++++++++++ tests/ppl_test.hh | 7 ++++ 4 files changed, 47 insertions(+), 1 deletions(-)
diff --git a/src/Cast_Floating_Point_Expression.inlines.hh b/src/Cast_Floating_Point_Expression.inlines.hh index 7112467..4e65ad0 100644 --- a/src/Cast_Floating_Point_Expression.inlines.hh +++ b/src/Cast_Floating_Point_Expression.inlines.hh @@ -47,7 +47,7 @@ template <typename FP_Interval_Type, typename FP_Format> inline void Cast_Floating_Point_Expression<FP_Interval_Type, FP_Format>::swap( Cast_Floating_Point_Expression& y) { - std::swap(value, y.value); + std::swap(expr, y.expr); }
} // namespace Parma_Polyhedra_Library diff --git a/src/Makefile.am b/src/Makefile.am index d919dd2..24ca746 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -354,6 +354,10 @@ Floating_Point_Expression.types.hh \ Floating_Point_Expression.defs.hh \ Floating_Point_Expression.inlines.hh \ Floating_Point_Expression.templates.hh \ +Cast_Floating_Point_Expression.types.hh \ +Cast_Floating_Point_Expression.defs.hh \ +Cast_Floating_Point_Expression.inlines.hh \ +Cast_Floating_Point_Expression.templates.hh \ Constant_Floating_Point_Expression.types.hh \ Constant_Floating_Point_Expression.defs.hh \ Constant_Floating_Point_Expression.inlines.hh \ diff --git a/tests/Floating_Point_Expression/floatingpointexpr1.cc b/tests/Floating_Point_Expression/floatingpointexpr1.cc index 58615b3..ba917b3 100644 --- a/tests/Floating_Point_Expression/floatingpointexpr1.cc +++ b/tests/Floating_Point_Expression/floatingpointexpr1.cc @@ -332,6 +332,40 @@ test09() { return ok1 && ok2 && ok3; }
+// Tests linearization of cast(X + Y). +bool +test10() { + Variable X(0); + Variable Y(1); + FP_Interval_Abstract_Store as(2); + FP_Linear_Form_Abstract_Store lf_as; + FP_Linear_Form l_con_x; + FP_Linear_Form l_con_y; + FP_Linear_Form l_cast; + Con_FP_Expression* con_x = new Con_FP_Expression(1 / 3.0, 1 / 3.0); + con_x->linearize(as, lf_as, l_con_x); + Con_FP_Expression* con_y = new Con_FP_Expression(-1 / 2.0, 1 / 2.0); + con_y->linearize(as, lf_as, l_con_y); + as.affine_form_image(X, l_con_x); + as.affine_form_image(Y, l_con_y); + Var_FP_Expression* var_x = new Var_FP_Expression(0); + Var_FP_Expression* var_y = new Var_FP_Expression(1); + Sum_FP_Expression* x_sum_y = new Sum_FP_Expression(var_x, var_y); + Cast_FP_Expression cast(x_sum_y); + cast.linearize(as, lf_as, l_cast); + + // FIXME: Computed result should over-approximates the known result. + FP_Interval result; + FP_Expression::intervalize(l_cast, as, result); + nout << "*** result ***" << endl << result << endl; + FP_Linear_Form l_kr(X); + l_kr += FP_Linear_Form(Y); + FP_Interval known_result; + FP_Expression::intervalize(l_kr, as, known_result); + nout << "*** known_result ***" << endl << known_result << endl; + return result.contains(known_result); +} + } // namespace
BEGIN_MAIN @@ -344,4 +378,5 @@ BEGIN_MAIN DO_TEST(test07); DO_TEST(test08); DO_TEST(test09); + DO_TEST(test10); END_MAIN diff --git a/tests/ppl_test.hh b/tests/ppl_test.hh index 930a903..06c2b8c 100644 --- a/tests/ppl_test.hh +++ b/tests/ppl_test.hh @@ -588,6 +588,13 @@ typedef Floating_Point_Expression<FP_Interval, ANALYZED_FP_FORMAT> FP_Expression;
/*! \brief + The incarnation of Cast_Floating_Point_Expression under test for + analyzing floating point computations. +*/ +typedef Cast_Floating_Point_Expression<FP_Interval, + ANALYZED_FP_FORMAT> Cast_FP_Expression; + +/*! \brief The incarnation of Constant_Floating_Point_Expression under test for analyzing floating point computations. */
participants (1)
-
Roberto Amadini