Bug #592 fixed - linspace(a,b, n<=0) returned b instead of []. 19/18419/10
Samuel GOUGEON [Sat, 6 Aug 2016 23:57:55 +0000 (01:57 +0200)]
 * http://bugzilla.scilab.org/592
 * The bug was fixed in 2006 by displaying an error message, but this
   was silently cancelled in 2009. See the report.
 * Arguments checking improved
 * unit test extended
 * Help page overhauled. Retranslation in (ja,pt,ru) will be needed.

Change-Id: I8f3f5235be96a7cb5b97e0ab94274b86ba111030

18 files changed:
scilab/CHANGES.md
scilab/modules/core/tests/nonreg_tests/bug_8086.dia.ref
scilab/modules/core/tests/nonreg_tests/bug_8086.tst
scilab/modules/elementary_functions/help/en_US/elementarymatrices/linspace.xml
scilab/modules/elementary_functions/help/fr_FR/elementarymatrices/linspace.xml
scilab/modules/elementary_functions/help/ja_JP/elementarymatrices/linspace.xml [deleted file]
scilab/modules/elementary_functions/help/pt_BR/elementarymatrices/linspace.xml [deleted file]
scilab/modules/elementary_functions/help/ru_RU/elementarymatrices/linspace.xml
scilab/modules/elementary_functions/macros/linspace.sci
scilab/modules/elementary_functions/macros/logspace.sci
scilab/modules/elementary_functions/tests/nonreg_tests/bug_12913.dia.ref
scilab/modules/elementary_functions/tests/nonreg_tests/bug_12913.tst
scilab/modules/elementary_functions/tests/nonreg_tests/bug_592.dia.ref [new file with mode: 0644]
scilab/modules/elementary_functions/tests/nonreg_tests/bug_592.tst [new file with mode: 0644]
scilab/modules/elementary_functions/tests/unit_tests/linspace.dia.ref
scilab/modules/elementary_functions/tests/unit_tests/linspace.tst
scilab/modules/elementary_functions/tests/unit_tests/logspace.dia.ref
scilab/modules/elementary_functions/tests/unit_tests/logspace.tst

index 9376dc4..7a639ad 100644 (file)
@@ -179,6 +179,7 @@ input and output arguments.
 * `pdiv`: Return a matrix of type 'constant' when all the rank are 0.
 * `test_run` can now take "[]" as argument to be used on console; for instance: `test_run string [] no_check_ref`.
 * `typeof(:)` and `typeof(n:$)` now return `"implicitlist"` instead of respectively `"constant"` and `"size implicit"`.
