* Bug 15718: bitwise functions with uint64(%inf) 64/20464/3
Samuel GOUGEON [Mon, 20 Aug 2018 10:49:12 +0000 (12:49 +0200)]
  http://bugzilla.scilab.org/15718

Change-Id: Iea904d6f80b09421e4a5099dee0a1afad5af840a

scilab/CHANGES.md
scilab/modules/elementary_functions/macros/bit_op.sci
scilab/modules/elementary_functions/tests/nonreg_tests/bug_15718.tst [new file with mode: 0644]

index 81a63a0..72b9c9d 100644 (file)
@@ -584,6 +584,7 @@ Known issues
 * [#15692](http://bugzilla.scilab.org/show_bug.cgi?id=15692): listvarinfile() crashes when listing a boolean sparse matrix (regression)
 * [#15693](http://bugzilla.scilab.org/show_bug.cgi?id=15693): listvarinfile() misses displaying the size of polynomial variables (regression)
 * [#15710](http://bugzilla.scilab.org/show_bug.cgi?id=15710): The Xcos EXPRESSION block did not accept expressions including some `&` or `~` characters.
+* [#15718](http://bugzilla.scilab.org/show_bug.cgi?id=15718): `bitand`, `bitxor` and `bitor` might miswork with some `uint64` inputs.
 * [#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.
index 83ea0cf..9218b6c 100644 (file)
@@ -31,9 +31,9 @@ function z = bit_op(x, y, fname)
         error(msprintf(msg, fname, 1, 2))
     else
         if size(x,"*")==1
-            x = x * ones(y)
+            x = x .* ones(y)
         elseif size(y,"*")==1
-            y = y * ones(x)
+            y = y .* ones(x)
         end
     end
 
diff --git a/scilab/modules/elementary_functions/tests/nonreg_tests/bug_15718.tst b/scilab/modules/elementary_functions/tests/nonreg_tests/bug_15718.tst
new file mode 100644 (file)
index 0000000..6f52942
--- /dev/null
@@ -0,0 +1,34 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2018 - Samuel GOUGEON
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- CLI SHELL MODE -->
+// <-- NO CHECK REF -->
+//
+// <-- Non-regression test for bug 15718 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/15718
+//
+// <-- Short Description -->
+// bitwise functions bitand, bitor, and bitxor misworked with uint64(%inf)
+
+i = uint64(%inf);
+assert_checkequal(bitand(i,i),i);
+assert_checkequal(bitxor(i,i), uint64(0));
+
+IT = [1 2 4 8 11 12 14 18];
+for it = IT
+    two = iconvert(2,it);
+    assert_checkequal(bitand(i, two), uint64(2));
+    assert_checkequal(bitxor(i, two), i-two);
+    // assert_checkequal(bitand(two, i), uint64(2));  // was not bugged
+    // assert_checkequal(bitxor(two, i), i-two);      // was not bugged
+end
+
+j = uint64(2).^63-1;
+assert_checkequal(bitand(j,j),j);
+assert_checkequal(bitor(j,j),j);
+assert_checkequal(bitxor(j,j), uint64(0));