@@ -138,8 +138,8 @@ void oldMainTest() {
138138 void moreJunkExamples () {
139139
140140 Function f = FunctionManager .add ("f(x,y) = x - x/y" );
141- f .updateArgs (2 ,3 );
142- double r = f .calc (0 ,0 );
141+ f .updateArgs (2 , 3 );
142+ double r = f .calc (0 , 0 );
143143 Assertions .assertEquals ((double ) 2 - ((double ) 2 / (double ) 3 ), r );
144144 int iterations = 10000 ;
145145 long start = System .nanoTime ();
@@ -290,7 +290,7 @@ void junkExamples() {
290290 //MathExpression expr = new MathExpression("f=3;5f");//BUGGY
291291 //MathExpression expr = new MathExpression("quad(@(x)3*x-2+3*x^2)");//BUGGY
292292 //MathExpression expr = new MathExpression("root(@(x)3*x-sin(x)-0.5,2)");//BUGGY
293- MathExpression exprs = new MathExpression ("r1=4;r1*5" );
293+ MathExpression exprs = new MathExpression ("r1=4;r1*5" );
294294 //A+k.A+AxB+A^c
295295 if (print ) {
296296 System .out .println ("scanner: " + exprs .scanner );
@@ -332,7 +332,7 @@ public int compare(Map.Entry<String, Function> t0, Map.Entry<String, Function> t
332332 if (print ) {
333333 System .out .println ("VariableManager: " + VariableManager .VARIABLES );
334334 }
335- Assertions .assertEquals ("{e=e:2.718281828459045, ans=ans:0.0, x=x:0.0, pi=pi:3.141592653589793, y=y:0.0, r1=r1:4.0}" ,
335+ Assertions .assertEquals ("{e=e:2.718281828459045, ans=ans:0.0, x=x:0.0, pi=pi:3.141592653589793, y=y:0.0, r1=r1:4.0}" ,
336336 VariableManager .VARIABLES .toString ());
337337
338338 MathExpression expression = new MathExpression ("x=0;sin(ln(x))" );
@@ -387,4 +387,51 @@ public int compare(Map.Entry<String, Function> t0, Map.Entry<String, Function> t
387387 */
388388 }
389389
390+ @ Test
391+ public void testMixedConstantVariableFolding () {
392+ MathExpression expr = new MathExpression ("1+2+3+4+5+6+7+8+9+10+11+12+13+14+15+16+17+18+19+20+sin(x)" );
393+
394+ MathExpression .Token []cachedPostfix = expr .getCachedPostfix ();
395+ System .out .println ("Cached postfix tokens: " +cachedPostfix .length );
396+
397+ // Print all tokens
398+ for (int i = 0 ; i < cachedPostfix .length ; i ++) {
399+ MathExpression .Token t = cachedPostfix [i ];
400+ String desc = "" ;
401+ switch (t .kind ) {
402+ case 0 :
403+ desc = "NUMBER(" + t .value + ")" ;
404+ break ;
405+ case 1 :
406+ desc = "OPERATOR(" + t .opChar + ")" ;
407+ break ;
408+ case 2 :
409+ desc = "FUNCTION(" + t .name + ")" ;
410+ break ;
411+ case 3 :
412+ desc = "METHOD(" + t .name + ")" ;
413+ break ;
414+ default :
415+ desc = "OTHER(" + t .kind + ")" ;
416+ }
417+ System .out .println (" Token[" + i + "]: " + desc );
418+ }
419+
420+ // Verify folding
421+ Assertions .assertTrue (cachedPostfix .length <= 4 , "Should have at most 4 tokens" );
422+
423+ // Evaluate with variable
424+ expr .updateSlot (expr .registry .getSlot ("x" ), 0.0 );
425+ String result = expr .solve ();
426+ // Expected: 210 + sin(0) = 210
427+ double resultVal = Double .parseDouble (result );
428+ Assertions .assertEquals (210.0 , resultVal , 0.0001 );
429+
430+ expr .updateSlot (expr .registry .getSlot ("x" ), Math .PI / 2 );
431+ result = expr .solve ();
432+ // Expected: 210 + sin(π/2) = 210 + 1 = 211
433+ resultVal = Double .parseDouble (result );
434+ Assertions .assertEquals (211.0 , resultVal , 0.0001 );
435+ }
436+
390437}
0 commit comments