mprintf : fix trouble with non use arguments 12/16812/3
Antoine ELIAS [Tue, 7 Jul 2015 12:18:50 +0000 (14:18 +0200)]
Change-Id: Iec810f925c4f78e4b98744e5cd0e1e820c4058b5

scilab/modules/compatibility_functions/tests/nonreg_tests/bug_7231.dia.ref
scilab/modules/compatibility_functions/tests/nonreg_tests/bug_7231.tst
scilab/modules/development_tools/tests/unit_tests/assert/checkerror.dia.ref
scilab/modules/development_tools/tests/unit_tests/assert/checkerror.tst
scilab/modules/output_stream/src/cpp/scilab_sprintf.cpp

index cc2deda..0a25dd3 100644 (file)
@@ -17,6 +17,6 @@
 // mtlb_num2str did not manage second input argument
 assert_checkequal(execstr("mtlb_num2str(2, ""%11.4f"")", "errcatch"), 0);
 assert_checkequal(execstr("mtlb_num2str(2, ""%11.4f"", 3)", "errcatch"), 999);
-assert_checkequal(execstr("mtlb_num2str(2, ""blabla"")", "errcatch"), 999);
+assert_checkequal(execstr("mtlb_num2str(2, ""blabla"")", "errcatch"), 0);
 if mtlb_num2str(2, "%11.4f") <> "     2.0000" then bugmes();quit;end
 if mtlb_num2str(2) <> "2" then bugmes();quit;end
index dd636b9..fcb42a4 100644 (file)
@@ -18,7 +18,7 @@
 
 assert_checkequal(execstr("mtlb_num2str(2, ""%11.4f"")", "errcatch"), 0);
 assert_checkequal(execstr("mtlb_num2str(2, ""%11.4f"", 3)", "errcatch"), 999);
-assert_checkequal(execstr("mtlb_num2str(2, ""blabla"")", "errcatch"), 999);
+assert_checkequal(execstr("mtlb_num2str(2, ""blabla"")", "errcatch"), 0);
 
 if mtlb_num2str(2, "%11.4f") <> "     2.0000" then pause, end
 if mtlb_num2str(2) <> "2" then pause, end
index 162c6a5..241a19d 100644 (file)
@@ -8,39 +8,39 @@
 // http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
 // <-- CLI SHELL MODE -->
 function flag = MY_assert_equal ( computed , expected )
-  if computed==expected then
-    flag = 1;
-  else
-    flag = 0;
-  end
-  if flag <> 1 then bugmes();quit;end
+    if computed==expected then
+        flag = 1;
+    else
+        flag = 0;
+    end
+    if flag <> 1 then bugmes();quit;end
 endfunction
 // These tests are rather abstract.
-// This is because we test the assert_checkerror function, 
-// which generates errors. 
-// To check that assert_checkerror performs well, we use 
-// execstr. 
-// We obviously do not want to use assert_checkerror, since a 
-// bug in assert_checkerror would make the current test fail in a 
+// This is because we test the assert_checkerror function,
+// which generates errors.
+// To check that assert_checkerror performs well, we use
+// execstr.
+// We obviously do not want to use assert_checkerror, since a
+// bug in assert_checkerror would make the current test fail in a
 // weird way.
-// Moreover, the current tests are localized, so that 
-// a Scilab in English or in French equally pass the test. 
+// Moreover, the current tests are localized, so that
+// a Scilab in English or in French equally pass the test.
 function y = f(x)
