bitor bitxor bitand upgraded. Help pages rewritten. Bug #14654 fixed 53/18353/12
Samuel GOUGEON [Mon, 4 Jul 2016 23:23:27 +0000 (01:23 +0200)]
 * http://bugzilla.scilab.org/14654
   - bitand, bitor and bitxor could not be used with positive signed integers
   - 64-bit input integers were not supported
 * Operands with mixed types or inttypes were not accepted.
 * bit###(scalar, array) or bitand(array, scalar) were not accepted.
 * The implementation for hypermatrices was still with the former
   hypermatrices encoding, and therefore was wrong.
 * Results with decimal numbers > 2^32 were wrong. Now, all positive decimal
   numbers up to number_properties("huge") are well processed
 * bitxor() was not vectorized and was slow
 * 95% of their code was similar but not factorized.

Change-Id: Ia5d9a55900aae9bc1799273c4e1da261f73ecd45

25 files changed:
scilab/CHANGES.md
scilab/modules/ast/src/cpp/operations/types_or.cpp
scilab/modules/elementary_functions/help/en_US/bitwise/bitand.xml
scilab/modules/elementary_functions/help/en_US/bitwise/bitor.xml
scilab/modules/elementary_functions/help/en_US/bitwise/bitxor.xml
scilab/modules/elementary_functions/help/ja_JP/bitwise/bitand.xml [deleted file]
scilab/modules/elementary_functions/help/ja_JP/bitwise/bitor.xml [deleted file]
scilab/modules/elementary_functions/help/ja_JP/bitwise/bitxor.xml [deleted file]
scilab/modules/elementary_functions/help/pt_BR/bitwise/bitand.xml [deleted file]
scilab/modules/elementary_functions/help/pt_BR/bitwise/bitor.xml [deleted file]
scilab/modules/elementary_functions/help/ru_RU/bitwise/bitand.xml [deleted file]
scilab/modules/elementary_functions/help/ru_RU/bitwise/bitor.xml [deleted file]
scilab/modules/elementary_functions/help/ru_RU/bitwise/bitxor.xml [deleted file]
scilab/modules/elementary_functions/macros/bit_op.sci [new file with mode: 0644]
scilab/modules/elementary_functions/macros/bitand.sci
scilab/modules/elementary_functions/macros/bitor.sci
scilab/modules/elementary_functions/macros/bitxor.sci
scilab/modules/elementary_functions/tests/nonreg_tests/bug_14654.dia.ref [new file with mode: 0644]
scilab/modules/elementary_functions/tests/nonreg_tests/bug_14654.tst [new file with mode: 0644]
scilab/modules/elementary_functions/tests/unit_tests/bitand.dia.ref
scilab/modules/elementary_functions/tests/unit_tests/bitand.tst
scilab/modules/elementary_functions/tests/unit_tests/bitor.dia.ref
scilab/modules/elementary_functions/tests/unit_tests/bitor.tst
scilab/modules/elementary_functions/tests/unit_tests/bitxor.dia.ref
scilab/modules/elementary_functions/tests/unit_tests/bitxor.tst

index f205625..4b21bc4 100644 (file)
@@ -139,6 +139,14 @@ Feature changes and additions
 * `strange([])` now returns `%nan` instead of `[]`, as all other functions for statistical dispersion
 * `stdev(x, dir>ndims(x))` now yields an error instead of returning `zeros(x)`
 * `write`: Writing string or string matrix in a file does not add blank space before each value
+* `bitor`, `bitxor` and `bitand` are upgraded:
+   - positive signed encoded integers are now accepted.
+   - inputs with new `int64` or `uint64` encodings are now accepted.
+   - operands with mixed types or/and inttypes are now accepted.
+   - distributive input scalars as in `bit###(scalar, array)` or `bit###(array, scalar)` are now accepted.
+   - results with decimal-encoded integers > 2^32 are now correct.
+   - decimal-encoded integers > 2^52 are now supported up to the biggest 1.80D+308.
+   - `bitxor` is now vectorized and fast.
 * The zoom rubber box now can start/finish from points lying outside the axes bounds.
 * The zoom rubber box now can select multiple and overlying axes at once. Changed behavior of scroll zoom, scrolling over overlying axes will zoom all of them together, using the CTRL key while scrolling will zoom all axes in the current figure.
 
@@ -148,7 +156,7 @@ Help pages:
 
 * fixed / improved:  `members`, `part`, `ode`, `ode_optional_output`, `ode_roots`, `roots`,
   `printf`, `sprintf`, `iconvert`, `stdev`, `xlabel`, `and_op`, `or_op`
-* rewritten: `consolebox`, `double`, `isoview`, `householder`, `or`, `and`, `format`, `typeof`, `brackets`, `setlanguage`, `sleep`, `isinf`
+* rewritten: `consolebox`, `double`, `isoview`, `householder`, `or`, `and`, `format`, `typeof`, `brackets`, `setlanguage`, `sleep`, `isinf`, `bitor`, `bitxor`, `bitand`
 * reorganized:
   - `else`, `elseif`, `end`, `try`, `sciargs`, `global`, `halt`, `empty`, `power`
   - CACSD and Signal Processing help pages have been sorted up.
