* Bug 15746 fixed: now 1/[1 2 3] and [1 2 3]'\1 raise an error 83/20483/3
St├ęphane Mottelet [Thu, 30 Aug 2018 11:21:13 +0000 (13:21 +0200)]
http://bugzilla.scilab.org/show_bug.cgi?id=15746

Change-Id: I5f9afeadb207bfe5a5a60a3cb85f7c95cb828477

scilab/CHANGES.md
scilab/modules/ast/src/cpp/operations/types_divide.cpp
scilab/modules/ast/src/cpp/operations/types_ldivide.cpp
scilab/modules/ast/tests/nonreg_tests/bug_15746.tst [new file with mode: 0644]
scilab/modules/ast/tests/nonreg_tests/bug_9560.dia.ref
scilab/modules/ast/tests/nonreg_tests/bug_9560.tst
scilab/modules/ast/tests/unit_tests/divide.dia.ref
scilab/modules/ast/tests/unit_tests/divide.tst
scilab/modules/ast/tests/unit_tests/ldivide.dia.ref
scilab/modules/ast/tests/unit_tests/ldivide.tst

index bea2a29..970f3d9 100644 (file)
@@ -597,6 +597,7 @@ Known issues
 * [#15733](http://bugzilla.scilab.org/show_bug.cgi?id=15733): Some fixes after `deg(0*%s)` => `-%inf`.
 * [#15735](http://bugzilla.scilab.org/show_bug.cgi?id=15735): `interp1` yielded some []+n warnings.
 * [#15736](http://bugzilla.scilab.org/show_bug.cgi?id=15736): `unique` failed with complex numbers.
+* [#15746](http://bugzilla.scilab.org/show_bug.cgi?id=15746): `1/[1 2 3]` and `[1 2 3]'\1` did not raise an error
 * [#15747](http://bugzilla.scilab.org/show_bug.cgi?id=15747): no output in overloaded operator crashed Scilab
 * [#15753](http://bugzilla.scilab.org/show_bug.cgi?id=15753): `issparse()` returned 0 instead of 1 for sparse booleans.
 * [#15758](http://bugzilla.scilab.org/show_bug.cgi?id=15758): sparse([0 0],1) crashes scilab (regression)
index 5c5b734..f64de09 100644 (file)
@@ -179,7 +179,7 @@ int RDivideDoubleByDouble(Double *_pDouble1, Double *_pDouble2, Double **_pDoubl
         return iErr;
     }
 
-    if (_pDouble1->isScalar())
+    /*if (_pDouble1->isScalar())
     {
         if (_pDouble2->getDims() > 2)
         {
@@ -247,12 +247,18 @@ int RDivideDoubleByDouble(Double *_pDouble1, Double *_pDouble2, Double **_pDoubl
         delete pdblTemp;
         return iErr;
     }
-
-    if (_pDouble1->getDims() > 2 || _pDouble2->getDims() > 2 || _pDouble1->getCols() != _pDouble2->getCols())
+    */
+    if (_pDouble1->getDims() > 2 || _pDouble2->getDims() > 2)
     {
         //not managed
         return 0;
     }
+    
+    if (_pDouble1->getCols() != _pDouble2->getCols())
+    {
+        // matrix dimensions do not agree
+        return 1;
+    }
 
     *_pDoubleOut = new Double(_pDouble1->getRows(), _pDouble2->getRows(), _pDouble1->isComplex() || _pDouble2->isComplex());
     if ((*_pDoubleOut)->isComplex())
index f088e2f..6e69018 100644 (file)
@@ -112,7 +112,7 @@ int LDivideDoubleByDouble(Double *_pDouble1, Double *_pDouble2, Double **_pDoubl
         return RDivideDoubleByDouble(_pDouble2, _pDouble1, _pDoubleOut);
     }
 
-    if (_pDouble2->isScalar())
+    /* if (_pDouble2->isScalar())
     {
         //X \ y => X \ (eye() * y)
         pDblTmp = new types::Double(_pDouble1->getRows(), _pDouble1->getRows(), _pDouble2->isComplex());
@@ -142,14 +142,20 @@ int LDivideDoubleByDouble(Double *_pDouble1, Double *_pDouble2, Double **_pDoubl
         }
 
         _pDouble2 = pDblTmp;
-    }
+    }*/
 
-    if (_pDouble1->getDims() > 2 || _pDouble2->getDims() > 2 || _pDouble1->getRows() != _pDouble2->getRows())
+    if (_pDouble1->getDims() > 2 || _pDouble2->getDims() > 2)
     {
         //not managed
         return 0;
     }
 
+    if (_pDouble1->getRows() != _pDouble2->getRows())
+    {
+        // matrix dimensions do not agree
+        return 1;
+    }
+
     *_pDoubleOut = new Double(_pDouble1->getCols(), _pDouble2->getCols(), _pDouble1->isComplex() || _pDouble2->isComplex());
     if ((*_pDoubleOut)->isComplex())
     {
diff --git a/scilab/modules/ast/tests/nonreg_tests/bug_15746.tst b/scilab/modules/ast/tests/nonreg_tests/bug_15746.tst
new file mode 100644 (file)
index 0000000..b4def64
--- /dev/null
@@ -0,0 +1,28 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2018 - St├ęphane MOTTELET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+// <-- NO CHECK REF -->
+// <- ENGLISH IMPOSED -->
+//
+// <-- Non-regression test for bug 15746 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/15746
+//
+// <-- Short Description -->
+// 1/[1 2 3] and [1 2 3]'\1 should raise an error
+
+B=1;
+A=[1 2 3];
+assert_checkerror("B/A","Inconsistent row/column dimensions.");
+A=A';
+assert_checkalmostequal((B/A)*A,B);
+assert_checkerror("A\B","Inconsistent row/column dimensions.");
+A=A';
+assert_checkalmostequal(A*(A\B),B);
+
index c27be4a..500b888 100644 (file)
@@ -31,8 +31,8 @@ assert_checkequal(y4, y4_ref);
 y5 = 2.^[1 2; 3 4];
 y5_ref = 2 .^ [1 2; 3 4];
 assert_checkequal(y5, y5_ref);
-y6 = 2. / [1 2; 3 4];
-y6_ref = 2 / [1 2; 3 4];
+y6 = 2. / 2;
+y6_ref = 2 / 2;
 assert_checkequal(y6, y6_ref);
 y7 = 2. \ [1 2; 3 4];
 y7_ref = 2 \ [1 2; 3 4];
index 85ac424..e8b161d 100644 (file)
@@ -37,8 +37,8 @@ y5 = 2.^[1 2; 3 4];
 y5_ref = 2 .^ [1 2; 3 4];
 assert_checkequal(y5, y5_ref);
 
-y6 = 2. / [1 2; 3 4];
-y6_ref = 2 / [1 2; 3 4];
+y6 = 2. / 2;
+y6_ref = 2 / 2;
 assert_checkequal(y6, y6_ref);
 
 y7 = 2. \ [1 2; 3 4];
index 27f3311..c7155fc 100644 (file)
@@ -24,15 +24,6 @@ assert_checkalmostequal(r / c, 0.4-0.8*%i);
 assert_checkalmostequal(c / r, 0.5+%i);
 //c / c
 assert_checkalmostequal(c / c, 1);
-//double / DOUBLE
-//r / R
-assert_checkalmostequal(r / R, [-4,2;3,-1]);
-//r / C
-assert_checkalmostequal(r / C, [-0.8+1.6*%i,0.4-0.8*%i;0.6-1.2*%i,-0.2+0.4*%i]);
-//c / R
-assert_checkalmostequal(c / R, [-2-4*%i,1+2*%i;1.5+3*%i,-0.5-1*%i]);
-//c / C
-assert_checkalmostequal(c / C, [-2,1;1.5,-0.5]);
 //DOUBLE / double
 //R / r
 assert_checkalmostequal(R / r, [0.5,1;1.5,2]);
index 1085ced..6e7549c 100644 (file)
@@ -31,18 +31,6 @@ assert_checkalmostequal(c / c, 1);
 
 
 
-//double / DOUBLE
-
-//r / R
-assert_checkalmostequal(r / R, [-4,2;3,-1]);
-//r / C
-assert_checkalmostequal(r / C, [-0.8+1.6*%i,0.4-0.8*%i;0.6-1.2*%i,-0.2+0.4*%i]);
-//c / R
-assert_checkalmostequal(c / R, [-2-4*%i,1+2*%i;1.5+3*%i,-0.5-1*%i]);
-//c / C
-assert_checkalmostequal(c / C, [-2,1;1.5,-0.5]);
-
-
 //DOUBLE / double
 
 //R / r
index eb49c8f..d3abf3f 100644 (file)
@@ -37,15 +37,6 @@ assert_checkalmostequal(r \ C, C / r);
 assert_checkalmostequal(c \ R, R / c);
 //c \ C
 assert_checkalmostequal(c \ C, C / c);
-//DOUBLE \ double
-//R \ r
-assert_checkalmostequal(R \ r, [-4,2;3,-1]);
-//R \ c
-assert_checkalmostequal(R \ c, [-2-4*%i , 1+2*%i ; 1.5+3*%i, -0.5-%i]);
-//C \ r
-assert_checkalmostequal(C \ r, [-0.8+1.6*%i,0.4-0.8*%i;0.6-1.2*%i,-0.2+0.4*%i]);
-//C \ c
-assert_checkalmostequal(C \ c, [-2,1;1.5,-0.5]);
 //DOUBLE \ DOUBLE
 //R \ R
 assert_checkalmostequal(R \ R, R / R);
@@ -54,7 +45,7 @@ assert_checkalmostequal(R \ C, C / R);
 //C \ R
 assert_checkalmostequal(C \ R, R / C, [], %eps);
 //C \ C
-assert_checkalmostequal(C \ C, C / C);
+assert_checkalmostequal(C \ C, C / C, [], %eps);
 // dot left division
 //double .\ double
 //r .\ r
index a08594d..68b9555 100644 (file)
@@ -49,17 +49,6 @@ assert_checkalmostequal(c \ R, R / c);
 assert_checkalmostequal(c \ C, C / c);
 
 
-//DOUBLE \ double
-
-//R \ r
-assert_checkalmostequal(R \ r, [-4,2;3,-1]);
-//R \ c
-assert_checkalmostequal(R \ c, [-2-4*%i , 1+2*%i ; 1.5+3*%i, -0.5-%i]);
-//C \ r
-assert_checkalmostequal(C \ r, [-0.8+1.6*%i,0.4-0.8*%i;0.6-1.2*%i,-0.2+0.4*%i]);
-//C \ c
-assert_checkalmostequal(C \ c, [-2,1;1.5,-0.5]);
-
 
 //DOUBLE \ DOUBLE
 
@@ -70,7 +59,7 @@ assert_checkalmostequal(R \ C, C / R);
 //C \ R
 assert_checkalmostequal(C \ R, R / C, [], %eps);
 //C \ C
-assert_checkalmostequal(C \ C, C / C);
+assert_checkalmostequal(C \ C, C / C, [], %eps);
 
 // dot left division
 //double .\ double