AST: error out on wrong matrix multiplication 95/18795/2
Paul Bignier [Thu, 15 Dec 2016 16:09:45 +0000 (17:09 +0100)]
 * matrix*hyper & hyper*hyper can still be overloaded but not matrix*matrix with wrong dimensions
 * numderivative.tst passes again

Change-Id: I834a753ac30fcb2c5ec441d4b1af9339325c875f

scilab/modules/ast/src/cpp/operations/types_multiplication.cpp
scilab/modules/ast/tests/unit_tests/multiplication.dia.ref
scilab/modules/ast/tests/unit_tests/multiplication.tst

index 9641dcc..5778ea5 100644 (file)
@@ -235,6 +235,12 @@ int MultiplyDoubleByDouble(Double* _pDouble1, Double* _pDouble2, Double** _pDoub
         return 0;
     }
 
+    if (_pDouble1->getDims() == 2 && _pDouble1->getDims() == _pDouble2->getDims() && _pDouble1->getCols() != _pDouble2->getRows())
+    {
+        // Both matrices but with wrong dimensions: error out
+        return 1;
+    }
+
     if (_pDouble1->getDims() > 2 || _pDouble2->getDims() > 2 || _pDouble1->getCols() != _pDouble2->getRows())
     {
         //call overload
index e8759f4..633c330 100644 (file)
@@ -73,3 +73,6 @@ assert_checkequal(R * C, [ 7+%i*14, 10+%i*20; 15+%i*30, 22+%i*44]);
 assert_checkequal(C * R, [ 7+%i*14, 10+%i*20; 15+%i*30, 22+%i*44]);
 // C * C
 assert_checkequal(C * C, [-21+%i*28,-30+%i*40;-45+%i*60,-66+%i*88]);
+errmsg = gettext("Inconsistent row/column dimensions.");
+assert_checkerror("[1;1]*[1;1]", errmsg);
+assert_checkerror("[1 1]*[1 1]", errmsg);
index 0f08494..452b43a 100644 (file)
@@ -87,3 +87,7 @@ assert_checkequal(R * C, [ 7+%i*14, 10+%i*20; 15+%i*30, 22+%i*44]);
 assert_checkequal(C * R, [ 7+%i*14, 10+%i*20; 15+%i*30, 22+%i*44]);
 // C * C
 assert_checkequal(C * C, [-21+%i*28,-30+%i*40;-45+%i*60,-66+%i*88]);
+
+errmsg = gettext("Inconsistent row/column dimensions.");
+assert_checkerror("[1;1]*[1;1]", errmsg);
+assert_checkerror("[1 1]*[1 1]", errmsg);