bug #1247: fix regression in compilation of pow(integer,integer), and add respective unit tests.
diff --git a/test/array.cpp b/test/array.cpp
index 0416ec5..7e41e9e 100644
--- a/test/array.cpp
+++ b/test/array.cpp
@@ -13,6 +13,7 @@
{
typedef typename ArrayType::Index Index;
typedef typename ArrayType::Scalar Scalar;
+ typedef typename ArrayType::RealScalar RealScalar;
typedef Array<Scalar, ArrayType::RowsAtCompileTime, 1> ColVectorType;
typedef Array<Scalar, 1, ArrayType::ColsAtCompileTime> RowVectorType;
@@ -102,6 +103,22 @@
FixedArrayType f4(f1.data());
VERIFY_IS_APPROX(f4, f1);
+ // pow
+ VERIFY_IS_APPROX(m1.pow(2), m1.square());
+ VERIFY_IS_APPROX(pow(m1,2), m1.square());
+ VERIFY_IS_APPROX(m1.pow(3), m1.cube());
+ VERIFY_IS_APPROX(pow(m1,3), m1.cube());
+ VERIFY_IS_APPROX((-m1).pow(3), -m1.cube());
+ VERIFY_IS_APPROX(pow(2*m1,3), 8*m1.cube());
+ ArrayType exponents = ArrayType::Constant(rows, cols, RealScalar(2));
+ VERIFY_IS_APPROX(Eigen::pow(m1,exponents), m1.square());
+ VERIFY_IS_APPROX(m1.pow(exponents), m1.square());
+ VERIFY_IS_APPROX(Eigen::pow(2*m1,exponents), 4*m1.square());
+ VERIFY_IS_APPROX((2*m1).pow(exponents), 4*m1.square());
+ VERIFY_IS_APPROX(Eigen::pow(m1,2*exponents), m1.square().square());
+ VERIFY_IS_APPROX(m1.pow(2*exponents), m1.square().square());
+ VERIFY_IS_APPROX(pow(m1(0,0), exponents), ArrayType::Constant(rows,cols,m1(0,0)*m1(0,0)));
+
// Check possible conflicts with 1D ctor
typedef Array<Scalar, Dynamic, 1> OneDArrayType;
OneDArrayType o1(rows);
@@ -282,22 +299,6 @@
VERIFY_IS_APPROX(m1.exp(), exp(m1));
VERIFY_IS_APPROX(m1.exp() / m2.exp(),(m1-m2).exp());
- VERIFY_IS_APPROX(m1.pow(2), m1.square());
- VERIFY_IS_APPROX(pow(m1,2), m1.square());
- VERIFY_IS_APPROX(m1.pow(3), m1.cube());
- VERIFY_IS_APPROX(pow(m1,3), m1.cube());
- VERIFY_IS_APPROX((-m1).pow(3), -m1.cube());
- VERIFY_IS_APPROX(pow(2*m1,3), 8*m1.cube());
-
- ArrayType exponents = ArrayType::Constant(rows, cols, RealScalar(2));
- VERIFY_IS_APPROX(Eigen::pow(m1,exponents), m1.square());
- VERIFY_IS_APPROX(m1.pow(exponents), m1.square());
- VERIFY_IS_APPROX(Eigen::pow(2*m1,exponents), 4*m1.square());
- VERIFY_IS_APPROX((2*m1).pow(exponents), 4*m1.square());
- VERIFY_IS_APPROX(Eigen::pow(m1,2*exponents), m1.square().square());
- VERIFY_IS_APPROX(m1.pow(2*exponents), m1.square().square());
- VERIFY_IS_APPROX(pow(m1(0,0), exponents), ArrayType::Constant(rows,cols,m1(0,0)*m1(0,0)));
-
VERIFY_IS_APPROX(m3.pow(RealScalar(0.5)), m3.sqrt());
VERIFY_IS_APPROX(pow(m3,RealScalar(0.5)), m3.sqrt());