* Bug #13524 fixed - strtod did not ignore the tabs and CR. 08/15008/2
Vladislav TRUBKIN [Thu, 7 Aug 2014 15:58:58 +0000 (17:58 +0200)]
Change-Id: Ie27930a7eb15eb0dc3ae397c10749e4d575286ae

scilab/CHANGES_5.5.X
scilab/modules/string/sci_gateway/c/sci_strtod.c
scilab/modules/string/tests/nonreg_tests/bug_13524.dia.ref [new file with mode: 0644]
scilab/modules/string/tests/nonreg_tests/bug_13524.tst [new file with mode: 0644]

index f047794..48c7edc 100644 (file)
@@ -186,6 +186,8 @@ Scilab Bug Fixes
 
 * Bug #13515 fixed - There were wrong results for matrix/hypermatrix with bitset function.
 
+* Bug #13524 fixed - strtod did not ignore the tabs and CR.
+
 * Bug #13527 fixed - hilb did not check correctly the type of first input argument.
 
 
index 7f79b2d..b9c0287 100644 (file)
@@ -194,7 +194,8 @@ int sci_strtod(char *fname, unsigned long fname_len)
 
             for (y = 0 ; y < first_nb ; y++)
             {
-                if (Input_StringMatrix_1[x][y] != ' ') // spaces are accepted
+                // spaces, tabs, cr are accepted
+                if (Input_StringMatrix_1[x][y] != ' ' && Input_StringMatrix_1[x][y] != '\t' && Input_StringMatrix_1[x][y] != '\r')
                 {
                     OutputDoubles[x] = not_a_number;
                     flag = 1;
diff --git a/scilab/modules/string/tests/nonreg_tests/bug_13524.dia.ref b/scilab/modules/string/tests/nonreg_tests/bug_13524.dia.ref
new file mode 100644 (file)
index 0000000..3bf625d
--- /dev/null
@@ -0,0 +1,54 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2014 - Scilab Enterprises - Vladislav TRUBKIN
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- Non-regression test for bug 13524 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/13524
+//
+// <-- Short Description -->
+// strtod did not ignore the tabs and CR
+//
+// check \t
+str = msprintf("\t 10");
+v = strtod(str);
+assert_checkequal(v, 10);
+str = msprintf("\t 1.5");
+v = strtod(str);
+assert_checkequal(v, 1.5);
+str = msprintf("\t          1.5");
+v = strtod(str);
+assert_checkequal(v, 1.5);
+str = msprintf("        \t          1.5");
+v = strtod(str);
+assert_checkequal(v, 1.5);
+str = msprintf("\n  \t  1.5");
+v = strtod(str);
+assert_checkequal(v, [%nan; 1.5]);
+str = msprintf("\t  1.5end");
+[v, endStr] = strtod(str);
+assert_checkequal(v, 1.5);
+assert_checkequal(endStr, "end");
+// check \r
+str = msprintf("\r 10");
+v = strtod(str);
+assert_checkequal(v, 10);
+str = msprintf("\r 1.5");
+v = strtod(str);
+assert_checkequal(v, 1.5);
+str = msprintf("\r          1.5");
+v = strtod(str);
+assert_checkequal(v, 1.5);
+str = msprintf("        \r          1.5");
+v = strtod(str);
+assert_checkequal(v, 1.5);
+str = msprintf("\n  \r  1.5");
+v = strtod(str);
+assert_checkequal(v, [%nan; 1.5]);
+str = msprintf("\r  1.5end");
+[v, endStr] = strtod(str);
+assert_checkequal(v, 1.5);
+assert_checkequal(endStr, "end");
diff --git a/scilab/modules/string/tests/nonreg_tests/bug_13524.tst b/scilab/modules/string/tests/nonreg_tests/bug_13524.tst
new file mode 100644 (file)
index 0000000..3bf625d
--- /dev/null
@@ -0,0 +1,54 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2014 - Scilab Enterprises - Vladislav TRUBKIN
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- Non-regression test for bug 13524 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/13524
+//
+// <-- Short Description -->
+// strtod did not ignore the tabs and CR
+//
+// check \t
+str = msprintf("\t 10");
+v = strtod(str);
+assert_checkequal(v, 10);
+str = msprintf("\t 1.5");
+v = strtod(str);
+assert_checkequal(v, 1.5);
+str = msprintf("\t          1.5");
+v = strtod(str);
+assert_checkequal(v, 1.5);
+str = msprintf("        \t          1.5");
+v = strtod(str);
+assert_checkequal(v, 1.5);
+str = msprintf("\n  \t  1.5");
+v = strtod(str);
+assert_checkequal(v, [%nan; 1.5]);
+str = msprintf("\t  1.5end");
+[v, endStr] = strtod(str);
+assert_checkequal(v, 1.5);
+assert_checkequal(endStr, "end");
+// check \r
+str = msprintf("\r 10");
+v = strtod(str);
+assert_checkequal(v, 10);
+str = msprintf("\r 1.5");
+v = strtod(str);
+assert_checkequal(v, 1.5);
+str = msprintf("\r          1.5");
+v = strtod(str);
+assert_checkequal(v, 1.5);
+str = msprintf("        \r          1.5");
+v = strtod(str);
+assert_checkequal(v, 1.5);
+str = msprintf("\n  \r  1.5");
+v = strtod(str);
+assert_checkequal(v, [%nan; 1.5]);
+str = msprintf("\r  1.5end");
+[v, endStr] = strtod(str);
+assert_checkequal(v, 1.5);
+assert_checkequal(endStr, "end");