Bug 7666 fixed: Inconstencies between and/or and &/| 35/14035/4
Calixte DENIZET [Fri, 14 Mar 2014 16:29:31 +0000 (17:29 +0100)]
Change-Id: I32aa5f258961681625b7fae26b28361126806e72

scilab/CHANGES_5.5.X
scilab/modules/boolean/src/c/matboolean.c
scilab/modules/boolean/tests/nonreg_tests/bug_7666.dia.ref [new file with mode: 0644]
scilab/modules/boolean/tests/nonreg_tests/bug_7666.tst [new file with mode: 0644]

index 702cac9..37ee82a 100644 (file)
@@ -305,6 +305,8 @@ Scilab Bug Fixes
 
 * Bug #7650 fixed - isempty(tlist(...)) always returned false, even when all defined fields were empty.
 
+* Bug #7666 fixed - Inconstencies between and/or and &/| fixed.
+
 * Bug #7705 fixed - "dimension", "minbounds" and "maxbounds" fields have been documented in Genetic algorithms help pages.
 
 * Bug #7739 fixed - Axis position was invalid in log modes.
index 0e7f3b2..27e82c7 100644 (file)
@@ -132,7 +132,7 @@ int C2F(matlog)(void)
         matBool = (BOOL*)MALLOC(sizeof(BOOL) * mn1);
         if (matBool == NULL)
         {
-            if (Fin == or)
+            if (Fin == or )
             {
                 Scierror(999, _("%s: No more memory.\n"), "boolean operation '|'");
             }
@@ -143,17 +143,14 @@ int C2F(matlog)(void)
             return 0;
         }
 
-        if (Fin == or)
+        if (Fin == or )
         {
             for (j = 0; j <= mn1 - 1; ++j)
             {
                 int j_m_i1 = (int)(j * i1);
                 int j_m_i2 = (int)(j * i2);
 
-                int e1tmp = (int) * stk(l1 + j_m_i1);
-                int e2tmp = (int) * stk(l2 + j_m_i2);
-
-                if (e1tmp || e2tmp)
+                if (*stk(l1 + j_m_i1) || *stk(l2 + j_m_i2))
                 {
                     matBool[j] = TRUE;
                 }
@@ -170,10 +167,7 @@ int C2F(matlog)(void)
                 int j_m_i1 = (int)(j * i1);
                 int j_m_i2 = (int)(j * i2);
 
-                int e1tmp = (int) * stk(l1 + j_m_i1);
-                int e2tmp = (int) * stk(l2 + j_m_i2);
-
-                if (e1tmp && e2tmp)
+                if (*stk(l1 + j_m_i1) && *stk(l2 + j_m_i2))
                 {
                     matBool[j] = TRUE;
                 }
diff --git a/scilab/modules/boolean/tests/nonreg_tests/bug_7666.dia.ref b/scilab/modules/boolean/tests/nonreg_tests/bug_7666.dia.ref
new file mode 100644 (file)
index 0000000..366547a
--- /dev/null
@@ -0,0 +1,34 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) DIGITEO - 2014 - Scilab Enterprises - Calixte DENIZET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- CLI SHELL MODE -->
+// <-- Non-regression test for bug 7666 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/7666
+//
+// <-- Short Description -->
+// Inconstencies between and/or and &/|
+assert_checkequal(or([0.6 -0.9]), 0.6 | -0.9)
+ ans  =
+  T  
+assert_checkequal(or([0.6 -1.1]), 0.6 | -1.1)
+ ans  =
+  T  
+assert_checkequal(and([0.6 -0.7]), 0.6 & -0.7)
+ ans  =
+  T  
+assert_checkequal(and([0.6 -1.1]), 0.6 & -1.1)
+ ans  =
+  T  
+assert_checkequal(and([2.1 -1.1]), 2.1 & -1.1)
+ ans  =
+  T  
diff --git a/scilab/modules/boolean/tests/nonreg_tests/bug_7666.tst b/scilab/modules/boolean/tests/nonreg_tests/bug_7666.tst
new file mode 100644 (file)
index 0000000..eab4b86
--- /dev/null
@@ -0,0 +1,22 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) DIGITEO - 2014 - Scilab Enterprises - Calixte DENIZET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- CLI SHELL MODE -->
+
+// <-- Non-regression test for bug 7666 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/7666
+//
+// <-- Short Description -->
+// Inconstencies between and/or and &/|
+
+assert_checkequal(or([0.6 -0.9]), 0.6 | -0.9)
+assert_checkequal(or([0.6 -1.1]), 0.6 | -1.1)
+assert_checkequal(and([0.6 -0.7]), 0.6 & -0.7)
+assert_checkequal(and([0.6 -1.1]), 0.6 & -1.1)
+assert_checkequal(and([2.1 -1.1]), 2.1 & -1.1)
\ No newline at end of file