-  [lhs,rhs]=argn()
-  if ( rhs <> 1 ) then
-    lstr=gettext("%s: Wrong number of input argument: %d expected.\n")
-    errmsg = sprintf ( lstr , "f" , 1 )
-    error(errmsg)
-  end
-  if ( typeof(x) <> "constant" ) then
-    lstr=gettext("%s: Wrong type for input argument #%d: Matrix expected.\n")
-    errmsg = sprintf ( lstr , "f" , 1 )
-    error(errmsg,123456789)
-  end
-  y = x
+    [lhs,rhs]=argn()
+    if ( rhs <> 1 ) then
+        lstr=gettext("%s: Wrong number of input argument: %d expected.\n")
+        errmsg = sprintf ( lstr , "f" , 1 )
+        error(errmsg)
+    end
+    if ( typeof(x) <> "constant" ) then
+        lstr=gettext("%s: Wrong type for input argument #%d: Matrix expected.\n")
+        errmsg = sprintf ( lstr , "f" , 1 )
+        error(errmsg,123456789)
+    end
+    y = x
 endfunction
 ///////////////////////////////////////////////
-// 1. Check our test-function f (the old shool way), 
+// 1. Check our test-function f (the old shool way),
 // i.e. check that the function function is correctly written.
 // The test of the assert_checkerror function starts at step 2.
 MY_assert_equal ( f(2) , 2 );
@@ -60,7 +60,7 @@ ferrmsg = msprintf(gettext("%s: Wrong type for input argument #%d: Matrix expect
 MY_assert_equal ( lerr , ferrmsg );
 //
 ///////////////////////////////////////////////
-// 2. Check the error messages produced by assert_checkerror 
+// 2. Check the error messages produced by assert_checkerror
 // in case of wrong use of assert_checkerror
 //
 // Check error message when number of input arguments is false
@@ -105,7 +105,7 @@ MY_assert_equal ( ierr , 10000 );
 lerr = lasterror();
 MY_assert_equal ( lerr , sprintf ( gettext ( "%s: Wrong size for input argument #%d: %d-by-%d matrix expected.\n") , "assert_checkerror" , 1 , 1, 1) );
 //
-// Check error message when size of 2nd argument of assert_checkerror is true 
+// Check error message when size of 2nd argument of assert_checkerror is true
 //
 instr = "assert_checkerror ( """" , ["""" """"] )";
 ierr = execstr(instr, "errcatch");
@@ -142,11 +142,11 @@ lerr = lasterror();
 MY_assert_equal ( lerr , sprintf( gettext ( "%s: No error was produced while evaluating ""%s"".") , "assert_checkerror" , "y=f(1)" ) );
 //
 // Check error message when formatting the error message generates an error (!).
-instr = "assert_checkerror ( ""y=f()"" , ""foo"" , [] , 2 )";
+instr = "assert_checkerror ( ""y=f()"" , ""foo%d%d"" , [] , 2 )";
 ierr=execstr(instr,"errcatch");
 MY_assert_equal ( ierr , 10000 );
 lerr = lasterror();
-msprerrmsg = sprintf(gettext("%s: Wrong number of input arguments: at most %d expected.\n"),"msprintf",0);
+msprerrmsg = sprintf(gettext("%s: Wrong number of input arguments: data doesn''t fit with format.\n"),"msprintf",0);
 MY_assert_equal ( lerr , sprintf( gettext ( "%s: Error while formatting the error message: ""%s""") , "assert_checkerror" , msprerrmsg ) );
 //
 ///////////////////////////////////////////////
@@ -162,14 +162,14 @@ assert_checkerror ( "y=f(""a"")" , msg2 , 123456789 );
 // Check error message when the good error is produced by f (and errmsg is not given)
 flag = assert_checkerror ( "y=f()" , msg1 );
 MY_assert_equal ( flag , %t );
-// 
+//
 flag = assert_checkerror ( "y=f(""a"")" , msg2 );
 MY_assert_equal ( flag , %t );
-// 
+//
 // Check error message and error number
 flag = assert_checkerror ( "y=f()" , msg1 , 10000 );
 MY_assert_equal ( flag , %t );
-// 
+//
 flag = assert_checkerror ( "y=f(""a"")" , msg2 , 123456789 );
 MY_assert_equal ( flag , %t );
 //
@@ -177,7 +177,7 @@ MY_assert_equal ( flag , %t );
 [flag,errmsg] = assert_checkerror ( "y=f()" , msg1 );
 MY_assert_equal ( flag , %t );
 MY_assert_equal ( errmsg , "" );
