* Bug #13924 fixed - rationals r1==r2 and r1~=r2 might sometimes be wrong. 26/16626/3
Samuel GOUGEON [Thu, 11 Jun 2015 06:13:40 +0000 (08:13 +0200)]
Change-Id: I77aba0953c739fbed0aedd08b4889541adabe8e4

scilab/CHANGES_5.5.X
scilab/modules/overloading/macros/%r_n_r.sci
scilab/modules/overloading/macros/%r_o_r.sci
scilab/modules/overloading/tests/nonreg_tests/bug_13924.dia.ref [new file with mode: 0644]
scilab/modules/overloading/tests/nonreg_tests/bug_13924.tst [new file with mode: 0644]

index 512f174..f187481 100644 (file)
@@ -16,6 +16,8 @@ Scilab Bug Fixes
 
 * Bug #13881 fixed - datatipRemoveAll did not work.
 
+* Bug #13924 fixed - rationals r1==r2 and r1~=r2 might sometimes be wrong.
+
 
 
                      Changes between version 5.5.1 and 5.5.2
index 8bfc8a3..2ea7c19 100644 (file)
@@ -1,5 +1,6 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) INRIA
+// Copyright (C) 2015 - Samuel GOUGEON
 //
 // This file must be used under the terms of the CeCILL.
 // This source file is licensed as described in the file COPYING, which
@@ -7,12 +8,6 @@
 // are also available at
 // http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
 
-function r=%r_n_r(l1,l2)
-    //%r_n_r(l1,l2) <=> l1<>l2 for rational matrices
-    //!
-
-    r=l1("dt")<>l2("dt")
-    if ~r then
-        r=l1("num")<>l2("num")|(l1("den")<>l2("den")&l1("num")<>0)
-    end
+function r = %r_n_r(l1, l2)
+    r = ~%r_o_r(l1, l2)
 endfunction
index 1729566..1ce5a2d 100644 (file)
@@ -1,5 +1,6 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) INRIA
+// Copyright (C) 2015 - Samuel GOUGEON
 //
 // This file must be used under the terms of the CeCILL.
 // This source file is licensed as described in the file COPYING, which
@@ -7,15 +8,9 @@
 // are also available at
 // http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
 
-function r=%r_o_r(l1,l2)
-    // l1==l2 with l1 and l2 rationals
-    //!
-    //r=l1('dt')==l2('dt')&l1('num')==l2('num')&(l1('den')==l2('den')|l1('num')==0)
-    r = and((l1.num == l2.num))&and((l1.den==l2.den))&(l1.dt==l2.dt);
-    
-//    if varn([l1("num"),l1("den")])~=varn([l2("num"),l2("den")]) then
-//        r=%f;
-//    else
-//        r=(l1("dt")==l2("dt"))&(numer(l1-l2)==0)
-//    end
+function r = %r_o_r(l1, l2)
+    r = ((l1.num == l2.num  & l1.den==l2.den)   | ..
+    (l1.num == -l2.num & l1.den==-l2.den)       | ..
+    (l1.num==0 & l2.num==0)) .. // when simp_mode(%f)
+    & (l1.dt==l2.dt)
 endfunction
diff --git a/scilab/modules/overloading/tests/nonreg_tests/bug_13924.dia.ref b/scilab/modules/overloading/tests/nonreg_tests/bug_13924.dia.ref
new file mode 100644 (file)
index 0000000..0fcdb40
--- /dev/null
@@ -0,0 +1,49 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2015 - Scilab Enterprises - Clement DAVID
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- Non-regression test for bug 13924 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=13924
+//
+// <-- Short Description -->
+// rationals: r1==r2 and r1~=r2 may be wrong and operate unconsistenly.
+a = %z/(1-%z);
+b = -%z / -(1-%z);
+assert_checkequal(a,b)
+ ans  =
+  T  
+assert_checkequal(size([a b]==[a a], "*"), 2)
+ ans  =
+  T  
+assert_checkequal(size([a b]~=[a a], "*"), 2)
+ ans  =
+  T  
+// Disable simplification mode
+simp_mode(%f)
+a = %z/(1-%z);
+b = -%z / -(1-%z);
+c = 0 / (1-%z);
+d = 0 / (2+%z);
+assert_checkequal(a,b)
+ ans  =
+  T  
+assert_checkequal(c,d)
+ ans  =
+  T  
+assert_checkequal(size([a b c d]==[a a c c], "*"), 4)
+ ans  =
+  T  
+assert_checkequal(size([a b c d]~=[a a c c], "*"), 4)
+ ans  =
+  T  
diff --git a/scilab/modules/overloading/tests/nonreg_tests/bug_13924.tst b/scilab/modules/overloading/tests/nonreg_tests/bug_13924.tst
new file mode 100644 (file)
index 0000000..03fd64f
--- /dev/null
@@ -0,0 +1,35 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2015 - Scilab Enterprises - Clement DAVID
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- Non-regression test for bug 13924 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=13924
+//
+// <-- Short Description -->
+// rationals: r1==r2 and r1~=r2 may be wrong and operate unconsistenly.
+
+a = %z/(1-%z);
+b = -%z / -(1-%z);
+assert_checkequal(a,b)
+
+assert_checkequal(size([a b]==[a a], "*"), 2)
+assert_checkequal(size([a b]~=[a a], "*"), 2)
+
+// Disable simplification mode
+simp_mode(%f)
+
+a = %z/(1-%z);
+b = -%z / -(1-%z);
+c = 0 / (1-%z);
+d = 0 / (2+%z);
+
+assert_checkequal(a,b)
+assert_checkequal(c,d)
+
+assert_checkequal(size([a b c d]==[a a c c], "*"), 4)
+assert_checkequal(size([a b c d]~=[a a c c], "*"), 4)