@@ -262,6 +270,7 @@ Bug Fixes
 * [Bug #14640](http://bugzilla.scilab.org/show_bug.cgi?id=14640) fixed - `median(int8([10 60 80 100]))` returned -58 instead of 70 due to overflow when interpolating (60+80)>128
 * [Bug #14648](http://bugzilla.scilab.org/show_bug.cgi?id=14648) fixed - `isinf` returned `%F` for complex numbers with both real and imag infinite parts.
 * [Bug #14649](http://bugzilla.scilab.org/show_bug.cgi?id=14649) fixed - isnan(complex(%inf, %inf)) returned %F while the phase is NaN.
+* [Bug #14654](http://bugzilla.scilab.org/show_bug.cgi?id=14654) fixed - `bitor`, `bitxor` and `bitand` did not accept positive inputs of type `int8`, `int16`, `int32`, `int64` or `uint64`
 * [Bug #14662](http://bugzilla.scilab.org/show_bug.cgi?id=14662) fixed - Matrix of strings concatenation with single quote led to a parser error.
 * [Bug #14681](http://bugzilla.scilab.org/show_bug.cgi?id=14681) fixed - Short-circuited AND operation was not possible with double matrices in if and while clauses
 * [Bug #14690](http://bugzilla.scilab.org/show_bug.cgi?id=14690) fixed - The user's startup files set in the working directory were not executed. When `SCIHOME` is not the working directory, `SCIHOME\scilab.ini` was executed twice.
index 762f80e..8e86915 100644 (file)
@@ -380,6 +380,14 @@ void fillOrFunction()
     scilab_fill_or(ScalarUInt64, Int64, int_S_M, UInt64, Int64, UInt64);
     scilab_fill_or(ScalarUInt64, UInt64, int_S_M, UInt64, UInt64, UInt64);
 
+    scilab_fill_or(ScalarUInt64, ScalarInt8, int_S_S, UInt64, Int8, UInt64);
+    scilab_fill_or(ScalarUInt64, ScalarUInt8, int_S_S, UInt64, UInt8, UInt64);
+    scilab_fill_or(ScalarUInt64, ScalarInt16, int_S_S, UInt64, Int16, UInt64);
+    scilab_fill_or(ScalarUInt64, ScalarUInt16, int_S_S, UInt64, UInt16, UInt64);
+    scilab_fill_or(ScalarUInt64, ScalarInt32, int_S_S, UInt64, Int32, UInt64);
+    scilab_fill_or(ScalarUInt64, ScalarUInt32, int_S_S, UInt64, UInt32, UInt64);
+    scilab_fill_or(ScalarUInt64, ScalarInt64, int_S_S, UInt64, Int64, UInt64);
+    scilab_fill_or(ScalarUInt64, ScalarUInt64, int_S_S, UInt64, UInt64, UInt64);
 
     //boolean sparse
     scilab_fill_or(SparseBool, SparseBool, M_M, SparseBool, SparseBool, SparseBool);
index 4c473cf..a88ad5a 100644 (file)
@@ -1,10 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
- * 
+ *
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- * Copyright (C) 2011 - DIGITEO - Michael Baudin
- * Copyright (C) 2008 - INRIA
- * 
+ * Copyright (C) 2016 - Samuel GOUGEON
+ *
  * Copyright (C) 2012 - 2016 - Scilab Enterprises
  *
  * This file is hereby licensed under the terms of the GNU GPL v2.0,
  * and continues to be available under such terms.
  * For more information, see the COPYING file which you should have received
  * along with this program.
- * 
+ *
  -->
-<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns3="http://www.w3.org/1999/xhtml" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:id="bitand" xml:lang="en">
+<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
+xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns3="http://www.w3.org/1999/xhtml"
+xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook"
+xmlns:scilab="http://www.scilab.org" xml:id="bitand" xml:lang="en">
     <refnamediv>
         <refname>bitand</refname>
-        <refpurpose>bitwise AND</refpurpose>
+        <refpurpose>bitwise logical AND between element-wise integers of 2 arrays</refpurpose>
     </refnamediv>
     <refsynopsisdiv>
         <title>Syntax</title>
         <synopsis>
-            z = bitand(x, y)            
+            w = bitand(u, v)
         </synopsis>
     </refsynopsisdiv>
     <refsection>
         <title>Parameters</title>
         <variablelist>
             <varlistentry>
-                <term>x :</term>
+                <term>u, v, w</term>
                 <listitem>
                     <para>
-                        a <literal>m</literal>-by-<literal>n</literal> matrix of doubles
-                        or a <literal>m1</literal>-by-<literal>m2</literal>-by-...-by-<literal>mm</literal> hypermatrix of doubles
-                        or a <literal>m</literal>-by-<literal>n</literal> matrix of unsigned integers (<literal>uint8</literal>, <literal>uint16</literal> or <literal>uint32</literal>).
-                        Must contain positive integer values.
+                        scalars, vectors, matrices or hypermatrices of null or
+                        positive integers encoded as decimal or integer numbers
+                        of any signed or unsigned <link linkend="inttype">inttype</link>.
+                        <warning>Sparse-encoded matrices are not accepted.</warning>
                     </para>
-                </listitem>
-            </varlistentry>
-            <varlistentry>
-                <term>y :</term>
-                <listitem>
                     <para>
-                        a <literal>m</literal>-by-<literal>n</literal> matrix of doubles
-                        or a <literal>m1</literal>-by-<literal>m2</literal>-by-...-by-<literal>mm</literal> hypermatrix of doubles
-                        or a <literal>m</literal>-by-<literal>n</literal> matrix of unsigned integers (<literal>uint8</literal>, <literal>uint16</literal> or <literal>uint32</literal>).
+                        If <literal>u</literal> and <literal>v</literal> have
+                        the same type and inttype, this one is the working one.
+                        Otherwise,
+                        <itemizedlist>
+                            <listitem>
+                                if <literal>u</literal> or <literal>v</literal>
+                                is decimal-encoded, the working inttype is 0
+                                (real decimal), even if the other operand
+                                is int64- or uint64-encoded.
+                            </listitem>
+                            <listitem>
+                                if <literal>u</literal> and <literal>v</literal>
+                                are both encoded integers, the working inttype
+                                is the widest of both: int8 &lt; uint8 &lt;
+                                int16 &lt; uint16 &lt; int32 &lt; uint32 &lt;
+                                int64 &lt; uint64.
+                            </listitem>
+                        </itemizedlist>
+                    </para>
+                    <para>
+                        The result <literal>w</literal> gets the type of the
+                        working encoding.
                     </para>
-                </listitem>
-            </varlistentry>
-            <varlistentry>
-                <term>z :</term>
-                <listitem>
                     <para>
-                        a <literal>m</literal>-by-<literal>n</literal> matrix of doubles
-                        or a <literal>m1</literal>-by-<literal>m2</literal>-by-...-by-<literal>mm</literal> hypermatrix of doubles
-                        or a <literal>m</literal>-by-<literal>n</literal> matrix of unsigned integers.
+                        <literal>u</literal> and <literal>v</literal> are
+                        processed element-wise.
+                        <itemizedlist>
+                            <listitem>
+                                If <literal>u</literal> is a single value (scalar)
+                                and <literal>v</literal> is a vector, matrix or
+                                hypermatrix, <literal>u</literal> is priorly
+                                expanded as <literal>u*ones(v)</literal> in order
+                                to operate <literal>u</literal> with every
+                                <literal>v</literal> component.
+                            </listitem>
+                            <listitem>
+                                Conversely, <literal>v</literal> is priorly
+                                expanded as <literal>v*ones(u)</literal> if it
+                                is a single value.
+                            </listitem>
+                            <listitem>
+                                If neither <literal>u</literal> nor <literal>v</literal>
+                                are scalars, they must have the same sizes.
+                            </listitem>
+                        </itemizedlist>
+                    </para>
+                    <para>
+                        The result <literal>w</literal> gets the sizes of
+                        <literal>u</literal> or/and <literal>v</literal>
+                        arrays.
                     </para>
                 </listitem>
             </varlistentry>
     </refsection>
     <refsection>
         <title>Description</title>
-        <para>
-            Given <varname>x</varname> and <varname>y</varname> two positive integers, this function returns the decimal
-            number <varname>z</varname> whose the binary form is the AND of the binary representations
-            of <varname>x</varname> and <varname>y</varname>.
-        </para>
-        <para>
-            <varname>x</varname>, <varname>y</varname>, <varname>z</varname> have the same size.
-        </para>
+        For each pair of components <literal>u(i)</literal> and <literal>v(i)</literal>,
+        <literal>bitand(u, v)</literal> computes and returns in <literal>w(i)</literal>
+        the bitwise AND conjunction of <literal>u(i)</literal> and <literal>v(i)</literal>
+        bits: Bits of <literal>w(i)</literal> set to 1 are met
+        in <literal>u(i)</literal> AND in <literal>v(i)</literal>. Otherwise,
+        they are set to 0.
+        <note>
+            With encoded integers, <literal>bitand(u, v)</literal> is equivalent
+            to <literal>u &amp; v</literal>. However, <literal>u &amp; v</literal>
+            demands that <literal>u</literal> and <literal>v</literal> have
+            the same inttype, while <literal>bitand(..)</literal> accepts
+            mixed operands.
+        </note>
+        <note>
+            For any decimal integer <literal>u</literal> greater than 2^52,
+            only its bits from log2(u) down to log2(u)-52 are encoded and can
+            be actually taken into account. Lower bits are not stored and are
+            then ignored.
+        </note>
     </refsection>
     <refsection>
         <title>Examples</title>
         <programlisting role="example"><![CDATA[
-// '1010110' : is the binary representation of 86 
-// '1011011' : is the binary representation of 91   
-// '1010010' : is the binary representation for the AND of binary representation 86 and 91 
-// so the decimal number corresponding to the AND  applied to binary forms 86 and 91 is : 82
-x=86; 
-y=91;
-z=bitand(x,y)
+bitand(54, 107)
+dec2bin([54 107 34]')  // binary representations
+     ]]></programlisting>
+        <screen><![CDATA[--> bitand(54, 107)
+ ans  =
+   34.
 
-// Compute the bitwise AND of two matrices of doubles.
-x=[12,45];
-y=[25,49];
-z=bitand(x,y)
+--> dec2bin([54 107 34]')
+ ans  =
+!0110110  !
+!1101011  !
+!0100010  !
+]]></screen>
+        <para></para>
+        <programlisting role="example"><![CDATA[
+// Between 2 simple rows with zeros and ones
+u = [0 1 0 1];
+v = [0 0 1 1];
+bitand(u, v)    // [0 0 0 1] expected
 
-// Compute the bitwise AND of two matrices of doubles.
-x = [0 1 0 1];
-y = [0 0 1 1];
-z = bitand(x, y)
-expected = [0 0 0 1];
+// Encoded integers such as int8 are accepted:
+u = int8([0 1 0 1]);
+v = int8([0 0 1 1]);
+bitand(u, v)
 
-// Compute the bitwise AND of two matrices of integers.
-x = uint8([0 1 0 1]);
-y = uint8([0 0 1 1]);
-z = bitand(x, y)
+// Operands of mixed types are accepted.
+// The type of the result is decimal if a decimal operand is involved,
+// or the widest integer one otherwise:
+u = [0 1 0 1];
+v = [0 0 1 1];
+z = bitand(u, int64(v));         type(z)      // 1 : decimal representation
+z = bitand(uint8(u), int8(v));   typeof(z)    // uint8
+z = bitand(uint8(u), int32(v));  typeof(z)    // int32
 
-// The types of x and y cannot be mixed (error).
-x = [0 1 0 1];
-y = uint8([0 0 1 1]);
-// z = bitand(x, y)
+// Usage with 2 matrices
+u = [  0  1   0   1
+      54 107 107 54 ];
+v = [  0  0   1   1
+      107 54 34  34 ];
+bitand(u, v)     //  [ 0 0 0 1 ;  34 34 34 34 ]   expected
 
-//  13 is (01101)_2
-//  27 is (11011)_2
-// AND is (01001)_2 which is 9.
-bitand(uint8(13), uint8(27))
-bitand(13, 27)
+// Usage with a distributed scalar:
+bitand([1 2 4 8 9 10 12], 8)  // == bitand([1 2 4 8 9 10 12], [8 8 8 8 8 8 8])
+bitand(4, [1 2 4 8 9 10 12])  // == bitand([4 4 4 4 4 4 4], [1 2 4 8 9 10 12])
+   ]]></programlisting>
+        <para></para>
+        <programlisting role="example"><![CDATA[
+// With encoded integers, bitand(u,v) and u & v are equivalent:
+u = int8([2 3 10]);
+v = int8(13);
+[bitand(u, v) ; u &amp; v]
+// ... but "&" demands operands having the same type:
+u &amp; 13    // mismatching int8- | decimal- encodings
+   ]]></programlisting>
+        <screen><![CDATA[--> u = int8([2 3 10]);
+--> v = int8(13);
+--> [bitand(u, v) ; u &amp; v]
+ ans  =
+  0  1  8
+  0  1  8
+--> u &amp; 13
+Undefined operation for the given operands.
+check or define function %i_h_s for overloading.
+]]></screen>
+        <para></para>
+        <programlisting role="example"><![CDATA[
+// Examples with big decimal integers:
 
+u = sum(2 .^(600+[0 3 9 20 45]))        // ~ 1.46D+194
+bitand(u, 2^601) == 0    // True: The bit #601 is set to 0 in u
+v = 2 .^[603 610];
+bitand(u, v) == 2^603    // True: the bit #603 is the only one common to u and v
+bitand(u, 2^646-1) == 0  // True: 2^646-1 has theoretically bits #1 to #645 set to 1
+                         // BUT -1/(2^646) is <<< %eps and is then ignored:
+                         // 2^646 is actually used instead of 2^646-1.
+                         // Now, 2^646 has bits #1 to #645set to 0. So the result.
+bitand(u, 2^646-2^599)==u  // %T: 2^646-2^599 has actually bits #599 to #645 set to 1
+//
+n = fix(log2(u))       // == 645: Index of the heaviest bit of u
+bitand(u, u+2^(n-53)) == u   // True: Addressing bits below the lightest one has no effect
+bitand(u, u-2^(n-53)) == u   // True: idem
    ]]></programlisting>
     </refsection>
     <refsection role="see also">
         <title>See also</title>
         <simplelist type="inline">
             <member>
-                <link linkend="bitor">bitor</link>
+                <link linkend="and_op">&amp;</link>
+            </member>
+            <member>
+                <link linkend="and">and</link>
             </member>
             <member>
-                <link linkend="bin2dec">bin2dec</link>
+                <link linkend="bitor">bitor</link>
             </member>
             <member>
                 <link linkend="dec2bin">dec2bin</link>
             </member>
         </simplelist>
     </refsection>
+    <refsection role="history">
+        <title>History</title>
+        <revhistory>
+            <revision>
+                <revnumber>6.0</revnumber>
+                <revdescription>
+                    <itemizedlist>
+                        <listitem>
+                            Extension to positive signed encoded integers
+                        </listitem>
+                        <listitem>
+                            Extension to new int64 and uint64 inttypes
+                        </listitem>
+                        <listitem>
+                            Operands of mixed types or inttypes are now accepted.
+                        </listitem>
+                        <listitem>
+                            bitand(scalar, array) and bitand(array, scalar) are now supported.
+                        </listitem>
+                        <listitem>
+                            Extension to decimal numbers greater than
+                            2^32 and even than 2^52,
+                            up to 1.80D+308 (== number_properties("huge")), for
+                            the 52 heaviest encoded bits of their unsigned mantissa.
+                        </listitem>
+                    </itemizedlist>
+                </revdescription>
+            </revision>
+        </revhistory>
+    </refsection>
 </refentry>
index 0616874..746e1cf 100644 (file)
@@ -1,10 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
- * 
+ *
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- * Copyright (C) 2011 - DIGITEO - Michael Baudin
- * Copyright (C) 2008 - INRIA
- * 
+ * Copyright (C) 2016 - Samuel GOUGEON
+ *
  * Copyright (C) 2012 - 2016 - Scilab Enterprises
  *
  * This file is hereby licensed under the terms of the GNU GPL v2.0,
  * and continues to be available under such terms.
  * For more information, see the COPYING file which you should have received
  * along with this program.
- * 
+ *
  -->
-<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns3="http://www.w3.org/1999/xhtml" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:id="bitor" xml:lang="en">
+<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
+xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns3="http://www.w3.org/1999/xhtml"
+xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook"
+xmlns:scilab="http://www.scilab.org" xml:id="bitor" xml:lang="en">
     <refnamediv>
         <refname>bitor</refname>
-        <refpurpose>bitwise OR</refpurpose>
+        <refpurpose>bitwise logical OR between element-wise integers of 2 arrays</refpurpose>
     </refnamediv>
     <refsynopsisdiv>
         <title>Syntax</title>
         <synopsis>
-            z = bitor(x, y)            
+            w = bitor(u, v)
         </synopsis>
     </refsynopsisdiv>
     <refsection>
         <title>Parameters</title>
         <variablelist>
             <varlistentry>
-                <term>x :</term>
+                <term>u, v, w</term>
                 <listitem>
                     <para>
-                        a <literal>m</literal>-by-<literal>n</literal> matrix of doubles
-                        or a <literal>m1</literal>-by-<literal>m2</literal>-by-...-by-<literal>mm</literal> hypermatrix of doubles
-                        or a <literal>m</literal>-by-<literal>n</literal> matrix of unsigned integers (<literal>uint8</literal>, <literal>uint16</literal> or <literal>uint32</literal>).
-                        Must contain positive integer values.
+                        scalars, vectors, matrices or hypermatrices of null or
+                        positive integers encoded as decimal or integer numbers
+                        of any signed or unsigned <link linkend="inttype">inttype</link>.
+                        <warning>Sparse-encoded matrices are not accepted.</warning>
                     </para>
-                </listitem>
-            </varlistentry>
-            <varlistentry>
-                <term>y :</term>
-                <listitem>
                     <para>
-                        a <literal>m</literal>-by-<literal>n</literal> matrix of doubles
-                        or a <literal>m1</literal>-by-<literal>m2</literal>-by-...-by-<literal>mm</literal> hypermatrix of doubles
-                        or a <literal>m</literal>-by-<literal>n</literal> matrix of unsigned integers (<literal>uint8</literal>, <literal>uint16</literal> or <literal>uint32</literal>).
-                        Must contain positive integer values.
+                        If <literal>u</literal> and <literal>v</literal> have
+                        the same type and inttype, this one is the working one.
+                        Otherwise,
+                        <itemizedlist>
+                            <listitem>
+                                if <literal>u</literal> or <literal>v</literal>
+                                is decimal-encoded, the working inttype is 0
+                                (real decimal), even if the other operand
+                                is int64- or uint64-encoded.
+                            </listitem>
+                            <listitem>
+                                if <literal>u</literal> and <literal>v</literal>
+                                are both encoded integers, the working inttype
+                                is the widest of both: int8 &lt; uint8 &lt;
+                                int16 &lt; uint16 &lt; int32 &lt; uint32 &lt;
+                                int64 &lt; uint64.
+                            </listitem>
+                        </itemizedlist>
+                    </para>
+                    <para>
+                        The result <literal>w</literal> gets the type of the
+                        working encoding.
                     </para>
-                </listitem>
-            </varlistentry>
-            <varlistentry>
-                <term>z :</term>
-                <listitem>
                     <para>
-                        a <literal>m</literal>-by-<literal>n</literal> matrix of doubles
-                        or a <literal>m1</literal>-by-<literal>m2</literal>-by-...-by-<literal>mm</literal> hypermatrix of doubles
-                        or a <literal>m</literal>-by-<literal>n</literal> matrix of  integers.
+                        <literal>u</literal> and <literal>v</literal> are
+                        processed element-wise:
+                        <itemizedlist>
+                            <listitem>
+                                If <literal>u</literal> is a single value (scalar)
+                                and <literal>v</literal> is a vector, matrix or
+                                hypermatrix, <literal>u</literal> is priorly
+                                expanded as <literal>u*ones(v)</literal> in order
+                                to operate <literal>u</literal> with every
+                                <literal>v</literal> component.
+                            </listitem>
+                            <listitem>
+                                Conversely, <literal>v</literal> is priorly
+                                expanded as <literal>v*ones(u)</literal> if it
+                                is a single value.
+                            </listitem>
+                            <listitem>
+                                If neither <literal>u</literal> nor <literal>v</literal>
+                                are scalars, they must have the same sizes.
+                            </listitem>
+                        </itemizedlist>
+                    </para>
+                    <para>
+                        <literal>w</literal> gets the sizes of
+                        <literal>u</literal> or/and <literal>v</literal>
+                        arrays.
                     </para>
                 </listitem>
             </varlistentry>
     </refsection>
     <refsection>
         <title>Description</title>
-        <para>
-            Given <varname>x</varname> and <varname>y</varname> two positive integers, this function returns the decimal
-            number <varname>z</varname> whose the binary form is the OR of the binary representations
-            of <varname>x</varname> and <varname>y</varname>.
-        </para>
-        <para>
-            <varname>x</varname>, <varname>y</varname>, <varname>z</varname> have the same size.
-        </para>
+        For each pair of components <literal>u(i)</literal> and <literal>v(i)</literal>,
+        <literal>bitor(u, v)</literal> computes and returns in <literal>w(i)</literal>
+        the bitwise OR conjunction of <literal>u(i)</literal> and <literal>v(i)</literal>
+        bits.
+        <note>
+            With encoded integers, <literal>bitor(u, v)</literal> is equivalent
+            to <literal>u | v</literal>. However, <literal>u | v</literal>
+            demands that <literal>u</literal> and <literal>v</literal> have
+            the same inttype, while <literal>bitor(..)</literal> accepts
+            mixed operands.
+        </note>
+        <note>
+            For any decimal integer <literal>u</literal> greater than 2^52,
+            only its bits from log2(u) down to log2(u)-52 are encoded and can
+            be actually taken into account. Lower bits are not stored and are
+            then ignored.
+        </note>
     </refsection>
     <refsection>
         <title>Examples</title>
         <programlisting role="example"><![CDATA[
-// '110000' : is the binary representation of 48 
-// '100101' : is the binary representation of 37   
-// '110101' : is the binary representation for the OR applied to the binary forms 48 and 37 
-// so the decimal number corresponding to the OR  applied to binary forms 48 and 37 is : 53
-x=48; 
-y=37;
-z=bitor(x,y)
+bitor(25, 33)
+dec2bin([25 33 57]')  // binary representations
+     ]]></programlisting>
+        <screen><![CDATA[--> bitor(25, 33)
+ ans  =
+   57.
 
-// Compute the bitwise OR of two matrices of doubles.
-x=[12,45]; 
-y=[25,49];
-z=bitor(x,y)
+--> dec2bin([25 33 57]'))
+ ans  =
+!011001  !
+!100001  !
+!111001  !
+]]></screen>
+        <para></para>
+        <programlisting role="example"><![CDATA[
+// Between 2 simple rows with zeros and ones
+u = [0 1 0 1];
+v = [0 0 1 1];
+bitor(u, v)  // [0 1 1 1] expected
 
-// Compute the bitwise OR of two matrices of doubles.
-x = [0 1 0 1];
-y = [0 0 1 1];
-z = bitor(x, y)
-expected = [0 1 1 1];
+// Encoded integers such as int8 are accepted:
+u = int8([0 1 0 1]);
+v = int8([0 0 1 1]);
+bitor(u, v)
 
-// Compute the bitwise OR of two matrices of integers.
-x = uint8([0 1 0 1]);
-y = uint8([0 0 1 1]);
-z = bitor(x, y)
+// Operands of mixed types are accepted.
+// The type of the result is decimal if a decimal operand is involved,
+// or the widest integer one otherwise:
+u = [0 1 0 1];
+v = [0 0 1 1];
+z = bitor(u, int64(v));         type(z)       // 1 : decimal representation
+z = bitor(uint8(u), int8(v));   typeof(z)     // uint8
+z = bitor(uint8(u), int32(v));  typeof(z)     // int32
 
-// The types of x and y cannot be mixed (error).
-x = [0 1 0 1];
-y = uint8([0 0 1 1]);
-// z = bitor(x, y)
+// Usage with 2 matrices
+u = [  1  2  4  8
+      25 33 25 33 ];
+v = [  2  4  8 16
+      33 25 57 57 ];
+bitor(u, v)      //  [ 3 6 12 24 ;  57 57 57 57 ]   expected
 
-//  13 is (01101)_2
-//  27 is (11011)_2
-//  OR is (11111)_2 which is 31.
-bitor(uint8(13), uint8(27))
-bitor(13, 27)
+// Usage with a distributed scalar:
+bitor([1 2 4 8 9 10 12], 8)  // == bitor([1 2 4 8 9 10 12], [8 8 8 8 8 8 8])
+bitor(4, [1 2 4 8 9 10 12])  // == bitor([4 4 4 4 4 4 4], [1 2 4 8 9 10 12])
+    ]]></programlisting>
+        <para></para>
+        <programlisting role="example"><![CDATA[
+// With encoded integers, bitor(u,v) and u|v are equivalent:
+u = int8([2 3 10]);
+v = int8(6);
+[bitor(u, v) ; u | v]
+// ... but "|" demands operands with the same type:
+u | 6    // mismatching int8- | decimal- encodings
+   ]]></programlisting>
+        <screen><![CDATA[--> u = int8([2 3 10]);
+--> v = int8(6);
+--> [bitor(u, v) ; u | v]
+ ans  =
+  6  7  14
+  6  7  14
+--> u | 6
+Undefined operation for the given operands.
+check or define function %i_g_s for overloading.
+]]></screen>
+        <para></para>
+        <programlisting role="example"><![CDATA[
+// Examples with big decimal integers:
 
+u = sum(2 .^(600+[0 3 9 20 45]))        // ~ 1.46D+194
+v = 2^630                               // ~ 4.46D+189
+w = bitor(u, v)
+w == (u+v)  // must be true, since u is built without the bit #630
+bitor(u, 2^645) == u   // true, since u has already its bit #645 set to 1
+bitor(u, 2^601) == u   // false
+//
+n = fix(log2(u))       // Index of the heaviest bit of u
+bitor(u, 2^(n-52)) == u   // false: The lightest bit of u was at 0 => This changes it
+bitor(u, 2^(n-53)) == u   // true: Addressing bits below the lightest doesn't change u
    ]]></programlisting>
     </refsection>
     <refsection role="see also">
         <title>See also</title>
         <simplelist type="inline">
             <member>
-                <link linkend="bitand">bitand</link>
+                <link linkend="or_op">|</link>
             </member>
             <member>
-                <link linkend="bin2dec">bin2dec</link>
+                <link linkend="or">or</link>
+            </member>
+            <member>
+                <link linkend="bitxor">bitxor</link>
+            </member>
+            <member>
+                <link linkend="bitand">bitand</link>
             </member>
             <member>
                 <link linkend="dec2bin">dec2bin</link>
             </member>
         </simplelist>
     </refsection>
+    <refsection role="history">
+        <title>History</title>
+        <revhistory>
+            <revision>
+                <revnumber>6.0</revnumber>
+                <revdescription>
+                    <itemizedlist>
+                        <listitem>
+                            Extension to positive signed encoded integers
+                        </listitem>
+                        <listitem>
+                            Extension to new int64 and uint64 inttypes
+                        </listitem>
+                        <listitem>
+                            Operands of mixed types or inttypes are now accepted.
+                        </listitem>
+                        <listitem>
+                            bitor(scalar, array) and bitor(array, scalar) are now supported.
+                        </listitem>
+                        <listitem>
+                            Extension to decimal numbers greater than
+                            2^32 and even than 2^52,
+                            up to 1.80D+308 (== number_properties("huge")), for
+                            the 52 heaviest encoded bits of their unsigned mantissa.
+                        </listitem>
+                    </itemizedlist>
+                </revdescription>
+            </revision>
+        </revhistory>
+    </refsection>
 </refentry>
index da86375..ffac31c 100644 (file)
@@ -2,7 +2,7 @@
 <!--
  *
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- * Copyright (C) 2011 - DIGITEO - Michael Baudin
+ * Copyright (C) 2016 - Samuel GOUGEON
  *
  * Copyright (C) 2012 - 2016 - Scilab Enterprises
  *
  * along with this program.
  *
  -->
-<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns3="http://www.w3.org/1999/xhtml" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:id="bitxor" xml:lang="en">
+<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
+xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns3="http://www.w3.org/1999/xhtml"
+xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook"
+xmlns:scilab="http://www.scilab.org" xml:id="bitxor" xml:lang="en">
     <refnamediv>
         <refname>bitxor</refname>
-        <refpurpose>bitwise XOR</refpurpose>
+        <refpurpose>bitwise logical XOR between element-wise integers of 2 arrays</refpurpose>
     </refnamediv>
     <refsynopsisdiv>
         <title>Syntax</title>
         <synopsis>
-            z = bitxor(x, y)
+            w = bitxor(u, v)
         </synopsis>
     </refsynopsisdiv>
     <refsection>
         <title>Parameters</title>
         <variablelist>
             <varlistentry>
-                <term>x :</term>
+                <term>u, v, w</term>
                 <listitem>
                     <para>
-                        a <literal>m</literal>-by-<literal>n</literal> matrix of doubles
-                        or a <literal>m1</literal>-by-<literal>m2</literal>-by-...-by-<literal>mm</literal> hypermatrix of doubles
-                        or a <literal>m</literal>-by-<literal>n</literal> matrix of unsigned integers (<literal>uint8</literal>, <literal>uint16</literal> or <literal>uint32</literal>).
-                        Must contain positive integer values.
+                        scalars, vectors, matrices or hypermatrices of null or
+                        positive integers encoded as decimal or integer numbers
+                        of any signed or unsigned <link linkend="inttype">inttype</link>.
+                        <warning>Sparse-encoded matrices are not accepted.</warning>
                     </para>
-                </listitem>
-            </varlistentry>
-            <varlistentry>
-                <term>y :</term>
-                <listitem>
                     <para>
-                        a <literal>m</literal>-by-<literal>n</literal> matrix of doubles
-                        or a <literal>m1</literal>-by-<literal>m2</literal>-by-...-by-<literal>mm</literal> hypermatrix of doubles
-                        or a <literal>m</literal>-by-<literal>n</literal> matrix of unsigned integers (<literal>uint8</literal>, <literal>uint16</literal> or <literal>uint32</literal>).
-                        Must contain positive integer values.
+                        If <literal>u</literal> and <literal>v</literal> have
+                        the same type and inttype, this one is the working one.
+                        Otherwise,
+                        <itemizedlist>
+                            <listitem>
+                                if <literal>u</literal> or <literal>v</literal>
+                                is decimal-encoded, the working inttype is 0
+                                (real decimal), even if the other operand
+                                is int64- or uint64-encoded.
+                            </listitem>
+                            <listitem>
+                                if <literal>u</literal> and <literal>v</literal>
+                                are both encoded integers, the working inttype
+                                is the widest of both: int8 &lt; uint8 &lt;
+                                int16 &lt; uint16 &lt; int32 &lt; uint32 &lt;
+                                int64 &lt; uint64.
+                            </listitem>
+                        </itemizedlist>
+                    </para>
+                    <para>
+                        The result <literal>w</literal> gets the type of the
+                        working encoding.
                     </para>
-                </listitem>
-            </varlistentry>
-            <varlistentry>
-                <term>z :</term>
-                <listitem>
                     <para>
-                        a <literal>m</literal>-by-<literal>n</literal> matrix of doubles
-                        or a <literal>m1</literal>-by-<literal>m2</literal>-by-...-by-<literal>mm</literal> hypermatrix of doubles
-                        or a <literal>m</literal>-by-<literal>n</literal> matrix of unsigned integers.
+                        <literal>u</literal> and <literal>v</literal> are
+                        processed element-wise:
+                        <itemizedlist>
+                            <listitem>
+                                If <literal>u</literal> is a single value (scalar)
+                                and <literal>v</literal> is a vector, matrix or
+                                hypermatrix, <literal>u</literal> is priorly
+                                expanded as <literal>u*ones(v)</literal> in order
+                                to operate <literal>u</literal> with every
+                                <literal>v</literal> component.
+                            </listitem>
+                            <listitem>
+                                Conversely, <literal>v</literal> is priorly
+                                expanded as <literal>v*ones(u)</literal> if it
+                                is a single value.
+                            </listitem>
+                            <listitem>
+                                If neither <literal>u</literal> nor <literal>v</literal>
+                                are scalars, they must have the same sizes.
+                            </listitem>
+                        </itemizedlist>
+                    </para>
+                    <para>
+                        The result <literal>w</literal> gets the sizes of
+                        <literal>u</literal> or/and <literal>v</literal>
+                        arrays.
                     </para>
                 </listitem>
             </varlistentry>
     </refsection>
     <refsection>
         <title>Description</title>
-        <para>
-            Given <varname>x</varname> and <varname>y</varname> two positive integers, this function returns the decimal
-            number <varname>z</varname> whose the binary form is the XOR of the binary representations
-            of <varname>x</varname> and <varname>y</varname>.
-        </para>
-        <para>
-        </para>
+        For each pair of components <literal>u(i)</literal> and <literal>v(i)</literal>,
+        <literal>bitxor(u, v)</literal> computes and returns in <literal>w(i)</literal>
+        the bitwise XOR eXclusive-OR conjunction of <literal>u(i)</literal> and
+        <literal>v(i)</literal>
+        bits.
+        <note>
+            With encoded integers, <literal>bitxor(u,v)</literal> is equivalent
+            to <literal>(u | v) &amp; ~(u &amp; v)</literal>.
+            However, both <literal>|</literal> and <literal>&amp;</literal>
+            operators demand that <literal>u</literal> and <literal>v</literal>
+            have the same inttype, while <literal>bitxor(..)</literal> accepts
+            mixed operands.
+        </note>
+        <note>
+            For any decimal integer <literal>u</literal> greater than 2^52,
+            only its bits from log2(u) down to log2(u)-52 are encoded and can
+            be actually taken into account. Lower bits are not stored and are
+            then ignored.
+        </note>
     </refsection>
     <refsection>
         <title>Examples</title>
         <programlisting role="example"><![CDATA[
-// Compute the bitwise XOR of two matrices of doubles.
-x = [0 1 0 1];
-y = [0 0 1 1];
-z = bitxor(x, y)
-expected = [0 1 1 0];
+bitxor(25, 33)
+dec2bin([25 33 56]')  // binary representations
+     ]]></programlisting>
+        <screen><![CDATA[--> bitxor(25, 33)
+ ans  =
+   56.
 
-// Compute the bitwise XOR of two matrices of integers.
-x = uint8([0 1 0 1]);
-y = uint8([0 0 1 1]);
-z = bitxor(x, y)
+--> dec2bin([25 33 56]'))
+ ans  =
+!011001  !
+!100001  !
+!111000  !
+]]></screen>
+        <para></para>
+        <programlisting role="example"><![CDATA[
+// Between 2 simple rows with zeros and ones
+u = [0 1 0 1];
+v = [0 0 1 1];
+bitxor(u, v)  // [0 1 1 0] expected
 
-// The types of x and y cannot be mixed (error).
-x = [0 1 0 1];
-y = uint8([0 0 1 1]);
-// z = bitxor(x, y)
+// Encoded integers such as int8 are accepted:
+u = int8([0 1 0 1]);
+v = int8([0 0 1 1]);
+bitxor(u, v)
 
-//  13 is (01101)_2
-//  27 is (11011)_2
-// XOR is (10110)_2 which is 22.
-bitxor(uint8(13), uint8(27))
-bitxor(13, 27)
+// Operands of mixed types are accepted.
+// The type of the result is decimal if a decimal operand is involved,
+// or the widest integer one otherwise:
+u = [0 1 0 1];
+v = [0 0 1 1];
+z = bitxor(u, int64(v));          type(z)       // 1 : decimal representation
+z = bitxor(uint8(u), int8(v));    typeof(z)     // uint8
+z = bitxor(uint8(u), int32(v));   typeof(z)     // int32
 
+// Usage with 2 matrices
+u = [  1    2    4   8
+      25   33   25  33 ];
+v = [  2  2+4  4+8  16
+      33   25   56  56 ];
+bitxor(u, v)      //  [ 3 4 8 24 ;  56 56 33 25 ]   expected
+
+// Usage with a distributed scalar:
+bitxor([1 2 4 8 9 10 12], 8)  // == bitxor([1 2 4 8 9 10 12], [8 8 8 8 8 8 8])
+bitxor(4, [1 2 4 8 9 10 12])  // == bitxor([4 4 4 4 4 4 4], [1 2 4 8 9 10 12])
    ]]></programlisting>
+        <para></para>
+        <programlisting role="example"><![CDATA[
+// Examples with big decimal integers:
+
+u = sum(2 .^(600+[0 3 9 20 45]))        // ~ 1.46D+194
+bitxor(u, 2^630) == u+2^630  // true: XOR sets to 1 the missing bit #630 of u, so adds it
+bitxor(u, 2^645) == u-2^645  // true: XOR sets to 0 the existing bit #645 of u, so removes it
+bitxor(u, 2^601) == u        // false: The bit #601 is 0 in u. XOR changes it.
+//
+n = fix(log2(u))           // 645 == Index of the heaviest bit of u
+bitxor(u, 2^(n-52)) == u   // false: The lightest bit of u was at 0 => This changes it
+bitxor(u, 2^(n-53)) == u   // true: Addressing bits below the lightest one doesn't change u
+   ]]></programlisting>
+    </refsection>
+    <refsection role="see also">
+        <title>See also</title>
+        <simplelist type="inline">
+            <member>
+                <link linkend="or_op">|</link>
+            </member>
+            <member>
+                <link linkend="or">or</link>
+            </member>
+            <member>
+                <link linkend="bitor">bitor</link>
+            </member>
+            <member>
+                <link linkend="bitand">bitand</link>
+            </member>
+            <member>
+                <link linkend="dec2bin">dec2bin</link>
+            </member>
+        </simplelist>
+    </refsection>
+    <refsection role="history">
+        <title>History</title>
+        <revhistory>
+            <revision>
+                <revnumber>6.0</revnumber>
+                <revdescription>
+                    <itemizedlist>
+                        <listitem>
+                            Extension to positive signed encoded integers
+                        </listitem>
+                        <listitem>
+                            Extension to new int64 and uint64 inttypes
+                        </listitem>
+                        <listitem>
+                            Operands of mixed types or inttypes are now accepted.
+                        </listitem>
+                        <listitem>
+                            bitxor(scalar, array) and bitxor(array, scalar) are now supported.
+                        </listitem>
+                        <listitem>
+                            Extension to decimal numbers greater than
+                            2^32 and even than 2^52,
+                            up to 1.80D+308 (== number_properties("huge")), for
+                            the 52 heaviest encoded bits of their unsigned mantissa.
+                        </listitem>
+                    </itemizedlist>
+                </revdescription>
+            </revision>
+        </revhistory>
     </refsection>
 </refentry>
diff --git a/scilab/modules/elementary_functions/help/ja_JP/bitwise/bitand.xml b/scilab/modules/elementary_functions/help/ja_JP/bitwise/bitand.xml
deleted file mode 100644 (file)
index bcffabe..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- * 
- * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- * Copyright (C) 2011 - DIGITEO - Michael Baudin
- * Copyright (C) 2008 - INRIA
- * 
- * Copyright (C) 2012 - 2016 - Scilab Enterprises
- *
- * This file is hereby licensed under the terms of the GNU GPL v2.0,
- * pursuant to article 5.3.4 of the CeCILL v.2.1.
- * This file was originally licensed under the terms of the CeCILL v2.1,
- * and continues to be available under such terms.
- * For more information, see the COPYING file which you should have received
- * along with this program.
- * 
- -->
-<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns5="http://www.w3.org/1999/xhtml" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:id="bitand" xml:lang="ja">
-    <refnamediv>
-        <refname>bitand</refname>
-        <refpurpose>ビット単位の論理積(AND)</refpurpose>
-    </refnamediv>
-    <refsynopsisdiv>
-        <title>呼び出し手順</title>
-        <synopsis>
-            z = bitand(x,y)
-        </synopsis>
-    </refsynopsisdiv>
-    <refsection>
-        <title>パラメータ</title>
-        <variablelist>
-            <varlistentry>
-                <term>x :</term>
-                <listitem>
-                    <para>
-                        <literal>m</literal>行<literal>n</literal>列の行列(double)
-                        または<literal>m1</literal> x <literal>m2</literal> 
-                        x ... x <literal>mm</literal> ハイパー行列(double)
-                        または符合なし整数(<literal>uint8</literal>, 
-                        <literal>uint16</literal> または <literal>uint32</literal>)の
-                        <literal>m</literal>行<literal>n</literal>列行列.
-                        値は正の整数値である必要があります.
-                    </para>
-                </listitem>
-            </varlistentry>
-            <varlistentry>
-                <term>y :</term>
-                <listitem>
-                    <para>
-                        <literal>m</literal>行<literal>n</literal>列の行列(double)
-                        または<literal>m1</literal> x <literal>m2</literal> x ... x 
-                        <literal>mm</literal> ハイパー行列(double)
-                        または符合なし整数(<literal>uint8</literal>, 
-                        <literal>uint16</literal> または <literal>uint32</literal>)の
-                        <literal>m</literal>行<literal>n</literal>列行列.
-                        値は正の整数値である必要があります.
-                    </para>
-                </listitem>
-            </varlistentry>
-            <varlistentry>
-                <term>z :</term>
-                <listitem>
-                    <para>
-                        <literal>m</literal>行<literal>n</literal>列の
-                        行列(double)または<literal>m1</literal> x 
-                        <literal>m2</literal> x ... x <literal>mm</literal> 
-                        ハイパー行列(double)
-                        または符合なし整数.
-                    </para>
-                </listitem>
-            </varlistentry>
-        </variablelist>
-    </refsection>
-    <refsection>
-        <title>説明</title>
-        <para>
-            2つの正の整数 <varname>x</varname> および <varname>y</varname> 
-            を指定すると,この関数は2進形式が
-            <varname>x</varname> および <varname>y</varname> の
-            2進形式の論理積となるような10進数を返します.
-        </para>
-        <para>
-            <varname>x</varname>, <varname>y</varname>, <varname>z</varname>
-            の大きさは同じです. 
-        </para>
-    </refsection>
-    <refsection>
-        <title>例</title>
-        <programlisting role="example"><![CDATA[
-// '1010110' : is the binary representation of 86 
-// '1011011' : is the binary representation of 91   
-// '1010010' : is the binary representation for the AND of binary representation 86 and 91 
-// so the decimal number corresponding to the AND  applied to binary forms 86 and 91 is : 82
-x=86; 
-y=91;
-z=bitand(x,y)
-// Compute the bitwise AND of two matrices of doubles.
-x=[12,45];
-y=[25,49];
-z=bitand(x,y)
-// Compute the bitwise AND of two matrices of doubles.
-x = [0 1 0 1];
-y = [0 0 1 1];
-z = bitand(x, y)
-expected = [0 0 0 1];
-// Compute the bitwise AND of two matrices of integers.
-x = uint8([0 1 0 1]);
-y = uint8([0 0 1 1]);
-z = bitand(x, y)
-// The types of x and y cannot be mixed (error).
-x = [0 1 0 1];
-y = uint8([0 0 1 1]);
-// z = bitand(x, y)
-//  13 is (01101)_2
-//  27 is (11011)_2
-// AND is (01001)_2 which is 9.
-bitand(uint8(13), uint8(27))
-bitand(13, 27)
-   ]]></programlisting>
-    </refsection>
-    <refsection role="see also">
-        <title>参照</title>
-        <simplelist type="inline">
-            <member>
-                <link linkend="bitor">bitor</link>
-            </member>
-            <member>
-                <link linkend="bin2dec">bin2dec</link>
-            </member>
-            <member>
-                <link linkend="dec2bin">dec2bin</link>
-            </member>
-        </simplelist>
-    </refsection>
-</refentry>
diff --git a/scilab/modules/elementary_functions/help/ja_JP/bitwise/bitor.xml b/scilab/modules/elementary_functions/help/ja_JP/bitwise/bitor.xml
deleted file mode 100644 (file)
index ebc9677..0000000
+++ /dev/null
@@ -1,216 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- * 
- * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- * Copyright (C) 2011 - DIGITEO - Michael Baudin
- * Copyright (C) 2008 - INRIA
- * 
- * Copyright (C) 2012 - 2016 - Scilab Enterprises
- *
- * This file is hereby licensed under the terms of the GNU GPL v2.0,
- * pursuant to article 5.3.4 of the CeCILL v.2.1.
- * This file was originally licensed under the terms of the CeCILL v2.1,
- * and continues to be available under such terms.
- * For more information, see the COPYING file which you should have received
- * along with this program.
- * 
- -->
-
-<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns5="http://www.w3.org/1999/xhtml" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:id="bitor" xml:lang="ja">
-    
-    <refnamediv>
-        
-        <refname>bitor</refname>
-        
-        <refpurpose>ビット単位の論理和(OR)</refpurpose>
-        
-    </refnamediv>
-    
-    <refsynopsisdiv>
-        
-        <title>呼び出し手順</title>
-        
-        <synopsis>
-            
-            z = bitor(x,y)
-        </synopsis>
-        
-    </refsynopsisdiv>
-    
-    <refsection>
-        
-        <title>引数</title>
-        
-        <variablelist>
-            
-            <varlistentry>
-                
-                <term>x :</term>
-                
-                <listitem>
-                    
-                    <para>
-                        
-                        <literal>m</literal>行<literal>n</literal>列の行列(double)
-                        
-                        または<literal>m1</literal> x <literal>m2</literal> x ... x <literal>mm</literal>
-                        
-                        ハイパー行列(double)
-                        
-                        または符合なし整数(<literal>uint8</literal>, <literal>uint16</literal>または
-                        
-                        <literal>uint32</literal>)の<literal>m</literal>行<literal>n</literal>列行列.
-                        
-                        値は正の整数値である必要があります.
-                        
-                    </para>
-                    
-                </listitem>
-                
-            </varlistentry>
-            
-            <varlistentry>
-                
-                <term>y :</term>
-                
-                <listitem>
-                    
-                    <para>
-                        
-                        <literal>m</literal>行<literal>n</literal>列の行列(double)
-                        
-                        または<literal>m1</literal> x <literal>m2</literal> x ... x <literal>mm</literal>           
-                        
-                        ハイパー行列(double)
-                        
-                        または符合なし整数(<literal>uint8</literal>, <literal>uint16</literal>または
-                        
-                        <literal>uint32</literal>)の<literal>m</literal>行<literal>n</literal>列行列.
-                        
-                        値は正の整数値である必要があります.
-                        
-                    </para>
-                    
-                </listitem>
-                
-            </varlistentry>
-            
-            <varlistentry>
-                
-                <term>z :</term>
-                
-                <listitem>
-                    
-                    <para>
-                        
-                        <literal>m</literal>行<literal>n</literal>列の行列(double)
-                        
-                        または<literal>m1</literal> x <literal>m2</literal> x ... x <literal>mm</literal>
-                        
-                        ハイパー行列(double)
-                        
-                        または<literal>m</literal>行<literal>n</literal>列の整数の行列.
-                        
-                    </para>
-                    
-                </listitem>
-                
-            </varlistentry>
-            
-        </variablelist>
-        
-    </refsection>
-    
-    <refsection>
-        
-        <title>説明</title>
-        
-        <para>
-            
-            2つの正の整数<varname>x</varname>および<varname>y</varname>を指定すると,この関数は2進形式が
-            
-            <varname>x</varname>および<varname>y</varname>の2進形式の論理和となるような
-            
-            10進数<varname>z</varname>を返します.
-            
-        </para>
-        
-        <para>
-            
-            <varname>x</varname>, <varname>y</varname>, <varname>z</varname> 
-            
-            の大きさは同じです. 
-            
-        </para>
-        
-    </refsection>
-    
-    <refsection>
-        
-        <title>例</title>
-        
-        <programlisting role="example"><![CDATA[
-// '110000' : is the binary representation of 48 
-// '100101' : is the binary representation of 37   
-// '110101' : is the binary representation for the OR applied to the binary forms 48 and 37 
-// so the decimal number corresponding to the OR  applied to binary forms 48 and 37 is : 53
-x=48; 
-y=37;
-z=bitor(x,y)
-// Compute the bitwise OR of two matrices of doubles.
-x=[12,45]; 
-y=[25,49];
-z=bitor(x,y)
-// Compute the bitwise OR of two matrices of doubles.
-x = [0 1 0 1];
-y = [0 0 1 1];
-z = bitor(x, y)
-expected = [0 1 1 1];
-// Compute the bitwise OR of two matrices of integers.
-x = uint8([0 1 0 1]);
-y = uint8([0 0 1 1]);
-z = bitor(x, y)
-// The types of x and y cannot be mixed (error).
-x = [0 1 0 1];
-y = uint8([0 0 1 1]);
-// z = bitor(x, y)
-//  13 is (01101)_2
-//  27 is (11011)_2
-//  OR is (11111)_2 which is 31.
-bitor(uint8(13), uint8(27))
-bitor(13, 27)
-   ]]></programlisting>
-        
-    </refsection>
-    
-    <refsection role="see also">
-        
-        <title>参照</title>
-        
-        <simplelist type="inline">
-            
-            <member>
-                
-                <link linkend="bitand">bitand</link>
-                
-            </member>
-            
-            <member>
-                
-                <link linkend="bin2dec">bin2dec</link>
-                
-            </member>
-            
-            <member>
-                
-                <link linkend="dec2bin">dec2bin</link>
-                
-            </member>
-            
-        </simplelist>
-        
-    </refsection>
-    
-</refentry>
-
diff --git a/scilab/modules/elementary_functions/help/ja_JP/bitwise/bitxor.xml b/scilab/modules/elementary_functions/help/ja_JP/bitwise/bitxor.xml
deleted file mode 100644 (file)
index 364051a..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--
- * 
- * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- * Copyright (C) 2011 - DIGITEO - Michael Baudin
- * 
- * Copyright (C) 2012 - 2016 - Scilab Enterprises
- *
- * This file is hereby licensed under the terms of the GNU GPL v2.0,
- * pursuant to article 5.3.4 of the CeCILL v.2.1.
- * This file was originally licensed under the terms of the CeCILL v2.1,
- * and continues to be available under such terms.
- * For more information, see the COPYING file which you should have received
- * along with this program.
- * 
- -->
-
-<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns3="http://www.w3.org/1999/xhtml" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:id="bitxor" xml:lang="ja">
-    
-    <refnamediv>
-        
-        <refname>bitxor</refname>
-        
-        <refpurpose>ビット単位の排他的論理和(XOR)</refpurpose>
-        
-    </refnamediv>
-    
-    <refsynopsisdiv>
-        
-        <title>呼び出し手順</title>
-        
-        <synopsis>
-            
-            z = bitxor(x, y)
-            
-        </synopsis>
-        
-    </refsynopsisdiv>
-    
-    <refsection>
-        
-        <title>引数</title>
-        
-        <variablelist>
-            
-            <varlistentry>
-                
-                <term>x :</term>
-                
-                <listitem>
-                    
-                    <para>
-                        
-                        <literal>m</literal>行<literal>n</literal>列の行列(double)
-                        
-                        または<literal>m1</literal> x <literal>m2</literal> x ... x <literal>mm</literal>
-                        
-                        ハイパー行列(double)
-                        
-                        または符合なし整数(<literal>uint8</literal>, <literal>uint16</literal>または
-                        
-                        <literal>uint32</literal>)の<literal>m</literal>行<literal>n</literal>列行列.
-                        
-                        値は正の整数値である必要があります.
-                        
-                    </para>
-                    
-                </listitem>
-                
-            </varlistentry>
-            
-            <varlistentry>
-                
-                <term>y :</term>
-                
-                <listitem>
-                    
-                    <para>
-                        
-                        <literal>m</literal>行<literal>n</literal>列の行列(double)
-                        
-                        または<literal>m1</literal> x <literal>m2</literal> x ... x <literal>mm</literal>
-                        
-                        ハイパー行列(double)
-                        
-                        または符合なし整数(<literal>uint8</literal>, <literal>uint16</literal>または
-                        
-                        <literal>uint32</literal>)の<literal>m</literal>行<literal>n</literal>列行列.
-                        
-                        値は正の整数値である必要があります.
-                        
-                    </para>
-                    
-                </listitem>
-                
-            </varlistentry>
-            
-            <varlistentry>
-                
-                <term>z :</term>
-                
-                <listitem>
-                    
-                    <para>
-                        
-                        <literal>m</literal>行<literal>n</literal>列の行列(double)
-                        
-                        または<literal>m1</literal> x <literal>m2</literal> x ... x <literal>mm</literal>
-                        
-                        ハイパー行列(double)
-                        
-                        または<literal>m</literal>行<literal>n</literal>列の符号無し整数の行列.
-                        
-                    </para>
-                    
-                </listitem>
-                
-            </varlistentry>
-            
-        </variablelist>
-        
-    </refsection>
-    
-    <refsection>
-        
-        <title>説明</title>
-        
-        <para>
-            
-            2つの正の整数<varname>x</varname>および<varname>y</varname>を指定すると,
-            
-            この関数は2進形式が
-            
-            <varname>x</varname>および <varname>y</varname>の2進形式の排他的論理和
-            
-            となるような10進数<varname>z</varname>を返します.
-            
-        </para>
-        
-        <para>
-            
-        </para>
-        
-    </refsection>
-    
-    <refsection>
-        
-        <title>例</title>
-        
-        <programlisting role="example"><![CDATA[
-// 2つのdouble行列のビット毎のXORを計算
-x = [0 1 0 1];
-y = [0 0 1 1];
-z = bitxor(x, y)
-expected = [0 1 1 1];
-
-// 2つの整数行列のビット毎のXORを計算
-x = uint8([0 1 0 1]);
-y = uint8([0 0 1 1]);
-z = bitxor(x, y)
-
-// xとyの型を混在できません (エラー).
-x = [0 1 0 1];
-y = uint8([0 0 1 1]);
-// z = bitxor(x, y)
-
-//  13 は (01101)_2 です
-//  27 は (11011)_2 です
-// XOR は (10110)_2 , つまり 22です.
-bitxor(uint8(13), uint8(27))
-bitxor(13, 27)
-
-   ]]></programlisting>
-        
-    </refsection>
-    
-</refentry>
-
diff --git a/scilab/modules/elementary_functions/help/pt_BR/bitwise/bitand.xml b/scilab/modules/elementary_functions/help/pt_BR/bitwise/bitand.xml
deleted file mode 100644 (file)
index 4e670c5..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
- * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- * Copyright (C) 2008 - INRIA
- * 
- * Copyright (C) 2012 - 2016 - Scilab Enterprises
- *
- * This file is hereby licensed under the terms of the GNU GPL v2.0,
- * pursuant to article 5.3.4 of the CeCILL v.2.1.
- * This file was originally licensed under the terms of the CeCILL v2.1,
- * and continues to be available under such terms.
- * For more information, see the COPYING file which you should have received
- * along with this program.
- *
- -->
-<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns3="http://www.w3.org/1999/xhtml" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:id="bitand" xml:lang="pt">
-    <refnamediv>
-        <refname>bitand</refname>
-        <refpurpose>AND ("e") aplicado às representações binárias dos argumentos
-            de entrada
-        </refpurpose>
-    </refnamediv>
-    <refsynopsisdiv>
-        <title>Seqüência de Chamamento</title>
-        <synopsis>[z]=bitand(x,y)</synopsis>
-    </refsynopsisdiv>
-    <refsection>
-        <title>Parâmetros</title>
-        <variablelist>
-            <varlistentry>
-                <term>x</term>
-                <listitem>
-                    <para>escalar/vetor/matriz/hipermatriz de inteiros positivos</para>
-                </listitem>
-            </varlistentry>
-            <varlistentry>
-                <term>y</term>
-                <listitem>
-                    <para>escalar/vetor/matriz/hipermatriz de inteiros positivos</para>
-                </listitem>
-            </varlistentry>
-            <varlistentry>
-                <term>z</term>
-                <listitem>
-                    <para>escalar/vetor/matriz/hipermatriz de inteiros positivos</para>
-                </listitem>
-            </varlistentry>
-        </variablelist>
-    </refsection>
-    <refsection>
-        <title>Descrição</title>
-        <para>
-            Dado <literal>x</literal> e <literal>y</literal> dois inteiros
-            positivos, esta função retorna <literal>z</literal> o número decimal cuja
-            forma binária é o AND das representações binárias de <literal>x</literal>
-            e <literal>y</literal>. (<literal>x</literal>, <literal>y</literal> e
-            <literal>z</literal> devem ter o mesmo tamanho). Se a dimensão de
-            <literal>x</literal> (e <literal>y</literal>) é superior a 1, então
-            <literal>z(i)</literal> é igual a
-            <literal>bitand(x(i),y(i))</literal>
-        </para>
-    </refsection>
-    <refsection>
-        <title>Exemplos</title>
-        <programlisting role="example"><![CDATA[ 
-// exemplo 1 :
-// '1010110' : é a representação binária de 86 
-// '1011011' : é a representação binária de 91   
-// '1010010' : é a representação binária para AND aplicado às formas binárias de 86 e 91 
-// então, o número decimal correspondente a AND aplicado às formas binárias de 86 and 91 is : 82
-x=86; y=91
-z=bitand(x,y)
-
-// exemplo 2 :
-x=[12,45],y=[25,49]
-z=bitand(x,y)
- ]]></programlisting>
-    </refsection>
-    <refsection role="see also">
-        <title>Ver Também</title>
-        <simplelist type="inline">
-            <member>
-                <link linkend="bitor">bitor</link>
-            </member>
-            <member>
-                <link linkend="bin2dec">bin2dec</link>
-            </member>
-            <member>
-                <link linkend="dec2bin">dec2bin</link>
-            </member>
-        </simplelist>
-    </refsection>
-</refentry>
diff --git a/scilab/modules/elementary_functions/help/pt_BR/bitwise/bitor.xml b/scilab/modules/elementary_functions/help/pt_BR/bitwise/bitor.xml
deleted file mode 100644 (file)
index b7f03ee..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
- * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- * Copyright (C) 2008 - INRIA
- * 
- * Copyright (C) 2012 - 2016 - Scilab Enterprises
- *
- * This file is hereby licensed under the terms of the GNU GPL v2.0,
- * pursuant to article 5.3.4 of the CeCILL v.2.1.
- * This file was originally licensed under the terms of the CeCILL v2.1,
- * and continues to be available under such terms.
- * For more information, see the COPYING file which you should have received
- * along with this program.
- *
- -->
-<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns3="http://www.w3.org/1999/xhtml" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:id="bitor" xml:lang="pt">
-    <refnamediv>
-        <refname>bitor</refname>
-        <refpurpose>OR ("ou") aplicado às representações binárias dos argumentos
-            de entrada
-        </refpurpose>
-    </refnamediv>
-    <refsynopsisdiv>
-        <title>Seqüência de Chamamento</title>
-        <synopsis>[z]=bitor(x,y)</synopsis>
-    </refsynopsisdiv>
-    <refsection>
-        <title>Parâmetros</title>
-        <variablelist>
-            <varlistentry>
-                <term>x</term>
-                <listitem>
-                    <para>escalar/vetor/matriz/hipermatriz de inteiros positivos</para>
-                </listitem>
-            </varlistentry>
-            <varlistentry>
-                <term>y</term>
-                <listitem>
-                    <para>escalar/vetor/matriz/hipermatriz de inteiros positivos</para>
-                </listitem>
-            </varlistentry>
-            <varlistentry>
-                <term>z</term>
-                <listitem>
-                    <para>escalar/vetor/matriz/hipermatriz de inteiros positivos</para>
-                </listitem>
-            </varlistentry>
-        </variablelist>
-    </refsection>
-    <refsection>
-        <title>Descrição</title>
-        <para>
-            Dado <literal>x</literal> e <literal>y</literal> dois inteiros
-            positivos, esta função retorna <literal>z</literal> o número decimal cuja
-            forma binária é o OR das representações binárias de <literal>x</literal> e
-            <literal>y</literal> (<literal>x</literal>, <literal>y</literal> e
-            <literal>z</literal> devem ter o mesmo tamanho). Se a dimensão de
-            <literal>x</literal> é superior a 1, então <literal>z(i)</literal> é igual
-            a <literal>bitor(x(i),y(i))</literal>
-        </para>
-    </refsection>
-    <refsection>
-        <title>Exemplos</title>
-        <programlisting role="example"><![CDATA[ 
-// exemplo 1 :
-// '110000' : é a representação binária de 48 
-// '100101' : é a representação binária de 37   
-// '110101' : é a representação binária para OR aplicado às formas binárias de 48 e 37 
-// então, o número decimal correspondente a OR aplicado às formas binárias de 48 e 37 é : 53
-x=48; y=37
-z=bitor(x,y)
-
-// exemplo 2 :
-x=[12,45]; y=[25,49]
-z=bitor(x,y)
- ]]></programlisting>
-    </refsection>
-    <refsection role="see also">
-        <title>Ver Também</title>
-        <simplelist type="inline">
-            <member>
-                <link linkend="bitand">bitand</link>
-            </member>
-            <member>
-                <link linkend="bin2dec">bin2dec</link>
-            </member>
-            <member>
-                <link linkend="dec2bin">dec2bin</link>
-            </member>
-        </simplelist>
-    </refsection>
-</refentry>
diff --git a/scilab/modules/elementary_functions/help/ru_RU/bitwise/bitand.xml b/scilab/modules/elementary_functions/help/ru_RU/bitwise/bitand.xml
deleted file mode 100644 (file)
index ce9fd81..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- * 
- * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- * Copyright (C) 2011 - DIGITEO - Michael Baudin
- * Copyright (C) 2008 - INRIA
- * 
- * Copyright (C) 2012 - 2016 - Scilab Enterprises
- *
- * This file is hereby licensed under the terms of the GNU GPL v2.0,
- * pursuant to article 5.3.4 of the CeCILL v.2.1.
- * This file was originally licensed under the terms of the CeCILL v2.1,
- * and continues to be available under such terms.
- * For more information, see the COPYING file which you should have received
- * along with this program.
- * 
- -->
-<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns3="http://www.w3.org/1999/xhtml" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:id="bitand" xml:lang="ru">
-    <refnamediv>
-        <refname>bitand</refname>
-        <refpurpose>побитовое И</refpurpose>
-    </refnamediv>
-    <refsynopsisdiv>
-        <title>Синтаксис</title>
-        <synopsis> z = bitand(x, y) </synopsis>
-    </refsynopsisdiv>
-    <refsection>
-        <title>Параметры</title>
-        <variablelist>
-            <varlistentry>
-                <term>x :</term>
-                <listitem>
-                    <para>
-                        матрица чисел двойной точности (<literal>double</literal>) размером
-                        <literal>m</literal> на <literal>n</literal>
-                        или гиперматрица чисел двойной точности размером
-                        <literal>m1</literal> на <literal>m2</literal> на ... на
-                        <literal>mm</literal> или матрица беззнаковых целых чисел
-                        (<literal>uint8</literal>, <literal>uint16</literal> или
-                        <literal>uint32</literal>) размером <literal>m</literal> на
-                        <literal>n</literal>. Должна содержать положительные целые значения.
-                    </para>
-                </listitem>
-            </varlistentry>
-            <varlistentry>
-                <term>y :</term>
-                <listitem>
-                    <para>
-                        матрица чисел двойной точности размером <literal>m</literal> на
-                        <literal>n</literal> или гиперматрица чисел двойной точности
-                        размером <literal>m1</literal> на <literal>m2</literal> на ... на
-                        <literal>mm</literal> или матрица беззнаковых целых чисел
-                        (<literal>uint8</literal>, <literal>uint16</literal> или
-                        <literal>uint32</literal>) размером <literal>m</literal> на
-                        <literal>n</literal>.
-                    </para>
-                </listitem>
-            </varlistentry>
-            <varlistentry>
-                <term>z :</term>
-                <listitem>
-                    <para>
-                        матрица чисел двойной точности размером <literal>m</literal> на
-                        <literal>n</literal> или гиперматрица чисел двойной точности
-                        размером <literal>m1</literal> на <literal>m2</literal> на ... на
-                        <literal>mm</literal> или матрица беззнаковых целых чисел размером
-                        <literal>m</literal> на <literal>n</literal>.
-                    </para>
-                </listitem>
-            </varlistentry>
-        </variablelist>
-    </refsection>
-    <refsection>
-        <title>Описание</title>
-        <para>
-            Для заданных двух положительных целых чисел <varname>x</varname>, <varname>y</varname> эта функция возвращает десятеричное число <varname>z</varname>, чья двоичная форма является результатом операции И над двоичными представлениями <varname>x</varname> и <varname>y</varname>.
-        </para>
-        <para>
-            <varname>x</varname>, <varname>y</varname>, <varname>z</varname> имеют один и тот же размер.
-        </para>
-    </refsection>
-    <refsection>
-        <title>Примеры</title>
-        <programlisting role="example"><![CDATA[
-// '1010110' : двоичное представление 86 
-// '1011011' : двоичное представление 91   
-// '1010010' : двоичное представление результата операции И над двоичными представлениями 86 и 91 
-// так что десятеричное число, соответствующее результату операции И над двоичными формами 86 и 91 равно : 82
-x=86; 
-y=91;
-z=bitand(x,y)
-
-// Вычислить побитовое И двух матриц чисел типа double.
-x=[12,45];
-y=[25,49];
-z=bitand(x,y)
-
-// Вычислить побитовое И двух матриц чисел типа double.
-x = [0 1 0 1];
-y = [0 0 1 1];
-z = bitand(x, y)
-expected = [0 0 0 1];
-
-// Вычислить побитовое И двух матриц целочисленных значений.
-x = uint8([0 1 0 1]);
-y = uint8([0 0 1 1]);
-z = bitand(x, y)
-
-// Типы переменных x и y нельзя смешивать (ошибка).
-x = [0 1 0 1];
-y = uint8([0 0 1 1]);
-// z = bitand(x, y)
-
-//  13 соответствует (01101)_2
-//  27 соответствует (11011)_2
-// Операция И (01001)_2, что соответствует 9.
-bitand(uint8(13), uint8(27))
-bitand(13, 27)
-
-   ]]></programlisting>
-    </refsection>
-    <refsection role="see also">
-        <title>Смотрите также</title>
-        <simplelist type="inline">
-            <member>
-                <link linkend="bitor">bitor</link>
-            </member>
-            <member>
-                <link linkend="bin2dec">bin2dec</link>
-            </member>
-            <member>
-                <link linkend="dec2bin">dec2bin</link>
-            </member>
-        </simplelist>
-    </refsection>
-</refentry>
diff --git a/scilab/modules/elementary_functions/help/ru_RU/bitwise/bitor.xml b/scilab/modules/elementary_functions/help/ru_RU/bitwise/bitor.xml
deleted file mode 100644 (file)
index 70b8e06..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- * 
- * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- * Copyright (C) 2011 - DIGITEO - Michael Baudin
- * Copyright (C) 2008 - INRIA
- * 
- * Copyright (C) 2012 - 2016 - Scilab Enterprises
- *
- * This file is hereby licensed under the terms of the GNU GPL v2.0,
- * pursuant to article 5.3.4 of the CeCILL v.2.1.
- * This file was originally licensed under the terms of the CeCILL v2.1,
- * and continues to be available under such terms.
- * For more information, see the COPYING file which you should have received
- * along with this program.
- * 
- -->
-<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns3="http://www.w3.org/1999/xhtml" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:id="bitor" xml:lang="ru">
-    <refnamediv>
-        <refname>bitor</refname>
-        <refpurpose>побитовое ИЛИ</refpurpose>
-    </refnamediv>
-    <refsynopsisdiv>
-        <title>Синтаксис</title>
-        <synopsis>
-            z = bitor(x, y)            
-        </synopsis>
-    </refsynopsisdiv>
-    <refsection>
-        <title>Параметры</title>
-        <variablelist>
-            <varlistentry>
-                <term>x :</term>
-                <listitem>
-                    <para>
-                        матрица чисел двойной точности (<literal>double</literal>) размером <literal>m</literal> на <literal>n</literal>
-                        или гиперматрица чисел двойной точности размером <literal>m1</literal> на <literal>m2</literal> на ... на <literal>mm</literal>
-                        или матрица беззнаковых целых чисел (<literal>uint8</literal>, <literal>uint16</literal> или <literal>uint32</literal>) размером <literal>m</literal> на <literal>n</literal>. Должна содержать положительные целые значения.
-                    </para>
-                </listitem>
-            </varlistentry>
-            <varlistentry>
-                <term>y :</term>
-                <listitem>
-                    <para>
-                        матрица чисел двойной точности (<literal>double</literal>) размером <literal>m</literal> на <literal>n</literal>
-                        или гиперматрица чисел двойной точности размером <literal>m1</literal> на <literal>m2</literal> на ... на <literal>mm</literal>
-                        или матрица беззнаковых целых чисел (<literal>uint8</literal>, <literal>uint16</literal> или <literal>uint32</literal>) размером <literal>m</literal> на <literal>n</literal>. Должна содержать положительные целые значения.
-                    </para>
-                </listitem>
-            </varlistentry>
-            <varlistentry>
-                <term>z :</term>
-                <listitem>
-                    <para>
-                        матрица чисел двойной точности размером <literal>m</literal> на <literal>n</literal>
-                        или гиперматрица чисел двойной точности размером <literal>m1</literal> на <literal>m2</literal> на ... на <literal>mm</literal>
-                        или матрица целых чисел размером <literal>m</literal> на <literal>n</literal>.
-                    </para>
-                </listitem>
-            </varlistentry>
-        </variablelist>
-    </refsection>
-    <refsection>
-        <title>Описание </title>
-        <para>
-            Для заданных двух положительных целых чисел <varname>x</varname>, <varname>y</varname> эта функция возвращает десятеричное число<varname>z</varname>, чьё двоичное представление является результатом операции ИЛИ над двоичными представлениями <varname>x</varname> и <varname>y</varname>.
-        </para>
-        <para>
-            <varname>x</varname>, <varname>y</varname>, <varname>z</varname> должны быть одного и того же размера.
-        </para>
-    </refsection>
-    <refsection>
-        <title>Примеры</title>
-        <programlisting role="example"><![CDATA[
-// '110000' : является двоичным представлением 48 
-// '100101' : является двоичным представлением 37   
-// '110101' : является двоичным представлением результата операции ИЛИ над двоичными представлениями 48 и 37 
-// таким образом, десятеричное число, соответствующее результату операции ИЛИ над двоичными представлениями 48 и 37: 53
-x=48; 
-y=37;
-z=bitor(x,y)
-
-// Выполнить побитовое ИЛИ двух матриц значений типа double.
-x=[12,45]; 
-y=[25,49];
-z=bitor(x,y)
-
-// Выполнить побитовое ИЛИ двух матриц значений типа double.
-x = [0 1 0 1];
-y = [0 0 1 1];
-z = bitor(x, y)
-expected = [0 1 1 1];
-
-// Выполнить побитовое ИЛИ двух матриц целочисленных значений.
-x = uint8([0 1 0 1]);
-y = uint8([0 0 1 1]);
-z = bitor(x, y)
-
-// Типы x и y нельзя смешивать (ошибка).
-x = [0 1 0 1];
-y = uint8([0 0 1 1]);
-// z = bitor(x, y)
-
-//  13 соответствует (01101)_2
-//  27 соответствует (11011)_2
-//  Результат операции ИЛИ (11111)_2 что соответствует 31.
-bitor(uint8(13), uint8(27))
-bitor(13, 27)
-
-   ]]></programlisting>
-    </refsection>
-    <refsection role="see also">
-        <title>Смотрите также</title>
-        <simplelist type="inline">
-            <member>
-                <link linkend="bitand">bitand</link>
-            </member>
-            <member>
-                <link linkend="bin2dec">bin2dec</link>
-            </member>
-            <member>
-                <link linkend="dec2bin">dec2bin</link>
-            </member>
-        </simplelist>
-    </refsection>
-</refentry>
diff --git a/scilab/modules/elementary_functions/help/ru_RU/bitwise/bitxor.xml b/scilab/modules/elementary_functions/help/ru_RU/bitwise/bitxor.xml
deleted file mode 100644 (file)
index aeb2951..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- * 
- * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- * Copyright (C) 2011 - DIGITEO - Michael Baudin
- * 
- * Copyright (C) 2012 - 2016 - Scilab Enterprises
- *
- * This file is hereby licensed under the terms of the GNU GPL v2.0,
- * pursuant to article 5.3.4 of the CeCILL v.2.1.
- * This file was originally licensed under the terms of the CeCILL v2.1,
- * and continues to be available under such terms.
- * For more information, see the COPYING file which you should have received
- * along with this program.
- * 
- -->
-<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns3="http://www.w3.org/1999/xhtml" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:id="bitxor" xml:lang="ru">
-    <refnamediv>
-        <refname>bitxor</refname>
-        <refpurpose>побитовое ИСКЛЮЧАЮЩЕЕ ИЛИ</refpurpose>
-    </refnamediv>
-    <refsynopsisdiv>
-        <title>Синтаксис</title>
-        <synopsis>
-            z = bitxor(x, y)
-            
-        </synopsis>
-    </refsynopsisdiv>
-    <refsection>
-        <title>Параметры</title>
-        <variablelist>
-            <varlistentry>
-                <term>x :</term>
-                <listitem>
-                    <para>
-                        матрица чисел двойной точности (<literal>double</literal>) размером <literal>m</literal> на <literal>n</literal>
-                        или гиперматрица чисел двойной точности размером <literal>m1</literal> на <literal>m2</literal> на ... на <literal>mm</literal>
-                        или матрица беззнаковых целых чисел (<literal>uint8</literal>, <literal>uint16</literal> или <literal>uint32</literal>) размером <literal>m</literal> на <literal>n</literal>. Должна содержать положительные целые значения.
-                    </para>
-                </listitem>
-            </varlistentry>
-            <varlistentry>
-                <term>y :</term>
-                <listitem>
-                    <para>
-                        матрица чисел двойной точности (<literal>double</literal>) размером <literal>m</literal> на <literal>n</literal>
-                        или гиперматрица чисел двойной точности размером <literal>m1</literal> на <literal>m2</literal> на ... на <literal>mm</literal>
-                        или матрица беззнаковых целых чисел (<literal>uint8</literal>, <literal>uint16</literal> или <literal>uint32</literal>) размером <literal>m</literal> на <literal>n</literal>. Должна содержать положительные целые значения.
-                    </para>
-                </listitem>
-            </varlistentry>
-            <varlistentry>
-                <term>z :</term>
-                <listitem>
-                    <para>
-                        матрица чисел двойной точности размером <literal>m</literal> на <literal>n</literal> 
-                        или гиперматрица чисел двойной точности размером <literal>m1</literal> на <literal>m2</literal> на ... на <literal>mm</literal>
-                        или матрица целых чисел размером <literal>m</literal> на <literal>n</literal>.
-                    </para>
-                </listitem>
-            </varlistentry>
-        </variablelist>
-    </refsection>
-    <refsection>
-        <title>Описание</title>
-        <para>
-            Для заданных двух положительных целых чисел <varname>x</varname> и <varname>y</varname> эта функция возвращает десятеричное число <varname>z</varname>, чьё двоичное представление является результатом операции ИСКЛЮЧАЮЩЕЕ ИЛИ над двоичными представлениями <varname>x</varname> и <varname>y</varname>.
-        </para>
-        <para>
-        </para>
-    </refsection>
-    <refsection>
-        <title>Примеры</title>
-        <programlisting role="example"><![CDATA[
-// Вычислим побитовое ИСКЛЮЧАЮЩЕЕ ИЛИ двух матриц чисел типа double.
-x = [0 1 0 1];
-y = [0 0 1 1];
-z = bitxor(x, y)
-expected = [0 1 1 1];
-
-// Вычислим побитовое ИСКЛЮЧАЮЩЕЕ ИЛИ двух матриц целочисленных значений.
-x = uint8([0 1 0 1]);
-y = uint8([0 0 1 1]);
-z = bitxor(x, y)
-
-// Типы x и y нельзя смешивать (ошибка).
-x = [0 1 0 1];
-y = uint8([0 0 1 1]);
-// z = bitxor(x, y)
-
-//  13 соответствует (01101)_2
-//  27 соответствует (11011)_2
-//  Результат операции ИСКЛЮЧАЮЩЕЕ ИЛИ (10110)_2 что соответствует 22.
-bitxor(uint8(13), uint8(27))
-bitxor(13, 27)
-
-   ]]></programlisting>
-    </refsection>
-</refentry>
diff --git a/scilab/modules/elementary_functions/macros/bit_op.sci b/scilab/modules/elementary_functions/macros/bit_op.sci
new file mode 100644 (file)
index 0000000..83ea0cf
--- /dev/null
@@ -0,0 +1,112 @@
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Samuel GOUGEON
+//
+// Copyright (C) 2012 - 2016 - Scilab Enterprises
+//
+// This file is hereby licensed under the terms of the GNU GPL v2.0,
+// pursuant to article 5.3.4 of the CeCILL v.2.1.
+// This file was originally licensed under the terms of the CeCILL v2.1,
+// and continues to be available under such terms.
+// For more information, see the COPYING file which you should have received
+// along with this program.
+
+function z = bit_op(x, y, fname)
+    // Internal function: factorized code shared by bitor(), bitxor(), bitand()
+    // fname: function name: single string among "bitor", "bitxor", and "bitand"
+
+    // Check input arguments
+    // =====================
+    if ~isdef("fname","l") || ~or(fname==["bitor" "bitxor" "bitand"])
+        msg = gettext("%s: unknown bitwise function ""%s"".\n")
+        error(msprintf(msg, "bit_op", fname))
+    end
+
+    if x==[] | y==[]
+        z = []
+        return
+    end
+
+    if size(x,"*")>1 && size(y, "*")>1 && or(size(x)<>size(y)) then
+        msg = gettext("%s: Arguments #%d and #%d: Same sizes expected.\n")
+        error(msprintf(msg, fname, 1, 2))
+    else
+        if size(x,"*")==1
+            x = x * ones(y)
+        elseif size(y,"*")==1
+            y = y * ones(x)
+        end
+    end
+
+    msg = gettext("%s: Argument #%d: Integers >=0 expected.\n")
+    if  (type(x)<>1  & type(x)<>8) || or(x<0) || (type(x)==1  & or((x-floor(x))<>0))
+        error(msprintf(msg, fname, 1))
+    end
+    if  (type(y)<>1  & type(y)<>8) || or(y<0) || (type(y)==1  & or((y-floor(y))<>0))
+        error(msprintf(msg, fname, 2))
+    end
+
+    // Casting
+    // =======
+    // If some decimal are provided, both x and y become decimal-encoded
+    if type(x)~=type(y)
+        if type(x)==1
+            y = double(y)
+        else
+            x = double(x)
+        end
+    end
+    // If only encoded integers are provided, we cast both x and y to the
+    // widest provided encoding
+    if type(x)==8 then
+        //typeof : int8 < uint8 < int16 < uint16 < int32 < uint32 < int64 < uint64
+        //inttype:   1      11      2       12       4       14       8       18
+        // =>        1  <  1.5  <   2   <  2.5   <   4   <  4.5   <   8   <    8.5 :
+        // Let's do  11 => 1.5, 12 => 2.5, 14 => 4.5, 18 => 8.5 :
+        ix = inttype(x); if ix>10, ix = modulo(ix,10)+0.5, end
+        iy = inttype(y); if iy>10, iy = modulo(iy,10)+0.5, end
+        // Then, max() can work:
+        i = max(ix, iy)
+        if i~=fix(i)
+            i = i + 9.5
+        end
+        x = iconvert(x, i)
+        y = iconvert(y, i)
+    end
+
+    // Processing
+    // ==========
+    isDecimal = (type(x)==1)
+    if isDecimal
+        // We isolate and process only the 52 highest bits.
+        // Other ones are below %eps, are not stored, and so are ignored.
+        x = real(x)  // The possible imaginary part is ignored
+        y = real(y)
+        s = size(x)
+        x = x(:)
+        y = y(:)
+        M = max([x y],"c")
+        p = zeros(M)
+        f = (M~=0)
+        if or(f)
+            p(f) = fix(log2(M(f)))-52
+            p(p<0) = 0
+        end
+        twoP = 2 .^p
+        x = uint64(x./twoP)
+        y = uint64(y./twoP)
+    end
+    // ----------------
+    select fname
+    case "bitand"
+        z = x & y
+    case "bitor"
+        z = x | y
+    case "bitxor"
+        z = (x | y) & ~(x & y)
+    end
+    // ----------------
+    if isDecimal
+        z = double(z) .* twoP
+        z = matrix(z, s)
+    end
+endfunction
index f1aaef3..0f7e11c 100644 (file)
@@ -1,6 +1,5 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-// Copyright (C) ???? - INRIA - Farid BELAHCENE
-// Copyright (C) 2008 - INRIA - Pierre MARECHAL
+// Copyright (C) 2016 - Samuel GOUGEON
 //
 // Copyright (C) 2012 - 2016 - Scilab Enterprises
 //
 // along with this program.
 
 function z = bitand(x, y)
-
-    // BITAND function
-    // Given x,y two positives integers this function returns the decimal
-    // number whose the binary form is the AND of the binary representations
-    // of x and y
-    //
-    // -Inputs :
-    //  x, y :  scalars/vectors/matices/hypermatices of positives integers, x and y must have the same size
-    // -Output :
-    //  z : scalar/vector/matrix/hypermatice
-    //
-    // F.Belahcene
-
-    // P. Marechal, 5 Feb 2008
-    //   - fix bug 2691 and 2692
-    //   - Add argument check
-
-    // Check input arguments
-    // =========================================================================
-
-    rhs = argn(2);
-
-    if rhs <> 2 then
-        error(msprintf(gettext("%s: Wrong number of input argument(s): %d expected.\n"),"bitand",2));
-    end
-
-    if typeof(x)<>typeof(y)
-        error(msprintf(gettext("%s: Wrong type for input arguments: Same types expected.\n"),"bitand"));
-    end
-
-    if or(size(x)<>size(y)) then
-        error(msprintf(gettext("%s: Wrong size for input arguments: Same size expected.\n"),"bitand"));
-    end
-
-    if isempty(x) & isempty(x)
-        z=[];
-        return
+    if argn(2) <> 2 then
+        msg = gettext("%s: Wrong number of input argument(s): %d expected.\n")
+        error(msprintf(msg, "bitand", 2))
     end
-
-    if    (type(x)==1  & (x-floor(x)<>0 | x<0)) ..
-        | (type(x)==8  & (inttype(x)<10) ) ..
-        | (type(x)<>1  & type(x)<>8) then
-
-        error(msprintf(gettext("%s: Wrong input argument #%d: Scalar/matrix of unsigned integers expected.\n"),"bitand",1));
-    end
-
-    if    (type(y)==1  & (y-floor(y)<>0 | y<0)) ..
-        | (type(y)==8  & (inttype(y)<10) ) ..
-        | (type(y)<>1  & type(y)<>8) then
-
-        error(msprintf(gettext("%s: Wrong input argument #%d: Scalar/matrix of unsigned integers expected.\n"),"bitand",2));
-    end
-
-    // Algorithm
-    // =========================================================================
-
-    if type(x)==8 then
-        z = x & y;
-    else
-        a = 2^32;
-        z = double( uint32(x/a) & uint32(y/a) ) * a;
-        z = z + double(uint32(x-z) & uint32(y-z));
-    end
-
+    z = bit_op(x, y, "bitand")
 endfunction
index 35b8082..65a603f 100644 (file)
@@ -1,6 +1,5 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-// Copyright (C) ???? - INRIA - Farid BELAHCENE
-// Copyright (C) 2008 - INRIA - Pierre MARECHAL
+// Copyright (C) 2016 - Samuel GOUGEON
 //
 // Copyright (C) 2012 - 2016 - Scilab Enterprises
 //
 // For more information, see the COPYING file which you should have received
 // along with this program.
 
-function z = bitor(x,y)
-
-    // BITOR function
-    // Given x,y two positives integers this function returns the decimal
-    // number whose the binary form is the OR of the binary representations
-    // of x and y
-
-    // -Inputs :
-    //  x, y :  scalars/vectors/matices of positives integers,
-    //          x and y must have the same size
-    // -Output :
-    //  z : scalar/vector/matrix
-    //
-    // F.Belahcene
-
-    // P. Marechal, 5 Feb 2008
-    //   - fix bug 2691 and 2692
-    //   - Add argument check
-
-    // Check input arguments
-    // =========================================================================
-
-    rhs = argn(2);
-
-    if rhs <> 2 then
-        error(msprintf(gettext("%s: Wrong number of input argument(s): %d expected.\n"),"bitor",2));
-    end
-
-    if typeof(x)<>typeof(y)
-        error(msprintf(gettext("%s: Wrong type for input arguments: Same types expected.\n"),"bitor"));
-    end
-
-    if or(size(x)<>size(y)) then
-        error(msprintf(gettext("%s: Wrong size for input arguments: Same size expected.\n"),"bitor"));
-    end
-
-    if isempty(x) & isempty(x)
-        z=[];
-        return
-    end
-
-    if    (type(x)==1  & (x-floor(x)<>0 | x<0)) ..
-        | (type(x)==8  & (inttype(x)<10) ) ..
-        | (type(x)<>1  & type(x)<>8) then
-
-        error(msprintf(gettext("%s: Wrong input argument #%d: Scalar/matrix of unsigned integers expected.\n"),"bitor",1));
+function z = bitor(x, y)
+    if argn(2) <> 2 then
+        msg = gettext("%s: Wrong number of input argument(s): %d expected.\n")
+        error(msprintf(msg, "bitor", 2))
     end
-
-    if    (type(y)==1  & (y-floor(y)<>0 | y<0)) ..
-        | (type(y)==8  & (inttype(y)<10) ) ..
-        | (type(y)<>1  & type(y)<>8) then
-
-        error(msprintf(gettext("%s: Wrong input argument #%d: Scalar/matrix of unsigned integers expected.\n"),"bitor",2));
-    end
-
-    // Algorithm
-    // =========================================================================
-
-    if type(x)==8 then
-        z = x | y;
-    else
-        a = 2^32;
-        z = double( uint32(x/a) | uint32(y/a) ) * a;
-        z = z + double(uint32(x-z) | uint32(y-z));
-    end
-
+    z = bit_op(x, y, "bitor")
 endfunction
index 87e4607..d54c1ae 100644 (file)
@@ -1,6 +1,5 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-// Copyright (C) INRIA
-// Copyright (C) 2008 - INRIA - Pierre MARECHAL
+// Copyright (C) 2016 - Samuel GOUGEON
 //
 // Copyright (C) 2012 - 2016 - Scilab Enterprises
 //
 // For more information, see the COPYING file which you should have received
 // along with this program.
 
-function z = bitxor(x,y)
-
-    // BITXOR function
-    // Given x,y two positives integers this function returns the decimal number
-    // whose the binary form is the XOR of the binary representations of x and y
-
-    // -Inputs :
-    //  x, y :  scalars/vectors/matices of positives integers,
-    //          x and y must have the same size
-    // -Output :
-    //  z : scalar/vector/matrix
-    //
-    // P. Marechal, 5 Feb 2008
-    //   - fix bug 2691 and 2692
-    //   - Add argument check
-
-    // Check input arguments
-    // =========================================================================
-
-    rhs = argn(2);
-
-    if rhs <> 2 then
-        error(msprintf(gettext("%s: Wrong number of input argument(s): %d expected.\n"),"bitxor",2));
-    end
-
-    if typeof(x)<>typeof(y)
-        error(msprintf(gettext("%s: Wrong type for input arguments: Same types expected.\n"),"bitxor"));
+function z = bitxor(x, y)
+    if argn(2) <> 2 then
+        msg = gettext("%s: Wrong number of input argument(s): %d expected.\n")
+        error(msprintf(msg, "bitxor", 2))
     end
-
-    if or(size(x)<>size(y)) then
-        error(msprintf(gettext("%s: Wrong size for input arguments: Same size expected.\n"),"bitxor"));
-    end
-
-    if isempty(x) & isempty(x)
-        z=[];
-        return
-    end
-
-    if    (type(x)==1  & (x-floor(x)<>0 | x<0)) ..
-        | (type(x)==8  & (inttype(x)<10) ) ..
-        | (type(x)<>1  & type(x)<>8) then
-
-        error(msprintf(gettext("%s: Wrong type for input argument #%d: Scalar/matrix of unsigned integers expected.\n"),"bitxor",1));
-    end
-
-    if    (type(y)==1  & (y-floor(y)<>0 | y<0)) ..
-        | (type(y)==8  & (inttype(y)<10) ) ..
-        | (type(y)<>1  & type(y)<>8) then
-
-        error(msprintf(gettext("%s: Wrong type for input argument #%d: Scalar/matrix of unsigned integers expected.\n"),"bitxor",2));
-    end
-
-    // Algorithm
-    // =========================================================================
-
-    for i=1:size(x,"*")
-        zbin = dec2bin([x(i);y(i)]);
-        zand = strcat((string(sum(asciimat(zbin)-48,1))));
-        zand = strsubst(zand,"2","0");
-        z(i) = bin2dec(zand);
-    end
-
-    // Result
-    // =========================================================================
-
-    if type(x)==8 then
-        select inttype(x)
-        case 11 then z = uint8(z);
-        case 12 then z = uint16(z);
-        case 14 then z = uint32(z);
-        end
-    end
-
-    z = matrix(z,size(x));
-
+    z = bit_op(x, y, "bitxor")
 endfunction
diff --git a/scilab/modules/elementary_functions/tests/nonreg_tests/bug_14654.dia.ref b/scilab/modules/elementary_functions/tests/nonreg_tests/bug_14654.dia.ref
new file mode 100644 (file)
index 0000000..6b78c00
--- /dev/null
@@ -0,0 +1,23 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Samuel GOUGEON
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 14654 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=14654
+//
+// <-- Short Description -->
+//    bitor(), bitxor() and bitand() did not accept int8, int16, int32, int64
+//    and uint64 positive integers
+icodes = [1 2 4 8 18];
+for i = icodes
+    a = iconvert(57,i);
+    assert_checktrue(execstr("bitor(a,a)", "errcatch")==0);
+    assert_checktrue(execstr("bitxor(a,a)", "errcatch")==0);
+    assert_checktrue(execstr("bitand(a,a)", "errcatch")==0);
+end
diff --git a/scilab/modules/elementary_functions/tests/nonreg_tests/bug_14654.tst b/scilab/modules/elementary_functions/tests/nonreg_tests/bug_14654.tst
new file mode 100644 (file)
index 0000000..6b78c00
--- /dev/null
@@ -0,0 +1,23 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Samuel GOUGEON
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 14654 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/show_bug.cgi?id=14654
+//
+// <-- Short Description -->
+//    bitor(), bitxor() and bitand() did not accept int8, int16, int32, int64
+//    and uint64 positive integers
+icodes = [1 2 4 8 18];
+for i = icodes
+    a = iconvert(57,i);
+    assert_checktrue(execstr("bitor(a,a)", "errcatch")==0);
+    assert_checktrue(execstr("bitxor(a,a)", "errcatch")==0);
+    assert_checktrue(execstr("bitand(a,a)", "errcatch")==0);
+end
index 92abcf1..dc95e23 100644 (file)
 // =============================================================================
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) 2008 - INRIA - Pierre MARECHAL <pierre.marechal@inria.fr>
+// Copyright (C) 2016 - Samuel GOUGEON
 //
 //  This file is distributed under the same license as the Scilab package.
 // =============================================================================
 // <-- CLI SHELL MODE -->
-// Tests 1
+icodes = [0 1 2 4 8 11 12 14 18];
+// Tests 1 :
+//  - all inttypes are accepted
+//  - Rows, columns, and matrices are accepted
 // =============================================================================
 // test 1.1
 A = [0 1 0 1];
 B = [0 0 1 1];
 C = [0 0 0 1];
-if or(bitand(A, B) <> C)  then bugmes();quit;end
-if typeof(C) <> typeof(A) then bugmes();quit;end
-if typeof(C) <> typeof(B) then bugmes();quit;end
+for it = icodes
+    a = iconvert(A, it);
+    b = iconvert(B, it);
+    c = iconvert(C, it);
+    assert_checkequal(bitand(a, b), c);
+    assert_checkequal(typeof(c), typeof(a));
+end
 // test 1.2
-A = uint8([0 1 0 1]);
-B = uint8([0 0 1 1]);
-C = uint8([0 0 0 1]);
-if or(bitand(A, B) <> C)  then bugmes();quit;end
-if typeof(C) <> typeof(A) then bugmes();quit;end
-if typeof(C) <> typeof(B) then bugmes();quit;end
-// test 1.3
-A = uint16([0 1 0 1]);
-B = uint16([0 0 1 1]);
-C = uint16([0 0 0 1]);
-if or(bitand(A, B) <> C)  then bugmes();quit;end
-if typeof(C) <> typeof(A) then bugmes();quit;end
-if typeof(C) <> typeof(B) then bugmes();quit;end
-// test 1.4
-A = uint32([0 1 0 1]);
-B = uint32([0 0 1 1]);
-C = uint32([0 0 0 1]);
-if or(bitand(A, B) <> C)  then bugmes();quit;end
-if typeof(C) <> typeof(A) then bugmes();quit;end
-if typeof(C) <> typeof(B) then bugmes();quit;end
-// test 1.5
 A = [0 1 ; 0 1];
 B = [0 0 ; 1 1];
 C = [0 0 ; 0 1];
-if or(bitand(A, B) <> C)  then bugmes();quit;end
-if typeof(C) <> typeof(A) then bugmes();quit;end
-if typeof(C) <> typeof(B) then bugmes();quit;end
-// test 1.6
-A = uint8([0 1 ; 0 1]);
-B = uint8([0 0 ; 1 1]);
-C = uint8([0 0 ; 0 1]);
-if or(bitand(A, B) <> C)  then bugmes();quit;end
-if typeof(C) <> typeof(A) then bugmes();quit;end
-if typeof(C) <> typeof(B) then bugmes();quit;end
-// test 1.7
-A = uint16([0 1 ; 0 1]);
-B = uint16([0 0 ; 1 1]);
-C = uint16([0 0 ; 0 1]);
-if or(bitand(A, B) <> C)  then bugmes();quit;end
-if typeof(C) <> typeof(A) then bugmes();quit;end
-if typeof(C) <> typeof(B) then bugmes();quit;end
-// test 1.8
-A = uint32([0 1 ; 0 1]);
-B = uint32([0 0 ; 1 1]);
-C = uint32([0 0 ; 0 1]);
-if or(bitand(A, B) <> C)  then bugmes();quit;end
-if typeof(C) <> typeof(A) then bugmes();quit;end
-if typeof(C) <> typeof(B) then bugmes();quit;end
-// test 1.9
+for it = icodes
+    a = iconvert(A, it);
+    b = iconvert(B, it);
+    c = iconvert(C, it);
+    assert_checkequal(bitand(a, b), c);
+    assert_checkequal(typeof(c), typeof(a));
+end
+// test 1.3
 A = [0 ; 1 ; 0 ; 1];
 B = [0 ; 0 ; 1 ; 1];
 C = [0 ; 0 ; 0 ; 1];
-if or(bitand(A, B) <> C)  then bugmes();quit;end
-if typeof(C) <> typeof(A) then bugmes();quit;end
-if typeof(C) <> typeof(B) then bugmes();quit;end
-// test 1.6
-A = uint8([0 ; 1 ; 0 ; 1]);
-B = uint8([0 ; 0 ; 1 ; 1]);
-C = uint8([0 ; 0 ; 0 ; 1]);
-if or(bitand(A, B) <> C)  then bugmes();quit;end
-if typeof(C) <> typeof(A) then bugmes();quit;end
-if typeof(C) <> typeof(B) then bugmes();quit;end
-// test 1.7
-A = uint16([0 ; 1 ; 0 ; 1]);
-B = uint16([0 ; 0 ; 1 ; 1]);
-C = uint16([0 ; 0 ; 0 ; 1]);
-if or(bitand(A, B) <> C)  then bugmes();quit;end
-if typeof(C) <> typeof(A) then bugmes();quit;end
-if typeof(C) <> typeof(B) then bugmes();quit;end
-// test 1.8
-A = uint32([0 ; 1 ; 0 ; 1]);
-B = uint32([0 ; 0 ; 1 ; 1]);
-C = uint32([0 ; 0 ; 0 ; 1]);
-if or(bitand(A, B) <> C)  then bugmes();quit;end
-if typeof(C) <> typeof(A) then bugmes();quit;end
-if typeof(C) <> typeof(B) then bugmes();quit;end
-// Tests 2
+for it = icodes
+    a = iconvert(A, it);
+    b = iconvert(B, it);
+    c = iconvert(C, it);
+    assert_checkequal(bitand(a, b), c);
+    assert_checkequal(typeof(c), typeof(a));
+end
+// Tests 2 : mismatching input types must all be accepted
 // =============================================================================
-// test 2.1
 A = [0 1 0 1];
-B = uint8([0 0 1 1]);
-if execstr("bitand(A, B);","errcatch") == 0 then bugmes();quit;end
-// test 2.1
-A = uint8([0 1 0 1]);
-B = uint16([0 0 1 1]);
-if execstr("bitand(A, B);","errcatch") == 0 then bugmes();quit;end
-// test 2.1
-A = uint16([0 1 0 1]);
-B = uint32([0 0 1 1]);
-if execstr("bitand(A, B);","errcatch") == 0 then bugmes();quit;end
-// test 2.1
-A = uint32([0 1 0 1]);
 B = [0 0 1 1];
-if execstr("bitand(A, B);","errcatch") == 0 then bugmes();quit;end
-// Tests 3
+for i = 2:length(icodes)-1
+    for j = i+1:length(icodes)
+        a = iconvert(A,icodes(i));
+        b = iconvert(B,icodes(j));
+        assert_checktrue(execstr("bitand(a, b);","errcatch")==0);
+    end
+end
+// Tests 3 : size of output
+// =============================================================================
+A = floor(100 * rand(100,20));
+B = floor(100 * rand(100,20));
+C = floor(100 * rand(1,1));
+for it = icodes
+    a = iconvert(A, it);
+    b = iconvert(B, it);
+    c = iconvert(C, it);
+    d = bitand(a,b);
+    assert_checkequal(size(a), size(d));
+    d = bitand(a,c);
+    assert_checkequal(size(a), size(d));
+    d = bitand(c,a);
+    assert_checkequal(size(a), size(d));
+end
+// Tests 4 : decimal numbers > 2^52  are  accepted
 // =============================================================================
-// test 3.1
-A = abs(floor(1000 * rand(100,20)));
-B = abs(floor(1000 * rand(100,20)));
-C = bitand(A,B);
-if or( size(A)<>size(B) ) then bugmes();quit;end
-// test 3.2
-A = uint8(abs(floor(1000 * rand(100,20))));
-B = uint8(abs(floor(1000 * rand(100,20))));
-C = bitand(A,B);
-if or( size(A)<>size(B) ) then bugmes();quit;end
-// test 3.3
-A = uint16(abs(floor(1000 * rand(100,20))));
-B = uint16(abs(floor(1000 * rand(100,20))));
-C = bitand(A,B);
-if or( size(A)<>size(B) ) then bugmes();quit;end
-// test 3.4
-A = uint32(abs(floor(1000 * rand(100,20))));
-B = uint32(abs(floor(1000 * rand(100,20))));
-C = bitand(A,B);
-if or( size(A)<>size(B) ) then bugmes();quit;end
-// Test 4
+for i = 301:400
+    a = sum(2 .^(i- (0:10:60)));
+    b = sum(2 .^(i- (5:5:40)));
+    c = sum(2 .^(i- (10:10:40)));
+    assert_checkequal(bitand(a,b), c);
+end
+// Test 5
 // =============================================================================
 A = [ ..
     299.    258.    314.    359.    616.    152.    834.    68.     175.    734.    749.    976.    261.    214.    94.     217.    754.    245.    693.    557.  ; ..
@@ -203,37 +151,7 @@ A = [ ..
     92.     791.    288.    280.    840.    859.    269.    187.    524.    200.    522.    841.    71.     167.    158.    826.    620.    915.    185.    211.  ; ..
     639.    109.    423.    678.    825.    469.    543.    68.     732.    494.    936.    579.    893.    204.    225.    431.    993.    491.    128.    657.  ; ..
     328.    929.    42.     285.    76.     791.    965.    359.    266.    880.    69.     423.    880.    811.    885.    567.    589.    240.    823.    105.  ; ..
-    103.    53.     971.    144.    842.    146.    191.    806.    999.    281.    277.    602.    472.    13.     742.    187.    111.    316.    492.    75.   ; ..
-    671.    196.    899.    820.    334.    367.    270.    914.    139.    116.    739.    627.    841.    893.    166.    314.    746.    795.    650.    659.  ; ..
-    850.    523.    3.      638.    312.    420.    678.    491.    112.    282.    605.    342.    874.    525.    985.    43.     846.    407.    582.    228.  ; ..
-    830.    330.    611.    908.    150.    511.    599.    615.    328.    216.    614.    209.    726.    157.    366.    422.    497.    679.    540.    803.  ; ..
-    438.    956.    51.     210.    112.    37.     432.    67.     780.    260.    844.    804.    73.     901.    392.    408.    790.    376.    787.    442.  ; ..
-    587.    957.    164.    154.    309.    48.     414.    753.    62.     111.    939.    794.    136.    784.    806.    235.    218.    693.    167.    713.  ; ..
-    561.    860.    672.    30.     534.    209.    672.    834.    842.    496.    842.    183.    195.    403.    705.    180.    894.    924.    310.    176.  ; ..
-    141.    583.    570.    603.    900.    686.    218.    364.    111.    813.    553.    434.    169.    796.    867.    961.    853.    189.    16.     3.    ; ..
-    384.    633.    128.    196.    196.    994.    803.    342.    793.    524.    38.     132.    715.    278.    458.    689.    388.    667.    13.     931.  ; ..
-    228.    923.    585.    512.    29.     560.    544.    761.    201.    26.     761.    274.    657.    601.    349.    826.    52.     403.    846.    718.  ; ..
-    636.    296.    160.    776.    95.     439.    744.    805.    733.    356.    760.    721.    213.    736.    668.    371.    258.    548.    923.    815.  ; ..
-    355.    835.    985.    462.    883.    708.    432.    443.    393.    406.    988.    970.    338.    277.    296.    752.    643.    988.    661.    7.    ; ..
-    168.    322.    262.    353.    689.    603.    250.    736.    761.    243.    893.    216.    887.    2.      141.    731.    677.    717.    484.    735.  ; ..
-    991.    237.    239.    64.     731.    353.    461.    592.    750.    820.    537.    104.    46.     401.    833.    780.    200.    37.     989.    667.  ; ..
-    846.    707.    6.      240.    926.    394.    326.    268.    813.    705.    558.    413.    863.    956.    589.    629.    465.    207.    273.    557.  ; ..
-    73.     223.    120.    547.    316.    68.     497.    821.    856.    532.    202.    568.    600.    256.    379.    588.    523.    290.    429.    277.  ; ..
-    235.    390.    915.    935.    583.    7.      665.    894.    206.    283.    151.    479.    499.    492.    325.    1.      687.    199.    401.    501.  ; ..
-    61.     593.    348.    148.    369.    250.    216.    819.    392.    0.      790.    333.    47.     298.    277.    233.    176.    624.    501.    776.  ; ..
-    143.    53.     16.     235.    803.    533.    517.    112.    584.    127.    467.    783.    157.    266.    550.    554.    688.    98.     884.    383.  ; ..
-    339.    392.    130.    862.    903.    148.    656.    583.    309.    101.    157.    375.    692.    329.    802.    23.     348.    916.    110.    503.  ; ..
-    880.    4.      366.    578.    334.    875.    480.    433.    445.    989.    535.    128.    308.    810.    40.     774.    64.     813.    986.    931.  ; ..
-    525.    421.    877.    122.    63.     345.    784.    243.    579.    721.    495.    286.    122.    283.    21.     497.    510.    133.    833.    175.  ; ..
-    714.    262.    438.    461.    519.    369.    122.    434.    820.    310.    161.    855.    92.     0.      277.    497.    275.    538.    598.    255.  ; ..
-    389.    174.    762.    661.    867.    552.    863.    651.    497.    867.    738.    545.    791.    159.    481.    389.    16.     568.    125.    511.  ; ..
-    463.    837.    142.    172.    381.    295.    151.    740.    916.    751.    786.    372.    544.    413.    545.    285.    501.    722.    126.    363.  ; ..
-    164.    830.    488.    675.    596.    37.     483.    38.     249.    412.    463.    52.     885.    928.    577.    376.    382.    771.    777.    564.  ; ..
-    288.    573.    325.    348.    180.    679.    758.    998.    345.    629.    101.    723.    430.    65.     231.    758.    14.     781.    901.    426.  ; ..
-    320.    26.     161.    718.    258.    565.    985.    814.    556.    417.    854.    548.    625.    484.    57.     871.    726.    359.    921.    615.  ; ..
-    421.    547.    679.    916.    334.    303.    749.    837.    44.     90.     688.    603.    959.    290.    287.    714.    468.    239.    754.    58.   ; ..
-    758.    684.    708.    930.    819.    563.    980.    70.     806.    264.    677.    512.    160.    339.    797.    412.    280.    892.    985.    167.  ; ..
-    650.    822.    51.     774.    588.    531.    988.    444.    791.    415.    785.    759.    317.    958.    470.    279.    128.    269.    909.    126.  ];
+    ];
 B = [ ..
     511.    299.    529.    766.    739.    39.     125.    996.    368.    699.    914.    155.    428.    455.    616.    283.    424.    803.    615.    922.  ; ..
     403.    223.    453.    985.    260.    337.    35.     632.    64.     113.    551.    688.    331.    580.    463.    859.    689.    839.    780.    362.  ; ..
@@ -304,37 +222,7 @@ B = [ ..
     892.    775.    882.    934.    567.    633.    174.    171.    660.    302.    9.      716.    895.    897.    730.    351.    78.     212.    452.    223.  ; ..
     746.    994.    326.    974.    772.    977.    344.    659.    469.    201.    423.    427.    889.    801.    395.    300.    616.    158.    562.    488.  ; ..
     134.    234.    546.    949.    699.    645.    354.    988.    286.    489.    546.    458.    93.     320.    808.    322.    882.    602.    577.    641.  ; ..
-    594.    462.    694.    511.    297.    888.    655.    348.    175.    80.     694.    920.    632.    442.    20.     921.    400.    174.    606.    275.  ; ..
-    90.     942.    904.    58.     410.    848.    634.    992.    920.    802.    909.    397.    890.    236.    538.    46.     14.     106.    448.    921.  ; ..
-    775.    905.    592.    183.    777.    586.    524.    725.    220.    484.    72.     74.     594.    974.    989.    731.    387.    650.    967.    350.  ; ..
-    951.    130.    169.    94.     940.    240.    14.     607.    224.    495.    932.    597.    853.    513.    256.    636.    537.    415.    169.    990.  ; ..
-    774.    115.    225.    921.    789.    436.    256.    185.    395.    421.    667.    775.    819.    789.    347.    311.    836.    776.    173.    360.  ; ..
-    769.    829.    631.    918.    392.    925.    642.    968.    215.    826.    855.    784.    261.    871.    506.    462.    825.    261.    791.    654.  ; ..
-    709.    235.    113.    646.    749.    577.    849.    62.     341.    123.    405.    768.    905.    858.    700.    858.    826.    453.    555.    48.   ; ..
-    694.    648.    803.    906.    357.    303.    347.    678.    10.     135.    461.    364.    705.    346.    26.     421.    747.    741.    367.    93.   ; ..
-    4.      334.    852.    448.    392.    31.     205.    371.    897.    492.    249.    254.    249.    308.    989.    944.    445.    801.    130.    460.  ; ..
-    154.    756.    596.    144.    223.    570.    118.    572.    382.    711.    484.    113.    996.    383.    695.    903.    46.     496.    54.     473.  ; ..
-    527.    914.    855.    207.    488.    989.    543.    667.    297.    827.    685.    157.    669.    264.    482.    355.    754.    792.    505.    532.  ; ..
-    86.     898.    426.    831.    667.    437.    343.    577.    987.    475.    954.    230.    622.    703.    963.    779.    496.    3.      610.    595.  ; ..
-    725.    176.    835.    70.     480.    992.    402.    840.    127.    482.    561.    289.    454.    535.    735.    675.    734.    496.    266.    144.  ; ..
-    751.    224.    289.    51.     574.    384.    39.     834.    250.    241.    943.    907.    447.    198.    475.    528.    291.    711.    256.    695.  ; ..
-    908.    143.    307.    394.    263.    949.    104.    777.    255.    179.    669.    652.    137.    638.    472.    148.    568.    254.    329.    460.  ; ..
-    45.     472.    382.    8.      402.    801.    275.    502.    24.     816.    526.    207.    909.    966.    308.    667.    1.      986.    925.    904.  ; ..
-    694.    141.    732.    629.    22.     99.     686.    517.    620.    775.    517.    655.    769.    666.    245.    763.    946.    936.    529.    673.  ; ..
-    928.    852.    277.    299.    126.    629.    783.    600.    648.    748.    939.    312.    799.    522.    778.    274.    687.    163.    827.    911.  ; ..
-    718.    361.    902.    758.    35.     261.    217.    573.    551.    347.    507.    998.    176.    383.    383.    360.    692.    225.    268.    15.   ; ..
-    113.    326.    324.    361.    731.    779.    787.    86.     237.    628.    316.    484.    326.    727.    579.    57.     729.    816.    467.    374.  ; ..
-    774.    364.    723.    487.    294.    590.    831.    531.    149.    261.    999.    228.    410.    655.    899.    692.    567.    443.    58.     868.  ; ..
-    706.    112.    233.    47.     198.    175.    734.    642.    367.    771.    432.    669.    868.    210.    384.    387.    3.      45.     978.    985.  ; ..
-    650.    86.     530.    24.     717.    739.    633.    571.    68.     404.    496.    411.    258.    674.    615.    682.    688.    701.    262.    20.   ; ..
-    570.    708.    27.     903.    356.    43.     233.    597.    160.    261.    858.    32.     23.     652.    463.    437.    615.    477.    425.    204.  ; ..
-    666.    225.    302.    36.     427.    453.    799.    154.    565.    795.    168.    861.    121.    370.    662.    472.    278.    907.    110.    347.  ; ..
-    109.    708.    193.    443.    299.    468.    505.    484.    427.    111.    324.    181.    581.    408.    562.    426.    842.    213.    810.    880.  ; ..
-    490.    602.    609.    21.     933.    256.    479.    675.    980.    250.    130.    240.    705.    747.    557.    157.    490.    439.    1.      336.  ; ..
-    344.    706.    183.    867.    564.    631.    370.    345.    446.    57.     169.    774.    399.    103.    804.    259.    557.    455.    413.    661.  ; ..
-    818.    97.     593.    788.    989.    726.    479.    194.    568.    565.    131.    581.    625.    503.    187.    141.    587.    755.    81.     832.  ; ..
-    900.    954.    907.    786.    461.    861.    625.    273.    491.    623.    972.    993.    973.    305.    930.    52.     728.    401.    999.    674.  ; ..
-    968.    950.    687.    858.    232.    981.    983.    341.    846.    588.    438.    629.    141.    119.    38.     835.    725.    922.    986.    10.   ];
+    ];
  C  = [ ..
     299.    258.    16.     102.    608.    0.      64.     68.     32.     666.    640.    144.    260.    198.    72.     25.     160.    33.     549.    520.  ; ..
     401.    15.     192.    896.    256.    0.      0.      112.    0.      113.    5.      528.    64.     4.      200.    259.    128.    773.    12.     42.   ; ..
@@ -405,35 +293,5 @@ B = [ ..
     92.     775.    288.    256.    512.    601.    12.     171.    516.    8.      8.      584.    71.     129.    154.    282.    76.     144.    128.    211.  ; ..
     618.    96.     262.    646.    768.    465.    24.     0.      212.    200.    416.    3.      889.    0.      129.    300.    608.    138.    0.      128.  ; ..
     0.      160.    34.     277.    8.      517.    320.    324.    266.    352.    0.      386.    80.     256.    800.    2.      576.    80.     513.    1.    ; ..
-    66.     4.      642.    144.    264.    16.     143.    260.    167.    16.     20.     536.    88.     8.      4.      153.    0.      44.     76.     3.    ; ..
-    26.     132.    896.    48.     266.    320.    10.     896.    136.    32.     641.    1.      840.    108.    2.      42.     10.     10.     128.    657.  ; ..
-    770.    521.    0.      54.     264.    0.      516.    193.    80.     256.    72.     66.     578.    524.    985.    11.     258.    130.    582.    68.   ; ..
-    822.    2.      33.     12.     132.    240.    6.      583.    64.     200.    548.    81.     596.    1.      256.    36.     17.     135.    8.      770.  ; ..
-    262.    48.     33.     144.    16.     36.     256.    1.      264.    260.    520.    772.    1.      773.    264.    272.    772.    264.    1.      296.  ; ..
-    513.    829.    36.     146.    256.    16.     130.    704.    22.     42.     771.    784.    0.      768.    290.    202.    24.     5.      7.      648.  ; ..
-    513.    72.     32.     6.      516.    65.     512.    2.      320.    112.    256.    0.      129.    274.    640.    16.     826.    388.    34.     48.   ; ..
-    132.    512.    546.    522.    260.    46.     90.     36.     10.     5.      9.      288.    129.    280.    2.      385.    577.    165.    0.      1.    ; ..
-    0.      72.     0.      192.    128.    2.      1.      338.    769.    12.     32.     132.    201.    276.    456.    688.    388.    513.    0.      384.  ; ..
-    128.    656.    576.    0.      29.     560.    32.     568.    72.     2.      224.    16.     640.    89.     21.     770.    36.     400.    6.      200.  ; ..
-    524.    256.    0.      8.      72.     405.    520.    513.    9.      288.    680.    145.    149.    0.      128.    355.    2.      512.    409.    516.  ; ..
-    66.     770.    392.    270.    531.    132.    272.    1.      393.    402.    920.    194.    66.     21.     256.    512.    128.    0.      512.    3.    ; ..
-    128.    0.      258.    64.     160.    576.    146.    576.    121.    226.    561.    0.      326.    2.      141.    643.    644.    192.    256.    144.  ; ..
-    719.    224.    33.     0.      538.    256.    5.      576.    234.    48.     521.    8.      46.     128.    321.    512.    0.      5.      256.    659.  ; ..
-    780.    131.    2.      128.    262.    384.    64.     264.    45.     129.    524.    140.    9.      572.    72.     20.     16.     206.    257.    12.   ; ..
-    9.      216.    120.    0.      272.    0.      273.    308.    24.     528.    10.     8.      520.    256.    304.    520.    1.      258.    397.    256.  ; ..
-    162.    132.    656.    549.    6.      3.      648.    516.    76.     259.    5.      143.    257.    136.    69.     1.      674.    128.    17.     161.  ; ..
-    32.     592.    276.    0.      112.    112.    8.      528.    136.    0.      770.    264.    15.     10.     256.    0.      160.    32.     305.    776.  ; ..
-    142.    33.     0.      226.    35.     5.      1.      48.     512.    91.     467.    774.    144.    266.    38.     40.     688.    96.     260.    15.   ; ..
-    81.     256.    0.      328.    643.    0.      528.    70.     37.     100.    28.     356.    4.      65.     514.    17.     88.     784.    66.     374.  ; ..
-    768.    4.      66.     66.     262.    586.    288.    17.     149.    261.    519.    128.    272.    522.    0.      516.    0.      297.    26.     800.  ; ..
-    512.    32.     105.    42.     6.      9.      528.    130.    67.     513.    416.    28.     96.     18.     0.      385.    2.      5.      832.    137.  ; ..
-    650.    6.      18.     8.      517.    97.     120.    50.     4.      276.    160.    275.    0.      0.      5.      160.    16.     536.    6.      20.   ; ..
-    0.      132.    26.     645.    352.    40.     73.     513.    160.    257.    578.    32.     23.     140.    449.    389.    0.      24.     41.     204.  ; ..
-    138.    65.     14.     36.     297.    261.    23.     128.    532.    523.    0.      340.    32.     272.    512.    280.    276.    642.    110.    331.  ; ..
-    36.     516.    192.    163.    0.      4.      481.    36.     169.    12.     324.    52.     581.    384.    512.    296.    330.    1.      776.    560.  ; ..
-    288.    536.    65.     20.     164.    0.      214.    674.    336.    112.    0.      208.    128.    65.     37.     148.    10.     261.    1.      256.  ; ..
-    320.    2.      161.    578.    0.      565.    336.    264.    44.     33.     0.      516.    1.      100.    32.     259.    516.    327.    409.    517.  ; ..
-    288.    33.     513.    788.    332.    6.      205.    64.     40.     16.     128.    577.    561.    290.    27.     136.    64.     227.    80.     0.    ; ..
-    644.    680.    640.    770.    257.    529.    592.    0.      290.    8.      644.    512.    128.    273.    768.    20.     24.     272.    961.    162.  ; ..
-    648.    822.    35.     770.    72.     529.    980.    276.    774.    12.     272.    629.    13.     54.     6.      259.    128.    264.    904.    10.   ];
-if or( bitand(A,B) <> C ) then bugmes();quit;end
+    ];
+assert_checkequal(bitand(A,B), C);
index 6b19b35..861941f 100644 (file)
 // =============================================================================
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) 2008 - INRIA - Pierre MARECHAL <pierre.marechal@inria.fr>
+// Copyright (C) 2016 - Samuel GOUGEON
 //
 //  This file is distributed under the same license as the Scilab package.
 // =============================================================================
 
 // <-- CLI SHELL MODE -->
 
-// Tests 1
+icodes = [0 1 2 4 8 11 12 14 18];
+
+// Tests 1 :
+//  - all inttypes are accepted
+//  - Rows, columns, and matrices are accepted
 // =============================================================================
 
 // test 1.1
-
 A = [0 1 0 1];
 B = [0 0 1 1];
 C = [0 0 0 1];
-
-if or(bitand(A, B) <> C)  then pause, end
-if typeof(C) <> typeof(A) then pause, end
-if typeof(C) <> typeof(B) then pause, end
+for it = icodes
+    a = iconvert(A, it);
+    b = iconvert(B, it);
+    c = iconvert(C, it);
+    assert_checkequal(bitand(a, b), c);
+    assert_checkequal(typeof(c), typeof(a));
+end
 
 // test 1.2
-
-A = uint8([0 1 0 1]);
-B = uint8([0 0 1 1]);
-C = uint8([0 0 0 1]);
-
-if or(bitand(A, B) <> C)  then pause, end
-if typeof(C) <> typeof(A) then pause, end
-if typeof(C) <> typeof(B) then pause, end
-
-// test 1.3
-
-A = uint16([0 1 0 1]);
-B = uint16([0 0 1 1]);
-C = uint16([0 0 0 1]);
-
-if or(bitand(A, B) <> C)  then pause, end
-if typeof(C) <> typeof(A) then pause, end
-if typeof(C) <> typeof(B) then pause, end
-
-// test 1.4
-
-A = uint32([0 1 0 1]);
-B = uint32([0 0 1 1]);
-C = uint32([0 0 0 1]);
-
-if or(bitand(A, B) <> C)  then pause, end
-if typeof(C) <> typeof(A) then pause, end
-if typeof(C) <> typeof(B) then pause, end
-
-// test 1.5
-
 A = [0 1 ; 0 1];
 B = [0 0 ; 1 1];
 C = [0 0 ; 0 1];
+for it = icodes
+    a = iconvert(A, it);
+    b = iconvert(B, it);
+    c = iconvert(C, it);
+    assert_checkequal(bitand(a, b), c);
+    assert_checkequal(typeof(c), typeof(a));
+end
 
-if or(bitand(A, B) <> C)  then pause, end
-if typeof(C) <> typeof(A) then pause, end
-if typeof(C) <> typeof(B) then pause, end
-
-// test 1.6
-
-A = uint8([0 1 ; 0 1]);
-B = uint8([0 0 ; 1 1]);
-C = uint8([0 0 ; 0 1]);
-
-if or(bitand(A, B) <> C)  then pause, end
-if typeof(C) <> typeof(A) then pause, end
-if typeof(C) <> typeof(B) then pause, end
-
-// test 1.7
-
-A = uint16([0 1 ; 0 1]);
-B = uint16([0 0 ; 1 1]);
-C = uint16([0 0 ; 0 1]);
-
-if or(bitand(A, B) <> C)  then pause, end
-if typeof(C) <> typeof(A) then pause, end
-if typeof(C) <> typeof(B) then pause, end
-
-// test 1.8
-
-A = uint32([0 1 ; 0 1]);
-B = uint32([0 0 ; 1 1]);
-C = uint32([0 0 ; 0 1]);
-
-if or(bitand(A, B) <> C)  then pause, end
-if typeof(C) <> typeof(A) then pause, end
-if typeof(C) <> typeof(B) then pause, end
-
-// test 1.9
-
+// test 1.3
 A = [0 ; 1 ; 0 ; 1];
 B = [0 ; 0 ; 1 ; 1];
 C = [0 ; 0 ; 0 ; 1];
+for it = icodes
+    a = iconvert(A, it);
+    b = iconvert(B, it);
+    c = iconvert(C, it);
+    assert_checkequal(bitand(a, b), c);
+    assert_checkequal(typeof(c), typeof(a));
+end
 
-if or(bitand(A, B) <> C)  then pause, end
-if typeof(C) <> typeof(A) then pause, end
-if typeof(C) <> typeof(B) then pause, end
-
-// test 1.6
-
-A = uint8([0 ; 1 ; 0 ; 1]);
-B = uint8([0 ; 0 ; 1 ; 1]);
-C = uint8([0 ; 0 ; 0 ; 1]);
-
-if or(bitand(A, B) <> C)  then pause, end
-if typeof(C) <> typeof(A) then pause, end
-if typeof(C) <> typeof(B) then pause, end
-
-// test 1.7
-
-A = uint16([0 ; 1 ; 0 ; 1]);
-B = uint16([0 ; 0 ; 1 ; 1]);
-C = uint16([0 ; 0 ; 0 ; 1]);
-
-if or(bitand(A, B) <> C)  then pause, end
-if typeof(C) <> typeof(A) then pause, end
-if typeof(C) <> typeof(B) then pause, end
 
-// test 1.8
-
-A = uint32([0 ; 1 ; 0 ; 1]);
-B = uint32([0 ; 0 ; 1 ; 1]);
-C = uint32([0 ; 0 ; 0 ; 1]);
-
-if or(bitand(A, B) <> C)  then pause, end
-if typeof(C) <> typeof(A) then pause, end
-if typeof(C) <> typeof(B) then pause, end
-
-
-// Tests 2
+// Tests 2 : mismatching input types must all be accepted
 // =============================================================================
-
-// test 2.1
-
 A = [0 1 0 1];
-B = uint8([0 0 1 1]);
-
-if execstr("bitand(A, B);","errcatch") == 0 then pause, end
-
-// test 2.1
-
-A = uint8([0 1 0 1]);
-B = uint16([0 0 1 1]);
-
-if execstr("bitand(A, B);","errcatch") == 0 then pause, end
-
-// test 2.1
-
-A = uint16([0 1 0 1]);
-B = uint32([0 0 1 1]);
-
-if execstr("bitand(A, B);","errcatch") == 0 then pause, end
-
-// test 2.1
-
-A = uint32([0 1 0 1]);
 B = [0 0 1 1];
-
-if execstr("bitand(A, B);","errcatch") == 0 then pause, end
+for i = 2:length(icodes)-1
+    for j = i+1:length(icodes)
+        a = iconvert(A,icodes(i));
+        b = iconvert(B,icodes(j));
+        assert_checktrue(execstr("bitand(a, b);","errcatch")==0);
+    end
+end
 
 
-// Tests 3
+// Tests 3 : size of output
 // =============================================================================
-
-// test 3.1
-
-A = abs(floor(1000 * rand(100,20)));
-B = abs(floor(1000 * rand(100,20)));
-C = bitand(A,B);
-
-if or( size(A)<>size(B) ) then pause, end
-
-// test 3.2
-
-A = uint8(abs(floor(1000 * rand(100,20))));
-B = uint8(abs(floor(1000 * rand(100,20))));
-C = bitand(A,B);
-
-if or( size(A)<>size(B) ) then pause, end
-
-// test 3.3
-
-A = uint16(abs(floor(1000 * rand(100,20))));
-B = uint16(abs(floor(1000 * rand(100,20))));
-C = bitand(A,B);
-
-if or( size(A)<>size(B) ) then pause, end
-
-// test 3.4
-
-A = uint32(abs(floor(1000 * rand(100,20))));
-B = uint32(abs(floor(1000 * rand(100,20))));
-C = bitand(A,B);
-
-if or( size(A)<>size(B) ) then pause, end
-
-// Test 4
+A = floor(100 * rand(100,20));
+B = floor(100 * rand(100,20));
+C = floor(100 * rand(1,1));
+for it = icodes
+    a = iconvert(A, it);
+    b = iconvert(B, it);
+    c = iconvert(C, it);
+    d = bitand(a,b);
+    assert_checkequal(size(a), size(d));
+    d = bitand(a,c);
+    assert_checkequal(size(a), size(d));
+    d = bitand(c,a);
+    assert_checkequal(size(a), size(d));
+end
+
+// Tests 4 : decimal numbers > 2^52  are  accepted
+// =============================================================================
+for i = 301:400
+    a = sum(2 .^(i- (0:10:60)));
+    b = sum(2 .^(i- (5:5:40)));
+    c = sum(2 .^(i- (10:10:40)));
+    assert_checkequal(bitand(a,b), c);
+end
+
+// Test 5
 // =============================================================================
 
 A = [ ..
@@ -271,37 +164,7 @@ A = [ ..
     92.     791.    288.    280.    840.    859.    269.    187.    524.    200.    522.    841.    71.     167.    158.    826.    620.    915.    185.    211.  ; ..
     639.    109.    423.    678.    825.    469.    543.    68.     732.    494.    936.    579.    893.    204.    225.    431.    993.    491.    128.    657.  ; ..
     328.    929.    42.     285.    76.     791.    965.    359.    266.    880.    69.     423.    880.    811.    885.    567.    589.    240.    823.    105.  ; ..
-    103.    53.     971.    144.    842.    146.    191.    806.    999.    281.    277.    602.    472.    13.     742.    187.    111.    316.    492.    75.   ; ..
-    671.    196.    899.    820.    334.    367.    270.    914.    139.    116.    739.    627.    841.    893.    166.    314.    746.    795.    650.    659.  ; ..
-    850.    523.    3.      638.    312.    420.    678.    491.    112.    282.    605.    342.    874.    525.    985.    43.     846.    407.    582.    228.  ; ..
-    830.    330.    611.    908.    150.    511.    599.    615.    328.    216.    614.    209.    726.    157.    366.    422.    497.    679.    540.    803.  ; ..
-    438.    956.    51.     210.    112.    37.     432.    67.     780.    260.    844.    804.    73.     901.    392.    408.    790.    376.    787.    442.  ; ..
-    587.    957.    164.    154.    309.    48.     414.    753.    62.     111.    939.    794.    136.    784.    806.    235.    218.    693.    167.    713.  ; ..
-    561.    860.    672.    30.     534.    209.    672.    834.    842.    496.    842.    183.    195.    403.    705.    180.    894.    924.    310.    176.  ; ..
-    141.    583.    570.    603.    900.    686.    218.    364.    111.    813.    553.    434.    169.    796.    867.    961.    853.    189.    16.     3.    ; ..
-    384.    633.    128.    196.    196.    994.    803.    342.    793.    524.    38.     132.    715.    278.    458.    689.    388.    667.    13.     931.  ; ..
-    228.    923.    585.    512.    29.     560.    544.    761.    201.    26.     761.    274.    657.    601.    349.    826.    52.     403.    846.    718.  ; ..
-    636.    296.    160.    776.    95.     439.    744.    805.    733.    356.    760.    721.    213.    736.    668.    371.    258.    548.    923.    815.  ; ..
-    355.    835.    985.    462.    883.    708.    432.    443.    393.    406.    988.    970.    338.    277.    296.    752.    643.    988.    661.    7.    ; ..
-    168.    322.    262.    353.    689.    603.    250.    736.    761.    243.    893.    216.    887.    2.      141.    731.    677.    717.    484.    735.  ; ..
-    991.    237.    239.    64.     731.    353.    461.    592.    750.    820.    537.    104.    46.     401.    833.    780.    200.    37.     989.    667.  ; ..
-    846.    707.    6.      240.    926.    394.    326.    268.    813.    705.    558.    413.    863.    956.    589.    629.    465.    207.    273.    557.  ; ..
-    73.     223.    120.    547.    316.    68.     497.    821.    856.    532.    202.    568.    600.    256.    379.    588.    523.    290.    429.    277.  ; ..
-    235.    390.    915.    935.    583.    7.      665.    894.    206.    283.    151.    479.    499.    492.    325.    1.      687.    199.    401.    501.  ; ..
-    61.     593.    348.    148.    369.    250.    216.    819.    392.    0.      790.    333.    47.     298.    277.    233.    176.    624.    501.    776.  ; ..
-    143.    53.     16.     235.    803.    533.    517.    112.    584.    127.    467.    783.    157.    266.    550.    554.    688.    98.     884.    383.  ; ..
-    339.    392.    130.    862.    903.    148.    656.    583.    309.    101.    157.    375.    692.    329.    802.    23.     348.    916.    110.    503.  ; ..
-    880.    4.      366.    578.    334.    875.    480.    433.    445.    989.    535.    128.    308.    810.    40.     774.    64.     813.    986.    931.  ; ..
-    525.    421.    877.    122.    63.     345.    784.    243.    579.    721.    495.    286.    122.    283.    21.     497.    510.    133.    833.    175.  ; ..
-    714.    262.    438.    461.    519.    369.    122.    434.    820.    310.    161.    855.    92.     0.      277.    497.    275.    538.    598.    255.  ; ..
-    389.    174.    762.    661.    867.    552.    863.    651.    497.    867.    738.    545.    791.    159.    481.    389.    16.     568.    125.    511.  ; ..
-    463.    837.    142.    172.    381.    295.    151.    740.    916.    751.    786.    372.    544.    413.    545.    285.    501.    722.    126.    363.  ; ..
-    164.    830.    488.    675.    596.    37.     483.    38.     249.    412.    463.    52.     885.    928.    577.    376.    382.    771.    777.    564.  ; ..
-    288.    573.    325.    348.    180.    679.    758.    998.    345.    629.    101.    723.    430.    65.     231.    758.    14.     781.    901.    426.  ; ..
-    320.    26.     161.    718.    258.    565.    985.    814.    556.    417.    854.    548.    625.    484.    57.     871.    726.    359.    921.    615.  ; ..
-    421.    547.    679.    916.    334.    303.    749.    837.    44.     90.     688.    603.    959.    290.    287.    714.    468.    239.    754.    58.   ; ..
-    758.    684.    708.    930.    819.    563.    980.    70.     806.    264.    677.    512.    160.    339.    797.    412.    280.    892.    985.    167.  ; ..
-    650.    822.    51.     774.    588.    531.    988.    444.    791.    415.    785.    759.    317.    958.    470.    279.    128.    269.    909.    126.  ];
+    ];
 
 B = [ ..
     511.    299.    529.    766.    739.    39.     125.    996.    368.    699.    914.    155.    428.    455.    616.    283.    424.    803.    615.    922.  ; ..
@@ -373,37 +236,7 @@ B = [ ..
     892.    775.    882.    934.    567.    633.    174.    171.    660.    302.    9.      716.    895.    897.    730.    351.    78.     212.    452.    223.  ; ..
     746.    994.    326.    974.    772.    977.    344.    659.    469.    201.    423.    427.    889.    801.    395.    300.    616.    158.    562.    488.  ; ..
     134.    234.    546.    949.    699.    645.    354.    988.    286.    489.    546.    458.    93.     320.    808.    322.    882.    602.    577.    641.  ; ..
-    594.    462.    694.    511.    297.    888.    655.    348.    175.    80.     694.    920.    632.    442.    20.     921.    400.    174.    606.    275.  ; ..
-    90.     942.    904.    58.     410.    848.    634.    992.    920.    802.    909.    397.    890.    236.    538.    46.     14.     106.    448.    921.  ; ..
-    775.    905.    592.    183.    777.    586.    524.    725.    220.    484.    72.     74.     594.    974.    989.    731.    387.    650.    967.    350.  ; ..
-    951.    130.    169.    94.     940.    240.    14.     607.    224.    495.    932.    597.    853.    513.    256.    636.    537.    415.    169.    990.  ; ..
-    774.    115.    225.    921.    789.    436.    256.    185.    395.    421.    667.    775.    819.    789.    347.    311.    836.    776.    173.    360.  ; ..
-    769.    829.    631.    918.    392.    925.    642.    968.    215.    826.    855.    784.    261.    871.    506.    462.    825.    261.    791.    654.  ; ..
-    709.    235.    113.    646.    749.    577.    849.    62.     341.    123.    405.    768.    905.    858.    700.    858.    826.    453.    555.    48.   ; ..
-    694.    648.    803.    906.    357.    303.    347.    678.    10.     135.    461.    364.    705.    346.    26.     421.    747.    741.    367.    93.   ; ..
-    4.      334.    852.    448.    392.    31.     205.    371.    897.    492.    249.    254.    249.    308.    989.    944.    445.    801.    130.    460.  ; ..
-    154.    756.    596.    144.    223.    570.    118.    572.    382.    711.    484.    113.    996.    383.    695.    903.    46.     496.    54.     473.  ; ..
-    527.    914.    855.    207.    488.    989.    543.    667.    297.    827.    685.    157.    669.    264.    482.    355.    754.    792.    505.    532.  ; ..
-    86.     898.    426.    831.    667.    437.    343.    577.    987.    475.    954.    230.    622.    703.    963.    779.    496.    3.      610.    595.  ; ..
-    725.    176.    835.    70.     480.    992.    402.    840.    127.    482.    561.    289.    454.    535.    735.    675.    734.    496.    266.    144.  ; ..
-    751.    224.    289.    51.     574.    384.    39.     834.    250.    241.    943.    907.    447.    198.    475.    528.    291.    711.    256.    695.  ; ..
-    908.    143.    307.    394.    263.    949.    104.    777.    255.    179.    669.    652.    137.    638.    472.    148.    568.    254.    329.    460.  ; ..
-    45.     472.    382.    8.      402.    801.    275.    502.    24.     816.    526.    207.    909.    966.    308.    667.    1.      986.    925.    904.  ; ..
-    694.    141.    732.    629.    22.     99.     686.    517.    620.    775.    517.    655.    769.    666.    245.    763.    946.    936.    529.    673.  ; ..
-    928.    852.    277.    299.    126.    629.    783.    600.    648.    748.    939.    312.    799.    522.    778.    274.    687.    163.    827.    911.  ; ..
-    718.    361.    902.    758.    35.     261.    217.    573.    551.    347.    507.    998.    176.    383.    383.    360.    692.    225.    268.    15.   ; ..
-    113.    326.    324.    361.    731.    779.    787.    86.     237.    628.    316.    484.    326.    727.    579.    57.     729.    816.    467.    374.  ; ..
-    774.    364.    723.    487.    294.    590.    831.    531.    149.    261.    999.    228.    410.    655.    899.    692.    567.    443.    58.     868.  ; ..
-    706.    112.    233.    47.     198.    175.    734.    642.    367.    771.    432.    669.    868.    210.    384.    387.    3.      45.     978.    985.  ; ..
-    650.    86.     530.    24.     717.    739.    633.    571.    68.     404.    496.    411.    258.    674.    615.    682.    688.    701.    262.    20.   ; ..
-    570.    708.    27.     903.    356.    43.     233.    597.    160.    261.    858.    32.     23.     652.    463.    437.    615.    477.    425.    204.  ; ..
-    666.    225.    302.    36.     427.    453.    799.    154.    565.    795.    168.    861.    121.    370.    662.    472.    278.    907.    110.    347.  ; ..
-    109.    708.    193.    443.    299.    468.    505.    484.    427.    111.    324.    181.    581.    408.    562.    426.    842.    213.    810.    880.  ; ..
-    490.    602.    609.    21.     933.    256.    479.    675.    980.    250.    130.    240.    705.    747.    557.    157.    490.    439.    1.      336.  ; ..
-    344.    706.    183.    867.    564.    631.    370.    345.    446.    57.     169.    774.    399.    103.    804.    259.    557.    455.    413.    661.  ; ..
-    818.    97.     593.    788.    989.    726.    479.    194.    568.    565.    131.    581.    625.    503.    187.    141.    587.    755.    81.     832.  ; ..
-    900.    954.    907.    786.    461.    861.    625.    273.    491.    623.    972.    993.    973.    305.    930.    52.     728.    401.    999.    674.  ; ..
-    968.    950.    687.    858.    232.    981.    983.    341.    846.    588.    438.    629.    141.    119.    38.     835.    725.    922.    986.    10.   ];
+    ];
 
  C  = [ ..
     299.    258.    16.     102.    608.    0.      64.     68.     32.     666.    640.    144.    260.    198.    72.     25.     160.    33.     549.    520.  ; ..
@@ -475,36 +308,5 @@ B = [ ..
     92.     775.    288.    256.    512.    601.    12.     171.    516.    8.      8.      584.    71.     129.    154.    282.    76.     144.    128.    211.  ; ..
     618.    96.     262.    646.    768.    465.    24.     0.      212.    200.    416.    3.      889.    0.      129.    300.    608.    138.    0.      128.  ; ..
     0.      160.    34.     277.    8.      517.    320.    324.    266.    352.    0.      386.    80.     256.    800.    2.      576.    80.     513.    1.    ; ..
-    66.     4.      642.    144.    264.    16.     143.    260.    167.    16.     20.     536.    88.     8.      4.      153.    0.      44.     76.     3.    ; ..
-    26.     132.    896.    48.     266.    320.    10.     896.    136.    32.     641.    1.      840.    108.    2.      42.     10.     10.     128.    657.  ; ..
-    770.    521.    0.      54.     264.    0.      516.    193.    80.     256.    72.     66.     578.    524.    985.    11.     258.    130.    582.    68.   ; ..
-    822.    2.      33.     12.     132.    240.    6.      583.    64.     200.    548.    81.     596.    1.      256.    36.     17.     135.    8.      770.  ; ..
-    262.    48.     33.     144.    16.     36.     256.    1.      264.    260.    520.    772.    1.      773.    264.    272.    772.    264.    1.      296.  ; ..
-    513.    829.    36.     146.    256.    16.     130.    704.    22.     42.     771.    784.    0.      768.    290.    202.    24.     5.      7.      648.  ; ..
-    513.    72.     32.     6.      516.    65.     512.    2.      320.    112.    256.    0.      129.    274.    640.    16.     826.    388.    34.     48.   ; ..
-    132.    512.    546.    522.    260.    46.     90.     36.     10.     5.      9.      288.    129.    280.    2.      385.    577.    165.    0.      1.    ; ..
-    0.      72.     0.      192.    128.    2.      1.      338.    769.    12.     32.     132.    201.    276.    456.    688.    388.    513.    0.      384.  ; ..
-    128.    656.    576.    0.      29.     560.    32.     568.    72.     2.      224.    16.     640.    89.     21.     770.    36.     400.    6.      200.  ; ..
-    524.    256.    0.      8.      72.     405.    520.    513.    9.      288.    680.    145.    149.    0.      128.    355.    2.      512.    409.    516.  ; ..
-    66.     770.    392.    270.    531.    132.    272.    1.      393.    402.    920.    194.    66.     21.     256.    512.    128.    0.      512.    3.    ; ..
-    128.    0.      258.    64.     160.    576.    146.    576.    121.    226.    561.    0.      326.    2.      141.    643.    644.    192.    256.    144.  ; ..
-    719.    224.    33.     0.      538.    256.    5.      576.    234.    48.     521.    8.      46.     128.    321.    512.    0.      5.      256.    659.  ; ..
-    780.    131.    2.      128.    262.    384.    64.     264.    45.     129.    524.    140.    9.      572.    72.     20.     16.     206.    257.    12.   ; ..
-    9.      216.    120.    0.      272.    0.      273.    308.    24.     528.    10.     8.      520.    256.    304.    520.    1.      258.    397.    256.  ; ..
-    162.    132.    656.    549.    6.      3.      648.    516.    76.     259.    5.      143.    257.    136.    69.     1.      674.    128.    17.     161.  ; ..
-    32.     592.    276.    0.      112.    112.    8.      528.    136.    0.      770.    264.    15.     10.     256.    0.      160.    32.     305.    776.  ; ..
-    142.    33.     0.      226.    35.     5.      1.      48.     512.    91.     467.    774.    144.    266.    38.     40.     688.    96.     260.    15.   ; ..
-    81.     256.    0.      328.    643.    0.      528.    70.     37.     100.    28.     356.    4.      65.     514.    17.     88.     784.    66.     374.  ; ..
-    768.    4.      66.     66.     262.    586.    288.    17.     149.    261.    519.    128.    272.    522.    0.      516.    0.      297.    26.     800.  ; ..
-    512.    32.     105.    42.     6.      9.      528.    130.    67.     513.    416.    28.     96.     18.     0.      385.    2.      5.      832.    137.  ; ..
-    650.    6.      18.     8.      517.    97.     120.    50.     4.      276.    160.    275.    0.      0.      5.      160.    16.     536.    6.      20.   ; ..
-    0.      132.    26.     645.    352.    40.     73.     513.    160.    257.    578.    32.     23.     140.    449.    389.    0.      24.     41.     204.  ; ..
-    138.    65.     14.     36.     297.    261.    23.     128.    532.    523.    0.      340.    32.     272.    512.    280.    276.    642.    110.    331.  ; ..
-    36.     516.    192.    163.    0.      4.      481.    36.     169.    12.     324.    52.     581.    384.    512.    296.    330.    1.      776.    560.  ; ..
-    288.    536.    65.     20.     164.    0.      214.    674.    336.    112.    0.      208.    128.    65.     37.     148.    10.     261.    1.      256.  ; ..
-    320.    2.      161.    578.    0.      565.    336.    264.    44.     33.     0.      516.    1.      100.    32.     259.    516.    327.    409.    517.  ; ..
-    288.    33.     513.    788.    332.    6.      205.    64.     40.     16.     128.    577.    561.    290.    27.     136.    64.     227.    80.     0.    ; ..
-    644.    680.    640.    770.    257.    529.    592.    0.      290.    8.      644.    512.    128.    273.    768.    20.     24.     272.    961.    162.  ; ..
-    648.    822.    35.     770.    72.     529.    980.    276.    774.    12.     272.    629.    13.     54.     6.      259.    128.    264.    904.    10.   ];
-
-if or( bitand(A,B) <> C ) then pause, end
+    ];
+assert_checkequal(bitand(A,B), C);
index c6c51f3..998a876 100644 (file)
 // =============================================================================
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) 2008 - INRIA - Pierre MARECHAL <pierre.marechal@inria.fr>
+// Copyright (C) 2016 - Samuel GOUGEON
 //
 //  This file is distributed under the same license as the Scilab package.
 // =============================================================================
 // <-- CLI SHELL MODE -->
-// Tests 1
+icodes = [0 1 2 4 8 11 12 14 18];
+// Tests 1 : 
+//  - all inttypes are accepted
+//  - Rows, columns, and matrices are accepted
 // =============================================================================
 // test 1.1
 A = [0 1 0 1];
 B = [0 0 1 1];
 C = [0 1 1 1];
-if or(bitor(A, B) <> C)  then bugmes();quit;end
-if typeof(C) <> typeof(A) then bugmes();quit;end
-if typeof(C) <> typeof(B) then bugmes();quit;end
+for it = icodes
+    a = iconvert(A, it);
+    b = iconvert(B, it);
+    c = iconvert(C, it);
+    assert_checkequal(bitor(a, b), c);
+    assert_checkequal(typeof(c), typeof(a));
+end
 // test 1.2
-A = uint8([0 1 0 1]);
-B = uint8([0 0 1 1]);
-C = uint8([0 1 1 1]);
-if or(bitor(A, B) <> C)  then bugmes();quit;end
-if typeof(C) <> typeof(A) then bugmes();quit;end
-if typeof(C) <> typeof(B) then bugmes();quit;end
-// test 1.3
-A = uint16([0 1 0 1]);
-B = uint16([0 0 1 1]);
-C = uint16([0 1 1 1]);
-if or(bitor(A, B) <> C)  then bugmes();quit;end
-if typeof(C) <> typeof(A) then bugmes();quit;end
-if typeof(C) <> typeof(B) then bugmes();quit;end
-// test 1.4
-A = uint32([0 1 0 1]);
-B = uint32([0 0 1 1]);
-C = uint32([0 1 1 1]);
-if or(bitor(A, B) <> C)  then bugmes();quit;end
-if typeof(C) <> typeof(A) then bugmes();quit;end
-if typeof(C) <> typeof(B) then bugmes();quit;end
-// test 1.5
 A = [0 1 ; 0 1];
 B = [0 0 ; 1 1];
 C = [0 1 ; 1 1];
-if or(bitor(A, B) <> C)  then bugmes();quit;end
-if typeof(C) <> typeof(A) then bugmes();quit;end
-if typeof(C) <> typeof(B) then bugmes();quit;end
-// test 1.6
-A = uint8([0 1 ; 0 1]);
-B = uint8([0 0 ; 1 1]);
-C = uint8([0 1 ; 1 1]);
-if or(bitor(A, B) <> C)  then bugmes();quit;end
-if typeof(C) <> typeof(A) then bugmes();quit;end
-if typeof(C) <> typeof(B) then bugmes();quit;end
-// test 1.7
-A = uint16([0 1 ; 0 1]);
-B = uint16([0 0 ; 1 1]);
-C = uint16([0 1 ; 1 1]);
-if or(bitor(A, B) <> C)  then bugmes();quit;end
-if typeof(C) <> typeof(A) then bugmes();quit;end
-if typeof(C) <> typeof(B) then bugmes();quit;end
-// test 1.8
-A = uint32([0 1 ; 0 1]);
-B = uint32([0 0 ; 1 1]);
-C = uint32([0 1 ; 1 1]);
-if or(bitor(A, B) <> C)  then bugmes();quit;end
-if typeof(C) <> typeof(A) then bugmes();quit;end
-if typeof(C) <> typeof(B) then bugmes();quit;end
-// test 1.9
+for it = icodes
+    a = iconvert(A, it);
+    b = iconvert(B, it);
+    c = iconvert(C, it);
+    assert_checkequal(bitor(a, b), c);
+    assert_checkequal(typeof(c), typeof(a));
+end
+// test 1.3
 A = [0 ; 1 ; 0 ; 1];
 B = [0 ; 0 ; 1 ; 1];
 C = [0 ; 1 ; 1 ; 1];
-if or(bitor(A, B) <> C)  then bugmes();quit;end
-if typeof(C) <> typeof(A) then bugmes();quit;end
-if typeof(C) <> typeof(B) then bugmes();quit;end
-// test 1.6
-A = uint8([0 ; 1 ; 0 ; 1]);
-B = uint8([0 ; 0 ; 1 ; 1]);
-C = uint8([0 ; 1 ; 1 ; 1]);
-if or(bitor(A, B) <> C)  then bugmes();quit;end
-if typeof(C) <> typeof(A) then bugmes();quit;end
-if typeof(C) <> typeof(B) then bugmes();quit;end
-// test 1.7
-A = uint16([0 ; 1 ; 0 ; 1]);
-B = uint16([0 ; 0 ; 1 ; 1]);
-C = uint16([0 ; 1 ; 1 ; 1]);
-if or(bitor(A, B) <> C)  then bugmes();quit;end
-if typeof(C) <> typeof(A) then bugmes();quit;end
-if typeof(C) <> typeof(B) then bugmes();quit;end
-// test 1.8
-A = uint32([0 ; 1 ; 0 ; 1]);
-B = uint32([0 ; 0 ; 1 ; 1]);
-C = uint32([0 ; 1 ; 1 ; 1]);
-if or(bitor(A, B) <> C)  then bugmes();quit;end
-if typeof(C) <> typeof(A) then bugmes();quit;end
-if typeof(C) <> typeof(B) then bugmes();quit;end
-// Tests 2
+for it = icodes
+    a = iconvert(A, it);
+    b = iconvert(B, it);
+    c = iconvert(C, it);
+    assert_checkequal(bitor(a, b), c);
+    assert_checkequal(typeof(c), typeof(a));
+end
+// Tests 2 : mismatching input types must all be accepted
 // =============================================================================
-// test 2.1
 A = [0 1 0 1];
-B = uint8([0 0 1 1]);
-if execstr("bitor(A, B);","errcatch") == 0 then bugmes();quit;end
-// test 2.1
-A = uint8([0 1 0 1]);
-B = uint16([0 0 1 1]);
-if execstr("bitor(A, B);","errcatch") == 0 then bugmes();quit;end
-// test 2.1
-A = uint16([0 1 0 1]);
-B = uint32([0 0 1 1]);
-if execstr("bitor(A, B);","errcatch") == 0 then bugmes();quit;end
-// test 2.1
-A = uint32([0 1 0 1]);
 B = [0 0 1 1];
-if execstr("bitor(A, B);","errcatch") == 0 then bugmes();quit;end
-// Tests 3
+for i = 2:length(icodes)-1
+    for j = i+1:length(icodes)
+        a = iconvert(A,icodes(i));
+        b = iconvert(B,icodes(j));
+        assert_checktrue(execstr("bitor(a, b);","errcatch")==0);
+    end
+end
+// Tests 3 : size of output
+// =============================================================================
+A = floor(100 * rand(100,20));
+B = floor(100 * rand(100,20));
+C = floor(100 * rand(1,1));
+for it = icodes
+    a = iconvert(A, it);
+    b = iconvert(B, it);
+    c = iconvert(C, it);
+    d = bitor(a,b);
+    assert_checkequal(size(a), size(d));
+    d = bitor(a,c);
+    assert_checkequal(size(a), size(d));
+    d = bitor(c,a);
+    assert_checkequal(size(a), size(d));
+end
+// Tests 4 : decimal numbers > 2^52  are  accepted
 // =============================================================================
-// test 3.1
-A = abs(floor(1000 * rand(100,20)));
-B = abs(floor(1000 * rand(100,20)));
-C = bitor(A,B);
-if or( size(A)<>size(B) ) then bugmes();quit;end
-// test 3.2
-A = uint8(abs(floor(1000 * rand(100,20))));
-B = uint8(abs(floor(1000 * rand(100,20))));
-C = bitor(A,B);
-if or( size(A)<>size(B) ) then bugmes();quit;end
-// test 3.3
-A = uint16(abs(floor(1000 * rand(100,20))));
-B = uint16(abs(floor(1000 * rand(100,20))));
-C = bitor(A,B);
-if or( size(A)<>size(B) ) then bugmes();quit;end
-// test 3.4
-A = uint32(abs(floor(1000 * rand(100,20))));
-B = uint32(abs(floor(1000 * rand(100,20))));
-C = bitor(A,B);
-if or( size(A)<>size(B) ) then bugmes();quit;end
-// Test 4
+b0 = 300;
+for i = b0+(1:100)
+    a = 2^i;
+    assert_checkequal(bitor(a, 2^b0), a+2^b0);
+end
+// Test 5
 // =============================================================================
 A = [ ..
     299.    258.    314.    359.    616.    152.    834.    68.     175.    734.    749.    976.    261.    214.    94.     217.    754.    245.    693.    557.  ; ..
@@ -203,37 +150,7 @@ A = [ ..
     92.     791.    288.    280.    840.    859.    269.    187.    524.    200.    522.    841.    71.     167.    158.    826.    620.    915.    185.    211.  ; ..
     639.    109.    423.    678.    825.    469.    543.    68.     732.    494.    936.    579.    893.    204.    225.    431.    993.    491.    128.    657.  ; ..
     328.    929.    42.     285.    76.     791.    965.    359.    266.    880.    69.     423.    880.    811.    885.    567.    589.    240.    823.    105.  ; ..
-    103.    53.     971.    144.    842.    146.    191.    806.    999.    281.    277.    602.    472.    13.     742.    187.    111.    316.    492.    75.   ; ..
-    671.    196.    899.    820.    334.    367.    270.    914.    139.    116.    739.    627.    841.    893.    166.    314.    746.    795.    650.    659.  ; ..
-    850.    523.    3.      638.    312.    420.    678.    491.    112.    282.    605.    342.    874.    525.    985.    43.     846.    407.    582.    228.  ; ..
-    830.    330.    611.    908.    150.    511.    599.    615.    328.    216.    614.    209.    726.    157.    366.    422.    497.    679.    540.    803.  ; ..
-    438.    956.    51.     210.    112.    37.     432.    67.     780.    260.    844.    804.    73.     901.    392.    408.    790.    376.    787.    442.  ; ..
-    587.    957.    164.    154.    309.    48.     414.    753.    62.     111.    939.    794.    136.    784.    806.    235.    218.    693.    167.    713.  ; ..
-    561.    860.    672.    30.     534.    209.    672.    834.    842.    496.    842.    183.    195.    403.    705.    180.    894.    924.    310.    176.  ; ..
-    141.    583.    570.    603.    900.    686.    218.    364.    111.    813.    553.    434.    169.    796.    867.    961.    853.    189.    16.     3.    ; ..
-    384.    633.    128.    196.    196.    994.    803.    342.    793.    524.    38.     132.    715.    278.    458.    689.    388.    667.    13.     931.  ; ..
-    228.    923.    585.    512.    29.     560.    544.    761.    201.    26.     761.    274.    657.    601.    349.    826.    52.     403.    846.    718.  ; ..
-    636.    296.    160.    776.    95.     439.    744.    805.    733.    356.    760.    721.    213.    736.    668.    371.    258.    548.    923.    815.  ; ..
-    355.    835.    985.    462.    883.    708.    432.    443.    393.    406.    988.    970.    338.    277.    296.    752.    643.    988.    661.    7.    ; ..
-    168.    322.    262.    353.    689.    603.    250.    736.    761.    243.    893.    216.    887.    2.      141.    731.    677.    717.    484.    735.  ; ..
-    991.    237.    239.    64.     731.    353.    461.    592.    750.    820.    537.    104.    46.     401.    833.    780.    200.    37.     989.    667.  ; ..
-    846.    707.    6.      240.    926.    394.    326.    268.    813.    705.    558.    413.    863.    956.    589.    629.    465.    207.    273.    557.  ; ..
-    73.     223.    120.    547.    316.    68.     497.    821.    856.    532.    202.    568.    600.    256.    379.    588.    523.    290.    429.    277.  ; ..
-    235.    390.    915.    935.    583.    7.      665.    894.    206.    283.    151.    479.    499.    492.    325.    1.      687.    199.    401.    501.  ; ..
-    61.     593.    348.    148.    369.    250.    216.    819.    392.    0.      790.    333.    47.     298.    277.    233.    176.    624.    501.    776.  ; ..
-    143.    53.     16.     235.    803.    533.    517.    112.    584.    127.    467.    783.    157.    266.    550.    554.    688.    98.     884.    383.  ; ..
-    339.    392.    130.    862.    903.    148.    656.    583.    309.    101.    157.    375.    692.    329.    802.    23.     348.    916.    110.    503.  ; ..
-    880.    4.      366.    578.    334.    875.    480.    433.    445.    989.    535.    128.    308.    810.    40.     774.    64.     813.    986.    931.  ; ..
-    525.    421.    877.    122.    63.     345.    784.    243.    579.    721.    495.    286.    122.    283.    21.     497.    510.    133.    833.    175.  ; ..
-    714.    262.    438.    461.    519.    369.    122.    434.    820.    310.    161.    855.    92.     0.      277.    497.    275.    538.    598.    255.  ; ..
-    389.    174.    762.    661.    867.    552.    863.    651.    497.    867.    738.    545.    791.    159.    481.    389.    16.     568.    125.    511.  ; ..
-    463.    837.    142.    172.    381.    295.    151.    740.    916.    751.    786.    372.    544.    413.    545.    285.    501.    722.    126.    363.  ; ..
-    164.    830.    488.    675.    596.    37.     483.    38.     249.    412.    463.    52.     885.    928.    577.    376.    382.    771.    777.    564.  ; ..
-    288.    573.    325.    348.    180.    679.    758.    998.    345.    629.    101.    723.    430.    65.     231.    758.    14.     781.    901.    426.  ; ..
-    320.    26.     161.    718.    258.    565.    985.    814.    556.    417.    854.    548.    625.    484.    57.     871.    726.    359.    921.    615.  ; ..
-    421.    547.    679.    916.    334.    303.    749.    837.    44.     90.     688.    603.    959.    290.    287.    714.    468.    239.    754.    58.   ; ..
-    758.    684.    708.    930.    819.    563.    980.    70.     806.    264.    677.    512.    160.    339.    797.    412.    280.    892.    985.    167.  ; ..
-    650.    822.    51.     774.    588.    531.    988.    444.    791.    415.    785.    759.    317.    958.    470.    279.    128.    269.    909.    126.  ];
+    ];
 B = [ ..
     511.    299.    529.    766.    739.    39.     125.    996.    368.    699.    914.    155.    428.    455.    616.    283.    424.    803.    615.    922.  ; ..
     403.    223.    453.    985.    260.    337.    35.     632.    64.     113.    551.    688.    331.    580.    463.    859.    689.    839.    780.    362.  ; ..
@@ -304,37 +221,7 @@ B = [ ..
     892.    775.    882.    934.    567.    633.    174.    171.    660.    302.    9.      716.    895.    897.    730.    351.    78.     212.    452.    223.  ; ..
     746.    994.    326.    974.    772.    977.    344.    659.    469.    201.    423.    427.    889.    801.    395.    300.    616.    158.    562.    488.  ; ..
     134.    234.    546.    949.    699.    645.    354.    988.    286.    489.    546.    458.    93.     320.    808.    322.    882.    602.    577.    641.  ; ..
-    594.    462.    694.    511.    297.    888.    655.    348.    175.    80.     694.    920.    632.    442.    20.     921.    400.    174.    606.    275.  ; ..
-    90.     942.    904.    58.     410.    848.    634.    992.    920.    802.    909.    397.    890.    236.    538.    46.     14.     106.    448.    921.  ; ..
-    775.    905.    592.    183.    777.    586.    524.    725.    220.    484.    72.     74.     594.    974.    989.    731.    387.    650.    967.    350.  ; ..
-    951.    130.    169.    94.     940.    240.    14.     607.    224.    495.    932.    597.    853.    513.    256.    636.    537.    415.    169.    990.  ; ..
-    774.    115.    225.    921.    789.    436.    256.    185.    395.    421.    667.    775.    819.    789.    347.    311.    836.    776.    173.    360.  ; ..
-    769.    829.    631.    918.    392.    925.    642.    968.    215.    826.    855.    784.    261.    871.    506.    462.    825.    261.    791.    654.  ; ..
-    709.    235.    113.    646.    749.    577.    849.    62.     341.    123.    405.    768.    905.    858.    700.    858.    826.    453.    555.    48.   ; ..
-    694.    648.    803.    906.    357.    303.    347.    678.    10.     135.    461.    364.    705.    346.    26.     421.    747.    741.    367.    93.   ; ..
-    4.      334.    852.    448.    392.    31.     205.    371.    897.    492.    249.    254.    249.    308.    989.    944.    445.    801.    130.    460.  ; ..
-    154.    756.    596.    144.    223.    570.    118.    572.    382.    711.    484.    113.    996.    383.    695.    903.    46.     496.    54.     473.  ; ..
-    527.    914.    855.    207.    488.    989.    543.    667.    297.    827.    685.    157.    669.    264.    482.    355.    754.    792.    505.    532.  ; ..
-    86.     898.    426.    831.    667.    437.    343.    577.    987.    475.    954.    230.    622.    703.    963.    779.    496.    3.      610.    595.  ; ..
-    725.    176.    835.    70.     480.    992.    402.    840.    127.    482.    561.    289.    454.    535.    735.    675.    734.    496.    266.    144.  ; ..
-    751.    224.    289.    51.     574.    384.    39.     834.    250.    241.    943.    907.    447.    198.    475.    528.    291.    711.    256.    695.  ; ..
-    908.    143.    307.    394.    263.    949.    104.    777.    255.    179.    669.    652.    137.    638.    472.    148.    568.    254.    329.    460.  ; ..
-    45.     472.    382.    8.      402.    801.    275.    502.    24.     816.    526.    207.    909.    966.    308.    667.    1.      986.    925.    904.  ; ..
-    694.    141.    732.    629.    22.     99.     686.    517.    620.    775.    517.    655.    769.    666.    245.    763.    946.    936.    529.    673.  ; ..
-    928.    852.    277.    299.    126.    629.    783.    600.    648.    748.    939.    312.    799.    522.    778.    274.    687.    163.    827.    911.  ; ..
-    718.    361.    902.    758.    35.     261.    217.    573.    551.    347.    507.    998.    176.    383.    383.    360.    692.    225.    268.    15.   ; ..
-    113.    326.    324.    361.    731.    779.    787.    86.     237.    628.    316.    484.    326.    727.    579.    57.     729.    816.    467.    374.  ; ..
-    774.    364.    723.    487.    294.    590.    831.    531.    149.    261.    999.    228.    410.    655.    899.    692.    567.    443.    58.     868.  ; ..
-    706.    112.    233.    47.     198.    175.    734.    642.    367.    771.    432.    669.    868.    210.    384.    387.    3.      45.     978.    985.  ; ..
-    650.    86.     530.    24.     717.    739.    633.    571.    68.     404.    496.    411.    258.    674.    615.    682.    688.    701.    262.    20.   ; ..
-    570.    708.    27.     903.    356.    43.     233.    597.    160.    261.    858.    32.     23.     652.    463.    437.    615.    477.    425.    204.  ; ..
-    666.    225.    302.    36.     427.    453.    799.    154.    565.    795.    168.    861.    121.    370.    662.    472.    278.    907.    110.    347.  ; ..
-    109.    708.    193.    443.    299.    468.    505.    484.    427.    111.    324.    181.    581.    408.    562.    426.    842.    213.    810.    880.  ; ..
-    490.    602.    609.    21.     933.    256.    479.    675.    980.    250.    130.    240.    705.    747.    557.    157.    490.    439.    1.      336.  ; ..
-    344.    706.    183.    867.    564.    631.    370.    345.    446.    57.     169.    774.    399.    103.    804.    259.    557.    455.    413.    661.  ; ..
-    818.    97.     593.    788.    989.    726.    479.    194.    568.    565.    131.    581.    625.    503.    187.    141.    587.    755.    81.     832.  ; ..
-    900.    954.    907.    786.    461.    861.    625.    273.    491.    623.    972.    993.    973.    305.    930.    52.     728.    401.    999.    674.  ; ..
-    968.    950.    687.    858.    232.    981.    983.    341.    846.    588.    438.    629.    141.    119.    38.     835.    725.    922.    986.    10.   ];
+    ];
  C  = [ ..
     511.     299.     827.     1023.    747.     191.     895.     996.     511.     767.     1023.    987.     429.     471.     638.     475.     1018.    1015.    759.     959.   ; ..
     411.     991.     495.     1021.    815.     889.     307.     895.     615.     373.     1023.    944.     1003.    591.     975.     1019.    765.     1015.    780.     1002.  ; ..
@@ -405,35 +292,5 @@ B = [ ..
     892.     791.     882.     958.     895.     891.     431.     187.     668.     494.     523.     973.     895.     935.     734.     895.     622.     983.     509.     223.   ; ..
     767.     1007.    487.     1006.    829.     981.     863.     727.     989.     495.     943.     1003.    893.     1005.    491.     431.     1001.    511.     690.     1017.  ; ..
     462.     1003.    554.     957.     767.     919.     999.     1023.    286.     1017.    615.     495.     893.     875.     893.     887.     895.     762.     887.     745.   ; ..
-    631.     511.     1023.    511.     875.     1018.    703.     894.     1007.    345.     951.     986.     1016.    447.     758.     955.     511.     446.     1022.    347.   ; ..
-    735.     1006.    907.     830.     478.     895.     894.     1010.    923.     886.     1007.    1023.    891.     1021.    702.     318.     750.     891.     970.     923.   ; ..
-    855.     907.     595.     767.     825.     1006.    686.     1023.    252.     510.     605.     350.     890.     975.     989.     763.     975.     927.     967.     510.   ; ..
-    959.     458.     747.     990.     958.     511.     607.     639.     488.     511.     998.     725.     983.     669.     366.     1022.    1017.    959.     701.     1023.  ; ..
-    950.     1023.    243.     987.     885.     437.     432.     251.     911.     421.     991.     807.     891.     917.     475.     447.     854.     888.     959.     506.   ; ..
-    843.     957.     759.     926.     445.     957.     926.     1017.    255.     895.     1023.    794.     397.     887.     1022.    495.     1019.    949.     951.     719.   ; ..
-    757.     1023.    753.     670.     767.     721.     1009.    894.     863.     507.     991.     951.     971.     987.     765.     1022.    894.     989.     831.     176.   ; ..
-    703.     719.     827.     987.     997.     943.     475.     1006.    111.     943.     1005.    510.     745.     862.     891.     997.     1023.    765.     383.     95.    ; ..
-    388.     895.     980.     452.     460.     1023.    1007.    375.     921.     1004.    255.     254.     763.     310.     991.     945.     445.     955.     143.     1007.  ; ..
-    254.     1023.    605.     656.     223.     570.     630.     765.     511.     735.     1021.    371.     1013.    895.     1023.    959.     62.      499.     894.     991.   ; ..
-    639.     954.     1015.    975.     511.     1023.    767.     959.     1021.    895.     765.     733.     733.     1000.    1022.    371.     1010.    828.     1019.    831.   ; ..
-    375.     963.     1019.    1023.    1019.    1013.    503.     1019.    987.     479.     1022.    1006.    894.     959.     1003.    1019.    1011.    991.     759.     599.   ; ..
-    765.     498.     839.     359.     1009.    1019.    506.     1000.    767.     499.     893.     505.     1015.    535.     735.     763.     767.     1021.    494.     735.   ; ..
-    1023.    237.     495.     115.     767.     481.     495.     850.     766.     1013.    959.     1003.    447.     471.     987.     796.     491.     743.     989.     703.   ; ..
-    974.     719.     311.     506.     927.     959.     366.     781.     1023.    755.     703.     925.     991.     1022.    989.     757.     1017.    255.     345.     1005.  ; ..
-    109.     479.     382.     555.     446.     869.     499.     1015.    856.     820.     718.     767.     989.     966.     383.     735.     523.     1018.    957.     925.   ; ..
-    767.     399.     991.     1015.    599.     103.     703.     895.     750.     799.     663.     991.     1011.    1022.    501.     763.     959.     1007.    913.     1013.  ; ..
-    957.     853.     349.     447.     383.     767.     991.     891.     904.     748.     959.     381.     831.     810.     799.     507.     703.     755.     1023.    911.   ; ..
-    719.     381.     918.     767.     803.     789.     733.     637.     623.     383.     507.     1007.    189.     383.     895.     874.     692.     227.     892.     383.   ; ..
-    371.     462.     454.     895.     991.     927.     915.     599.     509.     629.     445.     503.     1014.    991.     867.     63.      989.     948.     511.     503.   ; ..
-    886.     364.     1023.    999.     366.     879.     1023.    947.     445.     989.     1015.    228.     446.     943.     939.     950.     631.     959.     1018.    999.   ; ..
-    719.     501.     1005.    127.     255.     511.     990.     755.     879.     979.     511.     927.     894.     475.     405.     499.     511.     173.     979.     1023.  ; ..
-    714.     342.     950.     477.     719.     1011.    635.     955.     884.     438.     497.     991.     350.     674.     887.     1019.    947.     703.     854.     255.   ; ..
-    959.     750.     763.     919.     871.     555.     1023.    735.     497.     871.     1018.    545.     791.     671.     495.     437.     631.     1021.    509.     511.   ; ..
-    991.     997.     430.     172.     511.     487.     927.     766.     949.     1023.    954.     893.     633.     511.     695.     477.     503.     987.     126.     379.   ; ..
-    237.     1022.    489.     955.     895.     501.     507.     486.     507.     511.     463.     181.     885.     952.     627.     506.     894.     983.     811.     884.   ; ..
-    490.     639.     869.     349.     949.     935.     1023.    999.     989.     767.     231.     755.     1007.    747.     751.     767.     494.     959.     901.     506.   ; ..
-    344.     730.     183.     1007.    822.     631.     1019.    895.     958.     441.     1023.    806.     1023.    487.     829.     871.     767.     487.     925.     759.   ; ..
-    951.     611.     759.     916.     991.     1023.    1023.    967.     572.     639.     691.     607.     1023.    503.     447.     719.     991.     767.     755.     890.   ; ..
-    1014.    958.     975.     946.     1023.    895.     1013.    343.     1007.    879.     1005.    993.     1005.    371.     959.     444.     984.     1021.    1023.    679.   ; ..
-    970.     950.     703.     862.     748.     983.     991.     509.     863.     991.     951.     759.     445.     1023.    502.     855.     725.     927.     991.     126. ];
-if or( bitor(A,B) <> C ) then bugmes();quit;end
+    ];
+assert_checkequal(bitor(A,B), C);
index ad496d9..6b3ae88 100644 (file)
 // =============================================================================
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) 2008 - INRIA - Pierre MARECHAL <pierre.marechal@inria.fr>
+// Copyright (C) 2016 - Samuel GOUGEON
 //
 //  This file is distributed under the same license as the Scilab package.
 // =============================================================================
 
 // <-- CLI SHELL MODE -->
 
-// Tests 1
+icodes = [0 1 2 4 8 11 12 14 18];
+
+// Tests 1 : 
+//  - all inttypes are accepted
+//  - Rows, columns, and matrices are accepted
 // =============================================================================
 
 // test 1.1
-
 A = [0 1 0 1];
 B = [0 0 1 1];
 C = [0 1 1 1];
-
-if or(bitor(A, B) <> C)  then pause, end
-if typeof(C) <> typeof(A) then pause, end
-if typeof(C) <> typeof(B) then pause, end
+for it = icodes
+    a = iconvert(A, it);
+    b = iconvert(B, it);
+    c = iconvert(C, it);
+    assert_checkequal(bitor(a, b), c);
+    assert_checkequal(typeof(c), typeof(a));
+end
 
 // test 1.2
-
-A = uint8([0 1 0 1]);
-B = uint8([0 0 1 1]);
-C = uint8([0 1 1 1]);
-
-if or(bitor(A, B) <> C)  then pause, end
-if typeof(C) <> typeof(A) then pause, end
-if typeof(C) <> typeof(B) then pause, end
-
-// test 1.3
-
-A = uint16([0 1 0 1]);
-B = uint16([0 0 1 1]);
-C = uint16([0 1 1 1]);
-
-if or(bitor(A, B) <> C)  then pause, end
-if typeof(C) <> typeof(A) then pause, end
-if typeof(C) <> typeof(B) then pause, end
-
-// test 1.4
-
-A = uint32([0 1 0 1]);
-B = uint32([0 0 1 1]);
-C = uint32([0 1 1 1]);
-
-if or(bitor(A, B) <> C)  then pause, end
-if typeof(C) <> typeof(A) then pause, end
-if typeof(C) <> typeof(B) then pause, end
-
-// test 1.5
-
 A = [0 1 ; 0 1];
 B = [0 0 ; 1 1];
 C = [0 1 ; 1 1];
+for it = icodes
+    a = iconvert(A, it);
+    b = iconvert(B, it);
+    c = iconvert(C, it);
+    assert_checkequal(bitor(a, b), c);
+    assert_checkequal(typeof(c), typeof(a));
+end
 
-if or(bitor(A, B) <> C)  then pause, end
-if typeof(C) <> typeof(A) then pause, end
-if typeof(C) <> typeof(B) then pause, end
-
-// test 1.6
-
-A = uint8([0 1 ; 0 1]);
-B = uint8([0 0 ; 1 1]);
-C = uint8([0 1 ; 1 1]);
-
-if or(bitor(A, B) <> C)  then pause, end
-if typeof(C) <> typeof(A) then pause, end
-if typeof(C) <> typeof(B) then pause, end
-
-// test 1.7
-
-A = uint16([0 1 ; 0 1]);
-B = uint16([0 0 ; 1 1]);
-C = uint16([0 1 ; 1 1]);
-
-if or(bitor(A, B) <> C)  then pause, end
-if typeof(C) <> typeof(A) then pause, end
-if typeof(C) <> typeof(B) then pause, end
-
-// test 1.8
-
-A = uint32([0 1 ; 0 1]);
-B = uint32([0 0 ; 1 1]);
-C = uint32([0 1 ; 1 1]);
-
-if or(bitor(A, B) <> C)  then pause, end
-if typeof(C) <> typeof(A) then pause, end
-if typeof(C) <> typeof(B) then pause, end
-
-// test 1.9
-
+// test 1.3
 A = [0 ; 1 ; 0 ; 1];
 B = [0 ; 0 ; 1 ; 1];
 C = [0 ; 1 ; 1 ; 1];
+for it = icodes
+    a = iconvert(A, it);
+    b = iconvert(B, it);
+    c = iconvert(C, it);
+    assert_checkequal(bitor(a, b), c);
+    assert_checkequal(typeof(c), typeof(a));
+end
 
-if or(bitor(A, B) <> C)  then pause, end
-if typeof(C) <> typeof(A) then pause, end
-if typeof(C) <> typeof(B) then pause, end
-
-// test 1.6
-
-A = uint8([0 ; 1 ; 0 ; 1]);
-B = uint8([0 ; 0 ; 1 ; 1]);
-C = uint8([0 ; 1 ; 1 ; 1]);
-
-if or(bitor(A, B) <> C)  then pause, end
-if typeof(C) <> typeof(A) then pause, end
-if typeof(C) <> typeof(B) then pause, end
-
-// test 1.7
-
-A = uint16([0 ; 1 ; 0 ; 1]);
-B = uint16([0 ; 0 ; 1 ; 1]);
-C = uint16([0 ; 1 ; 1 ; 1]);
 
-if or(bitor(A, B) <> C)  then pause, end
-if typeof(C) <> typeof(A) then pause, end
-if typeof(C) <> typeof(B) then pause, end
-
-// test 1.8
-
-A = uint32([0 ; 1 ; 0 ; 1]);
-B = uint32([0 ; 0 ; 1 ; 1]);
-C = uint32([0 ; 1 ; 1 ; 1]);
-
-if or(bitor(A, B) <> C)  then pause, end
-if typeof(C) <> typeof(A) then pause, end
-if typeof(C) <> typeof(B) then pause, end
-
-
-// Tests 2
+// Tests 2 : mismatching input types must all be accepted
 // =============================================================================
-
-// test 2.1
-
 A = [0 1 0 1];
-B = uint8([0 0 1 1]);
-
-if execstr("bitor(A, B);","errcatch") == 0 then pause, end
-
-// test 2.1
-
-A = uint8([0 1 0 1]);
-B = uint16([0 0 1 1]);
-
-if execstr("bitor(A, B);","errcatch") == 0 then pause, end
-
-// test 2.1
-
-A = uint16([0 1 0 1]);
-B = uint32([0 0 1 1]);
-
-if execstr("bitor(A, B);","errcatch") == 0 then pause, end
-
-// test 2.1
-
-A = uint32([0 1 0 1]);
 B = [0 0 1 1];
+for i = 2:length(icodes)-1
+    for j = i+1:length(icodes)
+        a = iconvert(A,icodes(i));
+        b = iconvert(B,icodes(j));
+        assert_checktrue(execstr("bitor(a, b);","errcatch")==0);
+    end
+end
 
-if execstr("bitor(A, B);","errcatch") == 0 then pause, end
 
-
-// Tests 3
+// Tests 3 : size of output
 // =============================================================================
+A = floor(100 * rand(100,20));
+B = floor(100 * rand(100,20));
+C = floor(100 * rand(1,1));
+for it = icodes
+    a = iconvert(A, it);
+    b = iconvert(B, it);
+    c = iconvert(C, it);
+    d = bitor(a,b);
+    assert_checkequal(size(a), size(d));
+    d = bitor(a,c);
+    assert_checkequal(size(a), size(d));
+    d = bitor(c,a);
+    assert_checkequal(size(a), size(d));
+end
+
+// Tests 4 : decimal numbers > 2^52  are  accepted
+// =============================================================================
+b0 = 300;
+for i = b0+(1:100)
+    a = 2^i;
+    assert_checkequal(bitor(a, 2^b0), a+2^b0);
+end
 
-// test 3.1
-
-A = abs(floor(1000 * rand(100,20)));
-B = abs(floor(1000 * rand(100,20)));
-C = bitor(A,B);
-
-if or( size(A)<>size(B) ) then pause, end
-
-// test 3.2
-
-A = uint8(abs(floor(1000 * rand(100,20))));
-B = uint8(abs(floor(1000 * rand(100,20))));
-C = bitor(A,B);
-
-if or( size(A)<>size(B) ) then pause, end
-
-// test 3.3
-
-A = uint16(abs(floor(1000 * rand(100,20))));
-B = uint16(abs(floor(1000 * rand(100,20))));
-C = bitor(A,B);
-
-if or( size(A)<>size(B) ) then pause, end
-
-// test 3.4
-
-A = uint32(abs(floor(1000 * rand(100,20))));
-B = uint32(abs(floor(1000 * rand(100,20))));
-C = bitor(A,B);
-
-if or( size(A)<>size(B) ) then pause, end
-
-// Test 4
+// Test 5
 // =============================================================================
 
 A = [ ..
@@ -271,37 +163,7 @@ A = [ ..
     92.     791.    288.    280.    840.    859.    269.    187.    524.    200.    522.    841.    71.     167.    158.    826.    620.    915.    185.    211.  ; ..
     639.    109.    423.    678.    825.    469.    543.    68.     732.    494.    936.    579.    893.    204.    225.    431.    993.    491.    128.    657.  ; ..
     328.    929.    42.     285.    76.     791.    965.    359.    266.    880.    69.     423.    880.    811.    885.    567.    589.    240.    823.    105.  ; ..
-    103.    53.     971.    144.    842.    146.    191.    806.    999.    281.    277.    602.    472.    13.     742.    187.    111.    316.    492.    75.   ; ..
-    671.    196.    899.    820.    334.    367.    270.    914.    139.    116.    739.    627.    841.    893.    166.    314.    746.    795.    650.    659.  ; ..
-    850.    523.    3.      638.    312.    420.    678.    491.    112.    282.    605.    342.    874.    525.    985.    43.     846.    407.    582.    228.  ; ..
-    830.    330.    611.    908.    150.    511.    599.    615.    328.    216.    614.    209.    726.    157.    366.    422.    497.    679.    540.    803.  ; ..
-    438.    956.    51.     210.    112.    37.     432.    67.     780.    260.    844.    804.    73.     901.    392.    408.    790.    376.    787.    442.  ; ..
-    587.    957.    164.    154.    309.    48.     414.    753.    62.     111.    939.    794.    136.    784.    806.    235.    218.    693.    167.    713.  ; ..
-    561.    860.    672.    30.     534.    209.    672.    834.    842.    496.    842.    183.    195.    403.    705.    180.    894.    924.    310.    176.  ; ..
-    141.    583.    570.    603.    900.    686.    218.    364.    111.    813.    553.    434.    169.    796.    867.    961.    853.    189.    16.     3.    ; ..
-    384.    633.    128.    196.    196.    994.    803.    342.    793.    524.    38.     132.    715.    278.    458.    689.    388.    667.    13.     931.  ; ..
-    228.    923.    585.    512.    29.     560.    544.    761.    201.    26.     761.    274.    657.    601.    349.    826.    52.     403.    846.    718.  ; ..
-    636.    296.    160.    776.    95.     439.    744.    805.    733.    356.    760.    721.    213.    736.    668.    371.    258.    548.    923.    815.  ; ..
-    355.    835.    985.    462.    883.    708.    432.    443.    393.    406.    988.    970.    338.    277.    296.    752.    643.    988.    661.    7.    ; ..
-    168.    322.    262.    353.    689.    603.    250.    736.    761.    243.    893.    216.    887.    2.      141.    731.    677.    717.    484.    735.  ; ..
-    991.    237.    239.    64.     731.    353.    461.    592.    750.    820.    537.    104.    46.     401.    833.    780.    200.    37.     989.    667.  ; ..
-    846.    707.    6.      240.    926.    394.    326.    268.    813.    705.    558.    413.    863.    956.    589.    629.    465.    207.    273.    557.  ; ..
-    73.     223.    120.    547.    316.    68.     497.    821.    856.    532.    202.    568.    600.    256.    379.    588.    523.    290.    429.    277.  ; ..
-    235.    390.    915.    935.    583.    7.      665.    894.    206.    283.    151.    479.    499.    492.    325.    1.      687.    199.    401.    501.  ; ..
-    61.     593.    348.    148.    369.    250.    216.    819.    392.    0.      790.    333.    47.     298.    277.    233.    176.    624.    501.    776.  ; ..
-    143.    53.     16.     235.    803.    533.    517.    112.    584.    127.    467.    783.    157.    266.    550.    554.    688.    98.     884.    383.  ; ..
-    339.    392.    130.    862.    903.    148.    656.    583.    309.    101.    157.    375.    692.    329.    802.    23.     348.    916.    110.    503.  ; ..
-    880.    4.      366.    578.    334.    875.    480.    433.    445.    989.    535.    128.    308.    810.    40.     774.    64.     813.    986.    931.  ; ..
-    525.    421.    877.    122.    63.     345.    784.    243.    579.    721.    495.    286.    122.    283.    21.     497.    510.    133.    833.    175.  ; ..
-    714.    262.    438.    461.    519.    369.    122.    434.    820.    310.    161.    855.    92.     0.      277.    497.    275.    538.    598.    255.  ; ..
-    389.    174.    762.    661.    867.    552.    863.    651.    497.    867.    738.    545.    791.    159.    481.    389.    16.     568.    125.    511.  ; ..
-    463.    837.    142.    172.    381.    295.    151.    740.    916.    751.    786.    372.    544.    413.    545.    285.    501.    722.    126.    363.  ; ..
-    164.    830.    488.    675.    596.    37.     483.    38.     249.    412.    463.    52.     885.    928.    577.    376.    382.    771.    777.    564.  ; ..
-    288.    573.    325.    348.    180.    679.    758.    998.    345.    629.    101.    723.    430.    65.     231.    758.    14.     781.    901.    426.  ; ..
-    320.    26.     161.    718.    258.    565.    985.    814.    556.    417.    854.    548.    625.    484.    57.     871.    726.    359.    921.    615.  ; ..
-    421.    547.    679.    916.    334.    303.    749.    837.    44.     90.     688.    603.    959.    290.    287.    714.    468.    239.    754.    58.   ; ..
-    758.    684.    708.    930.    819.    563.    980.    70.     806.    264.    677.    512.    160.    339.    797.    412.    280.    892.    985.    167.  ; ..
-    650.    822.    51.     774.    588.    531.    988.    444.    791.    415.    785.    759.    317.    958.    470.    279.    128.    269.    909.    126.  ];
+    ];
 
 B = [ ..
     511.    299.    529.    766.    739.    39.     125.    996.    368.    699.    914.    155.    428.    455.    616.    283.    424.    803.    615.    922.  ; ..
@@ -373,37 +235,7 @@ B = [ ..
     892.    775.    882.    934.    567.    633.    174.    171.    660.    302.    9.      716.    895.    897.    730.    351.    78.     212.    452.    223.  ; ..
     746.    994.    326.    974.    772.    977.    344.    659.    469.    201.    423.    427.    889.    801.    395.    300.    616.    158.    562.    488.  ; ..
     134.    234.    546.    949.    699.    645.    354.    988.    286.    489.    546.    458.    93.     320.    808.    322.    882.    602.    577.    641.  ; ..
-    594.    462.    694.    511.    297.    888.    655.    348.    175.    80.     694.    920.    632.    442.    20.     921.    400.    174.    606.    275.  ; ..
-    90.     942.    904.    58.     410.    848.    634.    992.    920.    802.    909.    397.    890.    236.    538.    46.     14.     106.    448.    921.  ; ..
-    775.    905.    592.    183.    777.    586.    524.    725.    220.    484.    72.     74.     594.    974.    989.    731.    387.    650.    967.    350.  ; ..
-    951.    130.    169.    94.     940.    240.    14.     607.    224.    495.    932.    597.    853.    513.    256.    636.    537.    415.    169.    990.  ; ..
-    774.    115.    225.    921.    789.    436.    256.    185.    395.    421.    667.    775.    819.    789.    347.    311.    836.    776.    173.    360.  ; ..
-    769.    829.    631.    918.    392.    925.    642.    968.    215.    826.    855.    784.    261.    871.    506.    462.    825.    261.    791.    654.  ; ..
-    709.    235.    113.    646.    749.    577.    849.    62.     341.    123.    405.    768.    905.    858.    700.    858.    826.    453.    555.    48.   ; ..
-    694.    648.    803.    906.    357.    303.    347.    678.    10.     135.    461.    364.    705.    346.    26.     421.    747.    741.    367.    93.   ; ..
-    4.      334.    852.    448.    392.    31.     205.    371.    897.    492.    249.    254.    249.    308.    989.    944.    445.    801.    130.    460.  ; ..
-    154.    756.    596.    144.    223.    570.    118.    572.    382.    711.    484.    113.    996.    383.    695.    903.    46.     496.    54.     473.  ; ..
-    527.    914.    855.    207.    488.    989.    543.    667.    297.    827.    685.    157.    669.    264.    482.    355.    754.    792.    505.    532.  ; ..
-    86.     898.    426.    831.    667.    437.    343.    577.    987.    475.    954.    230.    622.    703.    963.    779.    496.    3.      610.    595.  ; ..
-    725.    176.    835.    70.     480.    992.    402.    840.    127.    482.    561.    289.    454.    535.    735.    675.    734.    496.    266.    144.  ; ..
-    751.    224.    289.    51.     574.    384.    39.     834.    250.    241.    943.    907.    447.    198.    475.    528.    291.    711.    256.    695.  ; ..
-    908.    143.    307.    394.    263.    949.    104.    777.    255.    179.    669.    652.    137.    638.    472.    148.    568.    254.    329.    460.  ; ..
-    45.     472.    382.    8.      402.    801.    275.    502.    24.     816.    526.    207.    909.    966.    308.    667.    1.      986.    925.    904.  ; ..
-    694.    141.    732.    629.    22.     99.     686.    517.    620.    775.    517.    655.    769.    666.    245.    763.    946.    936.    529.    673.  ; ..
-    928.    852.    277.    299.    126.    629.    783.    600.    648.    748.    939.    312.    799.    522.    778.    274.    687.    163.    827.    911.  ; ..
-    718.    361.    902.    758.    35.     261.    217.    573.    551.    347.    507.    998.    176.    383.    383.    360.    692.    225.    268.    15.   ; ..
-    113.    326.    324.    361.    731.    779.    787.    86.     237.    628.    316.    484.    326.    727.    579.    57.     729.    816.    467.    374.  ; ..
-    774.    364.    723.    487.    294.    590.    831.    531.    149.    261.    999.    228.    410.    655.    899.    692.    567.    443.    58.     868.  ; ..
-    706.    112.    233.    47.     198.    175.    734.    642.    367.    771.    432.    669.    868.    210.    384.    387.    3.      45.     978.    985.  ; ..
-    650.    86.     530.    24.     717.    739.    633.    571.    68.     404.    496.    411.    258.    674.    615.    682.    688.    701.    262.    20.   ; ..
-    570.    708.    27.     903.    356.    43.     233.    597.    160.    261.    858.    32.     23.     652.    463.    437.    615.    477.    425.    204.  ; ..
-    666.    225.    302.    36.     427.    453.    799.    154.    565.    795.    168.    861.    121.    370.    662.    472.    278.    907.    110.    347.  ; ..
-    109.    708.    193.    443.    299.    468.    505.    484.    427.    111.    324.    181.    581.    408.    562.    426.    842.    213.    810.    880.  ; ..
-    490.    602.    609.    21.     933.    256.    479.    675.    980.    250.    130.    240.    705.    747.    557.    157.    490.    439.    1.      336.  ; ..
-    344.    706.    183.    867.    564.    631.    370.    345.    446.    57.     169.    774.    399.    103.    804.    259.    557.    455.    413.    661.  ; ..
-    818.    97.     593.    788.    989.    726.    479.    194.    568.    565.    131.    581.    625.    503.    187.    141.    587.    755.    81.     832.  ; ..
-    900.    954.    907.    786.    461.    861.    625.    273.    491.    623.    972.    993.    973.    305.    930.    52.     728.    401.    999.    674.  ; ..
-    968.    950.    687.    858.    232.    981.    983.    341.    846.    588.    438.    629.    141.    119.    38.     835.    725.    922.    986.    10.   ];
+    ];
 
  C  = [ ..
     511.     299.     827.     1023.    747.     191.     895.     996.     511.     767.     1023.    987.     429.     471.     638.     475.     1018.    1015.    759.     959.   ; ..
@@ -475,36 +307,5 @@ B = [ ..
     892.     791.     882.     958.     895.     891.     431.     187.     668.     494.     523.     973.     895.     935.     734.     895.     622.     983.     509.     223.   ; ..
     767.     1007.    487.     1006.    829.     981.     863.     727.     989.     495.     943.     1003.    893.     1005.    491.     431.     1001.    511.     690.     1017.  ; ..
     462.     1003.    554.     957.     767.     919.     999.     1023.    286.     1017.    615.     495.     893.     875.     893.     887.     895.     762.     887.     745.   ; ..
-    631.     511.     1023.    511.     875.     1018.    703.     894.     1007.    345.     951.     986.     1016.    447.     758.     955.     511.     446.     1022.    347.   ; ..
-    735.     1006.    907.     830.     478.     895.     894.     1010.    923.     886.     1007.    1023.    891.     1021.    702.     318.     750.     891.     970.     923.   ; ..
-    855.     907.     595.     767.     825.     1006.    686.     1023.    252.     510.     605.     350.     890.     975.     989.     763.     975.     927.     967.     510.   ; ..
-    959.     458.     747.     990.     958.     511.     607.     639.     488.     511.     998.     725.     983.     669.     366.     1022.    1017.    959.     701.     1023.  ; ..
-    950.     1023.    243.     987.     885.     437.     432.     251.     911.     421.     991.     807.     891.     917.     475.     447.     854.     888.     959.     506.   ; ..
-    843.     957.     759.     926.     445.     957.     926.     1017.    255.     895.     1023.    794.     397.     887.     1022.    495.     1019.    949.     951.     719.   ; ..
-    757.     1023.    753.     670.     767.     721.     1009.    894.     863.     507.     991.     951.     971.     987.     765.     1022.    894.     989.     831.     176.   ; ..
-    703.     719.     827.     987.     997.     943.     475.     1006.    111.     943.     1005.    510.     745.     862.     891.     997.     1023.    765.     383.     95.    ; ..
-    388.     895.     980.     452.     460.     1023.    1007.    375.     921.     1004.    255.     254.     763.     310.     991.     945.     445.     955.     143.     1007.  ; ..
-    254.     1023.    605.     656.     223.     570.     630.     765.     511.     735.     1021.    371.     1013.    895.     1023.    959.     62.      499.     894.     991.   ; ..
-    639.     954.     1015.    975.     511.     1023.    767.     959.     1021.    895.     765.     733.     733.     1000.    1022.    371.     1010.    828.     1019.    831.   ; ..
-    375.     963.     1019.    1023.    1019.    1013.    503.     1019.    987.     479.     1022.    1006.    894.     959.     1003.    1019.    1011.    991.     759.     599.   ; ..
-    765.     498.     839.     359.     1009.    1019.    506.     1000.    767.     499.     893.     505.     1015.    535.     735.     763.     767.     1021.    494.     735.   ; ..
-    1023.    237.     495.     115.     767.     481.     495.     850.     766.     1013.    959.     1003.    447.     471.     987.     796.     491.     743.     989.     703.   ; ..
-    974.     719.     311.     506.     927.     959.     366.     781.     1023.    755.     703.     925.     991.     1022.    989.     757.     1017.    255.     345.     1005.  ; ..
-    109.     479.     382.     555.     446.     869.     499.     1015.    856.     820.     718.     767.     989.     966.     383.     735.     523.     1018.    957.     925.   ; ..
-    767.     399.     991.     1015.    599.     103.     703.     895.     750.     799.     663.     991.     1011.    1022.    501.     763.     959.     1007.    913.     1013.  ; ..
-    957.     853.     349.     447.     383.     767.     991.     891.     904.     748.     959.     381.     831.     810.     799.     507.     703.     755.     1023.    911.   ; ..
-    719.     381.     918.     767.     803.     789.     733.     637.     623.     383.     507.     1007.    189.     383.     895.     874.     692.     227.     892.     383.   ; ..
-    371.     462.     454.     895.     991.     927.     915.     599.     509.     629.     445.     503.     1014.    991.     867.     63.      989.     948.     511.     503.   ; ..
-    886.     364.     1023.    999.     366.     879.     1023.    947.     445.     989.     1015.    228.     446.     943.     939.     950.     631.     959.     1018.    999.   ; ..
-    719.     501.     1005.    127.     255.     511.     990.     755.     879.     979.     511.     927.     894.     475.     405.     499.     511.     173.     979.     1023.  ; ..
-    714.     342.     950.     477.     719.     1011.    635.     955.     884.     438.     497.     991.     350.     674.     887.     1019.    947.     703.     854.     255.   ; ..
-    959.     750.     763.     919.     871.     555.     1023.    735.     497.     871.     1018.    545.     791.     671.     495.     437.     631.     1021.    509.     511.   ; ..
-    991.     997.     430.     172.     511.     487.     927.     766.     949.     1023.    954.     893.     633.     511.     695.     477.     503.     987.     126.     379.   ; ..
-    237.     1022.    489.     955.     895.     501.     507.     486.     507.     511.     463.     181.     885.     952.     627.     506.     894.     983.     811.     884.   ; ..
-    490.     639.     869.     349.     949.     935.     1023.    999.     989.     767.     231.     755.     1007.    747.     751.     767.     494.     959.     901.     506.   ; ..
-    344.     730.     183.     1007.    822.     631.     1019.    895.     958.     441.     1023.    806.     1023.    487.     829.     871.     767.     487.     925.     759.   ; ..
-    951.     611.     759.     916.     991.     1023.    1023.    967.     572.     639.     691.     607.     1023.    503.     447.     719.     991.     767.     755.     890.   ; ..
-    1014.    958.     975.     946.     1023.    895.     1013.    343.     1007.    879.     1005.    993.     1005.    371.     959.     444.     984.     1021.    1023.    679.   ; ..
-    970.     950.     703.     862.     748.     983.     991.     509.     863.     991.     951.     759.     445.     1023.    502.     855.     725.     927.     991.     126. ];
-
-if or( bitor(A,B) <> C ) then pause, end
+    ];
+assert_checkequal(bitor(A,B), C);
index b9f7b24..a8d2831 100644 (file)
@@ -2,6 +2,7 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) 2008-2009 - INRIA - Michael Baudin
 // Copyright (C) 2009-2011 - DIGITEO - Michael Baudin
+// Copyright (C) 2016 - Samuel GOUGEON
 //
 //  This file is distributed under the same license as the Scilab package.
 // =============================================================================
 //
 // Check the bitxor function.
 //
+icodes = [0 1 2 4 8 11 12 14 18];
+// Tests 1 : 
+//  - all inttypes are accepted
+//  - Rows, columns, and matrices are accepted
+// =============================================================================
+// test 1.1
+A = [0 1 0 1];
+B = [0 0 1 1];
+C = [0 1 1 0];
+for it = icodes
+    a = iconvert(A, it);
+    b = iconvert(B, it);
+    c = iconvert(C, it);
+    assert_checkequal(bitxor(a, b), c);
+    assert_checkequal(typeof(c), typeof(a));
+end
+// test 1.2
+A = [0 1 ; 0 1];
+B = [0 0 ; 1 1];
+C = [0 1 ; 1 0];
+for it = icodes
+    a = iconvert(A, it);
+    b = iconvert(B, it);
+    c = iconvert(C, it);
+    assert_checkequal(bitxor(a, b), c);
+    assert_checkequal(typeof(c), typeof(a));
+end
+// test 1.3
+A = [0 ; 1 ; 0 ; 1];
+B = [0 ; 0 ; 1 ; 1];
+C = [0 ; 1 ; 1 ; 0];
+for it = icodes
+    a = iconvert(A, it);
+    b = iconvert(B, it);
+    c = iconvert(C, it);
+    assert_checkequal(bitxor(a, b), c);
+    assert_checkequal(typeof(c), typeof(a));
+end
+// Tests 2 : mismatching input types must all be accepted
+// =============================================================================
+A = [0 1 0 1];
+B = [0 0 1 1];
+for i = 2:length(icodes)-1
+    for j = i+1:length(icodes)
+        a = iconvert(A,icodes(i));
+        b = iconvert(B,icodes(j));
+        assert_checktrue(execstr("bitxor(a, b);","errcatch")==0);
+    end
+end
+// Tests 3 : size of output
+// =============================================================================
+A = floor(100 * rand(100,20));
+B = floor(100 * rand(100,20));
+C = floor(100 * rand(1,1));
+for it = icodes
+    a = iconvert(A, it);
+    b = iconvert(B, it);
+    c = iconvert(C, it);
+    d = bitxor(a,b);
+    assert_checkequal(size(a), size(d));
+    d = bitxor(a,c);
+    assert_checkequal(size(a), size(d));
+    d = bitxor(c,a);
+    assert_checkequal(size(a), size(d));
+end
+// Tests 4 : decimal numbers > 2^52  are  accepted
+// =============================================================================
+for i = 301:400
+    a = sum(2 .^(i- (0:10:60)));
+    b = sum(2 .^(i- (5:5:40)));
+    c = sum(2 .^(i-[0 5 15 25 35 50 60]));
+    assert_checkequal(bitxor(a,b), c);
+end
+// Test 5
+// =============================================================================
+A = [ ..
+    299.    258.    314.    359.    616.    152.    834.    68.     175.    734.    749.    976.    261.    214.    94.     217.    754.    245.    693.    557.  ; ..
+    409.    783.    234.    932.    811.    552.    272.    375.    551.    373.    477.    784.    736.    15.     712.    419.    204.    949.    12.     682.  ; ..
+    261.    273.    627.    652.    209.    280.    855.    221.    243.    720.    430.    936.    767.    48.     191.    731.    896.    18.     372.    527.  ; ..
+    646.    848.    629.    446.    624.    194.    89.     948.    217.    786.    873.    374.    400.    215.    302.    766.    804.    442.    285.    476.  ; ..
+    654.    127.    42.     559.    679.    811.    872.    769.    604.    453.    47.     220.    447.    333.    385.    915.    418.    270.    85.     583.  ; ..
+    560.    432.    600.    158.    280.    327.    874.    625.    689.    178.    600.    19.     444.    423.    303.    128.    653.    420.    394.    99.   ; ..
+    161.    739.    408.    134.    775.    955.    86.     133.    207.    589.    276.    644.    312.    819.    190.    996.    999.    969.    776.    353.  ; ..
+    765.    53.     958.    530.    658.    567.    665.    447.    672.    549.    132.    651.    4.      114.    379.    941.    971.    713.    490.    395.  ; ..
+    697.    613.    118.    798.    627.    430.    475.    538.    286.    324.    750.    550.    701.    298.    567.    106.    189.    483.    25.     793.  ; ..
+    89.     809.    27.     587.    151.    393.    839.    811.    452.    286.    304.    23.     501.    770.    658.    467.    482.    771.    246.    464.  ; ..
+    198.    192.    364.    532.    417.    391.    730.    442.    274.    992.    529.    85.     786.    984.    805.    23.     867.    843.    185.    994.  ; ..
+    259.    541.    18.     303.    656.    875.    990.    0.      347.    357.    376.    801.    735.    490.    643.    878.    319.    587.    287.    152.  ; ..
+    509.    415.    752.    82.     540.    526.    638.    658.    966.    193.    488.    221.    473.    160.    131.    80.     627.    399.    464.    959.  ; ..
+    167.    286.    292.    201.    715.    985.    230.    174.    792.    303.    914.    245.    945.    427.    225.    920.    110.    401.    873.    999.  ; ..
+    340.    511.    379.    221.    206.    132.    488.    450.    888.    4.      664.    41.     652.    387.    620.    998.    2.      873.    998.    347.  ; ..
+    895.    767.    977.    562.    323.    323.    165.    765.    843.    849.    546.    963.    938.    980.    650.    195.    653.    131.    503.    220.  ; ..
+    667.    378.    74.     594.    248.    601.    77.     723.    984.    815.    6.      21.     240.    909.    668.    987.    357.    587.    33.     127.  ; ..
+    25.     934.    150.    336.    74.     154.    443.    790.    951.    998.    174.    670.    292.    482.    672.    424.    340.    202.    314.    513.  ; ..
+    31.     488.    191.    944.    278.    751.    925.    113.    495.    689.    377.    76.     653.    665.    141.    868.    811.    725.    582.    886.  ; ..
+    427.    998.    456.    225.    892.    31.     275.    852.    313.    652.    564.    34.     993.    246.    407.    45.     764.    445.    354.    343.  ; ..
+    108.    593.    580.    61.     718.    140.    942.    652.    683.    265.    647.    444.    449.    771.    627.    649.    29.     372.    573.    579.  ; ..
+    767.    892.    475.    334.    514.    573.    668.    396.    876.    24.     506.    323.    509.    899.    448.    58.     395.    648.    715.    774.  ; ..
+    373.    995.    364.    956.    981.    351.    157.    269.    143.    430.    484.    356.    377.    915.    403.    238.    629.    11.     91.     145.  ; ..
+    151.    481.    266.    111.    930.    313.    117.    979.    997.    273.    556.    689.    92.     986.    587.    992.    953.    294.    152.    792.  ; ..
+    721.    77.     478.    875.    541.    562.    820.    835.    301.    650.    504.    355.    300.    207.    115.    255.    500.    605.    84.     53.   ; ..
+    539.    68.     214.    955.    98.     536.    11.     867.    752.    733.    815.    298.    978.    631.    768.    114.    800.    714.    995.    136.  ; ..
+    145.    567.    792.    271.    225.    858.    442.    355.    681.    444.    94.     318.    786.    911.    234.    507.    84.     713.    310.    822.  ; ..
+    745.    599.    365.    664.    288.    836.    28.     930.    794.    749.    46.     83.     931.    575.    589.    469.    336.    233.    728.    53.   ; ..
+    257.    106.    548.    68.     115.    204.    609.    511.    922.    248.    823.    262.    976.    691.    320.    29.     835.    587.    676.    306.  ; ..
+    770.    381.    844.    771.    219.    382.    9.      531.    351.    276.    557.    505.    146.    903.    742.    790.    853.    837.    521.    654.  ; ..
+    997.    259.    58.     886.    395.    969.    997.    454.    871.    307.    393.    61.     41.     727.    498.    93.     134.    389.    864.    331.  ; ..
+    845.    6.      504.    575.    678.    609.    267.    800.    331.    11.     584.    214.    770.    298.    903.    748.    395.    210.    46.     920.  ; ..
+    646.    810.    600.    729.    615.    937.    384.    948.    593.    645.    756.    781.    405.    875.    670.    467.    226.    760.    617.    627.  ; ..
+    720.    266.    563.    265.    318.    59.     756.    76.     436.    716.    295.    882.    114.    379.    853.    192.    874.    640.    22.     402.  ; ..
+    674.    124.    517.    290.    650.    84.     915.    23.     282.    854.    893.    784.    485.    87.     175.    82.     635.    489.    632.    163.  ; ..
+    354.    187.    518.    781.    840.    296.    931.    485.    497.    427.    773.    403.    830.    635.    764.    916.    747.    97.     968.    466.  ; ..
+    327.    112.    124.    957.    342.    503.    810.    555.    205.    975.    61.     382.    163.    225.    300.    234.    409.    241.    82.     382.  ; ..
+    23.     664.    936.    844.    491.    38.     344.    243.    922.    383.    447.    270.    844.    446.    513.    898.    986.    644.    451.    205.  ; ..
+    593.    145.    411.    132.    974.    78.     500.    146.    292.    278.    476.    121.    102.    310.    625.    147.    762.    635.    721.    900.  ; ..
+    924.    430.    751.    807.    771.    799.    864.    389.    914.    513.    174.    867.    514.    588.    543.    816.    603.    129.    643.    844.  ; ..
+    672.    614.    228.    945.    547.    181.    239.    481.    205.    849.    836.    22.     590.    727.    936.    320.    684.    801.    680.    194.  ; ..
+    484.    216.    206.    500.    208.    312.    864.    40.     21.     168.    461.    674.    244.    314.    918.    768.    617.    671.    15.     514.  ; ..
+    641.    968.    900.    371.    797.    247.    871.    646.    56.     797.    91.     714.    323.    178.    865.    88.     148.    194.    832.    203.  ; ..
+    594.    663.    567.    914.    981.    590.    538.    815.    312.    252.    56.     856.    392.    491.    864.    427.    873.    710.    485.    412.  ; ..
+    106.    519.    458.    287.    327.    848.    45.     827.    772.    79.     884.    754.    732.    752.    784.    546.    129.    379.    373.    843.  ; ..
+    808.    867.    999.    316.    852.    684.    656.    680.    90.     994.    127.    139.    812.    166.    914.    255.    452.    178.    97.     639.  ; ..
+    516.    287.    322.    770.    554.    275.    196.    909.    769.    697.    440.    880.    499.    574.    216.    824.    72.     10.     365.    652.  ; ..
+    61.     143.    418.    27.     254.    767.    369.    13.     275.    17.     448.    319.    445.    304.    901.    638.    399.    572.    219.    129.  ; ..
+    16.     187.    588.    110.    674.    63.     317.    50.     515.    773.    802.    897.    196.    684.    519.    7.      101.    734.    853.    491.  ; ..
+    509.    619.    630.    558.    308.    73.     52.     977.    395.    177.    243.    944.    88.     72.     93.     901.    64.     222.    285.    54.   ; ..
+    469.    217.    542.    54.     17.     567.    365.    760.    83.     137.    493.    687.    904.    240.    157.    193.    547.    620.    109.    749.  ; ..
+    528.    445.    451.    915.    864.    283.    429.    348.    335.    544.    478.    559.    522.    828.    832.    910.    283.    731.    943.    703.  ; ..
+    33.     408.    985.    108.    295.    241.    496.    641.    309.    911.    395.    874.    501.    390.    967.    563.    616.    310.    10.     313.  ; ..
+    711.    636.    740.    559.    312.    44.     314.    408.    519.    888.    365.    351.    607.    884.    846.    262.    928.    288.    226.    2.    ; ..
+    790.    497.    722.    600.    728.    794.    480.    237.    9.      518.    190.    325.    598.    489.    735.    399.    640.    799.    866.    952.  ; ..
+    623.    739.    101.    588.    735.    343.    47.     566.    868.    947.    452.    867.    477.    829.    912.    768.    765.    234.    706.    451.  ; ..
+    799.    0.      631.    93.     262.    521.    49.     703.    353.    992.    488.    304.    41.     136.    576.    949.    704.    932.    537.    135.  ; ..
+    42.     428.    478.    116.    784.    302.    998.    566.    623.    448.    840.    604.    598.    832.    580.    972.    41.     685.    524.    108.  ; ..
+    867.    878.    372.    991.    411.    984.    990.    602.    153.    795.    155.    70.     1.      222.    367.    442.    888.    792.    833.    68.   ; ..
+    345.    809.    666.    369.    506.    415.    235.    611.    776.    218.    663.    588.    976.    542.    146.    608.    644.    148.    533.    351.  ; ..
+    798.    819.    405.    135.    124.    424.    764.    492.    51.     832.    761.    445.    235.    42.     260.    618.    337.    401.    314.    174.  ; ..
+    372.    326.    944.    619.    861.    347.    448.    217.    286.    661.    868.    427.    124.    42.     828.    155.    868.    748.    405.    229.  ; ..
+    186.    525.    12.     276.    670.    18.     807.    441.    635.    553.    781.    722.    521.    95.     383.    390.    131.    65.     116.    862.  ; ..
+    505.    795.    299.    636.    965.    834.    435.    979.    413.    199.    368.    584.    406.    502.    13.     781.    682.    763.    405.    244.  ; ..
+    342.    772.    709.    901.    545.    890.    787.    525.    795.    131.    671.    576.    961.    666.    730.    899.    10.     608.    624.    470.  ; ..
+    582.    973.    114.    632.    856.    17.     656.    690.    136.    919.    778.    705.    895.    690.    463.    929.    841.    544.    359.    254.  ; ..
+    92.     791.    288.    280.    840.    859.    269.    187.    524.    200.    522.    841.    71.     167.    158.    826.    620.    915.    185.    211.  ; ..
+    639.    109.    423.    678.    825.    469.    543.    68.     732.    494.    936.    579.    893.    204.    225.    431.    993.    491.    128.    657.  ; ..
+    328.    929.    42.     285.    76.     791.    965.    359.    266.    880.    69.     423.    880.    811.    885.    567.    589.    240.    823.    105.  ; ..
+    ];
+B = [ ..
+    511.    299.    529.    766.    739.    39.     125.    996.    368.    699.    914.    155.    428.    455.    616.    283.    424.    803.    615.    922.  ; ..
+    403.    223.    453.    985.    260.    337.    35.     632.    64.     113.    551.    688.    331.    580.    463.    859.    689.    839.    780.    362.  ; ..
+    827.    66.     978.    614.    218.    678.    161.    20.     560.    768.    596.    890.    553.    53.     853.    856.    480.    429.    772.    419.  ; ..
+    589.    677.    202.    42.     319.    256.    772.    61.     840.    507.    931.    68.     147.    638.    708.    406.    269.    599.    98.     105.  ; ..
+    298.    994.    102.    50.     811.    524.    521.    618.    997.    538.    934.    439.    592.    754.    812.    889.    399.    300.    884.    943.  ; ..
+    750.    321.    48.     310.    370.    948.    80.     245.    226.    670.    818.    373.    979.    272.    977.    20.     120.    839.    539.    242.  ; ..
+    605.    885.    102.    86.     269.    308.    723.    151.    307.    253.    61.     463.    588.    379.    777.    270.    910.    368.    147.    532.  ; ..
+    889.    20.     483.    246.    947.    795.    186.    755.    81.     768.    113.    88.     853.    511.    339.    190.    319.    312.    374.    662.  ; ..
+    724.    518.    73.     894.    321.    922.    883.    758.    406.    470.    227.    179.    192.    567.    854.    768.    53.     626.    860.    333.  ; ..
+    122.    726.    397.    287.    566.    459.    294.    34.     257.    61.     855.    504.    806.    761.    605.    73.     869.    799.    550.    568.  ; ..
+    702.    915.    256.    290.    123.    780.    939.    129.    985.    639.    863.    33.     535.    680.    742.    203.    797.    457.    750.    890.  ; ..
+    562.    646.    707.    169.    769.    226.    84.     970.    964.    322.    252.    971.    760.    240.    574.    836.    239.    469.    818.    351.  ; ..
+    250.    477.    828.    368.    794.    940.    381.    978.    719.    681.    475.    998.    863.    319.    31.     551.    822.    570.    913.    43.   ; ..
+    485.    2.      265.    453.    408.    613.    387.    298.    231.    101.    675.    471.    193.    689.    892.    701.    297.    835.    0.      390.  ; ..
+    59.     763.    740.    509.    933.    443.    469.    678.    101.    757.    858.    193.    778.    385.    10.     915.    297.    213.    829.    602.  ; ..
+    464.    368.    504.    384.    164.    290.    303.    505.    725.    900.    670.    738.    185.    477.    373.    457.    513.    458.    56.     130.  ; ..
+    27.     748.    605.    327.    664.    860.    805.    229.    783.    334.    335.    607.    373.    898.    564.    739.    274.    976.    896.    785.  ; ..
+    822.    203.    393.    286.    820.    856.    1.      856.    651.    735.    897.    974.    737.    489.    385.    907.    483.    719.    192.    307.  ; ..
+    485.    963.    211.    267.    26.     905.    63.     266.    993.    875.    65.     625.    529.    379.    420.    953.    737.    473.    975.    100.  ; ..
+    862.    5.      297.    449.    803.    679.    343.    818.    257.    94.     694.    717.    922.    623.    515.    97.     404.    265.    816.    470.  ; ..
+    382.    72.     303.    20.     784.    533.    143.    609.    203.    458.    301.    204.    678.    959.    238.    267.    689.    937.    49.     233.  ; ..
+    715.    389.    169.    756.    727.    788.    186.    267.    643.    929.    527.    430.    497.    189.    221.    100.    27.     120.    432.    738.  ; ..
+    647.    819.    212.    895.    358.    713.    298.    260.    240.    712.    118.    350.    699.    857.    60.     981.    446.    584.    499.    55.   ; ..
+    192.    133.    0.      22.     166.    403.    566.    520.    858.    848.    849.    904.    747.    928.    279.    444.    687.    694.    600.    943.  ; ..
+    897.    99.     69.     333.    903.    197.    327.    123.    715.    40.     90.     269.    693.    775.    938.    811.    732.    926.    177.    356.  ; ..
+    663.    854.    477.    8.      304.    187.    928.    77.     632.    990.    670.    266.    601.    550.    507.    947.    82.     46.     599.    822.  ; ..
+    767.    541.    101.    94.     47.     704.    96.     452.    535.    500.    868.    705.    610.    593.    450.    716.    799.    385.    707.    773.  ; ..
+    486.    204.    314.    298.    575.    404.    854.    43.     389.    61.     382.    374.    181.    588.    339.    497.    546.    456.    442.    621.  ; ..
+    686.    965.    283.    749.    721.    203.    728.    552.    515.    403.    165.    819.    396.    768.    694.    945.    827.    974.    731.    983.  ; ..
+    854.    259.    424.    411.    547.    831.    435.    292.    221.    576.    864.    325.    925.    746.    221.    207.    349.    701.    92.     182.  ; ..
+    371.    538.    721.    326.    337.    877.    355.    779.    357.    946.    475.    910.    872.    490.    596.    836.    813.    842.    410.    945.  ; ..
+    918.    17.     81.     719.    235.    392.    203.    474.    305.    289.    602.    729.    20.     814.    342.    123.    84.     105.    235.    261.  ; ..
+    956.    2.      998.    638.    592.    246.    503.    6.      610.    455.    484.    746.    333.    287.    330.    752.    308.    466.    841.    172.  ; ..
+    597.    418.    188.    671.    395.    833.    409.    798.    488.    80.     286.    95.     78.     307.    841.    263.    226.    487.    391.    266.  ; ..
+    943.    194.    655.    391.    827.    136.    535.    617.    290.    430.    832.    561.    294.    742.    751.    180.    134.    665.    523.    49.   ; ..
+    435.    988.    665.    431.    236.    357.    227.    998.    522.    999.    994.    41.     567.    335.    145.    994.    426.    281.    578.    727.  ; ..
+    454.    671.    465.    947.    500.    200.    393.    272.    820.    927.    60.     304.    130.    737.    296.    959.    963.    675.    933.    508.  ; ..
+    154.    937.    681.    253.    105.    707.    15.     962.    420.    629.    526.    982.    385.    549.    427.    574.    858.    359.    943.    479.  ; ..
+    808.    984.    404.    12.     327.    736.    555.    452.    336.    292.    668.    896.    153.    449.    229.    104.    775.    774.    90.     296.  ; ..
+    962.    209.    832.    459.    994.    745.    28.     950.    601.    367.    586.    261.    58.     299.    169.    864.    889.    232.    629.    637.  ; ..
+    883.    315.    811.    905.    368.    144.    43.     535.    483.    168.    443.    357.    109.    649.    800.    214.    39.     604.    4.      892.  ; ..
+    175.    421.    260.    805.    124.    888.    774.    110.    714.    405.    157.    351.    115.    199.    367.    774.    293.    256.    594.    827.  ; ..
+    104.    260.    341.    802.    159.    786.    825.    301.    53.     544.    174.    173.    673.    46.     114.    316.    427.    921.    580.    432.  ; ..
+    119.    747.    98.     71.     90.     751.    410.    912.    209.    57.     530.    564.    243.    59.     852.    657.    177.    88.     918.    691.  ; ..
+    891.    823.    471.    824.    324.    670.    468.    578.    494.    607.    697.    483.    595.    796.    808.    577.    328.    247.    146.    938.  ; ..
+    452.    490.    205.    820.    149.    920.    94.     123.    638.    518.    822.    542.    656.    441.    522.    616.    452.    830.    280.    304.  ; ..
+    185.    569.    779.    424.    272.    647.    780.    720.    883.    851.    490.    15.     59.     371.    211.    57.     705.    356.    796.    241.  ; ..
+    955.    164.    16.     293.    993.    706.    906.    848.    326.    978.    373.    603.    582.    787.    652.    334.    70.     847.    601.    660.  ; ..
+    715.    801.    480.    591.    995.    83.     734.    54.     749.    472.    989.    508.    8.      926.    31.     839.    407.    850.    431.    561.  ; ..
+    234.    295.    173.    250.    613.    34.     655.    847.    202.    132.    50.     594.    856.    109.    972.    501.    165.    188.    204.    718.  ; ..
+    292.    821.    997.    318.    0.      567.    741.    726.    493.    134.    906.    42.     925.    724.    81.     949.    162.    844.    251.    120.  ; ..
+    633.    724.    357.    46.     614.    24.     582.    735.    174.    473.    972.    125.    39.     411.    596.    9.      589.    550.    116.    488.  ; ..
+    92.     342.    197.    953.    436.    566.    460.    911.    597.    853.    361.    591.    343.    234.    469.    746.    637.    277.    731.    854.  ; ..
+    787.    779.    363.    286.    312.    329.    376.    562.    334.    81.     527.    887.    261.    224.    87.     798.    950.    864.    219.    192.  ; ..
+    834.    186.    570.    810.    805.    409.    454.    510.    480.    625.    113.    671.    465.    762.    506.    374.    419.    893.    334.    529.  ; ..
+    558.    249.    673.    876.    178.    677.    91.     658.    323.    915.    545.    943.    937.    823.    808.    278.    89.     607.    711.    492.  ; ..
+    509.    987.    573.    176.    783.    917.    233.    582.    392.    717.    792.    428.    113.    140.    624.    736.    11.     67.     577.    842.  ; ..
+    453.    376.    589.    29.     381.    286.    172.    202.    294.    688.    28.     421.    452.    616.    145.    681.    787.    744.    617.    54.   ; ..
+    142.    22.     846.    976.    861.    794.    156.    246.    293.    731.    348.    386.    203.    569.    215.    708.    257.    537.    136.    700.  ; ..
+    909.    106.    203.    747.    369.    674.    940.    848.    962.    167.    805.    705.    843.    839.    15.     240.    259.    751.    818.    126.  ; ..
+    400.    979.    549.    186.    223.    948.    530.    17.     735.    953.    144.    689.    370.    489.    968.    264.    446.    277.    651.    214.  ; ..
+    897.    393.    3.      268.    357.    824.    225.    565.    30.     994.    753.    955.    212.    842.    217.    695.    590.    160.    75.     335.  ; ..
+    9.      721.    909.    77.     816.    528.    495.    873.    701.    535.    785.    355.    678.    752.    243.    277.    4.      521.    258.    415.  ; ..
+    45.     277.    580.    861.    230.    496.    445.    615.    784.    899.    656.    454.    942.    873.    491.    168.    495.    580.    728.    263.  ; ..
+    386.    391.    673.    771.    380.    139.    235.    165.    508.    47.     79.     271.    888.    751.    761.    338.    610.    708.    2.      622.  ; ..
+    786.    772.    664.    87.     527.    614.    991.    222.    717.    137.    252.    718.    743.    110.    527.    771.    597.    876.    940.    592.  ; ..
+    892.    775.    882.    934.    567.    633.    174.    171.    660.    302.    9.      716.    895.    897.    730.    351.    78.     212.    452.    223.  ; ..
+    746.    994.    326.    974.    772.    977.    344.    659.    469.    201.    423.    427.    889.    801.    395.    300.    616.    158.    562.    488.  ; ..
+    134.    234.    546.    949.    699.    645.    354.    988.    286.    489.    546.    458.    93.     320.    808.    322.    882.    602.    577.    641.  ; ..
+    ];
+ C  = [
+   212.    41.     811.   921.   139.   191.    831.    928.    479.    101.    383.    843.    169.    273.    566.    450.   858.   982.    210.    439. 
+   10.     976.    303.   125.   559.   889.    307.    783.    615.    260.    1018.   416.    939.    587.    775.    760.   637.   242.    768.    960. 
+   574.    339.    417.   234.   11.    958.    1014.   201.    707.    464.    1018.   210.    214.    5.      1002.   387.   608.   447.    624.    940. 
+   203.    501.    703.   404.   847.   450.    861.    905.    913.    745.    202.    306.    259.    681.    1002.   872.   553.   1005.   383.    437. 
+   932.    925.    76.    541.   396.   295.    353.    363.    441.    991.    905.    363.    1007.   959.    685.    234.   45.    34.     801.    488. 
+   222.    241.    616.   424.   106.   755.    826.    644.    595.    556.    362.    358.    623.    183.    766.    148.   757.   739.    913.    145. 
+   764.    406.    510.   208.   522.   655.    645.    18.     508.    688.    297.    843.    884.    584.    951.    746.   105.   697.    923.    885. 
+   388.    33.     605.   740.   289.   300.    547.    844.    753.    293.    245.    723.    849.    397.    40.     787.   756.   1009.   156.    797. 
+   109.    99.     63.    96.    818.   564.    680.    236.    136.    146.    525.    661.    637.    797.    353.    874.   136.   913.    837.    596. 
+   35.     511.    406.   852.   673.   66.     609.    777.    197.    291.    615.    495.    723.    507.    207.    410.   647.   28.     720.    1000.
+   632.    851.    108.   822.   474.   651.    369.    315.    715.    415.    334.    116.    261.    368.    451.    220.   126.   642.    599.    152. 
+   817.    155.    721.   390.   401.   905.    906.    970.    671.    39.     388.    234.    39.     282.    189.    42.    464.   926.    557.    455. 
+   263.    66.     460.   290.   262.   418.    771.    320.    265.    616.    51.     827.    646.    415.    156.    631.   325.   949.    577.    916. 
+   322.    284.    45.    268.   851.   444.    357.    388.    1023.   330.    305.    290.    880.    794.    925.    293.   327.   722.    873.    609. 
+   367.    772.    927.   288.   875.   319.    61.     868.    797.    753.    450.    232.    390.    2.      614.    117.   299.   956.    219.    769. 
+   687.    911.    553.   946.   487.   97.     394.    772.    414.    213.    188.    289.    787.    521.    1023.   266.   140.   329.    463.    94.  
+   640.    918.    535.   789.   608.   261.    872.    566.    215.    609.    329.    586.    389.    15.     168.    312.   119.   411.    929.    878. 
+   815.    877.    287.   78.    894.   962.    442.    78.     316.    313.    815.    336.    965.    11.     801.    547.   183.   517.    506.    818. 
+   506.    555.    108.   699.   268.   358.    930.    379.    526.    474.    312.    573.    156.    994.    297.    221.   458.   780.    393.    786. 
+   757.    995.    225.   288.   95.    696.    68.     102.    56.     722.    130.    751.    123.    665.    916.    76.    872.   180.    594.    129. 
+   274.    537.    875.   41.    478.   665.    801.    237.    608.    195.    938.    368.    871.    188.    669.    898.   684.   733.    524.    682. 
+   52.     761.    370.   954.   213.   297.    550.    135.    495.    953.    1013.   237.    12.     830.    285.    94.    400.   752.    891.    484. 
+   1010.   208.    440.   195.   691.   918.    439.    9.      127.    870.    402.    58.     962.    202.    431.    827.   971.   579.    424.    166. 
+   87.     356.    266.   121.   772.   170.    579.    475.    191.    577.    381.    313.    695.    122.    860.    604.   278.   912.    704.    183. 
+   336.    46.     411.   550.   410.   759.    627.    824.    998.    674.    418.    110.    921.    968.    985.    980.   808.   451.    229.    337. 
+   140.    786.    267.   947.   338.   675.    939.    814.    136.    259.    433.    32.     395.    81.     763.    961.   882.   740.    436.    958. 
+   622.    42.     893.   337.   206.   410.    474.    167.    190.    72.     826.    1023.   368.    478.    296.    823.   843.   840.    1013.   51.  
+   783.    667.    87.    946.   799.   720.    842.    905.    671.    720.    336.    293.    790.    115.    798.    36.    882.   289.    866.    600. 
+   943.    943.    831.   681.   674.   7.      185.    983.    409.    363.    914.    565.    604.    435.    1014.   940.   120.   389.    127.    741. 
+   84.     126.    740.   664.   760.   577.    442.    823.    386.    852.    333.    188.    783.    365.    571.    985.   520.   504.    597.    568. 
+   662.    793.    747.   560.   218.   164.    646.    717.    514.    641.    82.     947.    833.    829.    934.    793.   939.   719.    762.    762. 
+   219.    23.     425.   240.   589.   1001.   448.    762.    122.    298.    18.     527.    790.    516.    721.    663.   479.   187.    197.    669. 
+   314.    808.    446.   167.   55.    863.    119.    946.    51.     834.    784.    487.    216.    628.    980.    803.   470.   810.    288.    735. 
+   133.    168.    655.   918.   181.   890.    877.    850.    92.     668.    57.     813.    60.     72.     28.     455.   904.   871.    401.    152. 
+   269.    190.    138.   165.   433.   220.    388.    638.    56.     760.    61.     289.    195.    689.    576.    230.   765.   880.    115.    146. 
+   209.    871.    159.   674.   932.   77.     832.    515.    1019.   588.    231.    442.    265.    820.    621.    118.   833.   376.    394.    773. 
+   129.    751.    429.   14.    162.   319.    675.    827.    1017.   80.     1.      78.     33.     512.    4.      853.   602.   594.    1015.   130. 
+   141.    305.    257.   945.   386.   741.    343.    817.    574.    778.    945.    728.    717.    923.    938.    444.   128.   995.    620.    274. 
+   377.    841.    15.    136.   649.   686.    991.    342.    116.    50.     832.    1017.   255.    247.    660.    251.   509.   381.    651.    684. 
+   94.     383.    431.   748.   225.   502.    892.    563.    459.    878.    740.    614.    568.    871.    694.    80.    290.   105.    246.    305. 
+   467.    861.    975.   56.    851.   37.     196.    1014.   302.    1017.   767.    371.    547.    94.     136.    406.   651.   381.    684.    958. 
+   331.    381.    458.   721.   172.   576.    102.    70.     735.    317.    336.    1021.   135.    509.    761.    6.     844.   927.    605.    313. 
+   745.    716.    721.   593.   898.   997.    94.     939.    13.     317.    245.    615.    994.    156.    787.    356.   319.   859.    260.    379. 
+   549.    124.    597.   981.   911.   161.    896.    191.    489.    197.    554.    364.    379.    464.    52.     826.   984.   670.    627.    815. 
+   785.    304.    29.    551.   3.     462.    505.    377.    746.    528.    461.    785.    143.    492.    56.     99.    457.   396.    487.    225. 
+   748.    649.    810.   520.   961.   308.    718.    723.    548.    484.    841.    661.    444.    287.    408.    663.   0.     908.    377.    847. 
+   701.    806.    585.   682.   826.   916.    968.    349.    114.    490.    82.     895.    456.    845.    11.     769.   649.   366.    625.    637. 
+   902.    43.     434.   318.   799.   61.     763.    861.    85.     963.    181.    868.    1019.   547.    265.    816.   457.   371.    642.    533. 
+   731.    922.    940.   545.   321.   108.    995.    4.      238.    733.    255.    637.    204.    306.    536.    832.   498.   396.    762.    986. 
+   279.    844.    731.   724.   849.   107.    699.    158.    321.    53.     193.    482.    768.    37.     913.    624.   229.   98.     465.    760. 
+   241.    1004.   507.   264.   17.    0.      904.    46.     446.    15.     615.    645.    21.     548.    204.    884.   641.   288.    150.    661. 
+   105.    873.    166.   957.   262.   259.    1003.   899.    481.    1017.   530.    594.    557.    679.    276.    903.   854.   253.    987.    855. 
+   125.    206.    796.   981.   147.   711.    60.     270.    864.    218.    226.    293.    162.    364.    530.    217.   21.    35.     721.    623. 
+   468.    375.    911.   817.   0.     357.    66.     938.    841.    809.    866.    552.    858.    916.    793.    536.   22.    576.    57.     194. 
+   84.     331.    232.   370.   509.   643.    38.     275.    489.    119.    207.    986.    903.    787.    805.    249.   803.   98.     556.    425. 
+   65.     538.    708.   288.   621.   1010.   116.    164.    551.    32.     997.    204.    628.    10.     184.    534.   676.   693.    5.      47.  
+   738.    987.    74.    237.   521.   412.    216.    249.    233.    301.    752.    156.    88.     4.      48.     341.   715.   999.    88.     973. 
+   495.    212.    915.   105.   621.   48.     842.    764.    841.    880.    852.    1017.   914.    296.    725.    357.   826.   69.     101.    90.  
+   1005.   888.    570.   15.    710.   194.    834.    684.    444.    448.    455.    452.    202.    743.    440.    894.   633.   257.    969.    760. 
+   724.    835.    593.   922.   139.   829.    839.    307.    202.    125.    434.    141.    155.    345.    157.    656.   903.   635.    295.    289. 
+   654.    224.    944.   61.    163.   540.    238.    509.    748.    249.    617.    780.    409.    451.    716.    866.   239.   132.    945.    120. 
+   757.    207.    947.   871.   568.   611.    289.    748.    256.    375.    405.    528.    168.    864.    997.    556.   298.   588.    478.    426. 
+   179.    220.    897.   345.   430.   514.    712.    720.    198.    62.     28.     945.    175.    687.    396.    147.   135.   584.    374.    705. 
+   468.    526.    879.   289.   803.   690.    14.     436.    653.    836.    992.    910.    568.    671.    486.    933.   837.   191.    845.    499. 
+   212.    643.    100.   134.   861.   1009.   1016.   680.    743.    172.    720.    847.    185.    117.    35.     721.   616.   164.    626.    952. 
+   340.    201.    746.   559.   343.   631.    335.    620.    581.    798.    1014.   15.     408.    732.    960.    162.   284.   332.    715.    686. 
+   800.    16.     594.   702.   383.   290.    419.    16.     152.    486.    515.    389.    824.    806.    580.    613.   546.   839.    381.    12.  
+   149.    911.    225.   360.   61.    516.    839.    727.    777.    295.    527.    1000.   4.      1005.   362.    131.   393.   373.    690.    889. 
+   462.    843.    520.   680.   759.   402.    679.    699.    20.     665.    615.    109.    813.    619.    93.     885.   319.   682.    374.    744. 
+    ];
+assert_checkequal(bitxor(A,B), C);
+// Tests 6 :
+// =============================================================================
 computed = zeros(10, 1);
 x12mat =  [
 86     19
@@ -35,14 +327,13 @@ expected =  [
 108
 47
 ];
-for k = 1 : size ( x12mat , "r" )
-    i = x12mat ( k , 1 );
-    j = x12mat ( k , 2 );
-    computed ( k ) = bitxor ( i , j );
+for k = 1 : size(x12mat, "r")
+    i = x12mat(k, 1);
+    j = x12mat(k, 2);
+    computed(k) = bitxor(i, j);
 end
-assert_checkequal ( computed , expected );
+assert_checkequal(computed, expected);
 //
 // Check that it is correctly vectorized.
-//
-computed = bitxor ( x12mat(:, 1) , x12mat(:, 2) );
-assert_checkequal ( computed , expected );
+computed = bitxor(x12mat(:, 1), x12mat(:, 2));
+assert_checkequal(computed, expected);
index 6417d7f..633a544 100644 (file)
-// =============================================================================\r
-// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab\r
-// Copyright (C) 2008-2009 - INRIA - Michael Baudin\r
-// Copyright (C) 2009-2011 - DIGITEO - Michael Baudin\r
-//\r
-//  This file is distributed under the same license as the Scilab package.\r
-// =============================================================================\r
-//\r
-// <-- CLI SHELL MODE -->\r
-//\r
-// Check the bitxor function.\r
-//\r
-\r
-computed = zeros(10, 1);\r
-x12mat =  [\r
-86     19\r
-90     31\r
-32     48\r
-4     22\r
-41     36\r
-55     71\r
-77     77\r
-37     57\r
-100      8\r
-99     76\r
-];\r
-expected =  [\r
-69\r
-69\r
-16\r
-18\r
-13\r
-112\r
-0\r
-28\r
-108\r
-47\r
-];\r
-\r
-for k = 1 : size ( x12mat , "r" )\r
-    i = x12mat ( k , 1 );\r
-    j = x12mat ( k , 2 );\r
-    computed ( k ) = bitxor ( i , j );\r
-end\r
-assert_checkequal ( computed , expected );\r
-\r
-//\r
-// Check that it is correctly vectorized.\r
-//\r
-computed = bitxor ( x12mat(:, 1) , x12mat(:, 2) );\r
-assert_checkequal ( computed , expected );\r
-\r
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2008-2009 - INRIA - Michael Baudin
+// Copyright (C) 2009-2011 - DIGITEO - Michael Baudin
+// Copyright (C) 2016 - Samuel GOUGEON
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+//
+// Check the bitxor function.
+//
+icodes = [0 1 2 4 8 11 12 14 18];
+
+// Tests 1 : 
+//  - all inttypes are accepted
+//  - Rows, columns, and matrices are accepted
+// =============================================================================
+
+// test 1.1
+A = [0 1 0 1];
+B = [0 0 1 1];
+C = [0 1 1 0];
+for it = icodes
+    a = iconvert(A, it);
+    b = iconvert(B, it);
+    c = iconvert(C, it);
+    assert_checkequal(bitxor(a, b), c);
+    assert_checkequal(typeof(c), typeof(a));
+end
+
+// test 1.2
+A = [0 1 ; 0 1];
+B = [0 0 ; 1 1];
+C = [0 1 ; 1 0];
+for it = icodes
+    a = iconvert(A, it);
+    b = iconvert(B, it);
+    c = iconvert(C, it);
+    assert_checkequal(bitxor(a, b), c);
+    assert_checkequal(typeof(c), typeof(a));
+end
+
+// test 1.3
+A = [0 ; 1 ; 0 ; 1];
+B = [0 ; 0 ; 1 ; 1];
+C = [0 ; 1 ; 1 ; 0];
+for it = icodes
+    a = iconvert(A, it);
+    b = iconvert(B, it);
+    c = iconvert(C, it);
+    assert_checkequal(bitxor(a, b), c);
+    assert_checkequal(typeof(c), typeof(a));
+end
+
+
+// Tests 2 : mismatching input types must all be accepted
+// =============================================================================
+A = [0 1 0 1];
+B = [0 0 1 1];
+for i = 2:length(icodes)-1
+    for j = i+1:length(icodes)
+        a = iconvert(A,icodes(i));
+        b = iconvert(B,icodes(j));
+        assert_checktrue(execstr("bitxor(a, b);","errcatch")==0);
+    end
+end
+
+
+// Tests 3 : size of output
+// =============================================================================
+A = floor(100 * rand(100,20));
+B = floor(100 * rand(100,20));
+C = floor(100 * rand(1,1));
+for it = icodes
+    a = iconvert(A, it);
+    b = iconvert(B, it);
+    c = iconvert(C, it);
+    d = bitxor(a,b);
+    assert_checkequal(size(a), size(d));
+    d = bitxor(a,c);
+    assert_checkequal(size(a), size(d));
+    d = bitxor(c,a);
+    assert_checkequal(size(a), size(d));
+end
+
+// Tests 4 : decimal numbers > 2^52  are  accepted
+// =============================================================================
+for i = 301:400
+    a = sum(2 .^(i- (0:10:60)));
+    b = sum(2 .^(i- (5:5:40)));
+    c = sum(2 .^(i-[0 5 15 25 35 50 60]));
+    assert_checkequal(bitxor(a,b), c);
+end
+
+// Test 5
+// =============================================================================
+A = [ ..
+    299.    258.    314.    359.    616.    152.    834.    68.     175.    734.    749.    976.    261.    214.    94.     217.    754.    245.    693.    557.  ; ..
+    409.    783.    234.    932.    811.    552.    272.    375.    551.    373.    477.    784.    736.    15.     712.    419.    204.    949.    12.     682.  ; ..
+    261.    273.    627.    652.    209.    280.    855.    221.    243.    720.    430.    936.    767.    48.     191.    731.    896.    18.     372.    527.  ; ..
+    646.    848.    629.    446.    624.    194.    89.     948.    217.    786.    873.    374.    400.    215.    302.    766.    804.    442.    285.    476.  ; ..
+    654.    127.    42.     559.    679.    811.    872.    769.    604.    453.    47.     220.    447.    333.    385.    915.    418.    270.    85.     583.  ; ..
+    560.    432.    600.    158.    280.    327.    874.    625.    689.    178.    600.    19.     444.    423.    303.    128.    653.    420.    394.    99.   ; ..
+    161.    739.    408.    134.    775.    955.    86.     133.    207.    589.    276.    644.    312.    819.    190.    996.    999.    969.    776.    353.  ; ..
+    765.    53.     958.    530.    658.    567.    665.    447.    672.    549.    132.    651.    4.      114.    379.    941.    971.    713.    490.    395.  ; ..
+    697.    613.    118.    798.    627.    430.    475.    538.    286.    324.    750.    550.    701.    298.    567.    106.    189.    483.    25.     793.  ; ..
+    89.     809.    27.     587.    151.    393.    839.    811.    452.    286.    304.    23.     501.    770.    658.    467.    482.    771.    246.    464.  ; ..
+    198.    192.    364.    532.    417.    391.    730.    442.    274.    992.    529.    85.     786.    984.    805.    23.     867.    843.    185.    994.  ; ..
+    259.    541.    18.     303.    656.    875.    990.    0.      347.    357.    376.    801.    735.    490.    643.    878.    319.    587.    287.    152.  ; ..
+    509.    415.    752.    82.     540.    526.    638.    658.    966.    193.    488.    221.    473.    160.    131.    80.     627.    399.    464.    959.  ; ..
+    167.    286.    292.    201.    715.    985.    230.    174.    792.    303.    914.    245.    945.    427.    225.    920.    110.    401.    873.    999.  ; ..
+    340.    511.    379.    221.    206.    132.    488.    450.    888.    4.      664.    41.     652.    387.    620.    998.    2.      873.    998.    347.  ; ..
+    895.    767.    977.    562.    323.    323.    165.    765.    843.    849.    546.    963.    938.    980.    650.    195.    653.    131.    503.    220.  ; ..
+    667.    378.    74.     594.    248.    601.    77.     723.    984.    815.    6.      21.     240.    909.    668.    987.    357.    587.    33.     127.  ; ..
+    25.     934.    150.    336.    74.     154.    443.    790.    951.    998.    174.    670.    292.    482.    672.    424.    340.    202.    314.    513.  ; ..
+    31.     488.    191.    944.    278.    751.    925.    113.    495.    689.    377.    76.     653.    665.    141.    868.    811.    725.    582.    886.  ; ..
+    427.    998.    456.    225.    892.    31.     275.    852.    313.    652.    564.    34.     993.    246.    407.    45.     764.    445.    354.    343.  ; ..
+    108.    593.    580.    61.     718.    140.    942.    652.    683.    265.    647.    444.    449.    771.    627.    649.    29.     372.    573.    579.  ; ..
+    767.    892.    475.    334.    514.    573.    668.    396.    876.    24.     506.    323.    509.    899.    448.    58.     395.    648.    715.    774.  ; ..
+    373.    995.    364.    956.    981.    351.    157.    269.    143.    430.    484.    356.    377.    915.    403.    238.    629.    11.     91.     145.  ; ..
+    151.    481.    266.    111.    930.    313.    117.    979.    997.    273.    556.    689.    92.     986.    587.    992.    953.    294.    152.    792.  ; ..
+    721.    77.     478.    875.    541.    562.    820.    835.    301.    650.    504.    355.    300.    207.    115.    255.    500.    605.    84.     53.   ; ..
+    539.    68.     214.    955.    98.     536.    11.     867.    752.    733.    815.    298.    978.    631.    768.    114.    800.    714.    995.    136.  ; ..
+    145.    567.    792.    271.    225.    858.    442.    355.    681.    444.    94.     318.    786.    911.    234.    507.    84.     713.    310.    822.  ; ..
+    745.    599.    365.    664.    288.    836.    28.     930.    794.    749.    46.     83.     931.    575.    589.    469.    336.    233.    728.    53.   ; ..
+    257.    106.    548.    68.     115.    204.    609.    511.    922.    248.    823.    262.    976.    691.    320.    29.     835.    587.    676.    306.  ; ..
+    770.    381.    844.    771.    219.    382.    9.      531.    351.    276.    557.    505.    146.    903.    742.    790.    853.    837.    521.    654.  ; ..
+    997.    259.    58.     886.    395.    969.    997.    454.    871.    307.    393.    61.     41.     727.    498.    93.     134.    389.    864.    331.  ; ..
+    845.    6.      504.    575.    678.    609.    267.    800.    331.    11.     584.    214.    770.    298.    903.    748.    395.    210.    46.     920.  ; ..
+    646.    810.    600.    729.    615.    937.    384.    948.    593.    645.    756.    781.    405.    875.    670.    467.    226.    760.    617.    627.  ; ..
+    720.    266.    563.    265.    318.    59.     756.    76.     436.    716.    295.    882.    114.    379.    853.    192.    874.    640.    22.     402.  ; ..
+    674.    124.    517.    290.    650.    84.     915.    23.     282.    854.    893.    784.    485.    87.     175.    82.     635.    489.    632.    163.  ; ..
+    354.    187.    518.    781.    840.    296.    931.    485.    497.    427.    773.    403.    830.    635.    764.    916.    747.    97.     968.    466.  ; ..
+    327.    112.    124.    957.    342.    503.    810.    555.    205.    975.    61.     382.    163.    225.    300.    234.    409.    241.    82.     382.  ; ..
+    23.     664.    936.    844.    491.    38.     344.    243.    922.    383.    447.    270.    844.    446.    513.    898.    986.    644.    451.    205.  ; ..
+    593.    145.    411.    132.    974.    78.     500.    146.    292.    278.    476.    121.    102.    310.    625.    147.    762.    635.    721.    900.  ; ..
+    924.    430.    751.    807.    771.    799.    864.    389.    914.    513.    174.    867.    514.    588.    543.    816.    603.    129.    643.    844.  ; ..
+    672.    614.    228.    945.    547.    181.    239.    481.    205.    849.    836.    22.     590.    727.    936.    320.    684.    801.    680.    194.  ; ..
+    484.    216.    206.    500.    208.    312.    864.    40.     21.     168.    461.    674.    244.    314.    918.    768.    617.    671.    15.     514.  ; ..
+    641.    968.    900.    371.    797.    247.    871.    646.    56.     797.    91.     714.    323.    178.    865.    88.     148.    194.    832.    203.  ; ..
+    594.    663.    567.    914.    981.    590.    538.    815.    312.    252.    56.     856.    392.    491.    864.    427.    873.    710.    485.    412.  ; ..
+    106.    519.    458.    287.    327.    848.    45.     827.    772.    79.     884.    754.    732.    752.    784.    546.    129.    379.    373.    843.  ; ..
+    808.    867.    999.    316.    852.    684.    656.    680.    90.     994.    127.    139.    812.    166.    914.    255.    452.    178.    97.     639.  ; ..
+    516.    287.    322.    770.    554.    275.    196.    909.    769.    697.    440.    880.    499.    574.    216.    824.    72.     10.     365.    652.  ; ..
+    61.     143.    418.    27.     254.    767.    369.    13.     275.    17.     448.    319.    445.    304.    901.    638.    399.    572.    219.    129.  ; ..
+    16.     187.    588.    110.    674.    63.     317.    50.     515.    773.    802.    897.    196.    684.    519.    7.      101.    734.    853.    491.  ; ..
+    509.    619.    630.    558.    308.    73.     52.     977.    395.    177.    243.    944.    88.     72.     93.     901.    64.     222.    285.    54.   ; ..
+    469.    217.    542.    54.     17.     567.    365.    760.    83.     137.    493.    687.    904.    240.    157.    193.    547.    620.    109.    749.  ; ..
+    528.    445.    451.    915.    864.    283.    429.    348.    335.    544.    478.    559.    522.    828.    832.    910.    283.    731.    943.    703.  ; ..
+    33.     408.    985.    108.    295.    241.    496.    641.    309.    911.    395.    874.    501.    390.    967.    563.    616.    310.    10.     313.  ; ..
+    711.    636.    740.    559.    312.    44.     314.    408.    519.    888.    365.    351.    607.    884.    846.    262.    928.    288.    226.    2.    ; ..
+    790.    497.    722.    600.    728.    794.    480.    237.    9.      518.    190.    325.    598.    489.    735.    399.    640.    799.    866.    952.  ; ..
+    623.    739.    101.    588.    735.    343.    47.     566.    868.    947.    452.    867.    477.    829.    912.    768.    765.    234.    706.    451.  ; ..
+    799.    0.      631.    93.     262.    521.    49.     703.    353.    992.    488.    304.    41.     136.    576.    949.    704.    932.    537.    135.  ; ..
+    42.     428.    478.    116.    784.    302.    998.    566.    623.    448.    840.    604.    598.    832.    580.    972.    41.     685.    524.    108.  ; ..
+    867.    878.    372.    991.    411.    984.    990.    602.    153.    795.    155.    70.     1.      222.    367.    442.    888.    792.    833.    68.   ; ..
+    345.    809.    666.    369.    506.    415.    235.    611.    776.    218.    663.    588.    976.    542.    146.    608.    644.    148.    533.    351.  ; ..
+    798.    819.    405.    135.    124.    424.    764.    492.    51.     832.    761.    445.    235.    42.     260.    618.    337.    401.    314.    174.  ; ..
+    372.    326.    944.    619.    861.    347.    448.    217.    286.    661.    868.    427.    124.    42.     828.    155.    868.    748.    405.    229.  ; ..
+    186.    525.    12.     276.    670.    18.     807.    441.    635.    553.    781.    722.    521.    95.     383.    390.    131.    65.     116.    862.  ; ..
+    505.    795.    299.    636.    965.    834.    435.    979.    413.    199.    368.    584.    406.    502.    13.     781.    682.    763.    405.    244.  ; ..
+    342.    772.    709.    901.    545.    890.    787.    525.    795.    131.    671.    576.    961.    666.    730.    899.    10.     608.    624.    470.  ; ..
+    582.    973.    114.    632.    856.    17.     656.    690.    136.    919.    778.    705.    895.    690.    463.    929.    841.    544.    359.    254.  ; ..
+    92.     791.    288.    280.    840.    859.    269.    187.    524.    200.    522.    841.    71.     167.    158.    826.    620.    915.    185.    211.  ; ..
+    639.    109.    423.    678.    825.    469.    543.    68.     732.    494.    936.    579.    893.    204.    225.    431.    993.    491.    128.    657.  ; ..
+    328.    929.    42.     285.    76.     791.    965.    359.    266.    880.    69.     423.    880.    811.    885.    567.    589.    240.    823.    105.  ; ..
+    ];
+
+B = [ ..
+    511.    299.    529.    766.    739.    39.     125.    996.    368.    699.    914.    155.    428.    455.    616.    283.    424.    803.    615.    922.  ; ..
+    403.    223.    453.    985.    260.    337.    35.     632.    64.     113.    551.    688.    331.    580.    463.    859.    689.    839.    780.    362.  ; ..
+    827.    66.     978.    614.    218.    678.    161.    20.     560.    768.    596.    890.    553.    53.     853.    856.    480.    429.    772.    419.  ; ..
+    589.    677.    202.    42.     319.    256.    772.    61.     840.    507.    931.    68.     147.    638.    708.    406.    269.    599.    98.     105.  ; ..
+    298.    994.    102.    50.     811.    524.    521.    618.    997.    538.    934.    439.    592.    754.    812.    889.    399.    300.    884.    943.  ; ..
+    750.    321.    48.     310.    370.    948.    80.     245.    226.    670.    818.    373.    979.    272.    977.    20.     120.    839.    539.    242.  ; ..
+    605.    885.    102.    86.     269.    308.    723.    151.    307.    253.    61.     463.    588.    379.    777.    270.    910.    368.    147.    532.  ; ..
+    889.    20.     483.    246.    947.    795.    186.    755.    81.     768.    113.    88.     853.    511.    339.    190.    319.    312.    374.    662.  ; ..
+    724.    518.    73.     894.    321.    922.    883.    758.    406.    470.    227.    179.    192.    567.    854.    768.    53.     626.    860.    333.  ; ..
+    122.    726.    397.    287.    566.    459.    294.    34.     257.    61.     855.    504.    806.    761.    605.    73.     869.    799.    550.    568.  ; ..
+    702.    915.    256.    290.    123.    780.    939.    129.    985.    639.    863.    33.     535.    680.    742.    203.    797.    457.    750.    890.  ; ..
+    562.    646.    707.    169.    769.    226.    84.     970.    964.    322.    252.    971.    760.    240.    574.    836.    239.    469.    818.    351.  ; ..
+    250.    477.    828.    368.    794.    940.    381.    978.    719.    681.    475.    998.    863.    319.    31.     551.    822.    570.    913.    43.   ; ..
+    485.    2.      265.    453.    408.    613.    387.    298.    231.    101.    675.    471.    193.    689.    892.    701.    297.    835.    0.      390.  ; ..
+    59.     763.    740.    509.    933.    443.    469.    678.    101.    757.    858.    193.    778.    385.    10.     915.    297.    213.    829.    602.  ; ..
+    464.    368.    504.    384.    164.    290.    303.    505.    725.    900.    670.    738.    185.    477.    373.    457.    513.    458.    56.     130.  ; ..
+    27.     748.    605.    327.    664.    860.    805.    229.    783.    334.    335.    607.    373.    898.    564.    739.    274.    976.    896.    785.  ; ..
+    822.    203.    393.    286.    820.    856.    1.      856.    651.    735.    897.    974.    737.    489.    385.    907.    483.    719.    192.    307.  ; ..
+    485.    963.    211.    267.    26.     905.    63.     266.    993.    875.    65.     625.    529.    379.    420.    953.    737.    473.    975.    100.  ; ..
+    862.    5.      297.    449.    803.    679.    343.    818.    257.    94.     694.    717.    922.    623.    515.    97.     404.    265.    816.    470.  ; ..
+    382.    72.     303.    20.     784.    533.    143.    609.    203.    458.    301.    204.    678.    959.    238.    267.    689.    937.    49.     233.  ; ..
+    715.    389.    169.    756.    727.    788.    186.    267.    643.    929.    527.    430.    497.    189.    221.    100.    27.     120.    432.    738.  ; ..
+    647.    819.    212.    895.    358.    713.    298.    260.    240.    712.    118.    350.    699.    857.    60.     981.    446.    584.    499.    55.   ; ..
+    192.    133.    0.      22.     166.    403.    566.    520.    858.    848.    849.    904.    747.    928.    279.    444.    687.    694.    600.    943.  ; ..
+    897.    99.     69.     333.    903.    197.    327.    123.    715.    40.     90.     269.    693.    775.    938.    811.    732.    926.    177.    356.  ; ..
+    663.    854.    477.    8.      304.    187.    928.    77.     632.    990.    670.    266.    601.    550.    507.    947.    82.     46.     599.    822.  ; ..
+    767.    541.    101.    94.     47.     704.    96.     452.    535.    500.    868.    705.    610.    593.    450.    716.    799.    385.    707.    773.  ; ..
+    486.    204.    314.    298.    575.    404.    854.    43.     389.    61.     382.    374.    181.    588.    339.    497.    546.    456.    442.    621.  ; ..
+    686.    965.    283.    749.    721.    203.    728.    552.    515.    403.    165.    819.    396.    768.    694.    945.    827.    974.    731.    983.  ; ..
+    854.    259.    424.    411.    547.    831.    435.    292.    221.    576.    864.    325.    925.    746.    221.    207.    349.    701.    92.     182.  ; ..
+    371.    538.    721.    326.    337.    877.    355.    779.    357.    946.    475.    910.    872.    490.    596.    836.    813.    842.    410.    945.  ; ..
+    918.    17.     81.     719.    235.    392.    203.    474.    305.    289.    602.    729.    20.     814.    342.    123.    84.     105.    235.    261.  ; ..
+    956.    2.      998.    638.    592.    246.    503.    6.      610.    455.    484.    746.    333.    287.    330.    752.    308.    466.    841.    172.  ; ..
+    597.    418.    188.    671.    395.    833.    409.    798.    488.    80.     286.    95.     78.     307.    841.    263.    226.    487.    391.    266.  ; ..
+    943.    194.    655.    391.    827.    136.    535.    617.    290.    430.    832.    561.    294.    742.    751.    180.    134.    665.    523.    49.   ; ..
+    435.    988.    665.    431.    236.    357.    227.    998.    522.    999.    994.    41.     567.    335.    145.    994.    426.    281.    578.    727.  ; ..
+    454.    671.    465.    947.    500.    200.    393.    272.    820.    927.    60.     304.    130.    737.    296.    959.    963.    675.    933.    508.  ; ..
+    154.    937.    681.    253.    105.    707.    15.     962.    420.    629.    526.    982.    385.    549.    427.    574.    858.    359.    943.    479.  ; ..
+    808.    984.    404.    12.     327.    736.    555.    452.    336.    292.    668.    896.    153.    449.    229.    104.    775.    774.    90.     296.  ; ..
+    962.    209.    832.    459.    994.    745.    28.     950.    601.    367.    586.    261.    58.     299.    169.    864.    889.    232.    629.    637.  ; ..
+    883.    315.    811.    905.    368.    144.    43.     535.    483.    168.    443.    357.    109.    649.    800.    214.    39.     604.    4.      892.  ; ..
+    175.    421.    260.    805.    124.    888.    774.    110.    714.    405.    157.    351.    115.    199.    367.    774.    293.    256.    594.    827.  ; ..
+    104.    260.    341.    802.    159.    786.    825.    301.    53.     544.    174.    173.    673.    46.     114.    316.    427.    921.    580.    432.  ; ..
+    119.    747.    98.     71.     90.     751.    410.    912.    209.    57.     530.    564.    243.    59.     852.    657.    177.    88.     918.    691.  ; ..
+    891.    823.    471.    824.    324.    670.    468.    578.    494.    607.    697.    483.    595.    796.    808.    577.    328.    247.    146.    938.  ; ..
+    452.    490.    205.    820.    149.    920.    94.     123.    638.    518.    822.    542.    656.    441.    522.    616.    452.    830.    280.    304.  ; ..
+    185.    569.    779.    424.    272.    647.    780.    720.    883.    851.    490.    15.     59.     371.    211.    57.     705.    356.    796.    241.  ; ..
+    955.    164.    16.     293.    993.    706.    906.    848.    326.    978.    373.    603.    582.    787.    652.    334.    70.     847.    601.    660.  ; ..
+    715.    801.    480.    591.    995.    83.     734.    54.     749.    472.    989.    508.    8.      926.    31.     839.    407.    850.    431.    561.  ; ..
+    234.    295.    173.    250.    613.    34.     655.    847.    202.    132.    50.     594.    856.    109.    972.    501.    165.    188.    204.    718.  ; ..
+    292.    821.    997.    318.    0.      567.    741.    726.    493.    134.    906.    42.     925.    724.    81.     949.    162.    844.    251.    120.  ; ..
+    633.    724.    357.    46.     614.    24.     582.    735.    174.    473.    972.    125.    39.     411.    596.    9.      589.    550.    116.    488.  ; ..
+    92.     342.    197.    953.    436.    566.    460.    911.    597.    853.    361.    591.    343.    234.    469.    746.    637.    277.    731.    854.  ; ..
+    787.    779.    363.    286.    312.    329.    376.    562.    334.    81.     527.    887.    261.    224.    87.     798.    950.    864.    219.    192.  ; ..
+    834.    186.    570.    810.    805.    409.    454.    510.    480.    625.    113.    671.    465.    762.    506.    374.    419.    893.    334.    529.  ; ..
+    558.    249.    673.    876.    178.    677.    91.     658.    323.    915.    545.    943.    937.    823.    808.    278.    89.     607.    711.    492.  ; ..
+    509.    987.    573.    176.    783.    917.    233.    582.    392.    717.    792.    428.    113.    140.    624.    736.    11.     67.     577.    842.  ; ..
+    453.    376.    589.    29.     381.    286.    172.    202.    294.    688.    28.     421.    452.    616.    145.    681.    787.    744.    617.    54.   ; ..
+    142.    22.     846.    976.    861.    794.    156.    246.    293.    731.    348.    386.    203.    569.    215.    708.    257.    537.    136.    700.  ; ..
+    909.    106.    203.    747.    369.    674.    940.    848.    962.    167.    805.    705.    843.    839.    15.     240.    259.    751.    818.    126.  ; ..
+    400.    979.    549.    186.    223.    948.    530.    17.     735.    953.    144.    689.    370.    489.    968.    264.    446.    277.    651.    214.  ; ..
+    897.    393.    3.      268.    357.    824.    225.    565.    30.     994.    753.    955.    212.    842.    217.    695.    590.    160.    75.     335.  ; ..
+    9.      721.    909.    77.     816.    528.    495.    873.    701.    535.    785.    355.    678.    752.    243.    277.    4.      521.    258.    415.  ; ..
+    45.     277.    580.    861.    230.    496.    445.    615.    784.    899.    656.    454.    942.    873.    491.    168.    495.    580.    728.    263.  ; ..
+    386.    391.    673.    771.    380.    139.    235.    165.    508.    47.     79.     271.    888.    751.    761.    338.    610.    708.    2.      622.  ; ..
+    786.    772.    664.    87.     527.    614.    991.    222.    717.    137.    252.    718.    743.    110.    527.    771.    597.    876.    940.    592.  ; ..
+    892.    775.    882.    934.    567.    633.    174.    171.    660.    302.    9.      716.    895.    897.    730.    351.    78.     212.    452.    223.  ; ..
+    746.    994.    326.    974.    772.    977.    344.    659.    469.    201.    423.    427.    889.    801.    395.    300.    616.    158.    562.    488.  ; ..
+    134.    234.    546.    949.    699.    645.    354.    988.    286.    489.    546.    458.    93.     320.    808.    322.    882.    602.    577.    641.  ; ..
+    ];
+
+ C  = [
+   212.    41.     811.   921.   139.   191.    831.    928.    479.    101.    383.    843.    169.    273.    566.    450.   858.   982.    210.    439. 
+   10.     976.    303.   125.   559.   889.    307.    783.    615.    260.    1018.   416.    939.    587.    775.    760.   637.   242.    768.    960. 
+   574.    339.    417.   234.   11.    958.    1014.   201.    707.    464.    1018.   210.    214.    5.      1002.   387.   608.   447.    624.    940. 
+   203.    501.    703.   404.   847.   450.    861.    905.    913.    745.    202.    306.    259.    681.    1002.   872.   553.   1005.   383.    437. 
+   932.    925.    76.    541.   396.   295.    353.    363.    441.    991.    905.    363.    1007.   959.    685.    234.   45.    34.     801.    488. 
+   222.    241.    616.   424.   106.   755.    826.    644.    595.    556.    362.    358.    623.    183.    766.    148.   757.   739.    913.    145. 
+   764.    406.    510.   208.   522.   655.    645.    18.     508.    688.    297.    843.    884.    584.    951.    746.   105.   697.    923.    885. 
+   388.    33.     605.   740.   289.   300.    547.    844.    753.    293.    245.    723.    849.    397.    40.     787.   756.   1009.   156.    797. 
+   109.    99.     63.    96.    818.   564.    680.    236.    136.    146.    525.    661.    637.    797.    353.    874.   136.   913.    837.    596. 
+   35.     511.    406.   852.   673.   66.     609.    777.    197.    291.    615.    495.    723.    507.    207.    410.   647.   28.     720.    1000.
+   632.    851.    108.   822.   474.   651.    369.    315.    715.    415.    334.    116.    261.    368.    451.    220.   126.   642.    599.    152. 
+   817.    155.    721.   390.   401.   905.    906.    970.    671.    39.     388.    234.    39.     282.    189.    42.    464.   926.    557.    455. 
+   263.    66.     460.   290.   262.   418.    771.    320.    265.    616.    51.     827.    646.    415.    156.    631.   325.   949.    577.    916. 
+   322.    284.    45.    268.   851.   444.    357.    388.    1023.   330.    305.    290.    880.    794.    925.    293.   327.   722.    873.    609. 
+   367.    772.    927.   288.   875.   319.    61.     868.    797.    753.    450.    232.    390.    2.      614.    117.   299.   956.    219.    769. 
+   687.    911.    553.   946.   487.   97.     394.    772.    414.    213.    188.    289.    787.    521.    1023.   266.   140.   329.    463.    94.  
+   640.    918.    535.   789.   608.   261.    872.    566.    215.    609.    329.    586.    389.    15.     168.    312.   119.   411.    929.    878. 
+   815.    877.    287.   78.    894.   962.    442.    78.     316.    313.    815.    336.    965.    11.     801.    547.   183.   517.    506.    818. 
+   506.    555.    108.   699.   268.   358.    930.    379.    526.    474.    312.    573.    156.    994.    297.    221.   458.   780.    393.    786. 
+   757.    995.    225.   288.   95.    696.    68.     102.    56.     722.    130.    751.    123.    665.    916.    76.    872.   180.    594.    129. 
+   274.    537.    875.   41.    478.   665.    801.    237.    608.    195.    938.    368.    871.    188.    669.    898.   684.   733.    524.    682. 
+   52.     761.    370.   954.   213.   297.    550.    135.    495.    953.    1013.   237.    12.     830.    285.    94.    400.   752.    891.    484. 
+   1010.   208.    440.   195.   691.   918.    439.    9.      127.    870.    402.    58.     962.    202.    431.    827.   971.   579.    424.    166. 
+   87.     356.    266.   121.   772.   170.    579.    475.    191.    577.    381.    313.    695.    122.    860.    604.   278.   912.    704.    183. 
+   336.    46.     411.   550.   410.   759.    627.    824.    998.    674.    418.    110.    921.    968.    985.    980.   808.   451.    229.    337. 
+   140.    786.    267.   947.   338.   675.    939.    814.    136.    259.    433.    32.     395.    81.     763.    961.   882.   740.    436.    958. 
+   622.    42.     893.   337.   206.   410.    474.    167.    190.    72.     826.    1023.   368.    478.    296.    823.   843.   840.    1013.   51.  
+   783.    667.    87.    946.   799.   720.    842.    905.    671.    720.    336.    293.    790.    115.    798.    36.    882.   289.    866.    600. 
+   943.    943.    831.   681.   674.   7.      185.    983.    409.    363.    914.    565.    604.    435.    1014.   940.   120.   389.    127.    741. 
+   84.     126.    740.   664.   760.   577.    442.    823.    386.    852.    333.    188.    783.    365.    571.    985.   520.   504.    597.    568. 
+   662.    793.    747.   560.   218.   164.    646.    717.    514.    641.    82.     947.    833.    829.    934.    793.   939.   719.    762.    762. 
+   219.    23.     425.   240.   589.   1001.   448.    762.    122.    298.    18.     527.    790.    516.    721.    663.   479.   187.    197.    669. 
+   314.    808.    446.   167.   55.    863.    119.    946.    51.     834.    784.    487.    216.    628.    980.    803.   470.   810.    288.    735. 
+   133.    168.    655.   918.   181.   890.    877.    850.    92.     668.    57.     813.    60.     72.     28.     455.   904.   871.    401.    152. 
+   269.    190.    138.   165.   433.   220.    388.    638.    56.     760.    61.     289.    195.    689.    576.    230.   765.   880.    115.    146. 
+   209.    871.    159.   674.   932.   77.     832.    515.    1019.   588.    231.    442.    265.    820.    621.    118.   833.   376.    394.    773. 
+   129.    751.    429.   14.    162.   319.    675.    827.    1017.   80.     1.      78.     33.     512.    4.      853.   602.   594.    1015.   130. 
+   141.    305.    257.   945.   386.   741.    343.    817.    574.    778.    945.    728.    717.    923.    938.    444.   128.   995.    620.    274. 
+   377.    841.    15.    136.   649.   686.    991.    342.    116.    50.     832.    1017.   255.    247.    660.    251.   509.   381.    651.    684. 
+   94.     383.    431.   748.   225.   502.    892.    563.    459.    878.    740.    614.    568.    871.    694.    80.    290.   105.    246.    305. 
+   467.    861.    975.   56.    851.   37.     196.    1014.   302.    1017.   767.    371.    547.    94.     136.    406.   651.   381.    684.    958. 
+   331.    381.    458.   721.   172.   576.    102.    70.     735.    317.    336.    1021.   135.    509.    761.    6.     844.   927.    605.    313. 
+   745.    716.    721.   593.   898.   997.    94.     939.    13.     317.    245.    615.    994.    156.    787.    356.   319.   859.    260.    379. 
+   549.    124.    597.   981.   911.   161.    896.    191.    489.    197.    554.    364.    379.    464.    52.     826.   984.   670.    627.    815. 
+   785.    304.    29.    551.   3.     462.    505.    377.    746.    528.    461.    785.    143.    492.    56.     99.    457.   396.    487.    225. 
+   748.    649.    810.   520.   961.   308.    718.    723.    548.    484.    841.    661.    444.    287.    408.    663.   0.     908.    377.    847. 
+   701.    806.    585.   682.   826.   916.    968.    349.    114.    490.    82.     895.    456.    845.    11.     769.   649.   366.    625.    637. 
+   902.    43.     434.   318.   799.   61.     763.    861.    85.     963.    181.    868.    1019.   547.    265.    816.   457.   371.    642.    533. 
+   731.    922.    940.   545.   321.   108.    995.    4.      238.    733.    255.    637.    204.    306.    536.    832.   498.   396.    762.    986. 
+   279.    844.    731.   724.   849.   107.    699.    158.    321.    53.     193.    482.    768.    37.     913.    624.   229.   98.     465.    760. 
+   241.    1004.   507.   264.   17.    0.      904.    46.     446.    15.     615.    645.    21.     548.    204.    884.   641.   288.    150.    661. 
+   105.    873.    166.   957.   262.   259.    1003.   899.    481.    1017.   530.    594.    557.    679.    276.    903.   854.   253.    987.    855. 
+   125.    206.    796.   981.   147.   711.    60.     270.    864.    218.    226.    293.    162.    364.    530.    217.   21.    35.     721.    623. 
+   468.    375.    911.   817.   0.     357.    66.     938.    841.    809.    866.    552.    858.    916.    793.    536.   22.    576.    57.     194. 
+   84.     331.    232.   370.   509.   643.    38.     275.    489.    119.    207.    986.    903.    787.    805.    249.   803.   98.     556.    425. 
+   65.     538.    708.   288.   621.   1010.   116.    164.    551.    32.     997.    204.    628.    10.     184.    534.   676.   693.    5.      47.  
+   738.    987.    74.    237.   521.   412.    216.    249.    233.    301.    752.    156.    88.     4.      48.     341.   715.   999.    88.     973. 
+   495.    212.    915.   105.   621.   48.     842.    764.    841.    880.    852.    1017.   914.    296.    725.    357.   826.   69.     101.    90.  
+   1005.   888.    570.   15.    710.   194.    834.    684.    444.    448.    455.    452.    202.    743.    440.    894.   633.   257.    969.    760. 
+   724.    835.    593.   922.   139.   829.    839.    307.    202.    125.    434.    141.    155.    345.    157.    656.   903.   635.    295.    289. 
+   654.    224.    944.   61.    163.   540.    238.    509.    748.    249.    617.    780.    409.    451.    716.    866.   239.   132.    945.    120. 
+   757.    207.    947.   871.   568.   611.    289.    748.    256.    375.    405.    528.    168.    864.    997.    556.   298.   588.    478.    426. 
+   179.    220.    897.   345.   430.   514.    712.    720.    198.    62.     28.     945.    175.    687.    396.    147.   135.   584.    374.    705. 
+   468.    526.    879.   289.   803.   690.    14.     436.    653.    836.    992.    910.    568.    671.    486.    933.   837.   191.    845.    499. 
+   212.    643.    100.   134.   861.   1009.   1016.   680.    743.    172.    720.    847.    185.    117.    35.     721.   616.   164.    626.    952. 
+   340.    201.    746.   559.   343.   631.    335.    620.    581.    798.    1014.   15.     408.    732.    960.    162.   284.   332.    715.    686. 
+   800.    16.     594.   702.   383.   290.    419.    16.     152.    486.    515.    389.    824.    806.    580.    613.   546.   839.    381.    12.  
+   149.    911.    225.   360.   61.    516.    839.    727.    777.    295.    527.    1000.   4.      1005.   362.    131.   393.   373.    690.    889. 
+   462.    843.    520.   680.   759.   402.    679.    699.    20.     665.    615.    109.    813.    619.    93.     885.   319.   682.    374.    744. 
+    ];
+assert_checkequal(bitxor(A,B), C);
+
+
+// Tests 6 :
+// =============================================================================
+computed = zeros(10, 1);
+x12mat =  [
+86     19
+90     31
+32     48
+4     22
+41     36
+55     71
+77     77
+37     57
+100      8
+99     76
+];
+expected =  [
+69
+69
+16
+18
+13
+112
+0
+28
+108
+47
+];
+
+for k = 1 : size(x12mat, "r")
+    i = x12mat(k, 1);
+    j = x12mat(k, 2);
+    computed(k) = bitxor(i, j);
+end
+assert_checkequal(computed, expected);
+
+//
+// Check that it is correctly vectorized.
+computed = bitxor(x12mat(:, 1), x12mat(:, 2));
+assert_checkequal(computed, expected);
+