-// 
+//
 // Check error message and error number (and errmsg is given is an output argument)
 [flag,errmsg] = assert_checkerror ( "y=f()" , msg1 , 10000 );
 MY_assert_equal ( flag , %t );
index 5207a54..a4d0fd4 100644 (file)
 // <-- CLI SHELL MODE -->
 
 function flag = MY_assert_equal ( computed , expected )
-  if computed==expected then
-    flag = 1;
-  else
-    flag = 0;
-  end
-  if flag <> 1 then pause,end
+    if computed==expected then
+        flag = 1;
+    else
+        flag = 0;
+    end
+    if flag <> 1 then pause,end
 endfunction
 
 // These tests are rather abstract.
-// This is because we test the assert_checkerror function, 
-// which generates errors. 
-// To check that assert_checkerror performs well, we use 
-// execstr. 
-// We obviously do not want to use assert_checkerror, since a 
-// bug in assert_checkerror would make the current test fail in a 
+// This is because we test the assert_checkerror function,
+// which generates errors.
+// To check that assert_checkerror performs well, we use
+// execstr.
+// We obviously do not want to use assert_checkerror, since a
+// bug in assert_checkerror would make the current test fail in a
 // weird way.
-// Moreover, the current tests are localized, so that 
-// a Scilab in English or in French equally pass the test. 
+// Moreover, the current tests are localized, so that
+// a Scilab in English or in French equally pass the test.
 
 function y = f(x)
-  [lhs,rhs]=argn()
-  if ( rhs <> 1 ) then
-    lstr=gettext("%s: Wrong number of input argument: %d expected.\n")
-    errmsg = sprintf ( lstr , "f" , 1 )
-    error(errmsg)
-  end
-  if ( typeof(x) <> "constant" ) then
-    lstr=gettext("%s: Wrong type for input argument #%d: Matrix expected.\n")
-    errmsg = sprintf ( lstr , "f" , 1 )
-    error(errmsg,123456789)
-  end
-  y = x
+    [lhs,rhs]=argn()
+    if ( rhs <> 1 ) then
+        lstr=gettext("%s: Wrong number of input argument: %d expected.\n")
+        errmsg = sprintf ( lstr , "f" , 1 )
+        error(errmsg)
+    end
+    if ( typeof(x) <> "constant" ) then
+        lstr=gettext("%s: Wrong type for input argument #%d: Matrix expected.\n")
+        errmsg = sprintf ( lstr , "f" , 1 )
+        error(errmsg,123456789)
+    end
+    y = x
 endfunction
 
 ///////////////////////////////////////////////
-// 1. Check our test-function f (the old shool way), 
+// 1. Check our test-function f (the old shool way),
 // i.e. check that the function function is correctly written.
 // The test of the assert_checkerror function starts at step 2.
 MY_assert_equal ( f(2) , 2 );