+* `linspace(a, b, n<=0)` now returns `[]` instead of b.
 * `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.
@@ -318,6 +319,7 @@ Bug Fixes
 ---------
 
 ### Bugs fixed in 6.0.0:
+* [#592](http://bugzilla.scilab.org/show_bug.cgi?id=592): `linspace(a, b, n<=0)` returned `b` instead of `[]`
 * [#2919](http://bugzilla.scilab.org/show_bug.cgi?id=2919): The `fchamp` example and demo were unclear and badly rendered
 * [#4327](http://bugzilla.scilab.org/show_bug.cgi?id=4327): Overloading did not support custom types names longer than 8 characters
 * [#5723](http://bugzilla.scilab.org/show_bug.cgi?id=5723): Cross-references were missing between axis_properties and axes_properties help pages
index abb2c5c..652ac11 100644 (file)
@@ -76,7 +76,6 @@ macros_error_type_2 = ["base2dec"; ..
 "bitand"; ..
 "ind2sub"; ..
 "intersect"; ..
-"linspace"; ..
 "modulo"; ..
 "permute"; ..
 "pmodulo"; ..
@@ -106,7 +105,7 @@ for i=1:size(macros_error_type_6, "*")
     assert_checkerror (macros_error_type_6(i) + "()" , msg_error_ref_6 , [] , macros_error_type_6(i), 1);
 end
 // =============================================================================
-macros_error_type_5 = ["flipdim"];
+macros_error_type_5 = ["flipdim"; "linspace"];
 msg_error_ref_5 = _("%s: Wrong number of input argument(s): %d to %d expected.\n");
 for i=1:size(macros_error_type_5, "*")
     assert_checkerror (macros_error_type_5(i) + "()" , msg_error_ref_5 , [] , macros_error_type_5(i) , 2, 3);
index abb2c5c..652ac11 100644 (file)
@@ -76,7 +76,6 @@ macros_error_type_2 = ["base2dec"; ..
 "bitand"; ..
 "ind2sub"; ..
 "intersect"; ..
-"linspace"; ..
 "modulo"; ..
 "permute"; ..
 "pmodulo"; ..
@@ -106,7 +105,7 @@ for i=1:size(macros_error_type_6, "*")
     assert_checkerror (macros_error_type_6(i) + "()" , msg_error_ref_6 , [] , macros_error_type_6(i), 1);
 end
 // =============================================================================
-macros_error_type_5 = ["flipdim"];
+macros_error_type_5 = ["flipdim"; "linspace"];
 msg_error_ref_5 = _("%s: Wrong number of input argument(s): %d to %d expected.\n");
 for i=1:size(macros_error_type_5, "*")
     assert_checkerror (macros_error_type_5(i) + "()" , msg_error_ref_5 , [] , macros_error_type_5(i) , 2, 3);
index 032026e..5a9ab0c 100644 (file)
@@ -2,6 +2,7 @@
 <!--
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2008 - INRIA
+ * 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: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="linspace" 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: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="linspace" xml:lang="en">
     <refnamediv>
         <refname>linspace</refname>
-        <refpurpose>linearly spaced vector</refpurpose>
+        <refpurpose>generates linearly spaced numbers between 2 reached bounds</refpurpose>
     </refnamediv>
     <refsynopsisdiv>
         <title>Syntax</title>
-        <synopsis>[v]=linspace(x1,x2 [,n])</synopsis>
+        <synopsis>
+            row = linspace(x1, x2)
+            row = linspace(x1, x2, n)
+            Matrix = linspace(Col1, Col2)
+            Matrix = linspace(Col1, Col2, n)
+        </synopsis>
     </refsynopsisdiv>
     <refsection>
         <title>Arguments</title>
         <variablelist>
             <varlistentry>
-                <term>x1,x2</term>
+                <term>x1, x2</term>
                 <listitem>
-                    <para>real or complex scalars or column vectors</para>
+                    <para>
+                        Real or complex scalars:
+                        Bounds between which values must be generated.
+                    </para>
+                </listitem>
+            </varlistentry>
+            <varlistentry>
+                <term>Col1, Col2</term>
+                <listitem>
+                    <para>
+                        Column vectors of same heights of real or complex numbers.
+                    </para>
                 </listitem>
             </varlistentry>
             <varlistentry>
                 <term>n</term>
                 <listitem>
-                    <para>integer: number of requested values. It must be greater or equal to 2 (default value = 100)</para>
+                    <para>
+                        integer number of requested values or columns.
+                        Default value: 100
+                    </para>
+                </listitem>
+            </varlistentry>
+            <varlistentry>
+                <term>row</term>
+                <listitem>
+                    <para>
+                        row vector of <literal>n</literal> numbers.
+                    </para>
                 </listitem>
             </varlistentry>
             <varlistentry>
-                <term>v</term>
+                <term>Matrix</term>
                 <listitem>
-                    <para>real or complex row vector</para>
+                    <para>
+                        Matrix with <literal>n</literal> columns of numbers.
+                    </para>
                 </listitem>
             </varlistentry>
         </variablelist>
     <refsection>
         <title>Description</title>
         <para>
-            Linearly spaced vector. <literal>linspace(x1, x2)</literal>
-            generates a row vector of n (default value=100) linearly equally spaced
-            points between <literal>x1</literal> and <literal>x2</literal>. If
-            <literal>x1</literal> or <literal>x2</literal> are complex then
-            <literal>linspace(x1,x2)</literal> returns a row vector of n complexes,
-            the real (resp. imaginary) parts of the n complexes are linearly equally
-            spaced between the real (resp. imaginary) parts of <literal>x1</literal>
-            and <literal>x2.</literal>
+            <literal>linspace(x1, x2)</literal>
+            generates a row vector of <literal>n</literal> equally spaced
+            values ranging exactly from <literal>x1</literal> to <literal>x2</literal>.
+        </para>
+        <note>
+            <para>
+                The syntax <literal>y1:y2</literal> or <literal>y1:step:y2</literal>
+                like <literal>1:0.1:%pi</literal> does the same but fixes the
+                starting bound <literal>y1</literal> and
+                <emphasis role="bold">the step</emphasis>. The <literal>y2</literal>
+                is used as stopping bound to not be overstepped. The last value
+                actually generated may not reach it.
+                <literal>y2</literal> is then not included in the result.
+            </para>
+            <para>
+                Instead of fixing the step to a given value, <literal>linspace</literal>
+                fixes the final bound <literal>x2</literal> to be exactly
+                <emphasis role="bold">reached</emphasis>, and computes the step
+                accordingly.
+            </para>
+        </note>
+        <para>
+            If <literal>x1</literal> or <literal>x2</literal> are complex numbers,
+            then <literal>linspace(x1,x2)</literal> interpolates separately the real and
+            the imaginary parts of <literal>x1</literal> and <literal>x2</literal>.
+        </para>
+        <para>
+            If some column vectors <literal>Col1</literal> and <literal>Col2</literal>
+            are provided, <literal>linspace</literal> works in a row-wise way:
+            the resulting <literal>Matrix</literal> has the same number of rows,
+            and <literal>n</literal> columns. We get
+            <literal>Matrix(i,:) = linspace(Col1(i), Col2(i), n)</literal>.
         </para>
     </refsection>
     <refsection>
         <title>Examples</title>
         <programlisting role="example"><![CDATA[
-linspace(1,2,10)
-linspace([1:4]',[5:8]',10)
-linspace(1+%i,2+2*%i,10)
+linspace(1, %pi, 0)         // n = 0
+linspace(1, 2, 10)          // x2 > x1 : increasing values
+linspace(2, 1, 10)          // x2 < x1 : decreasing values
+linspace(1+%i, 2-2*%i, 5)      // with complex numbers
+linspace([1:4]', [5:8]', 10)   // with input columns
  ]]></programlisting>
+        <screen><![CDATA[--> linspace(1, %pi, 0)    // n = 0
+ ans  =
+    []
+
+--> linspace(1, 2, 10)    // x2 > x1 : increasing values
+
+ ans  =
+   1.   1.111   1.222   1.333   1.444   1.556   1.667   1.778   1.889   2.
+
+
+--> linspace(2, 1, 10)    // x2 < x1 : decreasing values
+
+ ans  =
+   2.   1.889   1.778   1.667   1.556   1.444   1.333   1.222   1.111   1.
+
+
+--> linspace(1+%i, 2-2*%i, 5)      // with complex numbers
+
+ ans  =
+   1. +i     1.25 +0.25i   1.5 -0.5i   1.75 -1.25i   2. -2.i
+
+
+--> linspace([1:4]', [5:8]', 10)   // with input columns
+
+ ans  =
+   1.   1.444   1.889   2.333   2.778   3.222   3.667   4.111   4.556   5.
+   2.   2.444   2.889   3.333   3.778   4.222   4.667   5.111   5.556   6.
+   3.   3.444   3.889   4.333   4.778   5.222   5.667   6.111   6.556   7.
+   4.   4.444   4.889   5.333   5.778   6.222   6.667   7.111   7.556   8.
+]]></screen>
     </refsection>
     <refsection role="see also">
         <title>See also</title>
         <simplelist type="inline">
             <member>
+                <link linkend="colon">colon</link>
+            </member>
+            <member>
                 <link linkend="logspace">logspace</link>
             </member>
+            <member>
+                <link linkend="grand">grand</link>
+            </member>
         </simplelist>
     </refsection>
     <refsection>
@@ -81,13 +176,24 @@ linspace(1+%i,2+2*%i,10)
                 <revnumber>5.4.0</revnumber>
                 <revremark>
                     <itemizedlist>
-                        <listitem>The linspace function accepts column vectors as input argument for the two first input arguments. Thanks to Guillaume AZEMA for the implementation.
+                        <listitem>Column vectors can now be provided.
                         </listitem>
                         <listitem>The third input argument (n) must be an integer value.
                         </listitem>
                     </itemizedlist>
                 </revremark>
             </revision>
+            <revision>
+                <revnumber>6.0</revnumber>
+                <revremark>
+                    <itemizedlist>
+                        <listitem>linspace(a, b, n&lt;=0) now returns [] instead of b.
+                        </listitem>
+                        <listitem>bounds are now checked against %inf or %nan values.
+                        </listitem>
+                    </itemizedlist>
+                </revremark>
+            </revision>
         </revhistory>
     </refsection>
 </refentry>
index 17023b9..69ff411 100644 (file)
@@ -1,32 +1,80 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<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="linspace" xml:lang="fr">
+<!--
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * 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,
+ * 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="linspace" xml:lang="fr">
     <refnamediv>
         <refname>linspace</refname>
-        <refpurpose>vecteur de valeurs équidistantes</refpurpose>
+        <refpurpose>suite de nombres équidistants entre 2 bornes atteintes</refpurpose>
     </refnamediv>
     <refsynopsisdiv>
-        <title>Séquence d'appel</title>
-        <synopsis>[v]=linspace(x1,x2 [,n])</synopsis>
+        <title>Syntaxe</title>
+        <synopsis>
+            row = linspace(x1, x2)
+            row = linspace(x1, x2, n)
+            Matrix = linspace(Col1, Col2)
+            Matrix = linspace(Col1, Col2, n)
+        </synopsis>
     </refsynopsisdiv>
     <refsection>
-        <title>Paramètres</title>
+        <title>Arguments</title>
         <variablelist>
             <varlistentry>
-                <term>x1,x2</term>
+                <term>x1, x2</term>
                 <listitem>
-                    <para>scalaire réel ou complexe ou vecteur colonne</para>
+                    <para>
+                        Nombres réels ou complexes scalaires : bornes entre
+                        lesquelles les valeurs doivent être générées.
+                    </para>
+                </listitem>
+            </varlistentry>
+            <varlistentry>
+                <term>Col1, Col2</term>
+                <listitem>
+                    <para>
+                        Vecteurs colonne de nombres réels ou complexes de même
+                        taille.
+                    </para>
                 </listitem>
             </varlistentry>
             <varlistentry>
                 <term>n</term>
                 <listitem>
-                    <para>entier (nombre de valeurs, 100 par défaut)</para>
+                    <para>
+                        Nombre entier. Il précise le nombre de valeurs ou de colonnes à générer entre les deux extrémités (extrémités comprises).
+                        100 par défaut.
+                    </para>
                 </listitem>
             </varlistentry>
             <varlistentry>
-                <term>v</term>
+                <term>row</term>
                 <listitem>
-                    <para>vecteur ligne réel ou complexe</para>
+                    <para>
+                        Vecteur ligne de <literal>n</literal> nombres.
+                    </para>
+                </listitem>
+            </varlistentry>
+            <varlistentry>
+                <term>Matrix</term>
+                <listitem>
+                    <para>
+                        Matrice à <literal>n</literal> colonnes de nombres.
+                    </para>
                 </listitem>
             </varlistentry>
         </variablelist>
     <refsection>
         <title>Description</title>
         <para>
-            <literal>linspace(x1, x2)</literal> renvoie un vecteur ligne de n
-            valeurs régulièrement espacées entre <literal>x1</literal> et
-            <literal>x2</literal>. Si <literal>x1</literal> ou <literal>x2</literal>
-            sont complexes alors <literal>linspace(x1,x2)</literal> renvoie un vecteur
-            ligne de n valeurs complexes dont les partie réels (resp. imaginaires)
-            sont regulierement espacées entre les partie réels (resp. imaginaires) de
-            x1 et x2.
+            <literal>linspace(x1, x2)</literal>
+            génère un vecteur ligne de <literal>n</literal> valeurs allant
+            exactement de <literal>x1</literal> à <literal>x2</literal> à
+            pas constant.
+        </para>
+        <note>
+            <para>
+                La syntaxe <literal>y1:y2</literal> ou <literal>y1:step:y2</literal>
+                comme <literal>1:0.1:%pi</literal> produit une suite similaire,
+                mais fixe la valeur de départ <literal>y1</literal> et
+                <emphasis role="bold">le pas/incrément</emphasis>.
+                <literal>y2</literal> sert de valeur d'arrêt à ne pas dépasser.
+                La dernière valeur générée peut elle être inférieure,
+                <literal>y2</literal> ne figurant alors pas parmi les valeurs
+                générées.
+            </para>
+            <para>
+                Au lieu de fixer le pas/incrément, <literal>linspace</literal>
+                fixe la seconde borne <literal>x2</literal> à exactement
+                <emphasis role="bold">atteindre</emphasis>, et calcule le pas
+                en conséquence.
+            </para>
+        </note>
+        <para>
+            Si <literal>x1</literal> ou <literal>x2</literal> sont des nombres
+            complexes, <literal>linspace(x1,x2)</literal> interpole alors
+            séparément la partie réelle de <literal>x1</literal> et <literal>x2</literal>,
+            et d'autre part leur partie imaginaire.
+        </para>
+        <para>
+            Si des vecteurs colonnes <literal>Col1</literal> et <literal>Col2</literal>
+            sont fournis, <literal>linspace</literal> est alors appliquée
+            ligne par ligne :
+            La <literal>Matrix</literal> résultante à le même nombre de lignes,
+            et <literal>n</literal> colonnes, avec
+            <literal>Matrix(i,:) = linspace(Col1(i), Col2(i), n)</literal>.
         </para>
     </refsection>
     <refsection>
         <title>Exemples</title>
         <programlisting role="example"><![CDATA[
-linspace(1,2,10)
-linspace(1+1*%i,2+2*%i,10)
+linspace(1, %pi, 0)         // n = 0
+linspace(1, 2, 10)          // x2 > x1 : suite croissante
+linspace(2, 1, 10)          // x2 < x1 : suite décroissante
+linspace(1+%i, 2-2*%i, 5)      // avec des nombres complexes
+linspace([1:4]', [5:8]', 10)   // avec des colonnes de bornes
  ]]></programlisting>
+        <screen><![CDATA[--> linspace(1, %pi, 0)    // n = 0
+ ans  =
+    []
+
+--> linspace(1, 2, 10)    // x2 > x1 : suite croissante
+
+ ans  =
+   1.   1.111   1.222   1.333   1.444   1.556   1.667   1.778   1.889   2.
+
+
+--> linspace(2, 1, 10)    // x2 < x1 : suite décroissante
+
+ ans  =
+   2.   1.889   1.778   1.667   1.556   1.444   1.333   1.222   1.111   1.
+
+
+--> linspace(1+%i, 2-2*%i, 5)      // avec des nombres complexes
+
+ ans  =
+   1. +i     1.25 +0.25i   1.5 -0.5i   1.75 -1.25i   2. -2.i
+
+
+--> linspace([1:4]', [5:8]', 10)   // avec des colonnes de bornes
+
+ ans  =
+   1.   1.444   1.889   2.333   2.778   3.222   3.667   4.111   4.556   5.
+   2.   2.444   2.889   3.333   3.778   4.222   4.667   5.111   5.556   6.
+   3.   3.444   3.889   4.333   4.778   5.222   5.667   6.111   6.556   7.
+   4.   4.444   4.889   5.333   5.778   6.222   6.667   7.111   7.556   8.
+]]></screen>
     </refsection>
     <refsection role="see also">
         <title>Voir aussi</title>
         <simplelist type="inline">
             <member>
+                <link linkend="colon">colon</link>
+            </member>
+            <member>
                 <link linkend="logspace">logspace</link>
             </member>
+            <member>
+                <link linkend="grand">grand</link>
+            </member>
         </simplelist>
     </refsection>
     <refsection>
@@ -65,8 +181,21 @@ linspace(1+1*%i,2+2*%i,10)
                 <revnumber>5.4.0</revnumber>
                 <revremark>
                     <itemizedlist>
-                        <listitem>La fonction linspace accepte les vecteurs colonnes pour les deux premiers arguments d'entrée. Merci à Guillaume AZEMA pour l'implémentation.</listitem>
-                        <listitem>Le troisième argument d'entrée (n) doit être une valeur entière.
+                        <listitem>Des vecteurs colonne de bornes peuvent être utilisées.
+                        </listitem>
+                        <listitem>Le nombre de colonnes générées doit
+                            être obligatoirement un entier.
+                        </listitem>
+                    </itemizedlist>
+                </revremark>
+            </revision>
+            <revision>
+                <revnumber>6.0</revnumber>
+                <revremark>
+                    <itemizedlist>
+                        <listitem>linspace(a, b, n&lt;=0) produit [] au lieu de b.
+                        </listitem>
+                        <listitem>Toute borne %inf ou %nan est détectée et rejetée.
                         </listitem>
                     </itemizedlist>
                 </revremark>
diff --git a/scilab/modules/elementary_functions/help/ja_JP/elementarymatrices/linspace.xml b/scilab/modules/elementary_functions/help/ja_JP/elementarymatrices/linspace.xml
deleted file mode 100644 (file)
index d1795bc..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- * 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: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="linspace" xml:lang="ja">
-    <refnamediv>
-        <refname>linspace</refname>
-        <refpurpose>線形に配置されたベクトル</refpurpose>
-    </refnamediv>
-    <refsynopsisdiv>
-        <title>呼び出し手順</title>
-        <synopsis>[v]=linspace(x1,x2 [,n])</synopsis>
-    </refsynopsisdiv>
-    <refsection>
-        <title>引数</title>
-        <variablelist>
-            <varlistentry>
-                <term>x1,x2</term>
-                <listitem>
-                    <para>実数または複素数のスカラーまたは列ベクトル</para>
-                </listitem>
-            </varlistentry>
-            <varlistentry>
-                <term>n</term>
-                <listitem>
-                    <para>整数: 要求された値の数. 2以上とする必要があります (デフォルト値= 100)</para>
-                </listitem>
-            </varlistentry>
-            <varlistentry>
-                <term>v</term>
-                <listitem>
-                    <para>実数または複素数の行ベクトル</para>
-                </listitem>
-            </varlistentry>
-        </variablelist>
-    </refsection>
-    <refsection>
-        <title>説明</title>
-        <para>
-            線形に間隔をとったベクトル. <literal>linspace(x1, x2)</literal>
-            は<literal>x1</literal> と <literal>x2</literal>の間に線形に等間隔をとった
-            n(デフォルト値=100)要素の行ベクトルとなります.
-            <literal>x1</literal> または <literal>x2</literal> が複素数の場合,
-            <literal>linspace(x1,x2)</literal>はn個の複素数からなる行ベクトル
-            を返します.
-            n個の複素数の実部は,<literal>x1</literal>と<literal>x2.</literal>
-            の実部の間に線形に等間隔に配置されます.
-        </para>
-    </refsection>
-    <refsection>
-        <title>例</title>
-        <programlisting role="example"><![CDATA[
-linspace(1,2,10)
-linspace([1:4]',[5:8]',10)
-linspace(1+%i,2+2*%i,10)
- ]]></programlisting>
-    </refsection>
-    <refsection role="see also">
-        <title>参照</title>
-        <simplelist type="inline">
-            <member>
-                <link linkend="logspace">logspace</link>
-            </member>
-        </simplelist>
-    </refsection>
-    <refsection>
-        <title>履歴</title>
-        <revhistory>
-            <revision>
-                <revnumber>5.4.0</revnumber>
-                <revremark>
-                    <itemizedlist>
-                        <listitem>
-                            linspace関数は最初の2つの入力引数に列ベクトルを指定できるようになりました.
-                            実装したGuillaume AZEMAに感謝します.
-                        </listitem>
-                        <listitem>3番目の引数は整数値とする必要があります.
-                        </listitem>
-                    </itemizedlist>
-                </revremark>
-            </revision>
-        </revhistory>
-    </refsection>
-</refentry>
diff --git a/scilab/modules/elementary_functions/help/pt_BR/elementarymatrices/linspace.xml b/scilab/modules/elementary_functions/help/pt_BR/elementarymatrices/linspace.xml
deleted file mode 100644 (file)
index 9e290c8..0000000
+++ /dev/null
@@ -1,77 +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:ns4="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="linspace" xml:lang="pt">
-    <refnamediv>
-        <refname>linspace</refname>
-        <refpurpose>vetor linearmente espaçado</refpurpose>
-    </refnamediv>
-    <refsynopsisdiv>
-        <title>Seqüência de Chamamento</title>
-        <synopsis>[v]=linspace(x1,x2 [,n])</synopsis>
-    </refsynopsisdiv>
-    <refsection>
-        <title>Parâmetros</title>
-        <variablelist>
-            <varlistentry>
-                <term>x1,x2</term>
-                <listitem>
-                    <para>escalares reais ou complexos </para>
-                </listitem>
-            </varlistentry>
-            <varlistentry>
-                <term>n</term>
-                <listitem>
-                    <para>inteiro (número de valores). O valor padrão é 100 </para>
-                </listitem>
-            </varlistentry>
-            <varlistentry>
-                <term>v</term>
-                <listitem>
-                    <para>vetor linha de reais ou complexos</para>
-                </listitem>
-            </varlistentry>
-        </variablelist>
-    </refsection>
-    <refsection>
-        <title>Descrição</title>
-        <para>
-            Vetor linearmente espaçado. <literal>linspace(x1, x2)</literal> era
-            um vetor linha de n (valor padrão = 100) pontos linearmente espaçados de
-            modo igual entre <literal>x1</literal> e <literal>x2</literal>. Se
-            <literal>x1</literal> ou <literal>x2</literal> são complexos, então
-            <literal>linspace(x1,x2)</literal> retorna um vetor-linha de n complexos
-            cujas partes reais (e respectivamente as imaginárias) dos n complexos são
-            linearmente espaçadas de modo igual entre a partes reais (e
-            respectivamente as imaginárias) de <literal>x1</literal> e
-            <literal>x2</literal>
-        </para>
-    </refsection>
-    <refsection>
-        <title>Exemplos </title>
-        <programlisting role="example"><![CDATA[
-linspace(1,2,10)
-linspace(1+%i,2+2*%i,10)
- ]]></programlisting>
-    </refsection>
-    <refsection role="see also">
-        <title>Ver Também</title>
-        <simplelist type="inline">
-            <member>
-                <link linkend="logspace">logspace</link>
-            </member>
-        </simplelist>
-    </refsection>
-</refentry>
index eea1830..60c2df2 100644 (file)
@@ -2,6 +2,7 @@
 <!--
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2008 - INRIA
+ * 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: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="linspace" xml:lang="ru">
+<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="linspace" xml:lang="ru">
     <refnamediv>
         <refname>linspace</refname>
-        <refpurpose>вектор с равномерными интервалами между элементами</refpurpose>
+        <refpurpose>генерирует линейно распределённые числа между двумя достижимыми границами</refpurpose>
     </refnamediv>
     <refsynopsisdiv>
         <title>Синтаксис</title>
-        <synopsis>[v]=linspace(x1,x2 [,n])</synopsis>
+        <synopsis>
+            row = linspace(x1, x2)
+            row = linspace(x1, x2, n)
+            Matrix = linspace(Col1, Col2)
+            Matrix = linspace(Col1, Col2, n)
+        </synopsis>
     </refsynopsisdiv>
     <refsection>
         <title>Аргументы</title>
         <variablelist>
             <varlistentry>
-                <term>x1,x2</term>
+                <term>x1, x2</term>
                 <listitem>
-                    <para>вещественные или комплексные скаляры или векторы-столбцы</para>
+                    <para>
+                        Вещественные или комплексные скаляры:
+                        границы между которыми должны быть сгенерированы значения.
+                    </para>
+                </listitem>
+            </varlistentry>
+            <varlistentry>
+                <term>Col1, Col2</term>
+                <listitem>
+                    <para>
+                        Вектор-столбцы одинаковой высоты, состоящие из вещественных или комплексных чисел.
+                    </para>
                 </listitem>
             </varlistentry>
             <varlistentry>
                 <term>n</term>
                 <listitem>
                     <para>
-                        целое число: количество запрашиваемых значений. Оно должно быть больше либо равно двум (по умолчанию оно равно 100)
+                        целое количество запрошенных значений или столбцов.
+                        Значение по умолчанию: 100.
+                    </para>
+                </listitem>
+            </varlistentry>
+            <varlistentry>
+                <term>row</term>
+                <listitem>
+                    <para>
+                        вектор-строка из <varname>n</varname> чисел.
                     </para>
                 </listitem>
             </varlistentry>
             <varlistentry>
-                <term>v</term>
+                <term>Matrix</term>
                 <listitem>
-                    <para>вещественный или комплексный вектор-строка</para>
+                    <para>
+                        Матрица, в которой <varname>n</varname> столбцов чисел.
+                    </para>
                 </listitem>
             </varlistentry>
         </variablelist>
     <refsection>
         <title>Описание</title>
         <para>
-            Вектор с равномерными интервалами между элементами. <literal>linspace(x1, x2)</literal> формирует вектор-строку из <literal>n</literal> (по умолчанию <literal>n=100</literal>) равномерно распределённых точек между <literal>x1</literal> и <literal>x2</literal>. Если <literal>x1</literal> или <literal>x2</literal> комплексные, то <literal>linspace(x1,x2)</literal> возвращает вектор-строку из <literal>n</literal> комплексных значений. Реальная часть (и, соответственно, мнимая часть) этих <literal>n</literal> комплексных значений равномерно распределена между реальными частями (и, соответственно, мнимыми частями) <literal>x1</literal> и <literal>x2</literal>.
+            <code>linspace(x1, x2)</code> генерирует   вектор-строку из
+           <varname>n</varname> равномерно распределённых значений в диапазоне
+           точно от <varname>x1</varname> до <varname>x2</varname>.
+        </para>
+        <note>
+            <para>
+                Синтаксис <code>y1:y2</code> или <code>y1:step:y2</code>
+                наподобие <code>1:0.1:%pi</code> делает то же самое, но фиксирует
+               начальную границу <varname>y1</varname> и
+               <emphasis role="bold">шаг</emphasis> <varname>step</varname>.
+               Переменная <varname>y2</varname> используется в качестве границы
+               остановки, через которую нельзя переступить. Последнее значение,
+               которое фактически будет сгенерировано, может не достичь её. В
+               этом случае <varname>y2</varname> не включено в результат.
+            </para>
+            <para>
+               Вместо фиксированного шага указанным значением, функция
+               <function>linspace</function> фиксирует конечную границу
+               <varname>x2</varname>, которая точно <emphasis role="bold">будет достигнута</emphasis>
+               и вычисляет соответствующий шаг.
+            </para>
+        </note>
+        <para>
+           Если <varname>x1</varname> или <varname>x2</varname> являются комплексными
+           числами, то <code>linspace(x1,x2)</code> интерполирует отдельно вещественную
+           и мнимую части <varname>x1</varname> и <varname>x2</varname>.
+        </para>
+        <para>
+           Если указаны вектор-столбцы <varname>Col1</varname> и <varname>Col2</varname>,
+           то функция <function>linspace</function> работает по строкам: результирующая
+           матрица <varname>Matrix</varname> имеет то же количество строк и
+           <varname>n</varname> столбцов, которое мы получим <code>Matrix(i,:) = linspace(Col1(i), Col2(i), n)</code>.
         </para>
     </refsection>
     <refsection>
         <title>Примеры</title>
         <programlisting role="example"><![CDATA[
-linspace(1,2,10)
-linspace([1:4]',[5:8]',10)
-linspace(1+%i,2+2*%i,10)
+linspace(1, %pi, 0)         // n = 0
+linspace(1, 2, 10)          // x2 > x1 : значения увеличиваются
+linspace(2, 1, 10)          // x2 < x1 : значения уменьшаются
+linspace(1+%i, 2-2*%i, 5)      // с комплексными числами
+linspace([1:4]', [5:8]', 10)   // со столбцами на входе
  ]]></programlisting>
+        <screen><![CDATA[--> linspace(1, %pi, 0)    // n = 0
+ ans  =
+    []
+
+--> linspace(1, 2, 10)    // x2 > x1 : значения увеличиваются
+
+ ans  =
+   1.   1.111   1.222   1.333   1.444   1.556   1.667   1.778   1.889   2.
+
+
+--> linspace(2, 1, 10)    // x2 < x1 : значения уменьшаются
+
+ ans  =
+   2.   1.889   1.778   1.667   1.556   1.444   1.333   1.222   1.111   1.
+
+
+--> linspace(1+%i, 2-2*%i, 5)      // с комплексными числами
+
+ ans  =
+   1. +i     1.25 +0.25i   1.5 -0.5i   1.75 -1.25i   2. -2.i
+
+
+--> linspace([1:4]', [5:8]', 10)   // со столбцами на входе
+
+ ans  =
+   1.   1.444   1.889   2.333   2.778   3.222   3.667   4.111   4.556   5.
+   2.   2.444   2.889   3.333   3.778   4.222   4.667   5.111   5.556   6.
+   3.   3.444   3.889   4.333   4.778   5.222   5.667   6.111   6.556   7.
+   4.   4.444   4.889   5.333   5.778   6.222   6.667   7.111   7.556   8.
+]]></screen>
     </refsection>
     <refsection role="see also">
         <title>Смотрите также</title>
         <simplelist type="inline">
             <member>
+                <link linkend="colon">colon</link>
+            </member>
+            <member>
                 <link linkend="logspace">logspace</link>
             </member>
+            <member>
+                <link linkend="grand">grand</link>
+            </member>
         </simplelist>
     </refsection>
     <refsection>
@@ -75,7 +175,23 @@ linspace(1+%i,2+2*%i,10)
             <revision>
                 <revnumber>5.4.0</revnumber>
                 <revremark>
-                    Функция linspace принимает векторы-столбцы в качестве двух первых входных аргументов. Благодарим Guillaume AZEMA за эту реализацию.
+                    <itemizedlist>
+                        <listitem>Могут быть указаны вектор-столбцы.
+                        </listitem>
+                        <listitem>Третьим входным аргументом (n) должно быть целое значение.
+                        </listitem>
+                    </itemizedlist>
+                </revremark>
+            </revision>
+            <revision>
+                <revnumber>6.0</revnumber>
+                <revremark>
+                    <itemizedlist>
+                        <listitem>linspace(a, b, n&lt;=0) теперь возвращает [] вместо b.
+                        </listitem>
+                        <listitem>Границы теперь проверяются на значения %inf или %nan.
+                        </listitem>
+                    </itemizedlist>
                 </revremark>
             </revision>
         </revhistory>
index 1ecc64b..d0d4915 100644 (file)
@@ -1,6 +1,8 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) INRIA
 // Copyright (C) DIGITEO - 2011 - Allan CORNET
+// Copyright (C) CNES - 2011 - Guillaume AZEMA
+// Copyright (C) 2016 - Samuel GOUGEON
 //
 // Copyright (C) 2012 - 2016 - Scilab Enterprises
 //
@@ -17,38 +19,56 @@ function y = linspace(d1, d2, n)
     // equally spaced points between x1 and x2.
     // linspace(x1, x2, n) generates n points between x1 and x2.
 
+    // CHECKING ARGUMENTS
+    // ------------------
     rhs = argn(2);
     if rhs < 2 then
-        error(msprintf(gettext("%s: Wrong number of input argument(s): %d expected.\n"),"linspace", 2));
+        msg = gettext("%s: Wrong number of input argument(s): %d to %d expected.\n")
+        error(msprintf(msg, "linspace", 2, 3));
     end
     if size(d1,2)<>1 then
-        error(msprintf(gettext("%s: Wrong size for input argument #%d: A column vector expected.\n"),"linspace",1));
+        msg = gettext("%s: Argument #%d: Column expected.\n")
+        error(msprintf(msg, "linspace", 1));
     end
     if ~and(size(d1) == size(d2)) then
-        error(msprintf(gettext("%s: Incompatible input arguments #%d and #%d: Same sizes expected.\n"),"linspace",1,2));
+        msg = gettext("%s: Arguments #%d and #%d: Same sizes expected.\n")
+        error(msprintf(msg, "linspace", 1, 2));
+    end
+    msg = gettext("%s: Argument #%d: Number(s) expected.\n")
+    if ~or(type(d1)==[1 5 8]) then
+        error(msprintf(msg, "linspace", 1));
+    end
+    if ~or(type(d2)==[1 5 8]) then
+        error(msprintf(msg, "linspace", 2));
+    end
+    msg = gettext("%s: Argument #%d: %%nan and %%inf values are forbidden.\n")
+    if or(isinf(d1)) | or(isnan(d1)) then
+        error(msprintf(msg, "linspace", 1));
+    end
+    if or(isinf(d2)) | or(isnan(d2)) then
+        error(msprintf(msg, "linspace", 2));
     end
-
 
     if rhs == 2 then
         n = 100;
     else
-        if and(type(n)<>[1 8])  | size(n,"*")<>1 then
-            error(msprintf(gettext("%s: Wrong type for input argument #%d: An integer value expected.\n"),"linspace",3));
-        end
-
-        if type(n) == 1 & int(n) <> n then
-            error(msprintf(gettext("%s: Wrong value for input argument #%d: An integer value expected.\n"),"linspace",3));
-        elseif type(n) == 8 then
-            n = double(n); // Convert for the operations to come
+        if and(type(n)<>[1 8]) | size(n,"*")<>1 | int(n)<>n then
+            msg = gettext("%s: Argument #%d: An integer value expected.\n")
+            error(msprintf(msg, "linspace",3));
         end
+        n = double(n); // Convert for the operations to come
     end
 
-    if (n - 1) <= 0 then
-        y = d2;
-    else
+    // PROCESSING
+    // ----------
+    if n>1
         y = ((d2-d1) * (0:n-1)) / (n-1) + d1 * ones(1,n);
-
-        // forces the last value to be in the interval
+        // Forces the last value to be exactly the given d2:
+        // http://bugzilla.scilab.org/10966
         y(:,$) = d2;
+    elseif n==1
+        y = d2
+    else
+        y = []
     end
 endfunction
index 1f41594..6659c5a 100644 (file)
@@ -36,11 +36,19 @@ function y=logspace(d1, d2, n)
             error(msprintf(gettext("%s: Wrong type for input argument #%d: An integer value expected.\n"),"logspace",3));
         end
         if int(n) <> n then
-            warning(msprintf("%s: Using a non integer value for input argument #%d is deprecated and will produce an error in version 5.4.1.\n","logspace",3));
+            msg = gettext("%s: Argument #%d: An integer value expected.\n")
+            error(msprintf(msg, "logspace",3))
         end
     end
+
     if d2==%pi then
         d2 = log10(%pi);
     end
-    y=10 .^( d1*ones(1,n) + [(d2-d1)*(0:n-2)/(floor(n)-1),d2-d1]);
+    if n>1
+        y = 10 .^( d1*ones(1,n) + [(d2-d1)*(0:n-2)/(floor(n)-1),d2-d1]);
+    elseif n==1
+        y = 10.^d2
+    else
+        y = []
+    end
 endfunction
index 358afc6..3ef7f45 100644 (file)
@@ -17,5 +17,5 @@
 y = linspace(0, 5.5, uint32(5.2));
 refY = [0 1.375 2.75 4.125 5.5];
 assert_checkequal(y, refY);
-refMsg = msprintf(_("%s: Wrong value for input argument #%d: An integer value expected.\n"), "linspace", 3);
+refMsg = msprintf(_("%s: Argument #%d: An integer value expected.\n"), "linspace", 3);
 assert_checkerror("linspace(0, 5.5, 5.2);", refMsg);
index a65d749..688878c 100644 (file)
@@ -19,5 +19,5 @@ y = linspace(0, 5.5, uint32(5.2));
 refY = [0 1.375 2.75 4.125 5.5];
 assert_checkequal(y, refY);
 
-refMsg = msprintf(_("%s: Wrong value for input argument #%d: An integer value expected.\n"), "linspace", 3);
+refMsg = msprintf(_("%s: Argument #%d: An integer value expected.\n"), "linspace", 3);
 assert_checkerror("linspace(0, 5.5, 5.2);", refMsg);
diff --git a/scilab/modules/elementary_functions/tests/nonreg_tests/bug_592.dia.ref b/scilab/modules/elementary_functions/tests/nonreg_tests/bug_592.dia.ref
new file mode 100644 (file)
index 0000000..4bdf50e
--- /dev/null
@@ -0,0 +1,21 @@
+// =============================================================================
+// 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 #592 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/592
+//
+// <-- Short Description -->
+//    linspace(a, b, n<=0) returned b instead of []. Same problem with logspage 
+//    function.
+assert_checkequal(linspace(1, 2, 0), []);
+assert_checkequal(linspace(1, 2, -3), []);
+assert_checkequal(linspace([1:3]', [4:6]', 0), []);
+assert_checkequal(logspace(1, 2, 0), []);
+assert_checkequal(logspace(1, 2, -3), []);
+assert_checkequal(logspace([1:3]', [4:6]', 0), []);
diff --git a/scilab/modules/elementary_functions/tests/nonreg_tests/bug_592.tst b/scilab/modules/elementary_functions/tests/nonreg_tests/bug_592.tst
new file mode 100644 (file)
index 0000000..b14637a
--- /dev/null
@@ -0,0 +1,25 @@
+// =============================================================================
+// 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 #592 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/592
+//
+// <-- Short Description -->
+//    linspace(a, b, n<=0) returned b instead of []. Same problem with logspage
+//    function.
+
+assert_checkequal(linspace(1, 2, 0), []);
+assert_checkequal(linspace(1, 2, -3), []);
+assert_checkequal(linspace([1:3]', [4:6]', 0), []);
+
+assert_checkequal(logspace(1, 2, 0), []);
+assert_checkequal(logspace(1, 2, -3), []);
+assert_checkequal(logspace([1:3]', [4:6]', 0), []);
index 6ba4306..bcbd57c 100644 (file)
@@ -2,25 +2,39 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) 2008 - INRIA - Michael Baudin
 // Copyright (C) 2012 - Scilab Enterprises - Sylvestre Ledru
+// Copyright (C) 2016 - Samuel GOUGEON
 //
 //  This file is distributed under the same license as the Scilab package.
 // =============================================================================
+
 // <-- CLI SHELL MODE -->
+
 // Basic use
-computed=linspace(0,1,11);
-expected=[0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.];
+assert_checkequal(linspace(1,2,-1),[]);
+assert_checkequal(linspace(1,2,0),[]);
+assert_checkequal(linspace(1,2,1),2);
+assert_checkequal(linspace(1,2,2),[1,2]);
+assert_checkequal(linspace(0,100,101),0:100);
+computed = linspace(0,1,11);
+expected = [0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.];
 assert_checkalmostequal(computed,expected);
+
 // Basic use with 12 and 14 which also test scaling
-computed=linspace(12,14,11);
-expected=[12. 12.2 12.4 12.6 12.8 13. 13.2 13.4 13.6 13.8 14.];
+computed = linspace(12,14,11);
+expected = [12. 12.2 12.4 12.6 12.8 13. 13.2 13.4 13.6 13.8 14.];
 assert_checkalmostequal(computed,expected);
-// Vector input
+
+// Column inputs
 assert_checkequal(size(linspace([0;2],[2;5],5)),[2,5]);
 assert_checkequal(size(linspace([0;2],[2;5],2)),[2,2]);
 assert_checkequal(linspace([0;2],[2;5],2),[0,2;2,5]);
 assert_checkalmostequal(linspace([-1;2],[2;6],6), [-1,-0.4,0.2,0.8,1.4,2; 2,2.8,3.6,4.4,5.2,6]);
+
+// With complex bounds
+assert_checkequal(linspace(0,3-3*%i,4), (0:3)*(1-%i));
+assert_checkequal(linspace(3-3*%i,0,7), (3:-0.5:0)*(1-%i));
+expected = complex([1;1]*(1:-0.25:0), [0:0.5:2 ; 2:0.5:4]);
+assert_checkequal(linspace(1+%i*[0;2],[2;4]*%i,5),expected);
+
 // Perform a check on the size of the input arguments
 assert_checktrue(execstr('linspace(2,[2,2])','errcatch')<>0);
-assert_checkequal(linspace(1,2,0),2);
-assert_checkequal(linspace(1,2,1),2);
-assert_checkequal(linspace(1,2,2),[1,2]);
index 182c746..bcbd57c 100644 (file)
@@ -2,6 +2,7 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) 2008 - INRIA - Michael Baudin
 // Copyright (C) 2012 - Scilab Enterprises - Sylvestre Ledru
+// Copyright (C) 2016 - Samuel GOUGEON
 //
 //  This file is distributed under the same license as the Scilab package.
 // =============================================================================
 // <-- CLI SHELL MODE -->
 
 // Basic use
-computed=linspace(0,1,11);
-expected=[0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.];
+assert_checkequal(linspace(1,2,-1),[]);
+assert_checkequal(linspace(1,2,0),[]);
+assert_checkequal(linspace(1,2,1),2);
+assert_checkequal(linspace(1,2,2),[1,2]);
+assert_checkequal(linspace(0,100,101),0:100);
+computed = linspace(0,1,11);
+expected = [0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.];
 assert_checkalmostequal(computed,expected);
+
 // Basic use with 12 and 14 which also test scaling
-computed=linspace(12,14,11);
-expected=[12. 12.2 12.4 12.6 12.8 13. 13.2 13.4 13.6 13.8 14.];
+computed = linspace(12,14,11);
+expected = [12. 12.2 12.4 12.6 12.8 13. 13.2 13.4 13.6 13.8 14.];
 assert_checkalmostequal(computed,expected);
 
-
-// Vector input
+// Column inputs
 assert_checkequal(size(linspace([0;2],[2;5],5)),[2,5]);
 assert_checkequal(size(linspace([0;2],[2;5],2)),[2,2]);
 assert_checkequal(linspace([0;2],[2;5],2),[0,2;2,5]);
 assert_checkalmostequal(linspace([-1;2],[2;6],6), [-1,-0.4,0.2,0.8,1.4,2; 2,2.8,3.6,4.4,5.2,6]);
 
+// With complex bounds
+assert_checkequal(linspace(0,3-3*%i,4), (0:3)*(1-%i));
+assert_checkequal(linspace(3-3*%i,0,7), (3:-0.5:0)*(1-%i));
+expected = complex([1;1]*(1:-0.25:0), [0:0.5:2 ; 2:0.5:4]);
+assert_checkequal(linspace(1+%i*[0;2],[2;4]*%i,5),expected);
+
 // Perform a check on the size of the input arguments
 assert_checktrue(execstr('linspace(2,[2,2])','errcatch')<>0);
-
-
-assert_checkequal(linspace(1,2,0),2);
-assert_checkequal(linspace(1,2,1),2);
-assert_checkequal(linspace(1,2,2),[1,2]);
-
-
index 6879349..bb878be 100644 (file)
@@ -9,6 +9,8 @@
 computed=logspace(0,10,11);
 expected=10.0.^(0:10)  ;
 assert_checkalmostequal(computed,expected);
+assert_checkequal(logspace(1,2,-1),[]);
+assert_checkequal(logspace(1,2,0),[]);
 // Vector input
 assert_checkequal(size(logspace([0;2],[2;5],5)),[2,5]);
 assert_checkequal(size(logspace([0;2],[2;5],2)),[2,2]);
index f435f18..3b110e3 100644 (file)
@@ -12,6 +12,9 @@ computed=logspace(0,10,11);
 expected=10.0.^(0:10)  ;
 assert_checkalmostequal(computed,expected);
 
+assert_checkequal(logspace(1,2,-1),[]);
+assert_checkequal(logspace(1,2,0),[]);
+
 // Vector input
 assert_checkequal(size(logspace([0;2],[2;5],5)),[2,5]);
 assert_checkequal(size(logspace([0;2],[2;5],2)),[2,2]);