19 #if defined(_WIN32) && defined(_DEBUG) 20 #define _CRTDBG_MAP_ALLOC 23 #define CREATE_LEAKAGE_REPORT 26 #if defined( USINGDLL ) && defined( _WIN32 ) 27 #error This sample can be used only with STATIC builds of muParser (on win32) 31 #define _USE_MATH_DEFINES 50 #if defined(CREATE_LEAKAGE_REPORT) 59 _CrtDumpMemoryLeaks();
79 throw std::runtime_error(
"This function does throw an exception.");
87 return nBulkIdx + nThreadIdx + v1;
116 ParserBase::EnableDebugDump(v1!=0, v2!=0);
117 mu::console() <<
_T(
"Bytecode dumping ") << ((v1!=0) ?
_T(
"active") :
_T(
"inactive")) <<
_T(
"\n");
131 static int iVal = -1;
136 <<
a_szName << std::dec <<
_T(
"\" (slots left: ")
137 << 99-iVal <<
_T(
")")
138 <<
_T(
" User data pointer is:")
139 << std::hex << a_pUserData <<endl;
145 return &afValBuf[iVal];
156 stringstream_type::pos_type nPos(0);
158 ss >> std::hex >> iVal;
161 if (nPos==(stringstream_type::pos_type)0)
164 *a_iPos += (int)(2 + nPos);
174 mu::console() <<
_T(
" _____ __ __\\______ \\_____ _______ ______ ____ _______\n");
175 mu::console() <<
_T(
" / \\ | | \\| ___/\\__ \\ \\_ __ \\/ ___/_/ __ \\\\_ __ \\ \n");
176 mu::console() <<
_T(
" | Y Y \\| | /| | / __ \\_| | \\/\\___ \\ \\ ___/ | | \\/ \n");
177 mu::console() <<
_T(
" |__|_| /|____/ |____| (____ /|__| /____ > \\___ >|__| \n");
186 mu::console() <<
_T(
"-----------------------------------------------------------\n");
192 mu::console() <<
_T(
" Test skipped: integer data type are not compatible with the unit test!\n\n");
206 mu::console() <<
_T(
"-----------------------------------------------------------\n");
209 mu::console() <<
_T(
" list exprvar - list expression variables\n");
210 mu::console() <<
_T(
" list const - list all numeric parser constants\n");
211 mu::console() <<
_T(
" opt on - enable optimizer (default)\n");
213 mu::console() <<
_T(
" locale de - switch to german locale\n");
214 mu::console() <<
_T(
" locale en - switch to english locale\n");
219 mu::console() <<
_T(
" \"_e\" 2.718281828459045235360287\n");
220 mu::console() <<
_T(
" \"_pi\" 3.141592653589793238462643\n");
221 mu::console() <<
_T(
"-----------------------------------------------------------\n");
279 if (!variables.size())
282 cout <<
"\nParser variables:\n";
283 cout <<
"-----------------\n";
284 cout <<
"Number: " << (int)variables.size() <<
"\n";
285 varmap_type::const_iterator item = variables.begin();
286 for (; item!=variables.end(); ++item)
287 mu::console() <<
_T(
"Name: ") << item->first <<
_T(
" Address: [0x") << item->second <<
_T(
"]\n");
299 mu::console() <<
_T(
"Expression does not contain constants\n");
303 valmap_type::const_iterator item = cmap.begin();
304 for (; item!=cmap.end(); ++item)
305 mu::console() <<
_T(
" ") << item->first <<
_T(
" = ") << item->second <<
_T(
"\n");
313 if (sExpr.length()==0)
315 cout <<
_T(
"Expression string is empty\n");
325 if (!variables.size())
327 mu::console() <<
_T(
"Expression does not contain variables\n");
332 mu::varmap_type::const_iterator item = variables.begin();
333 for (; item!=variables.end(); ++item)
334 mu::console() <<
_T(
"Name: ") << item->first <<
_T(
" Address: [0x") << item->second <<
_T(
"]\n");
345 if ( sLine ==
_T(
"quit") )
349 else if ( sLine ==
_T(
"list var") )
354 else if ( sLine ==
_T(
"opt on") )
360 else if ( sLine ==
_T(
"opt off") )
366 else if ( sLine ==
_T(
"list const") )
371 else if ( sLine ==
_T(
"list exprvar") )
376 else if ( sLine ==
_T(
"locale de") )
378 mu::console() <<
_T(
"Setting german locale: ArgSep=';' DecSep=',' ThousandsSep='.'\n");
384 else if ( sLine ==
_T(
"locale en") )
386 mu::console() <<
_T(
"Setting english locale: ArgSep=',' DecSep='.' ThousandsSep=''\n");
392 else if ( sLine ==
_T(
"locale reset") )
398 else if ( sLine ==
_T(
"test bulk") )
411 const int nBulkSize = 200;
418 for (
int i=0; i<nBulkSize; ++i)
428 parser.Eval(result, nBulkSize);
430 for (
int i=0; i<nBulkSize; ++i)
432 mu::console() <<
_T(
"Eqn. ") << i <<
_T(
": x=") <<
x[i] <<
_T(
"; y=") << y[i] <<
_T(
"; result=") << result[i] <<
_T(
"\n");
458 #ifdef USE_GERMAN_LOCALE 461 parser.SetThousandsSep(
'.');
471 parser.DefineVar(
_T(
"a"), &vVarVal[0]);
472 parser.DefineVar(
_T(
"b"), &vVarVal[1]);
473 parser.DefineVar(
_T(
"ft"), &vVarVal[1]);
474 parser.DefineStrConst(
_T(
"sVar1"),
_T(
"Sample string 1") );
475 parser.DefineStrConst(
_T(
"sVar2"),
_T(
"Sample string 2") );
536 mu::console() <<
_T(
"Multiple return values detected! Complete list:\n");
542 for (
int i=0; i<
nNum; ++i)
577 catch(Parser::exception_type &
e)
581 console() <<
_T(
"Initialization error: ") <<
e.GetMsg() << endl;