* bug #14221 fixed: msprintf and mprintf ignored row-wise processing with %% 84/19184/5
Aashay Singhal [Mon, 13 Mar 2017 16:10:25 +0000 (21:10 +0530)]
 http://bugzilla.scilab.org/14221

Change-Id: Icb171b6344ac3f196b692a3e130c3301ea641f83

scilab/CHANGES.md
scilab/modules/output_stream/src/cpp/scilab_sprintf.cpp
scilab/modules/output_stream/tests/nonreg_tests/bug_13972.dia.ref
scilab/modules/output_stream/tests/nonreg_tests/bug_14221.dia.ref [new file with mode: 0644]
scilab/modules/output_stream/tests/nonreg_tests/bug_14221.tst [new file with mode: 0644]

index da16947..5117a77 100644 (file)
@@ -418,6 +418,7 @@ the [development mailing list](dev@lists.scilab.org) for a particular toolbox.
 * [#13592](http://bugzilla.scilab.org/show_bug.cgi?id=13592): In an axes in a uicontrol frame, setting a `legend` interactively might not follow the mouse accurately.
 * [#13900](http://bugzilla.scilab.org/show_bug.cgi?id=13900): `nanmin` and `nanmax` were useless duplicates of `min` and `max`
 * [#13979](http://bugzilla.scilab.org/show_bug.cgi?id=13979): A variable whose name is longer than 24 characters could not be cleared.
+* [#14221](http://bugzilla.scilab.org/show_bug.cgi?id=14221): `msprintf` and `mprintf` ignored row-wise processing with `%%`.
 * [#14254](http://bugzilla.scilab.org/show_bug.cgi?id=14254): When installing an ATOMS module that is not locally registered and available, the error message was unclear.
 * [#14376](http://bugzilla.scilab.org/show_bug.cgi?id=14376): `input()` was broken: \n was introduced before prompting; multiple prompts occurred; the output value could be missing; "%" "\n" "\t" were no longer supported in messages...
 * [#14399](http://bugzilla.scilab.org/show_bug.cgi?id=14399): `whereami`: wrong information (line numbers).
index a2c35d2..11e89b2 100644 (file)
@@ -374,11 +374,10 @@ wchar_t** scilab_sprintf(const std::string& funcname, const wchar_t* _pwstInput,
     int iLoop = 1;
     if (token.size() > 1)
     {
-        std::list<TokenDef*>::iterator it = std::next(token.begin());
-        iLoop = in[(*it)->pos]->getAs<types::GenericType>()->getRows();
-        for (; it != token.end(); ++it)
+        iLoop = in[first]->getAs<types::GenericType>()->getRows();
+        for (int i = first+1; i < in.size(); ++i)
         {
-            iLoop = std::min(iLoop, in[(*it)->pos]->getAs<types::GenericType>()->getRows());
+            iLoop = std::min(iLoop, in[i]->getAs<types::GenericType>()->getRows());
         }
 
         if (*_piNewLine || (*_piOutputRows) > 1)
@@ -387,14 +386,6 @@ wchar_t** scilab_sprintf(const std::string& funcname, const wchar_t* _pwstInput,
         }
     }
 
-
-    //if ((token.size() - 1) != inPos.size())
-    //{
-    //    Scierror(999, _("%s: Wrong number of input arguments: at most %d expected.\n"), funcname.data(), token.size() - 1);
-    //    *_piOutputRows = 0;
-    //    return nullptr;
-    //}
-
     std::wostringstream oFirstOutput;
     for (int j = 0; j < iLoop; j++)
     {
index c6bc34f..400c9bd 100644 (file)
@@ -50,70 +50,17 @@ printf("|%*s|%*s|%*s|%*s|\n", -10, "test", -5, "test", 5, "test", 10, "test");
 |test      |test | test|      test|
 printf("|%*s|\n", -10, ["t";"tt";"ttt";"tttt";"ttttt";"tttttt";"ttttttt";"tttttttt";"ttttttttt";"tttttttttt"]);
 |t         |
-|tt        |
-|ttt       |
-|tttt      |
-|ttttt     |
-|tttttt    |
-|ttttttt   |
-|tttttttt  |
-|ttttttttt |
-|tttttttttt|
 printf("|%*s|\n", 10, ["t";"tt";"ttt";"tttt";"ttttt";"tttttt";"ttttttt";"tttttttt";"ttttttttt";"tttttttttt"]);
 |         t|
-|        tt|
-|       ttt|
-|      tttt|
-|     ttttt|
-|    tttttt|
-|   ttttttt|
-|  tttttttt|
-| ttttttttt|
-|tttttttttt|
 printf("|%*d|%*d|%*d|%*d|\n", -10, -10, -5, -5, 5, 5, 10, 10);
 |-10       |-5   |    5|        10|
 printf("|%*d|\n", -8, [1;22;333;4444;55555;666666;7777777;88888888]);
 |1       |
-|22      |
-|333     |
-|4444    |
-|55555   |
-|666666  |
-|7777777 |
-|88888888|
 printf("|%*d|\n", 8, [1;22;333;4444;55555;666666;7777777;88888888]);
 |       1|
-|      22|
-|     333|
-|    4444|
-|   55555|
-|  666666|
-| 7777777|
-|88888888|
 printf("|%0*d|\n", 8, [1;22;333;4444;55555;666666;7777777;88888888]);
 |00000001|
-|00000022|
-|00000333|
-|00004444|
-|00055555|
-|00666666|
-|07777777|
-|88888888|
 printf("|%.*d|\n", -8, [1;22;333;4444;55555;666666;7777777;88888888]);
 |1|
-|22|
-|333|
-|4444|
-|55555|
-|666666|
-|7777777|
-|88888888|
 printf("|%.*d|\n", 8, [1;22;333;4444;55555;666666;7777777;88888888]);
 |00000001|
-|00000022|
-|00000333|
-|00004444|
-|00055555|
-|00666666|
-|07777777|
-|88888888|
diff --git a/scilab/modules/output_stream/tests/nonreg_tests/bug_14221.dia.ref b/scilab/modules/output_stream/tests/nonreg_tests/bug_14221.dia.ref
new file mode 100644 (file)
index 0000000..cccac15
--- /dev/null
@@ -0,0 +1,49 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2017 - Aashay Singhal
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 14221 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/14221
+//
+// <-- Short Description -->
+// mprintf("%.1f %% \n", (0:9)') returns only the first output and not the whole list
+// same error was also observed with msprintf
+mprintf("%.1f %% \n", (0:9)')
+0.0 % 
+1.0 % 
+2.0 % 
+3.0 % 
+4.0 % 
+5.0 % 
+6.0 % 
+7.0 % 
+8.0 % 
+9.0 % 
+msprintf("%.1f %% \n", (0:9)')
+ ans  =
+!0.0 %   !
+!        !
+!1.0 %   !
+!        !
+!2.0 %   !
+!        !
+!3.0 %   !
+!        !
+!4.0 %   !
+!        !
+!5.0 %   !
+!        !
+!6.0 %   !
+!        !
+!7.0 %   !
+!        !
+!8.0 %   !
+!        !
+!9.0 %   !
diff --git a/scilab/modules/output_stream/tests/nonreg_tests/bug_14221.tst b/scilab/modules/output_stream/tests/nonreg_tests/bug_14221.tst
new file mode 100644 (file)
index 0000000..e11f6b6
--- /dev/null
@@ -0,0 +1,21 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2017 - Aashay Singhal
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+//
+// <-- Non-regression test for bug 14221 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/14221
+//
+// <-- Short Description -->
+// mprintf("%.1f %% \n", (0:9)') returns only the first output and not the whole list
+// same error was also observed with msprintf
+
+
+mprintf("%.1f %% \n", (0:9)')
+msprintf("%.1f %% \n", (0:9)')
\ No newline at end of file