fixed bug #3341
authorIlya Lavrenov <ilya.lavrenov@itseez.com>
Sat, 28 Dec 2013 11:09:45 +0000 (15:09 +0400)
committerIlya Lavrenov <ilya.lavrenov@itseez.com>
Mon, 30 Dec 2013 12:47:54 +0000 (16:47 +0400)
modules/core/src/arithm.cpp
modules/core/test/test_arithm.cpp

index a11b64b..0517a5f 100644 (file)
@@ -1272,8 +1272,8 @@ static void arithm_op(InputArray _src1, InputArray _src2, OutputArray _dst,
     bool haveScalar = false, swapped12 = false;
     int depth2 = src2.depth();
     if( src1.size != src2.size || src1.channels() != src2.channels() ||
-        ((kind1 == _InputArray::MATX || kind2 == _InputArray::MATX) &&
-         src1.cols == 1 && src2.rows == 4) )
+        (kind1 == _InputArray::MATX && (src1.size() == Size(1,4) || src1.size() == Size(1,1))) ||
+        (kind2 == _InputArray::MATX && (src2.size() == Size(1,4) || src2.size() == Size(1,1))) )
     {
         if( checkScalar(src1, src2.type(), kind1, kind2) )
         {
index 664fa02..f16c801 100644 (file)
@@ -1564,3 +1564,19 @@ TEST(Core_round, CvRound)
     ASSERT_EQ(-2, cvRound(-2.5));
     ASSERT_EQ(-4, cvRound(-3.5));
 }
+
+
+typedef testing::TestWithParam<Size> Mul1;
+
+TEST_P(Mul1, One)
+{
+    Size size = GetParam();
+    cv::Mat src(size, CV_32FC1, cv::Scalar::all(2)), dst,
+            ref_dst(size, CV_32FC1, cv::Scalar::all(6));
+
+    cv::multiply(3, src, dst);
+
+    ASSERT_EQ(0, cv::norm(dst, ref_dst, cv::NORM_INF));
+}
+
+INSTANTIATE_TEST_CASE_P(Arithm, Mul1, testing::Values(Size(2, 2), Size(1, 1)));