freepooma-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] Fix where breakage


From: Richard Guenther
Subject: [PATCH] Fix where breakage
Date: Thu, 25 Dec 2003 23:13:44 +0100 (CET)

Hi!

With my recent where improvements I did some breakage which is obviously
fixed by the following patch.  I also extended array_test12 to contain
some >1 dim tests.

Regtested on the few where tests we have using serial ppc-linux.

Ok to apply?

Thanks,

Richard.


2003Dec25  Richard Guenther <address@hidden>

        * Array/tests/array_test12.cpp: check systematically for
        d-dimensional array/scalar rhs in where.
        Evaluator/WhereProxy.h: use EvalLeaf of the dimensionality
        of the first where argument.

Index: Array/tests/array_test12.cpp
===================================================================
RCS file: /home/pooma/Repository/r2/src/Array/tests/array_test12.cpp,v
retrieving revision 1.14
diff -u -u -r1.14 array_test12.cpp
--- Array/tests/array_test12.cpp        21 Nov 2003 21:30:37 -0000      1.14
+++ Array/tests/array_test12.cpp        25 Dec 2003 22:07:47 -0000
@@ -39,6 +39,34 @@

 #include <math.h>

+template <int Dim>
+void check(Pooma::Tester& tester)
+{
+  tester.out() << Dim << "-dimensional tests:\n";
+  Interval<Dim> I;
+  for (int i=0; i<Dim; ++i)
+    I[i] = Interval<1>(10);
+  Array<Dim> a(I), b(I);
+  a = 1.0;
+  b = 0.0;
+  b = where(a == 1.0, a);
+  tester.check("2-arg where with array rhs", all(b == 1.0));
+  b = 0.0;
+  b = where(a == 1.0, 5.0);
+  tester.check("2-arg where with scalar rhs", all(b == 5.0));
+  b = 0.0;
+  b = where(a == 1.0, a, a);
+  tester.check("3-arg where with array/array rhs", all(b == 1.0));
+  b = 0.0;
+  b = where(a == 1.0, a, 3.0);
+  tester.check("3-arg where with array/scalar rhs", all(b == 1.0));
+  b = 0.0;
+  b = where(a == 1.0, 3.0, a);
+  tester.check("3-arg where with scalar/array rhs", all(b == 3.0));
+  b = 0.0;
+  b = where(a == 1.0, 1.0, 3.0);
+  tester.check("3-arg where with scalar/scalar rhs", all(b == 1.0));
+}

 int main(int argc, char* argv[])
 {
@@ -114,6 +142,12 @@

   tester.check("where reduction", prod(where(d == 0.0, d)) == 0.0);

+  // generic 2/3-arg where with array/scalar rhs
+
+  check<1>(tester);
+  check<2>(tester);
+  check<3>(tester);
+
   int ret = tester.results("array_test12");
   Pooma::finalize();
   return ret;
Index: Evaluator/WhereProxy.h
===================================================================
RCS file: /home/pooma/Repository/r2/src/Evaluator/WhereProxy.h,v
retrieving revision 1.6
diff -u -u -r1.6 WhereProxy.h
--- Evaluator/WhereProxy.h      21 Nov 2003 21:30:38 -0000      1.6
+++ Evaluator/WhereProxy.h      25 Dec 2003 22:07:47 -0000
@@ -86,7 +86,7 @@
   typedef typename ConvertWhereProxy<ETrait_t,Tree_t>::Make_t MakeFromTree_t;
   typedef typename MakeFromTree_t::Expression_t               WhereMask_t;
   typedef typename ForEach<typename CreateLeaf<B>::Leaf_t,
-                          EvalLeaf<1>, OpCombine>::Type_t    Element_t;
+                          EvalLeaf<F::dimensions>, OpCombine>::Type_t 
Element_t;

   inline WhereMask_t
   whereMask() const

reply via email to

[Prev in Thread] Current Thread [Next in Thread]