@@ -65,7 +65,7 @@ ferrmsg = msprintf(gettext("%s: Wrong type for input argument #%d: Matrix expect
 MY_assert_equal ( lerr , ferrmsg );
 //
 ///////////////////////////////////////////////
-// 2. Check the error messages produced by assert_checkerror 
+// 2. Check the error messages produced by assert_checkerror
 // in case of wrong use of assert_checkerror
 //
 // Check error message when number of input arguments is false
@@ -110,7 +110,7 @@ MY_assert_equal ( ierr , 10000 );
 lerr = lasterror();
 MY_assert_equal ( lerr , sprintf ( gettext ( "%s: Wrong size for input argument #%d: %d-by-%d matrix expected.\n") , "assert_checkerror" , 1 , 1, 1) );
 //
-// Check error message when size of 2nd argument of assert_checkerror is true 
+// Check error message when size of 2nd argument of assert_checkerror is true
 //
 instr = "assert_checkerror ( """" , ["""" """"] )";
 ierr = execstr(instr, "errcatch");
@@ -147,11 +147,11 @@ lerr = lasterror();
 MY_assert_equal ( lerr , sprintf( gettext ( "%s: No error was produced while evaluating ""%s"".") , "assert_checkerror" , "y=f(1)" ) );
 //
 // Check error message when formatting the error message generates an error (!).
-instr = "assert_checkerror ( ""y=f()"" , ""foo"" , [] , 2 )";
+instr = "assert_checkerror ( ""y=f()"" , ""foo%d%d"" , [] , 2 )";
 ierr=execstr(instr,"errcatch");
 MY_assert_equal ( ierr , 10000 );
 lerr = lasterror();
-msprerrmsg = sprintf(gettext("%s: Wrong number of input arguments: at most %d expected.\n"),"msprintf",0);
+msprerrmsg = sprintf(gettext("%s: Wrong number of input arguments: data doesn''t fit with format.\n"),"msprintf",0);
 MY_assert_equal ( lerr , sprintf( gettext ( "%s: Error while formatting the error message: ""%s""") , "assert_checkerror" , msprerrmsg ) );
 //
 ///////////////////////////////////////////////
@@ -167,14 +167,14 @@ assert_checkerror ( "y=f(""a"")" , msg2 , 123456789 );
 // Check error message when the good error is produced by f (and errmsg is not given)
 flag = assert_checkerror ( "y=f()" , msg1 );
 MY_assert_equal ( flag , %t );
-// 
+//
 flag = assert_checkerror ( "y=f(""a"")" , msg2 );
 MY_assert_equal ( flag , %t );
-// 
+//
 // Check error message and error number
 flag = assert_checkerror ( "y=f()" , msg1 , 10000 );
 MY_assert_equal ( flag , %t );
-// 
+//
 flag = assert_checkerror ( "y=f(""a"")" , msg2 , 123456789 );
 MY_assert_equal ( flag , %t );
 //
@@ -182,7 +182,7 @@ MY_assert_equal ( flag , %t );
 [flag,errmsg] = assert_checkerror ( "y=f()" , msg1 );
 MY_assert_equal ( flag , %t );
 MY_assert_equal ( errmsg , "" );
-// 
+//
 // Check error message and error number (and errmsg is given is an output argument)
 [flag,errmsg] = assert_checkerror ( "y=f()" , msg1 , 10000 );
 MY_assert_equal ( flag , %t );
index 8369e38..b9be1ea 100644 (file)
@@ -59,8 +59,6 @@ wchar_t** scilab_sprintf(const std::string& funcname, const wchar_t* _pwstInput,
         first = 2;
     }
 
-    size_t posIn = first;
-
     //compute couple (index in input and col number ).
     std::list<std::pair<int, int> > inPos;
     for (int i = first; i < in.size(); ++i)
@@ -364,8 +362,7 @@ wchar_t** scilab_sprintf(const std::string& funcname, const wchar_t* _pwstInput,
     pwstFirstOutput = nullptr;
 
     int iLoop = 1;
-
-    if (rhs > first)
+    if (token.size() > 1)
     {
         std::list<TokenDef*>::iterator it = std::next(token.begin());
         iLoop = in[(*it)->pos]->getAs<GenericType>()->getRows();
@@ -373,13 +370,14 @@ wchar_t** scilab_sprintf(const std::string& funcname, const wchar_t* _pwstInput,
         {
             iLoop = std::min(iLoop, in[(*it)->pos]->getAs<GenericType>()->getRows());
         }
-    }
 
-    if (*_piNewLine || (*_piOutputRows) > 1)
-    {
-        (*_piOutputRows) *= iLoop;
+        if (*_piNewLine || (*_piOutputRows) > 1)
+        {
+            (*_piOutputRows) *= iLoop;
+        }
     }
 
+
     //if ((token.size() - 1) != inPos.size())
     //{
     //    Scierror(999, _("%s: Wrong number of input arguments: at most %d expected.\n"), funcname.data(), token.size() - 1);