33 #ifdef exprtk_test_float32_type 39 typedef std::pair<std::string,numeric_type>
test_t;
57 test_t(
"1234.1234",1234.1234),
58 test_t(
"12345.12345",12345.12345),
59 test_t(
"123456.123456",123456.123456),
160 test_t(
"0.0E+0" ,+0.0E+0),
161 test_t(
"1.1E+1" ,+1.1E+1),
162 test_t(
"2.2E+2" ,+2.2E+2),
163 test_t(
"3.3E+3" ,+3.3E+3),
164 test_t(
"4.4E+4" ,+4.4E+4),
165 test_t(
"5.5E+5" ,+5.5E+5),
166 test_t(
"6.6E+6" ,+6.6E+6),
167 test_t(
"7.7E+7" ,+7.7E+7),
168 test_t(
"8.8E+8" ,+8.8E+8),
169 test_t(
"9.9E+9" ,+9.9E+9),
170 test_t(
"-0.0E+0",-0.0E+0),
171 test_t(
"-1.1E+1",-1.1E+1),
172 test_t(
"-2.2E+2",-2.2E+2),
173 test_t(
"-3.3E+3",-3.3E+3),
174 test_t(
"-4.4E+4",-4.4E+4),
175 test_t(
"-5.5E+5",-5.5E+5),
176 test_t(
"-6.6E+6",-6.6E+6),
177 test_t(
"-7.7E+7",-7.7E+7),
178 test_t(
"-8.8E+8",-8.8E+8),
179 test_t(
"-9.9E+9",-9.9E+9),
271 test_t(
"-(1.1+2.2)",-3.3),
272 test_t(
"1234567890",1234567890),
273 test_t(
"123456789.0",123456789.0),
274 test_t(
"+1234567890",1234567890),
275 test_t(
"+123456789.0",123456789.0),
276 test_t(
"-1234567890",-1234567890),
277 test_t(
"-123456789.0",-123456789.0),
278 test_t(
"1234.567890",1234.567890),
279 test_t(
"-1234.567890",-1234.567890),
340 test_t(
"123.*456.",+56088.0),
369 test_t(
"1.1+2.2+3.3",+6.6),
370 test_t(
"+1.1+2.2+3.3",+6.6),
371 test_t(
"-1.1-2.2-3.3",-6.6),
372 test_t(
"1.1*2.2*3.3",+7.986),
373 test_t(
"+1.1*2.2*3.3",+7.986),
374 test_t(
"-1.1*-2.2*-3.3",-7.986),
377 test_t(
"1.1 + 1.1/2.2",+1.6),
378 test_t(
"1.1 + (1.1/2.2)",+1.6),
381 test_t(
"2.2 * 1.1/2.2",+1.1),
382 test_t(
"2.2 * (1.1/2.2)",+1.1),
390 test_t(
"3^2^4",43046721.0),
391 test_t(
"1.1^2.2",1.23328630055466251099),
392 test_t(
"2.2^1.1",2.3804822576003541627),
393 test_t(
"2.2^3.3",13.48946876053338489127),
394 test_t(
"3.3^2.2^1.1",17.15193942371376191362),
395 test_t(
"+3.3^2.2^1.1",17.15193942371376191362),
396 test_t(
"3.3^+2.2^1.1",17.15193942371376191362),
397 test_t(
"3.3^2.2^+1.1",17.15193942371376191362),
398 test_t(
"3.3^2.2^-1.1",1.65127293793867959137),
399 test_t(
"+3.3^+2.2^-1.1",1.65127293793867959137),
400 test_t(
"1.1^(1.1 * 2.2)",1.25941916576299080582),
401 test_t(
"2.2^(1.1 * 3.3)",17.49823848953534759743),
402 test_t(
"3.3^(1.1 * 2.2)",17.98058156638874965269),
403 test_t(
"1.1^-2.2/1.1",0.73712884727743375853),
404 test_t(
"1.1^+2.2/1.1",1.121169364140602282717273261774),
405 test_t(
"1.1^2.2/+1.1",1.121169364140602282717273261774),
406 test_t(
"1.1^+2.2/+1.1",1.121169364140602282717273261774),
407 test_t(
"1.1^+2.2/-1.1",-1.121169364140602282717273261774),
408 test_t(
"1.1^2.2/-1.1",-1.121169364140602282717273261774),
409 test_t(
"1.1^+2.2/-1.1",-1.121169364140602282717273261774),
410 test_t(
"+1.1^-2.2/1.1",0.73712884727743375853),
411 test_t(
"+1.1^+2.2/1.1",1.121169364140602282717273261774),
412 test_t(
"+1.1^2.2/+1.1",1.121169364140602282717273261774),
413 test_t(
"+1.1^+2.2/+1.1",1.121169364140602282717273261774),
414 test_t(
"+1.1^+2.2/-1.1",-1.121169364140602282717273261774),
415 test_t(
"+1.1^2.2/-1.1",-1.121169364140602282717273261774),
416 test_t(
"+1.1^+2.2/-1.1",-1.121169364140602282717273261774),
417 test_t(
"equal(1.23^3,(1.23 * 1.23 * 1.23))",1.0),
418 test_t(
"equal(1.23^-3,1/(1.23 * 1.23 * 1.23))",1.0),
419 test_t(
"equal((2.1 + 1.23^3),(2.1 + [1.23 * 1.23 * 1.23]))",1.0),
420 test_t(
"equal((2.1 - 1.23^3),(2.1 - [1.23 * 1.23 * 1.23]))",1.0),
421 test_t(
"equal((2.1 * 1.23^3),(2.1 * [1.23 * 1.23 * 1.23]))",1.0),
422 test_t(
"equal((2.1 / 1.23^3),(2.1 / [1.23 * 1.23 * 1.23]))",1.0),
423 test_t(
"equal((1.23^3 + 2.1),({1.23 * 1.23 * 1.23} + 2.1))",1.0),
424 test_t(
"equal((1.23^3 - 2.1),({1.23 * 1.23 * 1.23} - 2.1))",1.0),
425 test_t(
"equal((1.23^3 * 2.1),({1.23 * 1.23 * 1.23} * 2.1))",1.0),
426 test_t(
"equal((1.23^3 / 2.1),({1.23 * 1.23 * 1.23} / 2.1))",1.0),
427 test_t(
"equal(1.0^(1.0/2.0),sqrt(1.0))",1.0),
428 test_t(
"equal(1.0^(1.0/2.0),root(1.0,2.0))",1.0),
429 test_t(
"equal(1.0^(1.0/3.0),root(1.0,3.0))",1.0),
430 test_t(
"equal(1.0^(1.0/4.0),root(1.0,4.0))",1.0),
431 test_t(
"equal(1.0^(1.0/5.0),root(1.0,5.0))",1.0),
432 test_t(
"equal(1.0^(1.0/6.0),root(1.0,6.0))",1.0),
433 test_t(
"equal(1.0^(1.0/7.0),root(1.0,7.0))",1.0),
434 test_t(
"equal(1.0^(1.0/8.0),root(1.0,8.0))",1.0),
435 test_t(
"equal(1.0^(1.0/9.0),root(1.0,9.0))",1.0),
436 test_t(
"equal(2.0^(1.0/2.0),sqrt(2.0))",1.0),
437 test_t(
"equal(2.0^(1.0/2.0),root(2.0,2.0))",1.0),
438 test_t(
"equal(3.0^(1.0/3.0),root(3.0,3.0))",1.0),
439 test_t(
"equal(4.0^(1.0/4.0),root(4.0,4.0))",1.0),
440 test_t(
"equal(5.0^(1.0/5.0),root(5.0,5.0))",1.0),
441 test_t(
"equal(6.0^(1.0/6.0),root(6.0,6.0))",1.0),
442 test_t(
"equal(7.0^(1.0/7.0),root(7.0,7.0))",1.0),
443 test_t(
"equal(8.0^(1.0/8.0),root(8.0,8.0))",1.0),
444 test_t(
"equal(9.0^(1.0/9.0),root(9.0,9.0))",1.0),
447 test_t(
"1.1 <= 2.2", 1.0),
448 test_t(
"(1.0 + 0.1) <= (2.0 + 0.2)", 1.0),
451 test_t(
"1.1 >= 2.2", 0.0),
452 test_t(
"(1.0 + 0.1) >= (2.0 + 0.2)", 0.0),
455 test_t(
"1.1 <> 2.2", 1.0),
456 test_t(
"1.1 != 2.2", 1.0),
457 test_t(
"(1.0 + 0.1) <> (2.0 + 0.2)", 1.0),
458 test_t(
"(1.0 + 0.1) != (2.0 + 0.2)", 1.0),
460 test_t(
"1.1 == 1.1", 1.0),
465 test_t(
"1.1 <> 1.1", 0.0),
466 test_t(
"1.1 != 1.1", 0.0),
467 test_t(
"(1.0 + 0.1) <> (1.0 + 0.1)", 0.0),
468 test_t(
"(1.0 + 0.1) != (1.0 + 0.1)", 0.0),
469 test_t(
"equal(1.1,1.1)",1.0),
470 test_t(
"equal(1.1,2.2)",0.0),
471 test_t(
"not_equal(1.1,1.1)",0.0),
472 test_t(
"not_equal(1.1,2.2)",1.0),
477 test_t(
"1.0 and 1.0",1.0),
478 test_t(
"1.0 and 0.0",0.0),
479 test_t(
"0.0 and 1.0",0.0),
480 test_t(
"0.0 and 0.0",0.0),
485 test_t(
"(1.0 and 1.0)",1.0),
486 test_t(
"(1.0 and 0.0)",0.0),
487 test_t(
"(0.0 and 1.0)",0.0),
488 test_t(
"(0.0 and 0.0)",0.0),
501 test_t(
"(1.0 or 1.0)",1.0),
502 test_t(
"(1.0 or 0.0)",1.0),
503 test_t(
"(0.0 or 1.0)",1.0),
504 test_t(
"(0.0 or 0.0)",0.0),
509 test_t(
"1.0 nand 1.0",0.0),
510 test_t(
"1.0 nand 0.0",1.0),
511 test_t(
"0.0 nand 1.0",1.0),
512 test_t(
"0.0 nand 0.0",1.0),
517 test_t(
"(1.0 nand 1.0)",0.0),
518 test_t(
"(1.0 nand 0.0)",1.0),
519 test_t(
"(0.0 nand 1.0)",1.0),
520 test_t(
"(0.0 nand 0.0)",1.0),
525 test_t(
"1.0 nor 1.0",0.0),
526 test_t(
"1.0 nor 0.0",0.0),
527 test_t(
"0.0 nor 1.0",0.0),
528 test_t(
"0.0 nor 0.0",1.0),
533 test_t(
"(1.0 nor 1.0)",0.0),
534 test_t(
"(1.0 nor 0.0)",0.0),
535 test_t(
"(0.0 nor 1.0)",0.0),
536 test_t(
"(0.0 nor 0.0)",1.0),
541 test_t(
"0.0 xor 0.0",0.0),
542 test_t(
"0.0 xor 1.0",1.0),
543 test_t(
"1.0 xor 0.0",1.0),
544 test_t(
"1.0 xor 1.0",0.0),
549 test_t(
"(0.0 xor 0.0)",0.0),
550 test_t(
"(0.0 xor 1.0)",1.0),
551 test_t(
"(1.0 xor 0.0)",1.0),
552 test_t(
"(1.0 xor 1.0)",0.0),
565 test_t(
"(1.0 & 1.0)",1.0),
566 test_t(
"(1.0 & 0.0)",0.0),
567 test_t(
"(0.0 & 1.0)",0.0),
568 test_t(
"(0.0 & 0.0)",0.0),
581 test_t(
"(1.0 | 1.0)",1.0),
582 test_t(
"(1.0 | 0.0)",1.0),
583 test_t(
"(0.0 | 1.0)",1.0),
584 test_t(
"(0.0 | 0.0)",0.0),
585 test_t(
"(1 nand 1) == not(1 and 1)",1.0),
586 test_t(
"(1 nand 0) == not(1 and 0)",1.0),
587 test_t(
"(0 nand 1) == not(0 and 1)",1.0),
588 test_t(
"(0 nand 0) == not(0 and 0)",1.0),
589 test_t(
"(1 nor 1) == not(1 or 1)",1.0),
590 test_t(
"(1 nor 0) == not(1 or 0)",1.0),
591 test_t(
"(0 nor 1) == not(0 or 1)",1.0),
592 test_t(
"(0 nor 0) == not(0 or 0)",1.0),
593 test_t(
"(1.0 nand 1.0) == not(1.0 and 1.0)",1.0),
594 test_t(
"(1.0 nand 0.0) == not(1.0 and 0.0)",1.0),
595 test_t(
"(0.0 nand 1.0) == not(0.0 and 1.0)",1.0),
596 test_t(
"(0.0 nand 0.0) == not(0.0 and 0.0)",1.0),
597 test_t(
"(1.0 nor 1.0) == not(1.0 or 1.0)",1.0),
598 test_t(
"(1.0 nor 0.0) == not(1.0 or 0.0)",1.0),
599 test_t(
"(0.0 nor 1.0) == not(0.0 or 1.0)",1.0),
600 test_t(
"(0.0 nor 0.0) == not(0.0 or 0.0)",1.0),
601 test_t(
"(1 nand 1) == not(1 & 1)",1.0),
602 test_t(
"(1 nand 0) == not(1 & 0)",1.0),
603 test_t(
"(0 nand 1) == not(0 & 1)",1.0),
604 test_t(
"(0 nand 0) == not(0 & 0)",1.0),
605 test_t(
"(1 nor 1) == not(1 | 1)",1.0),
606 test_t(
"(1 nor 0) == not(1 | 0)",1.0),
607 test_t(
"(0 nor 1) == not(0 | 1)",1.0),
608 test_t(
"(0 nor 0) == not(0 | 0)",1.0),
609 test_t(
"(1.0 nand 1.0) == not(1.0 & 1.0)",1.0),
610 test_t(
"(1.0 nand 0.0) == not(1.0 & 0.0)",1.0),
611 test_t(
"(0.0 nand 1.0) == not(0.0 & 1.0)",1.0),
612 test_t(
"(0.0 nand 0.0) == not(0.0 & 0.0)",1.0),
613 test_t(
"(1.0 nor 1.0) == not(1.0 | 1.0)",1.0),
614 test_t(
"(1.0 nor 0.0) == not(1.0 | 0.0)",1.0),
615 test_t(
"(0.0 nor 1.0) == not(0.0 | 1.0)",1.0),
616 test_t(
"(0.0 nor 0.0) == not(0.0 | 0.0)",1.0),
621 test_t(
"mand(1.0,1.0)",1.0),
622 test_t(
"mand(1.0,0.0)",0.0),
623 test_t(
"mand(0.0,1.0)",0.0),
624 test_t(
"mand(0.0,0.0)",0.0),
629 test_t(
"mor(1.0,1.0)",1.0),
630 test_t(
"mor(1.0,0.0)",1.0),
631 test_t(
"mor(0.0,1.0)",1.0),
632 test_t(
"mor(0.0,0.0)",0.0),
633 test_t(
"(1 nand 1) == not(mand(1,1))",1.0),
634 test_t(
"(1 nand 0) == not(mand(1,0))",1.0),
635 test_t(
"(0 nand 1) == not(mand(0,1))",1.0),
636 test_t(
"(0 nand 0) == not(mand(0,0))",1.0),
637 test_t(
"(1 nor 1) == not(mor(1,1))",1.0),
638 test_t(
"(1 nor 0) == not(mor(1,0))",1.0),
639 test_t(
"(0 nor 1) == not(mor(0,1))",1.0),
640 test_t(
"(0 nor 0) == not(mor(0,0))",1.0),
641 test_t(
"(1.0 nand 1.0) == not(mand(1.0,1.0))",1.0),
642 test_t(
"(1.0 nand 0.0) == not(mand(1.0,0.0))",1.0),
643 test_t(
"(0.0 nand 1.0) == not(mand(0.0,1.0))",1.0),
644 test_t(
"(0.0 nand 0.0) == not(mand(0.0,0.0))",1.0),
645 test_t(
"(1.0 nor 1.0) == not(mor(1.0,1.0))",1.0),
646 test_t(
"(1.0 nor 0.0) == not(mor(1.0,0.0))",1.0),
647 test_t(
"(0.0 nor 1.0) == not(mor(0.0,1.0))",1.0),
648 test_t(
"(0.0 nor 0.0) == not(mor(0.0,0.0))",1.0),
655 test_t(
"min(1,2,3,4)",1.0),
656 test_t(
"min(1,2,3,4,5)",1.0),
657 test_t(
"min(1,2,3,4,5,6)",1.0),
658 test_t(
"min(1.1,2.2)",1.1),
659 test_t(
"min(1.1,2.2,3.3)",1.1),
660 test_t(
"min(1.1,2.2,3.3,4.4)",1.1),
661 test_t(
"min(1.1,2.2,3.3,4.4,5.5)",1.1),
662 test_t(
"min(1.1,2.2,3.3,4.4,5.5,6.6)",1.1),
663 test_t(
"min(min(1,2),min(3,4))",1.0),
666 test_t(
"max(1,2,3,4)",4.0),
667 test_t(
"max(1,2,3,4,5)",5.0),
668 test_t(
"max(1,2,3,4,5,6)",6.0),
669 test_t(
"max(1.1,2.2)",2.2),
670 test_t(
"max(1.1,2.2,3.3)",3.3),
671 test_t(
"max(1.1,2.2,3.3,4.4)",4.4),
672 test_t(
"max(1.1,2.2,3.3,4.4,5.5)",5.5),
673 test_t(
"max(1.1,2.2,3.3,4.4,5.5,6.6)",6.6),
674 test_t(
"max(max(1,2),max(3,4))",4.0),
677 test_t(
"avg(1,2,3,4)",2.5),
678 test_t(
"avg(1,2,3,4,5)",3.0),
679 test_t(
"avg(1.1,2.2)",1.65),
680 test_t(
"avg(1.1,2.2,3.3)",2.2),
681 test_t(
"avg(1.1,2.2,3.3,4.4)",2.75),
682 test_t(
"avg(1.1,2.2,3.3,4.4,5.5)",3.3),
683 test_t(
"avg(1.1,2.2,3.3,4.4,5.5,6.6)",3.85),
686 test_t(
"sum(1,2,3,4)",10),
687 test_t(
"sum(1,2,3,4,5)",15.0),
688 test_t(
"sum(1,2,3,4,5,6)",21),
689 test_t(
"sum(1.1,2.2)",3.3),
690 test_t(
"sum(1.1,2.2,3.3)",6.6),
691 test_t(
"sum(1.1,2.2,3.3,4.4)",11.0),
692 test_t(
"sum(1.1,2.2,3.3,4.4,5.5)",16.5),
693 test_t(
"sum(1.1,2.2,3.3,4.4,5.5,6.6)",23.1),
696 test_t(
"mul(1,2,3,4)",24.0),
697 test_t(
"mul(1,2,3,4,5)",120.0),
698 test_t(
"mul(1,2,3,4,5,6)",720.0),
699 test_t(
"mul(1.1,2.2)",2.42),
700 test_t(
"mul(1.1,2.2,3.3)",7.986),
701 test_t(
"mul(1.1,2.2,3.3,4.4)",35.1384),
702 test_t(
"mul(1.1,2.2,3.3,4.4,5.5)",193.2612),
703 test_t(
"mul(1.1,2.2,3.3,4.4,5.5,6.6)",1275.52392),
704 test_t(
"equal(sum(1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9),(1.1+2.2+3.3+4.4+5.5+6.6+7.7+8.8+9.9))",1.0),
705 test_t(
"equal(mul(1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9),(1.1*2.2*3.3*4.4*5.5*6.6*7.7*8.8*9.9))",1.0),
706 test_t(
"equal(min(1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9),1.1)",1.0),
707 test_t(
"equal(max(1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9),9.9)",1.0),
708 test_t(
"equal(avg(1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9),5.5)",1.0),
711 test_t(
"floor(-1.0)",-1.0),
712 test_t(
"floor(-1.1)",-2.0),
715 test_t(
"ceil(-1.0)",-1.0),
716 test_t(
"ceil(-1.1)",-1.0),
718 test_t(
"round(1.49)",1.0),
721 test_t(
"roundn(1/3,2)",0.33),
722 test_t(
"roundn(1/3,5)",0.33333),
723 test_t(
"roundn(2/3,2)",0.67),
724 test_t(
"roundn(2/3,5)",0.66667),
725 test_t(
"roundn(1.0/3.0,2.0)",0.33),
726 test_t(
"roundn(1.0/3.0,5.0)",0.33333),
727 test_t(
"roundn(2.0/3.0,2.0)",0.67),
728 test_t(
"roundn(2.0/3.0,5.0)",0.66667),
731 test_t(
"equal(sin(pi/4.0),cos(pi/4.0))",1.0),
732 test_t(
"equal(sin(pi/6.0),cos(pi/3.0))",1.0),
733 test_t(
"(sin(pi/4.0) - cos(pi/4.0)) <= epsilon",1.0),
734 test_t(
"(cos(pi/3.0) - sin(pi/6.0)) <= epsilon",1.0),
735 test_t(
"sin(deg2rad(30))",0.5),
736 test_t(
"cos(deg2rad(60))",0.5),
737 test_t(
"sin(deg2rad(30)) + cos(deg2rad(60))",1.0),
738 test_t(
"equal(sin(deg2rad(30))/cos(deg2rad(30)),tan(deg2rad(30)))",1.0),
739 test_t(
"equal(sinh(pi),11.5487393572577483779773343153884) ",1.0),
740 test_t(
"equal(asinh(11.5487393572577483779773343153884),pi)",1.0),
741 test_t(
"equal(cosh(pi),11.5919532755215206277517520525601) ",1.0),
742 test_t(
"equal(acosh(11.5919532755215206277517520525601),pi)",1.0),
743 test_t(
"equal(tanh(pi),0.99627207622074994426469058001253) ",1.0),
744 test_t(
"equal(atanh(0.99627207622074994426469058001253),pi)",1.0),
745 test_t(
"exp(1.0)",2.71828182845904523536028747135266249775724),
747 test_t(
"log(2.7182818284590451)",1.0),
748 test_t(
"log10(10.0)",1.0),
749 test_t(
"frac(12.34) + trunc(12.34)",12.34),
750 test_t(
"hypot(3.0,4.0)",5.0),
751 test_t(
"hypot(1.0,sqrt(3.0))",2.0),
752 test_t(
"if(1 < 2, 3, 4)",3.0),
753 test_t(
"if(1.1 < 2.2, 3.3, 4.4)",3.3),
754 test_t(
"if((1.0+1.1) < (2.0+1.2), 3.3, 4.4)",3.3),
755 test_t(
"if(1 = 2, 3, 4)",4.0),
756 test_t(
"if(1.1 = 2.2, 3.3, 4.4)",4.4),
757 test_t(
"if((1.0+1.1) = (2.0+1.2), 3.3, 4.4)",4.4),
758 test_t(
"if(1 == 2, 3, 4)",4.0),
759 test_t(
"if(1.1 == 2.2, 3.3, 4.4)",4.4),
760 test_t(
"if((1.0+1.1) == (2.0+1.2), 3.3, 4.4)",4.4),
761 test_t(
"if(1 >= 2, 3, 4)",4.0),
762 test_t(
"if(1.1 >= 2.2, 3.3, 4.4)",4.4),
763 test_t(
"if((1.0+1.1) >= (2.0+1.2), 3.3, 4.4)",4.4),
764 test_t(
"if(((1.0 + 2.0) == 3.0) and ((4.0 + 5.0) < 9.0),1,2)",2.0),
765 test_t(
"(3.0 - 1.0 - 2.0) == ((3.0 - 1.0) - 2.0)",1.0),
766 test_t(
"true == true",1.0),
767 test_t(
"false == false",1.0),
768 test_t(
"true != false",1.0),
769 test_t(
"false != true",1.0),
770 test_t(
"(1 < 2) == true",1.0),
771 test_t(
"(1 > 2) == false",1.0),
772 test_t(
"true == (1 < 2)",1.0),
773 test_t(
"false == (1 > 2)",1.0),
774 test_t(
"(1 > 2) != true",1.0),
775 test_t(
"(1 < 2) != false",1.0),
776 test_t(
"true != (1 > 2)",1.0),
777 test_t(
"false != (1 < 2)",1.0),
778 test_t(
"(true and true) == true",1.0),
779 test_t(
"(false and false) == false",1.0),
780 test_t(
"(true or true) == true",1.0),
781 test_t(
"(false or false) == false",1.0),
782 test_t(
"(true and false) == false",1.0),
783 test_t(
"(false and true) == false",1.0),
784 test_t(
"(true or false) == true",1.0),
785 test_t(
"(false or true) == true",1.0),
786 test_t(
"(true & true) == true",1.0),
787 test_t(
"(false & false) == false",1.0),
788 test_t(
"(true | true) == true",1.0),
789 test_t(
"(false | false) == false",1.0),
790 test_t(
"(true & false) == false",1.0),
791 test_t(
"(false & true) == false",1.0),
792 test_t(
"(true | false) == true",1.0),
793 test_t(
"(false | true) == true",1.0),
794 test_t(
"clamp(-1,1,+1)",1.0),
795 test_t(
"clamp(-1,-1.5,+1.0)",-1.0),
796 test_t(
"clamp(-1,+1.5,+1.0)",+1.0),
797 test_t(
"clamp(-1,-1.5,+1.0) + clamp(-1,+1.5,+1.0)",0.0),
798 test_t(
"inrange(-2,1,+2) == ((-2 <= 1) and (1 <= +2))",1.0),
799 test_t(
"inrange(-2,1,+2) == if(({-2 <= 1} and [1 <= +2]),1.0,0.0)",1.0),
803 test_t(
"equal($f00(1.1,2.2,3.3),(1.1+2.2)/3.3)",1.0),
804 test_t(
"equal($f01(1.1,2.2,3.3),(1.1+2.2)*3.3)",1.0),
805 test_t(
"equal($f02(1.1,2.2,3.3),(1.1+2.2)-3.3)",1.0),
806 test_t(
"equal($f03(1.1,2.2,3.3),(1.1+2.2)+3.3)",1.0),
807 test_t(
"equal($f04(1.1,2.2,3.3),(1.1-2.2)+3.3)",1.0),
808 test_t(
"equal($f05(1.1,2.2,3.3),(1.1-2.2)/3.3)",1.0),
809 test_t(
"equal($f06(1.1,2.2,3.3),(1.1-2.2)*3.3)",1.0),
810 test_t(
"equal($f07(1.1,2.2,3.3),(1.1*2.2)+3.3)",1.0),
811 test_t(
"equal($f08(1.1,2.2,3.3),(1.1*2.2)-3.3)",1.0),
812 test_t(
"equal($f09(1.1,2.2,3.3),(1.1*2.2)/3.3)",1.0),
813 test_t(
"equal($f10(1.1,2.2,3.3),(1.1*2.2)*3.3)",1.0),
814 test_t(
"equal($f11(1.1,2.2,3.3),(1.1/2.2)+3.3)",1.0),
815 test_t(
"equal($f12(1.1,2.2,3.3),(1.1/2.2)-3.3)",1.0),
816 test_t(
"equal($f13(1.1,2.2,3.3),(1.1/2.2)/3.3)",1.0),
817 test_t(
"equal($f14(1.1,2.2,3.3),(1.1/2.2)*3.3)",1.0),
818 test_t(
"equal($f15(1.1,2.2,3.3),1.1/(2.2+3.3))",1.0),
819 test_t(
"equal($f16(1.1,2.2,3.3),1.1/(2.2-3.3))",1.0),
820 test_t(
"equal($f17(1.1,2.2,3.3),1.1/(2.2*3.3))",1.0),
821 test_t(
"equal($f18(1.1,2.2,3.3),1.1/(2.2/3.3))",1.0),
822 test_t(
"equal($f19(1.1,2.2,3.3),1.1*(2.2+3.3))",1.0),
823 test_t(
"equal($f20(1.1,2.2,3.3),1.1*(2.2-3.3))",1.0),
824 test_t(
"equal($f21(1.1,2.2,3.3),1.1*(2.2*3.3))",1.0),
825 test_t(
"equal($f22(1.1,2.2,3.3),1.1*(2.2/3.3))",1.0),
826 test_t(
"equal($f23(1.1,2.2,3.3),1.1-(2.2+3.3))",1.0),
827 test_t(
"equal($f24(1.1,2.2,3.3),1.1-(2.2-3.3))",1.0),
828 test_t(
"equal($f25(1.1,2.2,3.3),1.1-(2.2/3.3))",1.0),
829 test_t(
"equal($f26(1.1,2.2,3.3),1.1-(2.2*3.3))",1.0),
830 test_t(
"equal($f27(1.1,2.2,3.3),1.1+(2.2*3.3))",1.0),
831 test_t(
"equal($f28(1.1,2.2,3.3),1.1+(2.2/3.3))",1.0),
832 test_t(
"equal($f29(1.1,2.2,3.3),1.1+(2.2+3.3))",1.0),
833 test_t(
"equal($f30(1.1,2.2,3.3),1.1+(2.2-3.3))",1.0),
834 test_t(
"equal($f31(1.1,2.2,3.3),1.1*2.2^2+3.3)",1.0),
835 test_t(
"equal($f32(1.1,2.2,3.3),1.1*2.2^3+3.3)",1.0),
836 test_t(
"equal($f33(1.1,2.2,3.3),1.1*2.2^4+3.3)",1.0),
837 test_t(
"equal($f34(1.1,2.2,3.3),1.1*2.2^5+3.3)",1.0),
838 test_t(
"equal($f35(1.1,2.2,3.3),1.1*2.2^6+3.3)",1.0),
839 test_t(
"equal($f36(1.1,2.2,3.3),1.1*2.2^7+3.3)",1.0),
840 test_t(
"equal($f37(1.1,2.2,3.3),1.1*2.2^8+3.3)",1.0),
841 test_t(
"equal($f38(1.1,2.2,3.3),1.1*2.2^9+3.3)",1.0),
842 test_t(
"equal($f39(1.1,2.2,3.3),1.1*log(2.2)+3.3)",1.0),
843 test_t(
"equal($f40(1.1,2.2,3.3),1.1*log(2.2)-3.3)",1.0),
844 test_t(
"equal($f41(1.1,2.2,3.3),1.1*log10(2.2)+3.3)",1.0),
845 test_t(
"equal($f42(1.1,2.2,3.3),1.1*log10(2.2)-3.3)",1.0),
846 test_t(
"equal($f43(1.1,2.2,3.3),1.1*sin(2.2)+3.3)",1.0),
847 test_t(
"equal($f44(1.1,2.2,3.3),1.1*sin(2.2)-3.3)",1.0),
848 test_t(
"equal($f45(1.1,2.2,3.3),1.1*cos(2.2)+3.3)",1.0),
849 test_t(
"equal($f46(1.1,2.2,3.3),1.1*cos(2.2)-3.3)",1.0),
850 test_t(
"equal($f47(1.1,2.2,3.3),if(0!=1.1,2.2,3.3))",1.0),
851 test_t(
"equal($f48(1.1,2.2,3.3,4.4),1.1+((2.2+3.3)/4.4))",1.0),
852 test_t(
"equal($f49(1.1,2.2,3.3,4.4),1.1+((2.2+3.3)*4.4))",1.0),
853 test_t(
"equal($f50(1.1,2.2,3.3,4.4),1.1+((2.2-3.3)/4.4))",1.0),
854 test_t(
"equal($f51(1.1,2.2,3.3,4.4),1.1+((2.2-3.3)*4.4))",1.0),
855 test_t(
"equal($f52(1.1,2.2,3.3,4.4),1.1+((2.2*3.3)/4.4))",1.0),
856 test_t(
"equal($f53(1.1,2.2,3.3,4.4),1.1+((2.2*3.3)*4.4))",1.0),
857 test_t(
"equal($f54(1.1,2.2,3.3,4.4),1.1+((2.2/3.3)+4.4))",1.0),
858 test_t(
"equal($f55(1.1,2.2,3.3,4.4),1.1+((2.2/3.3)/4.4))",1.0),
859 test_t(
"equal($f56(1.1,2.2,3.3,4.4),1.1+((2.2/3.3)*4.4))",1.0),
860 test_t(
"equal($f57(1.1,2.2,3.3,4.4),1.1-((2.2+3.3)/4.4))",1.0),
861 test_t(
"equal($f58(1.1,2.2,3.3,4.4),1.1-((2.2+3.3)*4.4))",1.0),
862 test_t(
"equal($f59(1.1,2.2,3.3,4.4),1.1-((2.2-3.3)/4.4))",1.0),
863 test_t(
"equal($f60(1.1,2.2,3.3,4.4),1.1-((2.2-3.3)*4.4))",1.0),
864 test_t(
"equal($f61(1.1,2.2,3.3,4.4),1.1-((2.2*3.3)/4.4))",1.0),
865 test_t(
"equal($f62(1.1,2.2,3.3,4.4),1.1-((2.2*3.3)*4.4))",1.0),
866 test_t(
"equal($f63(1.1,2.2,3.3,4.4),1.1-((2.2/3.3)/4.4))",1.0),
867 test_t(
"equal($f64(1.1,2.2,3.3,4.4),1.1-((2.2/3.3)*4.4))",1.0),
868 test_t(
"equal($f65(1.1,2.2,3.3,4.4),((1.1+2.2)*3.3)-4.4)",1.0),
869 test_t(
"equal($f66(1.1,2.2,3.3,4.4),((1.1-2.2)*3.3)-4.4)",1.0),
870 test_t(
"equal($f67(1.1,2.2,3.3,4.4),((1.1*2.2)*3.3)-4.4)",1.0),
871 test_t(
"equal($f68(1.1,2.2,3.3,4.4),((1.1/2.2)*3.3)-4.4)",1.0),
872 test_t(
"equal($f69(1.1,2.2,3.3,4.4),((1.1+2.2)/3.3)-4.4)",1.0),
873 test_t(
"equal($f70(1.1,2.2,3.3,4.4),((1.1-2.2)/3.3)-4.4)",1.0),
874 test_t(
"equal($f71(1.1,2.2,3.3,4.4),((1.1*2.2)/3.3)-4.4)",1.0),
875 test_t(
"equal($f72(1.1,2.2,3.3,4.4),((1.1/2.2)/3.3)-4.4)",1.0),
876 test_t(
"equal($f73(1.1,2.2,3.3,4.4),(1.1*2.2)+(3.3*4.4))",1.0),
877 test_t(
"equal($f74(1.1,2.2,3.3,4.4),(1.1*2.2)-(3.3*4.4))",1.0),
878 test_t(
"equal($f75(1.1,2.2,3.3,4.4),(1.1*2.2)+(3.3/4.4))",1.0),
879 test_t(
"equal($f76(1.1,2.2,3.3,4.4),(1.1*2.2)-(3.3/4.4))",1.0),
880 test_t(
"equal($f77(1.1,2.2,3.3,4.4),(1.1/2.2)+(3.3/4.4))",1.0),
881 test_t(
"equal($f78(1.1,2.2,3.3,4.4),(1.1/2.2)-(3.3/4.4))",1.0),
882 test_t(
"equal($f79(1.1,2.2,3.3,4.4),(1.1/2.2)-(3.3*4.4))",1.0),
883 test_t(
"equal($f80(1.1,2.2,3.3,4.4),1.1/(2.2+(3.3*4.4)))",1.0),
884 test_t(
"equal($f81(1.1,2.2,3.3,4.4),1.1/(2.2-(3.3*4.4)))",1.0),
885 test_t(
"equal($f82(1.1,2.2,3.3,4.4),1.1*(2.2+(3.3*4.4)))",1.0),
886 test_t(
"equal($f83(1.1,2.2,3.3,4.4),1.1*(2.2-(3.3*4.4)))",1.0),
887 test_t(
"equal($f84(1.1,2.2,3.3,4.4),1.1*2.2^2+3.3*4.4^2)",1.0),
888 test_t(
"equal($f85(1.1,2.2,3.3,4.4),1.1*2.2^3+3.3*4.4^3)",1.0),
889 test_t(
"equal($f86(1.1,2.2,3.3,4.4),1.1*2.2^4+3.3*4.4^4)",1.0),
890 test_t(
"equal($f87(1.1,2.2,3.3,4.4),1.1*2.2^5+3.3*4.4^5)",1.0),
891 test_t(
"equal($f88(1.1,2.2,3.3,4.4),1.1*2.2^6+3.3*4.4^6)",1.0),
892 test_t(
"equal($f89(1.1,2.2,3.3,4.4),1.1*2.2^7+3.3*4.4^7)",1.0),
893 test_t(
"equal($f90(1.1,2.2,3.3,4.4),1.1*2.2^8+3.3*4.4^8)",1.0),
894 test_t(
"equal($f91(1.1,2.2,3.3,4.4),1.1*2.2^9+3.3*4.4^9)",1.0),
895 test_t(
"equal($f92(1.1,2.2,3.3,4.4),if(1.1 and 2.2,3.3,4.4))",1.0),
896 test_t(
"equal($f93(1.1,2.2,3.3,4.4),if(1.1 or 2.2,3.3,4.4))",1.0),
897 test_t(
"equal($f94(1.1,2.2,3.3,4.4),if(1.1 < 2.2,3.3,4.4))",1.0),
898 test_t(
"equal($f95(1.1,2.2,3.3,4.4),if(1.1 <= 2.2,3.3,4.4))",1.0),
899 test_t(
"equal($f96(1.1,2.2,3.3,4.4),if(1.1 > 2.2,3.3,4.4))",1.0),
900 test_t(
"equal($f97(1.1,2.2,3.3,4.4),if(1.1 >= 2.2,3.3,4.4))",1.0),
901 test_t(
"equal($f98(1.1,2.2,3.3,4.4),if(equal(1.1,2.2),3.3,4.4))",1.0),
902 test_t(
"equal($f99(1.1,2.2,3.3,4.4),1.1*sin(2.2)+3.3*cos(4.4))",1.0),
903 test_t(
"equal((48.0/2.0*(9.0+3.0)),288.0)",1.0),
904 test_t(
"equal((48.0/2.0(9.0+3.0)),288.0)",1.0),
905 test_t(
"equal((6.0/2.0(1.0+2.0)),9.0)",1.0),
906 test_t(
"1+2+3+4+5+6+7+8+9+0",45.0),
907 test_t(
"1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 0",45.0),
908 test_t(
"1.0 + 2.0 + 3.0 + 4.0 + 5.0 + 6.0 + 7.0 + 8.0 + 9.0 + 0.0",45.0),
909 test_t(
"(1+2)+(3+4)+(5+6)+(7+8)+(9+0)",45.0),
910 test_t(
"(1-2)+(3-4)+(5-6)+(7-8)+(9-0)",+5.0),
911 test_t(
"(1+2)-(3+4)-(5+6)-(7+8)-(9+0)",-39.0),
912 test_t(
"(1.0+2.0)+(3.0+4.0)+(5.0+6.0)+(7.0+8.0)+(9.0+0.0)",45.0),
913 test_t(
"(1.0-2.0)+(3.0-4.0)+(5.0-6.0)+(7.0-8.0)+(9.0-0.0)",+5.0),
914 test_t(
"(1.0+2.0)-(3.0+4.0)-(5.0+6.0)-(7.0+8.0)-(9.0+0.0)",-39.0),
915 test_t(
"[(1.0+2.0)+[3.0+4.0]+(5.0+6.0)]+([7.0+8.0]+(9.0+0.0))",45.0),
916 test_t(
"([1.0-2.0]+(3.0-4.0)+[5.0-6.0])+[(7.0-8.0)+[9.0-0.0]]",+5.0),
917 test_t(
"((1.0+2.0))-[(3.0+4.0)]-((5.0+6.0))-[(7.0+8.0)]-((9.0+0.0))",-39.0),
918 test_t(
"{[(1.0+2.0)+[3.0+4.0]+({5.0+6.0})]}+({[7.0+8.0]+(9.0+0.0)})",45.0),
919 test_t(
"{([1.0-2.0]+(3.0-4.0)+[5.0-6.0])}+[({+7.0}-{+8.0})+[{+9.0-0.0}]]",+5.0),
920 test_t(
"((+1.0+2.0))-[({+3.0+4.0})]-(({+5.0+6.0}))-[({+7.0}+8.0)]-(({+9.0}+{0.0}))",-39.0),
921 test_t(
"1+2-3*4/5+6-7*8/9+0",0.37777777777777777778),
922 test_t(
"1.1+2.2-3.3*4.4/5.5+6.6-7.7*8.8/9.9+0.0",0.41555555555555555556),
923 test_t(
"(1+2)-(3*4)/(5+6)-(7*8)/(9+0)",-4.31313131313131313131),
924 test_t(
"1/1+1/2+1/3+1/4+1/5+1/6+1/7+1/8+1/9",2.82896825396825396825),
925 test_t(
"(1/1)+(1/2)+(1/3)+(1/4)+(1/5)+(1/6)+(1/7)+(1/8)+(1/9)",2.82896825396825396825),
926 test_t(
"1.0/1.0+1.0/2.0+1.0/3.0+1.0/4.0+1.0/5.0+1.0/6.0+1.0/7.0+1.0/8.0+1.0/9",2.82896825396825396825),
927 test_t(
"(1.0/1.0)+(1.0/2.0)+(1.0/3.0)+(1.0/4.0)+(1.0/5.0)+(1.0/6.0)+(1.0/7.0)+(1.0/8.0)+(1.0/9)",2.82896825396825396825),
928 test_t(
"1/1*1/2*1/3*1/4*1/5*1/6*1/7*1/8*1/9",0.00000275573192239859),
929 test_t(
"(1/1)*(1/2)*(1/3)*(1/4)*(1/5)*(1/6)*(1/7)*(1/8)*(1/9)",0.00000275573192239859),
930 test_t(
"1.0/1.0*1.0/2.0*1.0/3.0*1.0/4.0*1.0/5.0*1.0/6.0*1.0/7.0*1.0/8.0*1.0/9",0.00000275573192239859),
931 test_t(
"(1.0/1.0)*(1.0/2.0)*(1.0/3.0)*(1.0/4.0)*(1.0/5.0)*(1.0/6.0)*(1.0/7.0)*(1.0/8.0)*(1.0/9)",0.00000275573192239859),
932 test_t(
"equal(poly01(1.2345,2.2,1.1),(2.2*1.2345^1+1.1))",1.0),
933 test_t(
"equal(poly02(1.2345,3.3,2.2,1.1),(3.3*1.2345^2+2.2*1.2345^1+1.1))",1.0),
934 test_t(
"equal(poly03(1.2345,4.4,3.3,2.2,1.1),(4.4*1.2345^3+3.3*1.2345^2+2.2*1.2345^1+1.1))",1.0),
935 test_t(
"equal(poly04(1.2345,5.5,4.4,3.3,2.2,1.1),(5.5*1.2345^4+4.4*1.2345^3+3.3*1.2345^2+2.2*1.2345^1+1.1))",1.0),
936 test_t(
"equal(poly05(1.2345,6.6,5.5,4.4,3.3,2.2,1.1),(6.6*1.2345^5+5.5*1.2345^4+4.4*1.2345^3+3.3*1.2345^2+2.2*1.2345^1+1.1))",1.0),
937 test_t(
"equal(poly06(1.2345,7.7,6.6,5.5,4.4,3.3,2.2,1.1),(7.7*1.2345^6+6.6*1.2345^5+5.5*1.2345^4+4.4*1.2345^3+3.3*1.2345^2+2.2*1.2345^1+1.1))",1.0),
938 test_t(
"equal(poly07(1.2345,8.8,7.7,6.6,5.5,4.4,3.3,2.2,1.1),(8.8*1.2345^7+7.7*1.2345^6+6.6*1.2345^5+5.5*1.2345^4+4.4*1.2345^3+3.3*1.2345^2+2.2*1.2345^1+1.1))",1.0),
939 test_t(
"equal(poly08(1.2345,9.9,8.8,7.7,6.6,5.5,4.4,3.3,2.2,1.1),(9.9*1.2345^8+8.8*1.2345^7+7.7*1.2345^6+6.6*1.2345^5+5.5*1.2345^4+4.4*1.2345^3+3.3*1.2345^2+2.2*1.2345^1+1.1))",1.0),
940 test_t(
"equal(poly09(1.2345,1.1,9.9,8.8,7.7,6.6,5.5,4.4,3.3,2.2,1.1),(1.1*1.2345^9+9.9*1.2345^8+8.8*1.2345^7+7.7*1.2345^6+6.6*1.2345^5+5.5*1.2345^4+4.4*1.2345^3+3.3*1.2345^2+2.2*1.2345^1+1.1))",1.0),
941 test_t(
"equal(poly10(1.37,2.2,1.1,9.9,8.8,7.7,6.6,5.5,4.4,3.3,2.2,1.1),(2.2*1.37^10+1.1*1.37^9+9.9*1.37^8+8.8*1.37^7+7.7*1.37^6+6.6*1.37^5+5.5*1.37^4+4.4*1.37^3+3.3*1.37^2+2.2*1.37^1+1.1))",1.0),
942 test_t(
"equal(poly11(1.37,3.3,2.2,1.1,9.9,8.8,7.7,6.6,5.5,4.4,3.3,2.2,1.1),(3.3*1.37^11+2.2*1.37^10+1.1*1.37^9+9.9*1.37^8+8.8*1.37^7+7.7*1.37^6+6.6*1.37^5+5.5*1.37^4+4.4*1.37^3+3.3*1.37^2+2.2*1.37^1+1.1))",1.0),
943 test_t(
"equal(poly12(1.37,4.4,3.3,2.2,1.1,9.9,8.8,7.7,6.6,5.5,4.4,3.3,2.2,1.1),(4.4*1.37^12+3.3*1.37^11+2.2*1.37^10+1.1*1.37^9+9.9*1.37^8+8.8*1.37^7+7.7*1.37^6+6.6*1.37^5+5.5*1.37^4+4.4*1.37^3+3.3*1.37^2+2.2*1.37^1+1.1))",1.0),
944 test_t(
"equal(\t \n(\n \r1.1\t\t - \n\n 2.2\n\n/\r3.3\t),(1.1-2.2/3.3))",1.0),
945 test_t(
"equal((pi^2^3),(pi^8))",1.0),
946 test_t(
"equal((pi^(2^3)),(pi^8))",1.0),
947 test_t(
"equal(pi^2^3-pi^8,0)",1.0),
948 test_t(
"equal((2*pi^2^3),2*(pi^8))",1.0),
949 test_t(
"equal((pi^2^3*2),2*(pi^8))",1.0),
950 test_t(
"equal((pi^2^3/2),(pi^8)/2)",1.0),
951 test_t(
"equal((pi^2.2^3.3),(pi^13.4894687605338489))",1.0),
952 test_t(
"equal((pi^(2.2^3.3)),(pi^13.4894687605338489))",1.0),
953 test_t(
"equal((2.2*pi^2.2^3.3),2.2*(pi^13.4894687605338489))",1.0),
954 test_t(
"equal((pi^2.2^3.3*2),2*(pi^13.4894687605338489))",1.0),
955 test_t(
"equal((pi^2.2^3.3/2.2),(pi^13.4894687605338489)/2.2)",1.0),
956 test_t(
"equal((pi^-2^3),1/(pi^8))",1.0),
957 test_t(
"equal((pi^(-2^3)),1/(pi^8))",1.0),
958 test_t(
"equal((pi^2^-3),(pi^(1/8)))",1.0),
959 test_t(
"equal((pi^(2^-3)),(pi^(1/8)))",1.0),
960 test_t(
"equal((pi^-2^-3),1/(pi^(1/8)))",1.0),
961 test_t(
"equal((pi^(-2^-3)),1/(pi^(1/8)))",1.0),
962 test_t(
"equal((-pi^2^3),(-pi^8))",1.0),
963 test_t(
"equal((-pi^(2^3)),(-pi^8))",1.0),
964 test_t(
"equal(-pi^2^3--pi^8,0)",1.0),
965 test_t(
"equal((2*-pi^2^3),2*(-pi^8))",1.0),
966 test_t(
"equal((-pi^2^3*2),2*(-pi^8))",1.0),
967 test_t(
"equal((-pi^2^3/2),(-pi^8)/2)",1.0),
968 test_t(
"equal((-pi^2.2^3.3),(-pi^13.4894687605338489))",1.0),
969 test_t(
"equal((-pi^(2.2^3.3)),(-pi^13.4894687605338489))",1.0),
970 test_t(
"equal((2.2*-pi^2.2^3.3),2.2*(-pi^13.4894687605338489))",1.0),
971 test_t(
"equal((-pi^2.2^3.3*2),2*(-pi^13.4894687605338489))",1.0),
972 test_t(
"equal((-pi^2.2^3.3/2.2),(-pi^13.4894687605338489)/2.2)",1.0),
973 test_t(
"equal((-pi^-2^3),1/(-pi^8))",1.0),
974 test_t(
"equal((-pi^(-2^3)),1/(-pi^8))",1.0),
975 test_t(
"equal((-pi^2^-3),(-pi^(1/8)))",1.0),
976 test_t(
"equal((-pi^(2^-3)),(-pi^(1/8)))",1.0),
977 test_t(
"equal((-pi^-2^-3),1/(-pi^(1/8)))",1.0),
978 test_t(
"equal((-pi^(-2^-3)),1/(-pi^(1/8)))",1.0),
979 test_t(
"equal((+pi^+2^+3),(+pi^+8))",1.0),
980 test_t(
"equal((+pi^(2^3)),(+pi^+8))",1.0),
981 test_t(
"equal(+pi^+2^+3-+pi^+8,0)",1.0),
982 test_t(
"equal((+2*+pi^+2^+3),+2*(+pi^+8))",1.0),
983 test_t(
"equal((+pi^+2^+3*+2),+2*(+pi^+8))",1.0),
984 test_t(
"equal((+pi^+2^+3/+2),(+pi^+8)/+2)",1.0),
985 test_t(
"equal((+pi^+2.2^+3.3),(+pi^+13.4894687605338489))",1.0),
986 test_t(
"equal((+pi^(+2.2^+3.3)),(+pi^+13.4894687605338489))",1.0),
987 test_t(
"equal((+2.2*+pi^+2.2^+3.3),+2.2*(+pi^+13.4894687605338489))",1.0),
988 test_t(
"equal((+pi^+2.2^+3.3*+2),+2*(+pi^+13.4894687605338489))",1.0),
989 test_t(
"equal((+pi^+2.2^+3.3/+2.2),(+pi^+13.4894687605338489)/+2.2)",1.0),
990 test_t(
"equal((+pi^-2^3),1/(+pi^+8))",1.0),
991 test_t(
"equal((+pi^(-2^3)),1/(+pi^+8))",1.0),
992 test_t(
"equal((+pi^2^-3),(+pi^(+1/+8)))",1.0),
993 test_t(
"equal((+pi^(2^-3)),(+pi^(+1/+8)))",1.0),
994 test_t(
"equal((+pi^-2^-3),1/(+pi^(+1/+8)))",1.0),
995 test_t(
"equal((+pi^(-2^-3)),1/(+pi^(+1/+8)))",1.0),
996 test_t(
"equal((-pi^+2^+3),(-pi^+8))",1.0),
997 test_t(
"equal((-pi^(2^3)),(-pi^+8))",1.0),
998 test_t(
"equal(-pi^+2^+3--pi^+8,0)",1.0),
999 test_t(
"equal((+2*-pi^+2^+3),2*(-pi^+8))",1.0),
1000 test_t(
"equal((-pi^+2^+3*2),2*(-pi^+8))",1.0),
1001 test_t(
"equal((-pi^+2^+3/+2),(-pi^+8)/+2)",1.0),
1002 test_t(
"equal((-pi^+2.2^+3.3),(-pi^+13.4894687605338489))",1.0),
1003 test_t(
"equal((-pi^(2.2^3.3)),(-pi^+13.4894687605338489))",1.0),
1004 test_t(
"equal((+2.2*-pi^+2.2^+3.3),2.2*(-pi^+13.4894687605338489))",1.0),
1005 test_t(
"equal((-pi^+2.2^+3.3*2),2*(-pi^+13.4894687605338489))",1.0),
1006 test_t(
"equal((-pi^+2.2^+3.3/+2.2),(-pi^+13.4894687605338489)/+2.2)",1.0),
1007 test_t(
"equal((-pi^-2^3),1/(-pi^+8))",1.0),
1008 test_t(
"equal((-pi^(-2^3)),1/(-pi^+8))",1.0),
1009 test_t(
"equal((-pi^2^-3),(-pi^(+1/+8)))",1.0),
1010 test_t(
"equal((-pi^(2^-3)),(-pi^(+1/+8)))",1.0),
1011 test_t(
"equal((-pi^-2^-3),1/(-pi^(+1/+8)))",1.0),
1012 test_t(
"equal((-pi^(-2^-3)),1/(-pi^(+1/+8)))",1.0),
1013 test_t(
"switch { case (1 <= 2) : 1; default: 1.12345; }",1.0),
1014 test_t(
"switch { case (1 > 2) : 0; case (1 <= 2) : 1; default: 1.12345; }",1.0),
1015 test_t(
"switch { case (1 <= 2) : switch { case (1 <= 2) : 1; default: 1.12345; }; default: 1.12345; }",1.0),
1016 test_t(
"switch { case [1 <= 2] : 1; default: 1.12345; }",1.0),
1017 test_t(
"switch { case [1 > 2] : 0; case [1 <= 2] : 1; default: 1.12345; }",1.0),
1018 test_t(
"switch { case [1 <= 2] : switch { case [1 <= 2] : 1; default: 1.12345; }; default: 1.12345; }",1.0),
1019 test_t(
"switch { case {1 <= 2} : 1; default: 1.12345; }",1.0),
1020 test_t(
"switch { case {1 > 2} : 0; case {1 <= 2} : 1; default: 1.12345; }",1.0),
1021 test_t(
"switch { case {1 <= 2} : switch { case {1 <= 2} : 1; default: 1.12345; }; default: 1.12345; }",1.0),
1022 test_t(
"switch { case [(1 <= 2)] : {1}; default: 1.12345; }",1.0),
1023 test_t(
"switch { case ([1 > 2]) : [0]; case ([1 <= 2]) : 1; default: 1.12345; }",1.0),
1024 test_t(
"switch { case {(1 <= 2)} : switch { case ({1 <= 2}) : 1; default: 1.12345; }; default: 1.12345; }",1.0),
1025 test_t(
"switch { case 1 > 1 : 1; case 2 > 2 : 2; case 3 = 3 : 3; case 4 > 4 : 4; default : 5; }",3.0),
1026 test_t(
"repeat 1.1 + 2.2 until (1 < 2)",3.3),
1027 test_t(
"repeat (1.1 + 2.2) until (1 < 2)",3.3),
1028 test_t(
"repeat 1.1 + 2.2; until (1 < 2)",3.3),
1029 test_t(
"repeat (1.1 + 2.2); until (1 < 2)",3.3),
1030 test_t(
"repeat 1.1234; 1 < 2; 1.1 + 2.2 until (1 < 2)",3.3),
1031 test_t(
"repeat 1.1234; 1 < 2; (1.1 + 2.2) until (1 < 2)",3.3),
1032 test_t(
"repeat 1.1234; 1 < 2; 1.1 + 2.2; until (1 < 2)",3.3),
1033 test_t(
"repeat 1.1234; 1 < 2; (1.1 + 2.2); until (1 < 2)",3.3),
1034 test_t(
"[*] { case 1 < 2 : 1 / 2; case (1 < 3) : 2 / 2; case 1 < 4 : 3 / 2; case (1 < 5) : 4 / 2; }",2.0),
1035 test_t(
" 0 ? 1 : 2",2.0),
1036 test_t(
" 1 ? 3 : 4",3.0),
1037 test_t(
"(0 ? 1 : 2) == 2",1.0),
1038 test_t(
"(1 ? 3 : 4) == 3",1.0),
1039 test_t(
"[(0)] ? [(1)] : [(2)]",2.0),
1040 test_t(
"([(0)] ? [(1)] : [(2)]) == 2",1.0),
1041 test_t(
"([(1)] ? [(3)] : [(4)]) == 3",1.0),
1042 test_t(
"(1 < 2 ? 3 : 4) == 3",1.0),
1043 test_t(
"(1 > 2 ? 3 : 4) == 4",1.0),
1044 test_t(
"(1 < 2 ? 3 + 5 : 4) == 8",1.0),
1045 test_t(
"(1 > 2 ? 3 : 4 + 5) == 9",1.0),
1046 test_t(
"(2 < 3 + 3 ? 7 : 9) == 7",1.0),
1047 test_t(
"(1 + 1 < 3 ? 7 : 9) == 7",1.0),
1048 test_t(
"(1 + 1 < 3 + 3 ? 7 : 9) == 7",1.0),
1049 test_t(
"(2 > 3 + 3 ? 7 : 9) == 9",1.0),
1050 test_t(
"(1 + 1 > 3 ? 7 : 9) == 9",1.0),
1051 test_t(
"(1 + 1 > 3 + 3 ? 7 : 9) == 9",1.0),
1052 test_t(
"(2 < (3 + 3) ? 7 : 9) == 7",1.0),
1053 test_t(
"((1 + 1) < 3 ? 7 : 9) == 7",1.0),
1054 test_t(
"((1 + 1) < (3 + 3) ? 7 : 9) == 7",1.0),
1055 test_t(
"(min(1,2) ? 1 + 3 : 1 + 4) == 4",1.0),
1056 test_t(
"(min(0,1) ? 1 + 3 : 1 + 4) == 5",1.0),
1057 test_t(
"if (1 < 2) 3; == 3",1.0),
1058 test_t(
"if (1 > 2) 3; == null",1.0),
1059 test_t(
"if (1 < 2) 3; else 4; == 3",1.0),
1060 test_t(
"if (1 > 2) 3; else 4; == 4",1.0),
1061 test_t(
"if (1 < 2) 3; else {1+2; 4;} == 3",1.0),
1062 test_t(
"if (1 > 2) 3; else {1+2; 4;} == 4",1.0),
1063 test_t(
"if (1 < 2) 3; else if (1 < 2) 4; == 3",1.0),
1064 test_t(
"if (1 > 2) 3; else if (1 < 2) 4; == 4",1.0),
1065 test_t(
"if (1 > 2) 3; else if (1 > 2) 4; == null",1.0),
1066 test_t(
"if (1 < 2) 3; else if (1 < 2) {1+2; 4;} == 3",1.0),
1067 test_t(
"if (1 > 2) 3; else if (1 < 2) {1+2; 4;} == 4",1.0),
1068 test_t(
"if (1 > 2) 3; else if (1 > 2) {1+2; 4;} == null",1.0),
1069 test_t(
"if (1 < 2) { 1+2; 3;} == 3",1.0),
1070 test_t(
"if (1 > 2) { 1+2; 3;} == null",1.0),
1071 test_t(
"if (1 < 2) { 1+2; 3;} else 4; == 3",1.0),
1072 test_t(
"if (1 > 2) { 1+2; 3;} else 4; == 4",1.0),
1073 test_t(
"if (1 < 2) { 1+2; 3;} else {1+2; 4;} == 3",1.0),
1074 test_t(
"if (1 > 2) { 1+2; 3;} else {1+2; 4;} == 4",1.0),
1075 test_t(
"if (1 < 2) { 1+2; 3;} else if (1 < 2) 4; == 3",1.0),
1076 test_t(
"if (1 > 2) { 1+2; 3;} else if (1 < 2) 4; == 4",1.0),
1077 test_t(
"if (1 > 2) { 1+2; 3;} else if (1 > 2) 4; == null",1.0),
1078 test_t(
"if (1 < 2) { 1+2; 3;} else if (1 < 2) {1+2; 4;} == 3",1.0),
1079 test_t(
"if (1 > 2) { 1+2; 3;} else if (1 < 2) {1+2; 4;} == 4",1.0),
1080 test_t(
"if (1 > 2) { 1+2; 3;} else if (1 > 2) {1+2; 4;} == null",1.0)
1085 template <
typename T>
1088 const T& epsilon = 0.0000000001)
1090 if (t1 != t1)
return true;
1091 if (t2 != t2)
return true;
1092 T diff = std::abs(t1 - t2);
1093 T eps_norm = (
std::max(T(1),
std::max(std::abs(t1),std::abs(t2))) * epsilon);
1094 return diff > eps_norm;
1097 template <
typename T>
1099 const T& epsilon = T(0.0000000001))
1104 inline bool not_equal(
const float& t0,
const float& t1,
const float& epsilon = 0.000001
f)
1109 template <
typename T>
1147 if (!
parser.compile(expression_string,expression))
1149 printf(
"test_expression() - Error: %s Expression: %s\n",
1151 expression_string.c_str());
1159 printf(
"test_expression() - Error: Expression did not compile to a constant! Expression: %s\n",
1160 expression_string.c_str());
1165 T result = expression.
value();
1169 printf(
"test_expression() - Computation Error: Expression: [%s]\tExpected: %19.15f\tResult: %19.15f\n",
1170 expression_string.c_str(),
1171 (double)expected_result,
1180 template <
typename T>
1183 const std::size_t rounds = 10;
1184 for (std::size_t r = 0; r < rounds; ++r)
1204 template <
typename T>
1220 template <
typename T>
1240 template <
typename T>
1250 test_xy<T>(
"(x + y) * (x + y)" ,T(2.2),T(3.3),T(30.25)),
1251 test_xy<T>(
"(x + y) / (x + y)" ,T(2.2),T(3.3),T(1.0 )),
1252 test_xy<T>(
"x + y > x and x + y > y" ,T(2.2),T(3.3),T(1.0)),
1253 test_xy<T>(
"1 + (x + y)" ,T(2.2),T(3.3),T(6.5 )),
1254 test_xy<T>(
"(x + y) - 1" ,T(2.2),T(3.3),T(4.5 )),
1255 test_xy<T>(
"1 + (x + y) * 2" ,T(2.2),T(3.3),T(12.0 )),
1256 test_xy<T>(
"2 * (x + y) - 1" ,T(2.2),T(3.3),T(10.0 )),
1257 test_xy<T>(
"y + (x + 1)" ,T(2.2),T(3.3),T(6.5 )),
1258 test_xy<T>(
"(x + 1) + y" ,T(2.2),T(3.3),T(6.5 )),
1263 test_xy<T>(
"x * 1 == x" ,T(2.0),T(3.0),T(1.0)),
1264 test_xy<T>(
"1 * x == x" ,T(2.0),T(3.0),T(1.0)),
1265 test_xy<T>(
"y * 1 == y" ,T(2.0),T(3.0),T(1.0)),
1266 test_xy<T>(
"1 * y == y" ,T(2.0),T(3.0),T(1.0)),
1267 test_xy<T>(
"x * 0 == 0" ,T(2.0),T(3.0),T(1.0)),
1268 test_xy<T>(
"0 * x == 0" ,T(2.0),T(3.0),T(1.0)),
1269 test_xy<T>(
"y * 0 == 0" ,T(2.0),T(3.0),T(1.0)),
1270 test_xy<T>(
"0 * y == 0" ,T(2.0),T(3.0),T(1.0)),
1271 test_xy<T>(
"x + 1 == 1 + x",T(2.0),T(3.0),T(1.0)),
1272 test_xy<T>(
"y + 1 == 1 + y",T(2.0),T(3.0),T(1.0)),
1273 test_xy<T>(
"x + y == y + x",T(2.0),T(3.0),T(1.0)),
1274 test_xy<T>(
"x * y == y * x",T(2.0),T(3.0),T(1.0)),
1279 test_xy<T>(
"x + y > y" ,T(2.0),T(3.0),T(1.0)),
1280 test_xy<T>(
"x + y > x" ,T(2.0),T(3.0),T(1.0)),
1281 test_xy<T>(
"x * y > y" ,T(2.0),T(3.0),T(1.0)),
1282 test_xy<T>(
"x * y > x" ,T(2.0),T(3.0),T(1.0)),
1283 test_xy<T>(
"(x + y) > y" ,T(2.0),T(3.0),T(1.0)),
1284 test_xy<T>(
"(x + y) > x" ,T(2.0),T(3.0),T(1.0)),
1285 test_xy<T>(
"(x * y) > y" ,T(2.0),T(3.0),T(1.0)),
1286 test_xy<T>(
"(x * y) > x" ,T(2.0),T(3.0),T(1.0)),
1287 test_xy<T>(
"(2x + 3y) == (2*x + 3*y)" ,T(2.0),T(3.0),T(1.0)),
1288 test_xy<T>(
"2(x + y) == (2*x + 2*y)" ,T(2.0),T(3.0),T(1.0)),
1289 test_xy<T>(
" (x + y)3 == (3*x + 3*y)" ,T(2.0),T(3.0),T(1.0)),
1290 test_xy<T>(
"2x + 3y == 2*x + 3*y" ,T(2.0),T(3.0),T(1.0)),
1291 test_xy<T>(
"2(x + y) == 2*x + 2*y" ,T(2.0),T(3.0),T(1.0)),
1292 test_xy<T>(
" (x + y)3 == 3*x + 3*y" ,T(2.0),T(3.0),T(1.0)),
1293 test_xy<T>(
" (x)y == (x*y)" ,T(2.0),T(3.0),T(1.0)),
1294 test_xy<T>(
" x(y) == (x*y)" ,T(2.0),T(3.0),T(1.0)),
1295 test_xy<T>(
" (x) y == (x*y)" ,T(2.0),T(3.0),T(1.0)),
1296 test_xy<T>(
" x (y) == (x*y)" ,T(2.0),T(3.0),T(1.0)),
1297 test_xy<T>(
" ((x) y) == (x*y)" ,T(2.0),T(3.0),T(1.0)),
1298 test_xy<T>(
" (x (y)) == (x*y)" ,T(2.0),T(3.0),T(1.0)),
1299 test_xy<T>(
" (x)3 == (x*3)" ,T(2.0),T(3.0),T(1.0)),
1300 test_xy<T>(
" x(3) == (x*3)" ,T(2.0),T(3.0),T(1.0)),
1301 test_xy<T>(
" (x) 3 == (x*3)" ,T(2.0),T(3.0),T(1.0)),
1302 test_xy<T>(
" x (3) == (x*3)" ,T(2.0),T(3.0),T(1.0)),
1303 test_xy<T>(
" ((x) 3) == (x*3)" ,T(2.0),T(3.0),T(1.0)),
1304 test_xy<T>(
" (x (3)) == (x*3)" ,T(2.0),T(3.0),T(1.0)),
1305 test_xy<T>(
" (2)y == (2*y)" ,T(2.0),T(3.0),T(1.0)),
1306 test_xy<T>(
" 2(y) == (2*y)" ,T(2.0),T(3.0),T(1.0)),
1307 test_xy<T>(
" (2) y == (2*y)" ,T(2.0),T(3.0),T(1.0)),
1308 test_xy<T>(
" 2 (y) == (2*y)" ,T(2.0),T(3.0),T(1.0)),
1309 test_xy<T>(
" ((2) y) == (2*y)" ,T(2.0),T(3.0),T(1.0)),
1310 test_xy<T>(
" (2 (y)) == (2*y)" ,T(2.0),T(3.0),T(1.0)),
1311 test_xy<T>(
"var a := 2; (a)(3) == 6" ,T(2.0),T(3.0),T(1.0)),
1312 test_xy<T>(
"var a := 2; (A){3} == 6" ,T(2.0),T(3.0),T(1.0)),
1313 test_xy<T>(
"var a := 2; (a)[3] == 6" ,T(2.0),T(3.0),T(1.0)),
1314 test_xy<T>(
"var a := 2; {a}(3) == 6" ,T(2.0),T(3.0),T(1.0)),
1315 test_xy<T>(
"var a := 2; {a}{3} == 6" ,T(2.0),T(3.0),T(1.0)),
1316 test_xy<T>(
"var a := 2; {a}[3] == 6" ,T(2.0),T(3.0),T(1.0)),
1317 test_xy<T>(
"var a := 2; var b := 3; (a)(b) == 6" ,T(2.0),T(3.0),T(1.0)),
1318 test_xy<T>(
"var a := 2; var b := 3; (a){B} == 6" ,T(2.0),T(3.0),T(1.0)),
1319 test_xy<T>(
"var a := 2; var b := 3; (a)[b] == 6" ,T(2.0),T(3.0),T(1.0)),
1320 test_xy<T>(
"var a := 2; var b := 3; {a}(b) == 6" ,T(2.0),T(3.0),T(1.0)),
1321 test_xy<T>(
"var a := 2; var b := 3; {a}{b} == 6" ,T(2.0),T(3.0),T(1.0)),
1322 test_xy<T>(
"var a := 2; var b := 3; {a}[b] == 6" ,T(2.0),T(3.0),T(1.0)),
1323 test_xy<T>(
"var a := 2; (a)(a+1) == 6" ,T(2.0),T(3.0),T(1.0)),
1324 test_xy<T>(
"var a := 2; (a){a+1} == 6" ,T(2.0),T(3.0),T(1.0)),
1325 test_xy<T>(
"var a := 2; (a)[a+1] == 6" ,T(2.0),T(3.0),T(1.0)),
1326 test_xy<T>(
"var a := 2; {a}(a+1) == 6" ,T(2.0),T(3.0),T(1.0)),
1327 test_xy<T>(
"var a := 2; {a}{a+1} == 6" ,T(2.0),T(3.0),T(1.0)),
1328 test_xy<T>(
"var a := 2; {a}[a+1] == 6" ,T(2.0),T(3.0),T(1.0)),
1329 test_xy<T>(
"var a := 2; var b := 3; (b-1)(b) == 6" ,T(2.0),T(3.0),T(1.0)),
1330 test_xy<T>(
"var a := 2; var b := 3; (b-1){b} == 6" ,T(2.0),T(3.0),T(1.0)),
1331 test_xy<T>(
"var a := 2; var b := 3; (b-1)[b] == 6" ,T(2.0),T(3.0),T(1.0)),
1332 test_xy<T>(
"var a := 2; var b := 3; {b-1}(b) == 6" ,T(2.0),T(3.0),T(1.0)),
1333 test_xy<T>(
"var a := 2; var b := 3; {b-1}{b} == 6" ,T(2.0),T(3.0),T(1.0)),
1334 test_xy<T>(
"var a := 2; var b := 3; {b-1}[b] == 6" ,T(2.0),T(3.0),T(1.0)),
1335 test_xy<T>(
"equal(x^2.2^1.1,17.15193942371376191362)" ,T(3.3),T(0.0),T(1.0)),
1336 test_xy<T>(
"equal(3.3^x^1.1,17.15193942371376191362)" ,T(2.2),T(0.0),T(1.0)),
1337 test_xy<T>(
"equal(3.3^2.2^x,17.15193942371376191362)" ,T(1.1),T(0.0),T(1.0)),
1338 test_xy<T>(
"equal(x^2.2^y,17.15193942371376191362)" ,T(3.3),T(1.1),T(1.0)),
1339 test_xy<T>(
"equal(x^y^1.1,17.15193942371376191362)" ,T(3.3),T(2.2),T(1.0)),
1340 test_xy<T>(
"equal(3.3^x^y,17.15193942371376191362)" ,T(2.2),T(1.1),T(1.0)),
1341 test_xy<T>(
"equal(x+y^3/7,x+(y*y*y)/7)",T(2.0),T(3.0),T(1.0)),
1342 test_xy<T>(
"equal(1-x^3+y^2*7,1-(x*x*x)+(y*y)*7)",T(2.0),T(3.0),T(1.0)),
1343 test_xy<T>(
"equal( x^0,1)",T(12.34),T(0.0),T(1.0)),
1344 test_xy<T>(
"equal( x^1,x)",T(12.34),T(0.0),T(1.0)),
1345 test_xy<T>(
"equal( x^2,x*x)",T(12.34),T(0.0),T(1.0)),
1346 test_xy<T>(
"equal( x^3,x*x*x)",T(12.34),T(0.0),T(1.0)),
1347 test_xy<T>(
"equal( x^4,x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1348 test_xy<T>(
"equal( x^5,x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1349 test_xy<T>(
"equal( x^6,x*x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1350 test_xy<T>(
"equal( x^7,x*x*x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1351 test_xy<T>(
"equal( x^8,x*x*x*x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1352 test_xy<T>(
"equal( x^9,x*x*x*x*x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1353 test_xy<T>(
"equal(x^10,x*x*x*x*x*x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1354 test_xy<T>(
"equal(x^11,x*x*x*x*x*x*x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1355 test_xy<T>(
"equal(x^12,x*x*x*x*x*x*x*x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1356 test_xy<T>(
"equal(x^13,x*x*x*x*x*x*x*x*x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1357 test_xy<T>(
"equal(x^14,x*x*x*x*x*x*x*x*x*x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1358 test_xy<T>(
"equal(x^15,x*x*x*x*x*x*x*x*x*x*x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1359 test_xy<T>(
"equal(x^16,x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1360 test_xy<T>(
"equal(x^17,x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1361 test_xy<T>(
"equal(x^18,x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1362 test_xy<T>(
"equal(x^19,x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1363 test_xy<T>(
"equal(x^20,x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1364 test_xy<T>(
"equal(x^21,x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1365 test_xy<T>(
"equal(x^22,x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1366 test_xy<T>(
"equal(x^23,x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1367 test_xy<T>(
"equal(x^24,x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1368 test_xy<T>(
"equal(x^25,x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1369 test_xy<T>(
"equal( y^0,1)",T(0.0),T(12.34),T(1.0)),
1370 test_xy<T>(
"equal( y^1,y)",T(0.0),T(12.34),T(1.0)),
1371 test_xy<T>(
"equal( y^2,y*y)",T(0.0),T(12.34),T(1.0)),
1372 test_xy<T>(
"equal( y^3,y*y*y)",T(0.0),T(12.34),T(1.0)),
1373 test_xy<T>(
"equal( y^4,y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1374 test_xy<T>(
"equal( y^5,y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1375 test_xy<T>(
"equal( y^6,y*y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1376 test_xy<T>(
"equal( y^7,y*y*y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1377 test_xy<T>(
"equal( y^8,y*y*y*y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1378 test_xy<T>(
"equal( y^9,y*y*y*y*y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1379 test_xy<T>(
"equal(y^10,y*y*y*y*y*y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1380 test_xy<T>(
"equal(y^11,y*y*y*y*y*y*y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1381 test_xy<T>(
"equal(y^12,y*y*y*y*y*y*y*y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1382 test_xy<T>(
"equal(y^13,y*y*y*y*y*y*y*y*y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1383 test_xy<T>(
"equal(y^14,y*y*y*y*y*y*y*y*y*y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1384 test_xy<T>(
"equal(y^15,y*y*y*y*y*y*y*y*y*y*y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1385 test_xy<T>(
"equal(y^16,y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1386 test_xy<T>(
"equal(y^17,y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1387 test_xy<T>(
"equal(y^18,y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1388 test_xy<T>(
"equal(y^19,y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1389 test_xy<T>(
"equal(y^20,y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1390 test_xy<T>(
"equal(y^21,y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1391 test_xy<T>(
"equal(y^22,y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1392 test_xy<T>(
"equal(y^23,y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1393 test_xy<T>(
"equal(y^24,y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1394 test_xy<T>(
"equal(y^25,y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1395 test_xy<T>(
"equal( x^-0,1/1)",T(12.34),T(0.0),T(1.0)),
1396 test_xy<T>(
"equal( x^-1,1/(x))",T(12.34),T(0.0),T(1.0)),
1397 test_xy<T>(
"equal( x^-2,1/(x*x))",T(12.34),T(0.0),T(1.0)),
1398 test_xy<T>(
"equal( x^-3,1/(x*x*x))",T(12.34),T(0.0),T(1.0)),
1399 test_xy<T>(
"equal( x^-4,1/(x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1400 test_xy<T>(
"equal( x^-5,1/(x*x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1401 test_xy<T>(
"equal( x^-6,1/(x*x*x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1402 test_xy<T>(
"equal( x^-7,1/(x*x*x*x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1403 test_xy<T>(
"equal( x^-8,1/(x*x*x*x*x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1404 test_xy<T>(
"equal( x^-9,1/(x*x*x*x*x*x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1405 test_xy<T>(
"equal(x^-10,1/(x*x*x*x*x*x*x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1406 test_xy<T>(
"equal(x^-11,1/(x*x*x*x*x*x*x*x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1407 test_xy<T>(
"equal(x^-12,1/(x*x*x*x*x*x*x*x*x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1408 test_xy<T>(
"equal(x^-13,1/(x*x*x*x*x*x*x*x*x*x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1409 test_xy<T>(
"equal(x^-14,1/(x*x*x*x*x*x*x*x*x*x*x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1410 test_xy<T>(
"equal(x^-15,1/(x*x*x*x*x*x*x*x*x*x*x*x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1411 test_xy<T>(
"equal(x^-16,1/(x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1412 test_xy<T>(
"equal(x^-17,1/(x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1413 test_xy<T>(
"equal(x^-18,1/(x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1414 test_xy<T>(
"equal(x^-19,1/(x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1415 test_xy<T>(
"equal(x^-20,1/(x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1416 test_xy<T>(
"equal(x^-21,1/(x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1417 test_xy<T>(
"equal(x^-22,1/(x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1418 test_xy<T>(
"equal(x^-23,1/(x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1419 test_xy<T>(
"equal(x^-24,1/(x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1420 test_xy<T>(
"equal(x^-25,1/(x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1421 test_xy<T>(
"equal( y^-0,1/1)",T(0.0),T(12.34),T(1.0)),
1422 test_xy<T>(
"equal( y^-1,1/(y))",T(0.0),T(12.34),T(1.0)),
1423 test_xy<T>(
"equal( y^-2,1/(y*y))",T(0.0),T(12.34),T(1.0)),
1424 test_xy<T>(
"equal( y^-3,1/(y*y*y))",T(0.0),T(12.34),T(1.0)),
1425 test_xy<T>(
"equal( y^-4,1/(y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1426 test_xy<T>(
"equal( y^-5,1/(y*y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1427 test_xy<T>(
"equal( y^-6,1/(y*y*y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1428 test_xy<T>(
"equal( y^-7,1/(y*y*y*y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1429 test_xy<T>(
"equal( y^-8,1/(y*y*y*y*y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1430 test_xy<T>(
"equal( y^-9,1/(y*y*y*y*y*y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1431 test_xy<T>(
"equal(y^-10,1/(y*y*y*y*y*y*y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1432 test_xy<T>(
"equal(y^-11,1/(y*y*y*y*y*y*y*y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1433 test_xy<T>(
"equal(y^-12,1/(y*y*y*y*y*y*y*y*y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1434 test_xy<T>(
"equal(y^-13,1/(y*y*y*y*y*y*y*y*y*y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1435 test_xy<T>(
"equal(y^-14,1/(y*y*y*y*y*y*y*y*y*y*y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1436 test_xy<T>(
"equal(y^-15,1/(y*y*y*y*y*y*y*y*y*y*y*y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1437 test_xy<T>(
"equal(y^-16,1/(y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1438 test_xy<T>(
"equal(y^-17,1/(y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1439 test_xy<T>(
"equal(y^-18,1/(y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1440 test_xy<T>(
"equal(y^-19,1/(y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1441 test_xy<T>(
"equal(y^-20,1/(y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1442 test_xy<T>(
"equal(y^-21,1/(y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1443 test_xy<T>(
"equal(y^-22,1/(y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1444 test_xy<T>(
"equal(y^-23,1/(y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1445 test_xy<T>(
"equal(y^-24,1/(y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1446 test_xy<T>(
"equal(y^-25,1/(y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1447 test_xy<T>(
"(2 + x) + 7",T(3.0),T(0.0),T((2.0 + 3.0) + 7.0)),
1448 test_xy<T>(
"(2 + x) - 7",T(3.0),T(0.0),T((2.0 + 3.0) - 7.0)),
1449 test_xy<T>(
"(2 - x) + 7",T(3.0),T(0.0),T((2.0 - 3.0) + 7.0)),
1450 test_xy<T>(
"(2 - x) - 7",T(3.0),T(0.0),T((2.0 - 3.0) - 7.0)),
1451 test_xy<T>(
"(2 * x) * 7",T(3.0),T(0.0),T((2.0 * 3.0) * 7.0)),
1452 test_xy<T>(
"(2 * x) / 7",T(3.0),T(0.0),T((2.0 * 3.0) / 7.0)),
1453 test_xy<T>(
"(2 / x) * 7",T(3.0),T(0.0),T((2.0 / 3.0) * 7.0)),
1454 test_xy<T>(
"(2 / x) / 7",T(3.0),T(0.0),T((2.0 / 3.0) / 7.0)),
1455 test_xy<T>(
"2 + (x + 7)",T(3.0),T(0.0),T(2.0 + (3.0 + 7.0))),
1456 test_xy<T>(
"2 + (x - 7)",T(3.0),T(0.0),T(2.0 + (3.0 - 7.0))),
1457 test_xy<T>(
"2 - (x + 7)",T(3.0),T(0.0),T(2.0 - (3.0 + 7.0))),
1458 test_xy<T>(
"2 - (x - 7)",T(3.0),T(0.0),T(2.0 - (3.0 - 7.0))),
1459 test_xy<T>(
"2 * (x * 7)",T(3.0),T(0.0),T(2.0 * (3.0 * 7.0))),
1460 test_xy<T>(
"2 * (x / 7)",T(3.0),T(0.0),T(2.0 * (3.0 / 7.0))),
1461 test_xy<T>(
"2 / (x * 7)",T(3.0),T(0.0),T(2.0 / (3.0 * 7.0))),
1462 test_xy<T>(
"2 / (x / 7)",T(3.0),T(0.0),T(2.0 / (3.0 / 7.0))),
1463 test_xy<T>(
"2 + (7 + x)",T(3.0),T(0.0),T(2.0 + (7.0 + 3.0))),
1464 test_xy<T>(
"2 + (7 - x)",T(3.0),T(0.0),T(2.0 + (7.0 - 3.0))),
1465 test_xy<T>(
"2 - (7 + x)",T(3.0),T(0.0),T(2.0 - (7.0 + 3.0))),
1466 test_xy<T>(
"2 - (7 - x)",T(3.0),T(0.0),T(2.0 - (7.0 - 3.0))),
1467 test_xy<T>(
"2 * (7 * x)",T(3.0),T(0.0),T(2.0 * (7.0 * 3.0))),
1468 test_xy<T>(
"2 * (7 / x)",T(3.0),T(0.0),T(2.0 * (7.0 / 3.0))),
1469 test_xy<T>(
"2 / (7 * x)",T(3.0),T(0.0),T(2.0 / (7.0 * 3.0))),
1470 test_xy<T>(
"2 / (7 / x)",T(3.0),T(0.0),T(2.0 / (7.0 / 3.0))),
1471 test_xy<T>(
"(x + 2) + 7",T(3.0),T(0.0),T((3.0 + 2.0) + 7.0)),
1472 test_xy<T>(
"(x + 2) - 7",T(3.0),T(0.0),T((3.0 + 2.0) - 7.0)),
1473 test_xy<T>(
"(x - 2) + 7",T(3.0),T(0.0),T((3.0 - 2.0) + 7.0)),
1474 test_xy<T>(
"(x - 2) - 7",T(3.0),T(0.0),T((3.0 - 2.0) - 7.0)),
1475 test_xy<T>(
"(x * 2) * 7",T(3.0),T(0.0),T((3.0 * 2.0) * 7.0)),
1476 test_xy<T>(
"(x * 2) / 7",T(3.0),T(0.0),T((3.0 * 2.0) / 7.0)),
1477 test_xy<T>(
"(x / 2) * 7",T(3.0),T(0.0),T((3.0 / 2.0) * 7.0)),
1478 test_xy<T>(
"(x / 2) / 7",T(3.0),T(0.0),T((3.0 / 2.0) / 7.0)),
1479 test_xy<T>(
"((2 + x) + (3 + y))",T(7.0),T(9.0),T(((2.0 + 7.0) + (3.0 + 9.0)))),
1480 test_xy<T>(
"((2 + x) - (3 + y))",T(7.0),T(9.0),T(((2.0 + 7.0) - (3.0 + 9.0)))),
1481 test_xy<T>(
"((2 - x) - (3 - y))",T(7.0),T(9.0),T(((2.0 - 7.0) - (3.0 - 9.0)))),
1482 test_xy<T>(
"((2 * x) * (3 * y))",T(7.0),T(9.0),T(((2.0 * 7.0) * (3.0 * 9.0)))),
1483 test_xy<T>(
"((x + 2) + (y + 3))",T(7.0),T(9.0),T(((7.0 + 2.0) + (9.0 + 3.0)))),
1484 test_xy<T>(
"((x + 2) - (y + 3))",T(7.0),T(9.0),T(((7.0 + 2.0) - (9.0 + 3.0)))),
1485 test_xy<T>(
"((x - 2) - (y - 3))",T(7.0),T(9.0),T(((7.0 - 2.0) - (9.0 - 3.0)))),
1486 test_xy<T>(
"((2 * x) * (3 * y))",T(7.0),T(9.0),T(((2.0 * 7.0) * (3.0 * 9.0)))),
1487 test_xy<T>(
"((2 + x) + (y + 3))",T(7.0),T(9.0),T(((2.0 + 7.0) + (9.0 + 3.0)))),
1488 test_xy<T>(
"((2 + x) - (y + 3))",T(7.0),T(9.0),T(((2.0 + 7.0) - (9.0 + 3.0)))),
1489 test_xy<T>(
"((2 - x) - (y - 3))",T(7.0),T(9.0),T(((2.0 - 7.0) - (9.0 - 3.0)))),
1490 test_xy<T>(
"((2 * x) * (3 * y))",T(7.0),T(9.0),T(((2.0 * 7.0) * (3.0 * 9.0)))),
1491 test_xy<T>(
"((x + 2) + (3 + y))",T(7.0),T(9.0),T(((7.0 + 2.0) + (3.0 + 9.0)))),
1492 test_xy<T>(
"((x + 2) - (3 + y))",T(7.0),T(9.0),T(((7.0 + 2.0) - (3.0 + 9.0)))),
1493 test_xy<T>(
"((x - 2) - (3 - y))",T(7.0),T(9.0),T(((7.0 - 2.0) - (3.0 - 9.0)))),
1494 test_xy<T>(
"((2 * x) * (3 * y))",T(7.0),T(9.0),T(((2.0 * 7.0) * (3.0 * 9.0)))),
1495 test_xy<T>(
"((2 * x) / (3 * y))",T(7.0),T(9.0),T(((2.0 * 7.0) / (3.0 * 9.0)))),
1496 test_xy<T>(
"((2 / x) * (3 / y))",T(7.0),T(9.0),T(((2.0 / 7.0) * (3.0 / 9.0)))),
1497 test_xy<T>(
"((2 * x) / (3 / y))",T(7.0),T(9.0),T(((2.0 * 7.0) / (3.0 / 9.0)))),
1498 test_xy<T>(
"((2 / x) / (3 * y))",T(7.0),T(9.0),T(((2.0 / 7.0) / (3.0 * 9.0)))),
1499 test_xy<T>(
"((x * 2) / (y * 3))",T(7.0),T(9.0),T(((7.0 * 2.0) / (9.0 * 3.0)))),
1500 test_xy<T>(
"((x / 2) * (y / 3))",T(7.0),T(9.0),T(((7.0 / 2.0) * (9.0 / 3.0)))),
1501 test_xy<T>(
"((x * 2) / (y / 3))",T(7.0),T(9.0),T(((7.0 * 2.0) / (9.0 / 3.0)))),
1502 test_xy<T>(
"((x / 2) / (y * 3))",T(7.0),T(9.0),T(((7.0 / 2.0) / (9.0 * 3.0)))),
1503 test_xy<T>(
"((2 * x) / (y * 3))",T(7.0),T(9.0),T(((2.0 * 7.0) / (9.0 * 3.0)))),
1504 test_xy<T>(
"((2 / x) * (y / 3))",T(7.0),T(9.0),T(((2.0 / 7.0) * (9.0 / 3.0)))),
1505 test_xy<T>(
"((2 * x) / (y / 3))",T(7.0),T(9.0),T(((2.0 * 7.0) / (9.0 / 3.0)))),
1506 test_xy<T>(
"((2 / x) / (y * 3))",T(7.0),T(9.0),T(((2.0 / 7.0) / (9.0 * 3.0)))),
1507 test_xy<T>(
"((x * 2) / (3 * y))",T(7.0),T(9.0),T(((7.0 * 2.0) / (3.0 * 9.0)))),
1508 test_xy<T>(
"((x / 2) * (3 / y))",T(7.0),T(9.0),T(((7.0 / 2.0) * (3.0 / 9.0)))),
1509 test_xy<T>(
"((x * 2) / (3 / y))",T(7.0),T(9.0),T(((7.0 * 2.0) / (3.0 / 9.0)))),
1510 test_xy<T>(
"((x / 2) / (3 * y))",T(7.0),T(9.0),T(((7.0 / 2.0) / (3.0 * 9.0)))),
1511 test_xy<T>(
"([(min(x,8) + y) + 3] - 4)",T(7.0),T(9.0),T((((
std::min(7.0,8.0) + 9.0) + 3.0) - 4.0))),
1512 test_xy<T>(
"([(min(x,8) + y) + 3] + 4)",T(7.0),T(9.0),T((((
std::min(7.0,8.0) + 9.0) + 3.0) + 4.0))),
1513 test_xy<T>(
"([(min(x,8) + y) + 3] * 4)",T(7.0),T(9.0),T((((
std::min(7.0,8.0) + 9.0) + 3.0) * 4.0))),
1514 test_xy<T>(
"([(min(x,8) + y) + 3] / 4)",T(7.0),T(9.0),T((((
std::min(7.0,8.0) + 9.0) + 3.0) / 4.0))),
1515 test_xy<T>(
"([(min(x,8) + y) - 3] - 4)",T(7.0),T(9.0),T((((
std::min(7.0,8.0) + 9.0) - 3.0) - 4.0))),
1516 test_xy<T>(
"([(min(x,8) + y) - 3] + 4)",T(7.0),T(9.0),T((((
std::min(7.0,8.0) + 9.0) - 3.0) + 4.0))),
1517 test_xy<T>(
"([(min(x,8) + y) - 3] * 4)",T(7.0),T(9.0),T((((
std::min(7.0,8.0) + 9.0) - 3.0) * 4.0))),
1518 test_xy<T>(
"([(min(x,8) + y) - 3] / 4)",T(7.0),T(9.0),T((((
std::min(7.0,8.0) + 9.0) - 3.0) / 4.0))),
1519 test_xy<T>(
"([(min(x,8) + y) * 3] - 4)",T(7.0),T(9.0),T((((
std::min(7.0,8.0) + 9.0) * 3.0) - 4.0))),
1520 test_xy<T>(
"([(min(x,8) + y) * 3] + 4)",T(7.0),T(9.0),T((((
std::min(7.0,8.0) + 9.0) * 3.0) + 4.0))),
1521 test_xy<T>(
"([(min(x,8) + y) * 3] * 4)",T(7.0),T(9.0),T((((
std::min(7.0,8.0) + 9.0) * 3.0) * 4.0))),
1522 test_xy<T>(
"([(min(x,8) + y) * 3] / 4)",T(7.0),T(9.0),T((((
std::min(7.0,8.0) + 9.0) * 3.0) / 4.0))),
1523 test_xy<T>(
"([(min(x,8) + y) / 3] - 4)",T(7.0),T(9.0),T((((
std::min(7.0,8.0) + 9.0) / 3.0) - 4.0))),
1524 test_xy<T>(
"([(min(x,8) + y) / 3] + 4)",T(7.0),T(9.0),T((((
std::min(7.0,8.0) + 9.0) / 3.0) + 4.0))),
1525 test_xy<T>(
"([(min(x,8) + y) / 3] * 4)",T(7.0),T(9.0),T((((
std::min(7.0,8.0) + 9.0) / 3.0) * 4.0))),
1526 test_xy<T>(
"([(min(x,8) + y) / 3] / 4)",T(7.0),T(9.0),T((((
std::min(7.0,8.0) + 9.0) / 3.0) / 4.0))),
1527 test_xy<T>(
"(4 - [3 + (min(x,8) + y)])",T(7.0),T(9.0),T((4.0 - (3.0 + (
std::min(7.0,8.0) + 9.0))))),
1528 test_xy<T>(
"(4 + [3 + (min(x,8) + y)])",T(7.0),T(9.0),T((4.0 + (3.0 + (
std::min(7.0,8.0) + 9.0))))),
1529 test_xy<T>(
"(4 * [3 + (min(x,8) + y)])",T(7.0),T(9.0),T((4.0 * (3.0 + (
std::min(7.0,8.0) + 9.0))))),
1530 test_xy<T>(
"(4 / [3 + (min(x,8) + y)])",T(7.0),T(9.0),T((4.0 / (3.0 + (
std::min(7.0,8.0) + 9.0))))),
1531 test_xy<T>(
"(4 - [3 - (min(x,8) + y)])",T(7.0),T(9.0),T((4.0 - (3.0 - (
std::min(7.0,8.0) + 9.0))))),
1532 test_xy<T>(
"(4 + [3 - (min(x,8) + y)])",T(7.0),T(9.0),T((4.0 + (3.0 - (
std::min(7.0,8.0) + 9.0))))),
1533 test_xy<T>(
"(4 * [3 - (min(x,8) + y)])",T(7.0),T(9.0),T((4.0 * (3.0 - (
std::min(7.0,8.0) + 9.0))))),
1534 test_xy<T>(
"(4 / [3 - (min(x,8) + y)])",T(7.0),T(9.0),T((4.0 / (3.0 - (
std::min(7.0,8.0) + 9.0))))),
1535 test_xy<T>(
"(4 - [3 * (min(x,8) + y)])",T(7.0),T(9.0),T((4.0 - (3.0 * (
std::min(7.0,8.0) + 9.0))))),
1536 test_xy<T>(
"(4 + [3 * (min(x,8) + y)])",T(7.0),T(9.0),T((4.0 + (3.0 * (
std::min(7.0,8.0) + 9.0))))),
1537 test_xy<T>(
"(4 * [3 * (min(x,8) + y)])",T(7.0),T(9.0),T((4.0 * (3.0 * (
std::min(7.0,8.0) + 9.0))))),
1538 test_xy<T>(
"(4 / [3 * (min(x,8) + y)])",T(7.0),T(9.0),T((4.0 / (3.0 * (
std::min(7.0,8.0) + 9.0))))),
1539 test_xy<T>(
"(4 - [3 / (min(x,8) + y)])",T(7.0),T(9.0),T((4.0 - (3.0 / (
std::min(7.0,8.0) + 9.0))))),
1540 test_xy<T>(
"(4 + [3 / (min(x,8) + y)])",T(7.0),T(9.0),T((4.0 + (3.0 / (
std::min(7.0,8.0) + 9.0))))),
1541 test_xy<T>(
"(4 * [3 / (min(x,8) + y)])",T(7.0),T(9.0),T((4.0 * (3.0 / (
std::min(7.0,8.0) + 9.0))))),
1542 test_xy<T>(
"(4 / [3 / (min(x,8) + y)])",T(7.0),T(9.0),T((4.0 / (3.0 / (
std::min(7.0,8.0) + 9.0))))),
1543 test_xy<T>(
"((2 * x) + (2 * y))",T(7.0),T(9.0),T(((2.0 * 7.0) + (2.0 * 9.0)))),
1544 test_xy<T>(
"((2 * x) - (2 * y))",T(7.0),T(9.0),T(((2.0 * 7.0) - (2.0 * 9.0)))),
1545 test_xy<T>(
"((2 * x) + (y * 2))",T(7.0),T(9.0),T(((2.0 * 7.0) + (9.0 * 2.0)))),
1546 test_xy<T>(
"((x * 2) - (y * 2))",T(7.0),T(9.0),T(((7.0 * 2.0) - (9.0 * 2.0)))),
1547 test_xy<T>(
"0 * (abs (x) + acos (y) + asin (x) + atan (y))",T(1.0),T(1.0),T(0.0)),
1548 test_xy<T>(
"0 * (ceil (x) + cos (y) + cosh (x) + exp (y))",T(1.0),T(1.0),T(0.0)),
1549 test_xy<T>(
"0 * (floor(x) + log (y) + log10(x) + round(y))",T(1.0),T(1.0),T(0.0)),
1550 test_xy<T>(
"0 * (sin (x) + sinh (y) + sqrt (x) + tan (y))",T(1.0),T(1.0),T(0.0)),
1551 test_xy<T>(
"0 * (sec (x) + csc (y) + tanh (x) + cot (y))",T(1.0),T(1.0),T(0.0)),
1552 test_xy<T>(
"0 * (erf (x) + erfc (y) + sgn (y) + frac (y))",T(1.0),T(1.0),T(0.0)),
1553 test_xy<T>(
"0 * (log1p(x) + expm1(y) + acosh(x) + asinh(y))",T(1.0),T(1.0),T(0.0)),
1554 test_xy<T>(
"0 * (deg2grad(x) + grad2deg(y) + rad2deg(x) + deg2rad(y))",T(1.0),T(1.0),T(0.0)),
1555 test_xy<T>(
"switch { case (x <= y) : (y - x); default: 1.12345; }",T(1.0),T(2.0),T(1.0)),
1556 test_xy<T>(
"switch { case (x > y) : 0; case (x <= y) : (y - x); default: 1.12345; }",T(1.0),T(2.0),T(1.0)),
1557 test_xy<T>(
"switch { case (x <= y) : switch { case (x <= y) : (y - x); default: 1.12345; }; default: 1.12345; }",T(1.0),T(2.0),T(1.0)),
1558 test_xy<T>(
"switch { case [x <= y] : [y - x]; default: 1.12345; }",T(1.0),T(2.0),T(1.0)),
1559 test_xy<T>(
"switch { case [x > y] : 0; case [x <= y] : [y - x]; default: 1.12345; }",T(1.0),T(2.0),T(1.0)),
1560 test_xy<T>(
"switch { case [x <= y] : switch { case [x <= y] : {y - x}; default: 1.12345; }; default: 1.12345; }",T(1.0),T(2.0),T(1.0)),
1561 test_xy<T>(
"switch { case {x <= y} : x; default: 1.12345; }",T(1.0),T(2.0),T(1.0)),
1562 test_xy<T>(
"switch { case {x > y} : 0; case {x <= y} : {y - x}; default: 1.12345; }",T(1.0),T(2.0),T(1.0)),
1563 test_xy<T>(
"switch { case {x <= y} : switch { case {x <= y} : x; default: 1.12345; }; default: 1.12345; }",T(1.0),T(2.0),T(1.0)),
1564 test_xy<T>(
"switch { case [(x <= y)] : {y - x}; default: 1.12345; }",T(1.0),T(2.0),T(1.0)),
1565 test_xy<T>(
"switch { case ([x > y]) : [0]; case ([x <= y]) : [y - x]; default: 1.12345; }",T(1.0),T(2.0),T(1.0)),
1566 test_xy<T>(
"switch { case {(x <= y)} : switch { case ({x <= y}) : x; default: 1.12345; }; default: 1.12345; }",T(1.0),T(2.0),T(1.0)),
1567 test_xy<T>(
"[*]{ case x < y : x + y; case y < x : y - x; }",T(2.0),T(3.0),T(5.0)),
1568 test_xy<T>(
"[*]{ case x > y : x + y; case y > x : y - x; }",T(2.0),T(3.0),T(1.0)),
1569 test_xy<T>(
"[*]{ case x > y : x - y; case y < x : y + x; }",T(2.0),T(3.0),T(0.0)),
1570 test_xy<T>(
"0 ? x : y" ,T(1.0),T(2.0),T( 2.0)),
1571 test_xy<T>(
"1 ? x : y" ,T(1.0),T(2.0),T( 1.0)),
1572 test_xy<T>(
"x ? x : y" ,T(1.0),T(2.0),T( 1.0)),
1573 test_xy<T>(
"x ? x : y" ,T(0.0),T(2.0),T( 2.0)),
1574 test_xy<T>(
"(x + y < 4) ? 1 : 2" ,T(1.0),T(2.0),T( 1.0)),
1575 test_xy<T>(
"(x + y > 4) ? 1 : 2" ,T(1.0),T(2.0),T( 2.0)),
1576 test_xy<T>(
"x < y ? x + y : x - y" ,T(1.0),T(2.0),T( 3.0)),
1577 test_xy<T>(
"x > y ? x + y : x - y" ,T(1.0),T(2.0),T(-1.0)),
1578 test_xy<T>(
"(x + x < y ? 7 : 9) == 7" ,T(1.0),T(3.0),T( 1.0)),
1579 test_xy<T>(
"(x + x < y + y ? 7 : 9) == 7" ,T(1.0),T(3.0),T( 1.0)),
1580 test_xy<T>(
"(x > y + y ? 7 : 9) == 9" ,T(1.0),T(3.0),T( 1.0)),
1581 test_xy<T>(
"(x + x > y ? 7 : 9) == 9" ,T(1.0),T(3.0),T( 1.0)),
1582 test_xy<T>(
"(x + x > y + 3 ? 7 : 9) == 9" ,T(1.0),T(3.0),T( 1.0)),
1583 test_xy<T>(
"(x < (y + y) ? 7 : 9) == 7" ,T(1.0),T(3.0),T( 1.0)),
1584 test_xy<T>(
"((x + x) < y ? 7 : 9) == 7" ,T(1.0),T(3.0),T( 1.0)),
1585 test_xy<T>(
"((x + x) < (y + y) ? 7 : 9) == 7",T(1.0),T(3.0),T( 1.0)),
1586 test_xy<T>(
"(x += 2 ) == 3 " ,T(1),T(3),T(1)),
1587 test_xy<T>(
"(x += 2y) == 7 " ,T(1),T(3),T(1)),
1588 test_xy<T>(
"(x -= 2 ) == -1 " ,T(1),T(3),T(1)),
1589 test_xy<T>(
"(x -= 2y) == -5 " ,T(1),T(3),T(1)),
1590 test_xy<T>(
"(x *= 2 ) == 2 " ,T(1),T(3),T(1)),
1591 test_xy<T>(
"(x *= 2y) == 6 " ,T(1),T(3),T(1)),
1592 test_xy<T>(
"(x /= 2 ) == (1/2)" ,T(1),T(3),T(1)),
1593 test_xy<T>(
"(x /= 2y) == (1/6)" ,T(1),T(3),T(1)),
1594 test_xy<T>(
"for(var i := 0; (i < 10);) { i += 1; }; x;" ,T(1),T(20),T( 1)),
1595 test_xy<T>(
"for(var i := 0; (i < 10) and (i != y); i+=2) { x += i; }; x;" ,T(1),T(20),T(21)),
1596 test_xy<T>(
"for(var i := 0; (i < 10) and (i != y);) { x += i; i+=2; }; x;",T(1),T(20),T(21)),
1597 test_xy<T>(
"for(var i := 0; (i < y); i += 1) { if (i <= (y / 2)) x += i; else break; }; x;" ,T(0),T(10),T(15)),
1598 test_xy<T>(
"for(var i := 0; (i < y); i += 1) { if (i <= (y / 2)) continue; else x += i; }; x;" ,T(0),T(10),T(30)),
1599 test_xy<T>(
"var a := 2; (0 * a) == 0",T(0),T(0),T(1)),
1600 test_xy<T>(
"var a := 2; (0 / a) == 0",T(0),T(0),T(1)),
1601 test_xy<T>(
"var a := 2; (a * 0) == 0",T(0),T(0),T(1)),
1602 test_xy<T>(
"var a := 2; (a / 1) == a",T(0),T(0),T(1)),
1603 test_xy<T>(
"var a := 2; (0 + a) == a",T(0),T(0),T(1)),
1604 test_xy<T>(
"var a := 2; (a + 0) == a",T(0),T(0),T(1)),
1605 test_xy<T>(
"var a := 2; (1 * a) == a",T(0),T(0),T(1)),
1606 test_xy<T>(
"var a.b := 3; (2 * a.b ) == 6",T(0),T(0),T(1)),
1607 test_xy<T>(
"var aa.bb := 3; (2 * aa.bb ) == 6",T(0),T(0),T(1)),
1608 test_xy<T>(
"var aaa.bbb := 3; (2 * aAa.BbB) == 6",T(0),T(0),T(1)),
1609 test_xy<T>(
"var a1.b2 := 3; (2 * a1.b2 ) == 6",T(0),T(0),T(1))
1612 static const std::size_t test_list_size =
sizeof(test_list) /
sizeof(
test_xy<T>);
1614 const std::size_t rounds = 60;
1616 for (std::size_t r = 0; r < rounds; ++r)
1618 bool loop_result =
true;
1620 for (std::size_t i = 0; i < test_list_size; ++i)
1639 printf(
"run_test01() - Error: %s Expression: %s\n",
1643 loop_result =
false;
1649 T result = expression.
value();
1653 printf(
"run_test01() - Computation Error: Expression: [%s]\tExpected: %19.15f\tResult: %19.15f\n",
1658 loop_result =
false;
1672 test_xyzw<T>(
"((x / y) / z )",T(7.0),T(9.0),T(3.0),T(0.0),T(((7.0 / 9.0) / 3.0 ))),
1673 test_xyzw<T>(
"((x / y) / 2 )",T(7.0),T(9.0),T(3.0),T(0.0),T(((7.0 / 9.0) / 2.0 ))),
1674 test_xyzw<T>(
"((x / 2) / y )",T(7.0),T(9.0),T(3.0),T(0.0),T(((7.0 / 2.0) / 9.0 ))),
1675 test_xyzw<T>(
"((2 / x) / y )",T(7.0),T(9.0),T(3.0),T(0.0),T(((2.0 / 7.0) / 9.0 ))),
1676 test_xyzw<T>(
"( x / (y / z))",T(7.0),T(9.0),T(3.0),T(0.0),T(( 7.0 / (9.0 / 3.0)))),
1677 test_xyzw<T>(
"( x / (y / 2))",T(7.0),T(9.0),T(3.0),T(0.0),T(( 7.0 / (9.0 / 2.0)))),
1678 test_xyzw<T>(
"( x / (2 / y))",T(7.0),T(9.0),T(3.0),T(0.0),T(( 7.0 / (2.0 / 9.0)))),
1679 test_xyzw<T>(
"( 2 / (x / y))",T(7.0),T(9.0),T(3.0),T(0.0),T(( 2.0 / (7.0 / 9.0)))),
1680 test_xyzw<T>(
"([(min(x,y) + z) + 3] - 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((
std::min(5.0,7.0) + 9.0) + 3.0) - 4.0))),
1681 test_xyzw<T>(
"([(min(x,y) + z) + 3] + 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((
std::min(5.0,7.0) + 9.0) + 3.0) + 4.0))),
1682 test_xyzw<T>(
"([(min(x,y) + z) + 3] * 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((
std::min(5.0,7.0) + 9.0) + 3.0) * 4.0))),
1683 test_xyzw<T>(
"([(min(x,y) + z) + 3] / 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((
std::min(5.0,7.0) + 9.0) + 3.0) / 4.0))),
1684 test_xyzw<T>(
"([(min(x,y) + z) - 3] - 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((
std::min(5.0,7.0) + 9.0) - 3.0) - 4.0))),
1685 test_xyzw<T>(
"([(min(x,y) + z) - 3] + 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((
std::min(5.0,7.0) + 9.0) - 3.0) + 4.0))),
1686 test_xyzw<T>(
"([(min(x,y) + z) - 3] * 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((
std::min(5.0,7.0) + 9.0) - 3.0) * 4.0))),
1687 test_xyzw<T>(
"([(min(x,y) + z) - 3] / 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((
std::min(5.0,7.0) + 9.0) - 3.0) / 4.0))),
1688 test_xyzw<T>(
"([(min(x,y) + z) * 3] - 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((
std::min(5.0,7.0) + 9.0) * 3.0) - 4.0))),
1689 test_xyzw<T>(
"([(min(x,y) + z) * 3] + 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((
std::min(5.0,7.0) + 9.0) * 3.0) + 4.0))),
1690 test_xyzw<T>(
"([(min(x,y) + z) * 3] * 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((
std::min(5.0,7.0) + 9.0) * 3.0) * 4.0))),
1691 test_xyzw<T>(
"([(min(x,y) + z) * 3] / 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((
std::min(5.0,7.0) + 9.0) * 3.0) / 4.0))),
1692 test_xyzw<T>(
"([(min(x,y) + z) / 3] - 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((
std::min(5.0,7.0) + 9.0) / 3.0) - 4.0))),
1693 test_xyzw<T>(
"([(min(x,y) + z) / 3] + 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((
std::min(5.0,7.0) + 9.0) / 3.0) + 4.0))),
1694 test_xyzw<T>(
"([(min(x,y) + z) / 3] * 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((
std::min(5.0,7.0) + 9.0) / 3.0) * 4.0))),
1695 test_xyzw<T>(
"([(min(x,y) + z) / 3] / 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((
std::min(5.0,7.0) + 9.0) / 3.0) / 4.0))),
1696 test_xyzw<T>(
"(4 - [3 + (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 - (3.0 + (
std::min(5.0,7.0) + 9.0))))),
1697 test_xyzw<T>(
"(4 + [3 + (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 + (3.0 + (
std::min(5.0,7.0) + 9.0))))),
1698 test_xyzw<T>(
"(4 * [3 + (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 * (3.0 + (
std::min(5.0,7.0) + 9.0))))),
1699 test_xyzw<T>(
"(4 / [3 + (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 / (3.0 + (
std::min(5.0,7.0) + 9.0))))),
1700 test_xyzw<T>(
"(4 - [3 - (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 - (3.0 - (
std::min(5.0,7.0) + 9.0))))),
1701 test_xyzw<T>(
"(4 + [3 - (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 + (3.0 - (
std::min(5.0,7.0) + 9.0))))),
1702 test_xyzw<T>(
"(4 * [3 - (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 * (3.0 - (
std::min(5.0,7.0) + 9.0))))),
1703 test_xyzw<T>(
"(4 / [3 - (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 / (3.0 - (
std::min(5.0,7.0) + 9.0))))),
1704 test_xyzw<T>(
"(4 - [3 * (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 - (3.0 * (
std::min(5.0,7.0) + 9.0))))),
1705 test_xyzw<T>(
"(4 + [3 * (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 + (3.0 * (
std::min(5.0,7.0) + 9.0))))),
1706 test_xyzw<T>(
"(4 * [3 * (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 * (3.0 * (
std::min(5.0,7.0) + 9.0))))),
1707 test_xyzw<T>(
"(4 / [3 * (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 / (3.0 * (
std::min(5.0,7.0) + 9.0))))),
1708 test_xyzw<T>(
"(4 - [3 / (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 - (3.0 / (
std::min(5.0,7.0) + 9.0))))),
1709 test_xyzw<T>(
"(4 + [3 / (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 + (3.0 / (
std::min(5.0,7.0) + 9.0))))),
1710 test_xyzw<T>(
"(4 * [3 / (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 * (3.0 / (
std::min(5.0,7.0) + 9.0))))),
1711 test_xyzw<T>(
"(4 / [3 / (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 / (3.0 / (
std::min(5.0,7.0) + 9.0))))),
1712 test_xyzw<T>(
"if (x < y) { z+2; z;} == z" ,T(1.0),T(2.0),T(3.0),T(4.0),T(1.0)),
1713 test_xyzw<T>(
"if (x > y) { z+2; z;} == null" ,T(1.0),T(2.0),T(3.0),T(4.0),T(1.0)),
1714 test_xyzw<T>(
"if (x < y) { z+2; z;} else w; == z" ,T(1.0),T(2.0),T(3.0),T(4.0),T(1.0)),
1715 test_xyzw<T>(
"if (x > y) { z+2; z;} else 1 + w; == (w + 1)" ,T(1.0),T(2.0),T(3.0),T(4.0),T(1.0)),
1716 test_xyzw<T>(
"if (x < y) { z+2; z;} else {1+2; w;} == z" ,T(1.0),T(2.0),T(3.0),T(4.0),T(1.0)),
1717 test_xyzw<T>(
"if (x > y) { z+2; z;} else {1+2; w;} == w" ,T(1.0),T(2.0),T(3.0),T(4.0),T(1.0)),
1718 test_xyzw<T>(
"if (x < y) { z+2; z;} else if (x < y) w; == z" ,T(1.0),T(2.0),T(3.0),T(4.0),T(1.0)),
1719 test_xyzw<T>(
"if (x > y) { z+2; z;} else if (x < y) 1 + w; == w + 1" ,T(1.0),T(2.0),T(3.0),T(4.0),T(1.0)),
1720 test_xyzw<T>(
"if (x > y) { z+2; z;} else if (x > y) w; == null" ,T(1.0),T(2.0),T(3.0),T(4.0),T(1.0)),
1721 test_xyzw<T>(
"if (x < y) { z+2; z;} else if (x < y) {w+2; w;} == z" ,T(1.0),T(2.0),T(3.0),T(4.0),T(1.0)),
1722 test_xyzw<T>(
"if (x > y) { z+2; z;} else if (x < y) {w+2; w;} == w" ,T(1.0),T(2.0),T(3.0),T(4.0),T(1.0)),
1723 test_xyzw<T>(
"if (x > y) { z+2; z;} else if (x > y) {w+2; w;} == null",T(1.0),T(2.0),T(3.0),T(4.0),T(1.0))
1726 static const std::size_t test_list_size =
sizeof(test_list) /
sizeof(
test_xyzw<T>);
1728 const std::size_t rounds = 60;
1730 for (std::size_t r = 0; r < rounds; ++r)
1732 bool loop_result =
true;
1733 for (std::size_t i = 0; i < test_list_size; ++i)
1738 symbol_table.add_variable(
"x",test.
x);
1739 symbol_table.add_variable(
"y",test.
y);
1740 symbol_table.add_variable(
"z",test.
z);
1741 symbol_table.add_variable(
"w",test.
w);
1751 printf(
"run_test01() - Error: %s Expression: %s\n",
1755 loop_result =
false;
1761 T result = expression.
value();
1765 printf(
"run_test01() - Computation Error: Expression: [%s]\tExpected: %19.15f\tResult: %19.15f\n",
1770 loop_result =
false;
1784 "((v[1] + x) == (x + v[1]))",
1785 "((v[0] += x) == x)",
1786 "((v[0] += x + y) == (x + y))",
1787 "((v[0] -= x) == -x)",
1788 "((v[0] -= (x + y)) == -(x + y))",
1789 "((v[1] + v[2]) == (v[3 - 1] + v[2 * 1/2]))",
1790 "(v[v[1]] == v[1])",
1791 "(v[1] += v[1]) == v[1 + 1]",
1792 "((v[i[1]] + x) == (x + v[i[1]]))",
1793 "((v[i[0]] += x) == x)",
1794 "((v[i[0]] += x + y) == (x + y))",
1795 "((v[i[0]] -= x) == -x)",
1796 "((v[i[0]] -= (x + y)) == -(x + y))",
1797 "((v[i[1]] + v[2]) == (v[i[3] - i[1]] + v[i[2] * 1/2]))",
1798 "(v[v[i[1]]] == v[i[1]])",
1799 "(v[i[1]] += v[i[1]]) == v[i[1] + 1]" 1802 const std::size_t expr_list_size =
sizeof(expr_list) /
sizeof(
std::string);
1804 const std::size_t rounds = 60;
1806 for (std::size_t r = 0; r < rounds; ++r)
1808 bool loop_result =
true;
1810 for (std::size_t i = 0; i < expr_list_size; ++i)
1812 T v[] = { T(0.0), T(1.1), T(2.2), T(3.3), T(4.4), T(5.5) };
1813 T index[] = { T(0) , T(1) , T(2) , T(3) , T(4) , T(5) };
1832 if (!
parser.compile(expr_list[i],expression))
1834 printf(
"run_test01() - Error: %s Expression: %s\n",
1836 expr_list[i].c_str());
1838 loop_result =
false;
1844 T result = expression.
value();
1848 printf(
"run_test01() - Computation Error: Expression: [%s]\tExpected: %19.15f\tResult: %19.15f\n",
1849 expr_list[i].c_str(),
1853 loop_result =
false;
1863 for (std::size_t r = 0; r < rounds; ++r)
1865 bool loop_result =
true;
1867 for (std::size_t i = 0; i < expr_list_size; ++i)
1869 T v_[] = { T(0.0), T(1.1), T(2.2), T(3.3), T(4.4), T(5.5) };
1870 T index_[] = { T(0) , T(1) , T(2) , T(3) , T(4) , T(5) };
1892 if (!
parser.compile(expr_list[i],expression))
1894 printf(
"run_test01() - Error: %s Expression: %s\n",
1896 expr_list[i].c_str());
1898 loop_result =
false;
1904 T result = expression.
value();
1908 printf(
"run_test01() - Computation Error: Expression: [%s]\tExpected: %19.15f\tResult: %19.15f\n",
1909 expr_list[i].c_str(),
1912 loop_result =
false;
1926 template <
typename T>
1944 template <
typename T>
1956 test_ab<T>(
"'aaa' + '123' == 'aaa123'" ,
"",
"",T(1.0)),
1957 test_ab<T>(
"'aaa123' == 'aaa' + '123'" ,
"",
"",T(1.0)),
1958 test_ab<T>(
"('aaa' + '123') == 'aaa123'" ,
"",
"",T(1.0)),
1959 test_ab<T>(
"'aaa123' == ('aaa' + '123')" ,
"",
"",T(1.0)),
1960 test_ab<T>(
"'aaa' in 'aaa123'" ,
"",
"",T(1.0)),
1961 test_ab<T>(
"'123' in 'aaa123'" ,
"",
"",T(1.0)),
1962 test_ab<T>(
"'a123b' like '*123*'" ,
"",
"",T(1.0)),
1963 test_ab<T>(
"'a123b' like '*123?'" ,
"",
"",T(1.0)),
1964 test_ab<T>(
"'1XYZ2' ilike '*xyz*'" ,
"",
"",T(1.0)),
1965 test_ab<T>(
"'1XYZ2' ilike '*xyz?'" ,
"",
"",T(1.0)),
1966 test_ab<T>(
"inrange('aaa','bbb','ccc')" ,
"",
"",T(1.0)),
1975 test_ab<T>(
"a == 'aaa'" ,
"aaa",
"aaa",T(1.0)),
1976 test_ab<T>(
"'aaa' == a" ,
"aaa",
"aaa",T(1.0)),
1977 test_ab<T>(
"a != 'bbb'" ,
"aaa",
"bbb",T(1.0)),
1978 test_ab<T>(
"'bbb' != a" ,
"aaa",
"bbb",T(1.0)),
1980 test_ab<T>(
"a <= 'bbb'" ,
"aaa",
"bbb",T(1.0)),
1982 test_ab<T>(
"'bbb' >= a" ,
"aaa",
"bbb",T(1.0)),
1983 test_ab<T>(
"a in 'aaa123'" ,
"aaa",
"aaa123",T(1.0)),
1984 test_ab<T>(
"a in 'aaa123'" ,
"123",
"aaa123",T(1.0)),
1985 test_ab<T>(
"'aaa' in b" ,
"aaa",
"aaa123",T(1.0)),
1986 test_ab<T>(
"'123' in b" ,
"aaa",
"aaa123",T(1.0)),
1987 test_ab<T>(
"(a < b) or (a == b)" ,
"aaa",
"bbb",T(1.0)),
1988 test_ab<T>(
"(a == b) or (a < b)" ,
"aaa",
"bbb",T(1.0)),
1989 test_ab<T>(
"(b > a) or (b == a)" ,
"aaa",
"bbb",T(1.0)),
1990 test_ab<T>(
"(b == a) or (b > a)" ,
"aaa",
"bbb",T(1.0)),
1991 test_ab<T>(
"(a < b) and (b > a)" ,
"aaa",
"bbb",T(1.0)),
1992 test_ab<T>(
"a like '*123*'" ,
"a123b",
"",T(1.0)),
1993 test_ab<T>(
"a like '*123?'" ,
"a123b",
"",T(1.0)),
1994 test_ab<T>(
"'a123b' like b" ,
"a123b",
"*123*",T(1.0)),
1995 test_ab<T>(
"'a123b' like b" ,
"a123b",
"*123?",T(1.0)),
1996 test_ab<T>(
"a ilike '*xyz*'" ,
"1XYZ2",
"",T(1.0)),
1997 test_ab<T>(
"a ilike '*xyz?'" ,
"1XYZ2",
"",T(1.0)),
1998 test_ab<T>(
"'1XYZ2' ilike b" ,
"",
"*xyz*",T(1.0)),
1999 test_ab<T>(
"'1XYZ2' ilike b" ,
"",
"*xyz?",T(1.0)),
2000 test_ab<T>(
"inrange(a,'bbb',c)" ,
"aaa",
"bbb",T(1.0)),
2001 test_ab<T>(
"inrange('aaa',b,'ccc')" ,
"aaa",
"bbb",T(1.0)),
2002 test_ab<T>(
"inrange(a,b,c)" ,
"aaa",
"bbb",T(1.0)),
2003 test_ab<T>(
"inrange(a,b,'ccc')" ,
"aaa",
"bbb",T(1.0)),
2004 test_ab<T>(
"inrange('aaa',b,c)" ,
"aaa",
"bbb",T(1.0)),
2005 test_ab<T>(
"inrange('aaa',b,c)" ,
"aaa",
"bbb",T(1.0)),
2006 test_ab<T>(
"(a < b ? a : b) == a" ,
"aaa",
"bbb",T(1.0)),
2007 test_ab<T>(
"(a > b ? a : b) == b" ,
"aaa",
"bbb",T(1.0)),
2008 test_ab<T>(
"(a == (a + '1') ? a : b) == b" ,
"aaa",
"bbb",T(1.0)),
2009 test_ab<T>(
"((a + '2') != a ? a : b) == a" ,
"aaa",
"bbb",T(1.0)),
2010 test_ab<T>(
"(a < b ? a + '1' : b) == 'aaa1'",
"aaa",
"bbb",T(1.0)),
2011 test_ab<T>(
"(a > b ? a : b + '2') == 'bbb2'",
"aaa",
"bbb",T(1.0)),
2012 test_ab<T>(
"b == (a == (a + '1') ? a : b)" ,
"aaa",
"bbb",T(1.0)),
2013 test_ab<T>(
"a == (a != (a + '2') ? a : b)" ,
"aaa",
"bbb",T(1.0)),
2014 test_ab<T>(
"'aaa1' == (a < b ? a + '1' : b)",
"aaa",
"bbb",T(1.0)),
2015 test_ab<T>(
"'bbb2' == (a > b ? a : b + '2')",
"aaa",
"bbb",T(1.0)),
2016 test_ab<T>(
"(a < b ? a[1:2] : b) == '23'" ,
"1234",
"67890",T(1.0)),
2017 test_ab<T>(
"(a > b ? a : b[0:3]) == '6789'" ,
"1234",
"67890",T(1.0)),
2018 test_ab<T>(
"~{var x := 'xxx'; var y := 'yyy';~{(x < y ? x : y) == x }}",
"",
"",T(1.0)),
2019 test_ab<T>(
"~{var x := 'xxx'; var y := 'yyy';~{(x > y ? x : y) == y }}",
"",
"",T(1.0)),
2020 test_ab<T>(
"~{var x := 'xxx'; var y := 'yyy';~{(x == (x + '1') ? x : y) == y }}",
"",
"",T(1.0)),
2021 test_ab<T>(
"~{var x := 'xxx'; var y := 'yyy';~{((x + '2') != x ? x : y) == x }}",
"",
"",T(1.0)),
2022 test_ab<T>(
"~{var x := 'xxx'; var y := 'yyy';~{(x < y ? x + '1' : y) == 'xxx1'}}",
"",
"",T(1.0)),
2023 test_ab<T>(
"~{var x := 'xxx'; var y := 'yyy';~{(x > y ? x : y + '2') == 'yyy2'}}",
"",
"",T(1.0)),
2024 test_ab<T>(
"~{var x := 'xxx'; var y := 'yyy';~{y == (x == (x + '1') ? x : y) }}",
"",
"",T(1.0)),
2025 test_ab<T>(
"~{var x := 'xxx'; var y := 'yyy';~{x == (x != (x + '2') ? x : y) }}",
"",
"",T(1.0)),
2026 test_ab<T>(
"~{var x := 'xxx'; var y := 'yyy';~{'xxx1' == (x < y ? x + '1' : y)}}",
"",
"",T(1.0)),
2027 test_ab<T>(
"~{var x := 'xxx'; var y := 'yyy';~{'yyy2' == (x > y ? x : y + '2')}}",
"",
"",T(1.0)),
2028 test_ab<T>(
"'01234567890123456789'[0:9] == '0123456789' ",
"",
"",T(1.0)),
2029 test_ab<T>(
"'01234567890123456789'[0:9] == '0123456789'[:] ",
"",
"",T(1.0)),
2030 test_ab<T>(
"'01234567890123456789'[0:9] == '0123456789'[0:]",
"",
"",T(1.0)),
2031 test_ab<T>(
"'01234567890123456789'[0:9] == '0123456789'[:9]",
"",
"",T(1.0)),
2032 test_ab<T>(
"'01234567890123456789'[:9] == '0123456789'[:9]",
"",
"",T(1.0)),
2033 test_ab<T>(
"'01234567890123456789'[10:] == '0123456789'[:] ",
"",
"",T(1.0)),
2034 test_ab<T>(
"'01234567890123456789'[0:9] != '123456789' ",
"",
"",T(1.0)),
2035 test_ab<T>(
"'01234567890123456789'[0:9] != '123456789'[:] ",
"",
"",T(1.0)),
2036 test_ab<T>(
"'01234567890123456789'[0:9] != '123456789'[0:] ",
"",
"",T(1.0)),
2037 test_ab<T>(
"'01234567890123456789'[0:9] != '123456789'[:8] ",
"",
"",T(1.0)),
2038 test_ab<T>(
"'01234567890123456789'[:9] != '123456789'[:8] ",
"",
"",T(1.0)),
2039 test_ab<T>(
"'01234567890123456789'[10:] != '123456789'[:] ",
"",
"",T(1.0)),
2040 test_ab<T>(
"'01234567890123456789'[2*6:10+6] == '23456' ",
"",
"",T(1.0)),
2041 test_ab<T>(
"'0123456789' == '01234567890123456789'[0:9]",
"",
"",T(1.0)),
2042 test_ab<T>(
"'0123456789'[:] == '01234567890123456789'[0:9]",
"",
"",T(1.0)),
2043 test_ab<T>(
"'0123456789'[0:] == '01234567890123456789'[0:9]",
"",
"",T(1.0)),
2044 test_ab<T>(
"'0123456789'[:9] == '01234567890123456789'[0:9]",
"",
"",T(1.0)),
2045 test_ab<T>(
"'0123456789'[:9] == '01234567890123456789'[:9] ",
"",
"",T(1.0)),
2046 test_ab<T>(
"'0123456789'[:] == '01234567890123456789'[10:]",
"",
"",T(1.0)),
2047 test_ab<T>(
"'0123456789'[3:3] == '3'[:] ",
"",
"",T(1.0)),
2048 test_ab<T>(
"'0123456789'[3:3] == '3'[0:0] ",
"",
"",T(1.0)),
2049 test_ab<T>(
"'123456789' != '01234567890123456789'[0:9]",
"",
"",T(1.0)),
2050 test_ab<T>(
"'123456789'[:] != '01234567890123456789'[0:9]",
"",
"",T(1.0)),
2051 test_ab<T>(
"'123456789'[0:] != '01234567890123456789'[0:9]",
"",
"",T(1.0)),
2052 test_ab<T>(
"'123456789'[:8] != '01234567890123456789'[0:9]",
"",
"",T(1.0)),
2053 test_ab<T>(
"'123456789'[:8] != '01234567890123456789'[:9] ",
"",
"",T(1.0)),
2054 test_ab<T>(
"'123456789'[:] != '01234567890123456789'[10:]",
"",
"",T(1.0)),
2055 test_ab<T>(
"'23456' == '01234567890123456789'[2*6:10+6] ",
"",
"",T(1.0)),
2056 test_ab<T>(
"'01234567890123456789'[r0: 6] == '23456' ",
"",
"",T(1.0)),
2057 test_ab<T>(
"'01234567890123456789'[2: r1] == '23456' ",
"",
"",T(1.0)),
2058 test_ab<T>(
"'01234567890123456789'[r0:3*2] == '23456' ",
"",
"",T(1.0)),
2059 test_ab<T>(
"'01234567890123456789'[1+1:r1] == '23456' ",
"",
"",T(1.0)),
2060 test_ab<T>(
"'01234567890123456789'[r0: ] == '234567890123456789' ",
"",
"",T(1.0)),
2061 test_ab<T>(
"'01234567890123456789'[: r1] == '0123456' ",
"",
"",T(1.0)),
2062 test_ab<T>(
"'01234567890123456789'[r0:r1] == '23456' ",
"",
"",T(1.0)),
2063 test_ab<T>(
"'01234567890123456789'[r0:r1+2] == '2345678' ",
"",
"",T(1.0)),
2064 test_ab<T>(
"'01234567890123456789'[r0+2:r1] == '456' ",
"",
"",T(1.0)),
2065 test_ab<T>(
"'01234567890123456789'[r1-r0:] == '4567890123456789' ",
"",
"",T(1.0)),
2066 test_ab<T>(
"'01234567890123456789'[:r1-r0] == '01234' ",
"",
"",T(1.0)),
2067 test_ab<T>(
"'23456' == '01234567890123456789'[r0: 6] ",
"",
"",T(1.0)),
2068 test_ab<T>(
"'23456' == '01234567890123456789'[2: r1] ",
"",
"",T(1.0)),
2069 test_ab<T>(
"'23456' == '01234567890123456789'[r0:3*2] ",
"",
"",T(1.0)),
2070 test_ab<T>(
"'23456' == '01234567890123456789'[1+1:r1] ",
"",
"",T(1.0)),
2071 test_ab<T>(
"'234567890123456789' == '01234567890123456789'[r0: ] ",
"",
"",T(1.0)),
2072 test_ab<T>(
"'0123456' == '01234567890123456789'[: r1] ",
"",
"",T(1.0)),
2073 test_ab<T>(
"'23456' == '01234567890123456789'[r0:r1] ",
"",
"",T(1.0)),
2074 test_ab<T>(
"'2345678' == '01234567890123456789'[r0:r1+2] ",
"",
"",T(1.0)),
2075 test_ab<T>(
"'456' == '01234567890123456789'[r0+2:r1] ",
"",
"",T(1.0)),
2076 test_ab<T>(
"'4567890123456789' == '01234567890123456789'[r1-r0:] ",
"",
"",T(1.0)),
2077 test_ab<T>(
"'01234' == '01234567890123456789'[:r1-r0] ",
"",
"",T(1.0)),
2078 test_ab<T>(
"a[r0: 6] == '23456' ",
"01234567890123456789",
"",T(1.0)),
2079 test_ab<T>(
"a[2: r1] == '23456' ",
"01234567890123456789",
"",T(1.0)),
2080 test_ab<T>(
"a[r0:3*2] == '23456' ",
"01234567890123456789",
"",T(1.0)),
2081 test_ab<T>(
"a[1+1:r1] == '23456' ",
"01234567890123456789",
"",T(1.0)),
2082 test_ab<T>(
"a[r0: ] == '234567890123456789' ",
"01234567890123456789",
"",T(1.0)),
2083 test_ab<T>(
"a[: r1] == '0123456' ",
"01234567890123456789",
"",T(1.0)),
2084 test_ab<T>(
"a[r0:r1] == '23456' ",
"01234567890123456789",
"",T(1.0)),
2085 test_ab<T>(
"a[r0:r1+2] == '2345678' ",
"01234567890123456789",
"",T(1.0)),
2086 test_ab<T>(
"a[r0+2:r1] == '456' ",
"01234567890123456789",
"",T(1.0)),
2087 test_ab<T>(
"a[r1-r0:] == '4567890123456789' ",
"01234567890123456789",
"",T(1.0)),
2088 test_ab<T>(
"a[:r1-r0] == '01234' ",
"01234567890123456789",
"",T(1.0)),
2089 test_ab<T>(
"'23456' == a[r0: 6] ",
"01234567890123456789",
"",T(1.0)),
2090 test_ab<T>(
"'23456' == a[2: r1] ",
"01234567890123456789",
"",T(1.0)),
2091 test_ab<T>(
"'23456' == a[r0:3*2] ",
"01234567890123456789",
"",T(1.0)),
2092 test_ab<T>(
"'23456' == a[1+1:r1] ",
"01234567890123456789",
"",T(1.0)),
2093 test_ab<T>(
"'234567890123456789' == a[r0: ] ",
"01234567890123456789",
"",T(1.0)),
2094 test_ab<T>(
"'0123456' == a[: r1] ",
"01234567890123456789",
"",T(1.0)),
2095 test_ab<T>(
"'23456' == a[r0:r1] ",
"01234567890123456789",
"",T(1.0)),
2096 test_ab<T>(
"'2345678' == a[r0:r1+2] ",
"01234567890123456789",
"",T(1.0)),
2097 test_ab<T>(
"'456' == a[r0+2:r1] ",
"01234567890123456789",
"",T(1.0)),
2098 test_ab<T>(
"'4567890123456789' == a[r1-r0:] ",
"01234567890123456789",
"",T(1.0)),
2099 test_ab<T>(
"'01234' == a[:r1-r0] ",
"01234567890123456789",
"",T(1.0)),
2100 test_ab<T>(
"a[r0: 6] == b ",
"01234567890123456789",
"23456",T(1.0)),
2101 test_ab<T>(
"a[2: r1] == b ",
"01234567890123456789",
"23456",T(1.0)),
2102 test_ab<T>(
"a[r0:3*2] == b ",
"01234567890123456789",
"23456",T(1.0)),
2103 test_ab<T>(
"a[1+1:r1] == b ",
"01234567890123456789",
"23456",T(1.0)),
2104 test_ab<T>(
"a[r0: ] == b ",
"01234567890123456789",
"234567890123456789",T(1.0)),
2105 test_ab<T>(
"a[: r1] == b ",
"01234567890123456789",
"0123456",T(1.0)),
2106 test_ab<T>(
"a[r0:r1] == b ",
"01234567890123456789",
"23456",T(1.0)),
2107 test_ab<T>(
"a[r0:r1+2] == b ",
"01234567890123456789",
"2345678",T(1.0)),
2108 test_ab<T>(
"a[r0+2:r1] == b ",
"01234567890123456789",
"456",T(1.0)),
2109 test_ab<T>(
"a[r1-r0:] == b ",
"01234567890123456789",
"4567890123456789",T(1.0)),
2110 test_ab<T>(
"a[:r1-r0] == b ",
"01234567890123456789",
"01234",T(1.0)),
2111 test_ab<T>(
"b == a[r0: 6] ",
"01234567890123456789",
"23456",T(1.0)),
2112 test_ab<T>(
"b == a[2: r1] ",
"01234567890123456789",
"23456",T(1.0)),
2113 test_ab<T>(
"b == a[r0:3*2] ",
"01234567890123456789",
"23456",T(1.0)),
2114 test_ab<T>(
"b == a[1+1:r1] ",
"01234567890123456789",
"23456",T(1.0)),
2115 test_ab<T>(
"b == a[r0: ] ",
"01234567890123456789",
"234567890123456789",T(1.0)),
2116 test_ab<T>(
"b == a[: r1] ",
"01234567890123456789",
"0123456",T(1.0)),
2117 test_ab<T>(
"b == a[r0:r1] ",
"01234567890123456789",
"23456",T(1.0)),
2118 test_ab<T>(
"b == a[r0:r1+2] ",
"01234567890123456789",
"2345678",T(1.0)),
2119 test_ab<T>(
"b == a[r0+2:r1] ",
"01234567890123456789",
"456",T(1.0)),
2120 test_ab<T>(
"b == a[r1-r0:] ",
"01234567890123456789",
"4567890123456789",T(1.0)),
2121 test_ab<T>(
"b == a[:r1-r0] ",
"01234567890123456789",
"01234",T(1.0)),
2122 test_ab<T>(
"'01234567890123456789'[0:9] == a ",
"0123456789",
"",T(1.0)),
2123 test_ab<T>(
"'01234567890123456789'[0:9] == a[:] ",
"0123456789",
"",T(1.0)),
2124 test_ab<T>(
"'01234567890123456789'[0:9] == a[0:] ",
"0123456789",
"",T(1.0)),
2125 test_ab<T>(
"'01234567890123456789'[0:9] == a[:9] ",
"0123456789",
"",T(1.0)),
2126 test_ab<T>(
"'01234567890123456789'[:9] == a[:9] ",
"0123456789",
"",T(1.0)),
2127 test_ab<T>(
"'01234567890123456789'[10:] == a[:] ",
"0123456789",
"",T(1.0)),
2128 test_ab<T>(
"'01234567890123456789'[0:9] != a ",
"123456789" ,
"",T(1.0)),
2129 test_ab<T>(
"'01234567890123456789'[0:9] != a[:] ",
"123456789" ,
"",T(1.0)),
2130 test_ab<T>(
"'01234567890123456789'[0:9] != a[0:] ",
"123456789" ,
"",T(1.0)),
2131 test_ab<T>(
"'01234567890123456789'[0:9] != a[:8] ",
"123456789" ,
"",T(1.0)),
2132 test_ab<T>(
"'01234567890123456789'[:9] != a[:8] ",
"123456789" ,
"",T(1.0)),
2133 test_ab<T>(
"'01234567890123456789'[10:] != a[:] ",
"123456789" ,
"",T(1.0)),
2134 test_ab<T>(
"'01234567890123456789'[2*6:10+6] == a",
"23456" ,
"",T(1.0)),
2135 test_ab<T>(
"'23456' == a[:] ",
"23456" ,
"",T(1.0)),
2136 test_ab<T>(
"a == '01234567890123456789'[0:9] ",
"0123456789",
"",T(1.0)),
2137 test_ab<T>(
"a[:] == '01234567890123456789'[0:9] ",
"0123456789",
"",T(1.0)),
2138 test_ab<T>(
"a[0:] == '01234567890123456789'[0:9] ",
"0123456789",
"",T(1.0)),
2139 test_ab<T>(
"a[:9] == '01234567890123456789'[0:9] ",
"0123456789",
"",T(1.0)),
2140 test_ab<T>(
"a[:9] == '01234567890123456789'[:9] ",
"0123456789",
"",T(1.0)),
2141 test_ab<T>(
"a[:] == '01234567890123456789'[10:] ",
"0123456789",
"",T(1.0)),
2142 test_ab<T>(
"a != '01234567890123456789'[0:9] ",
"123456789" ,
"",T(1.0)),
2143 test_ab<T>(
"a[:] != '01234567890123456789'[0:9] ",
"123456789" ,
"",T(1.0)),
2144 test_ab<T>(
"a[0:] != '01234567890123456789'[0:9] ",
"123456789" ,
"",T(1.0)),
2145 test_ab<T>(
"a[:8] != '01234567890123456789'[0:9] ",
"123456789" ,
"",T(1.0)),
2146 test_ab<T>(
"a[:8] != '01234567890123456789'[:9] ",
"123456789" ,
"",T(1.0)),
2147 test_ab<T>(
"a[:] != '01234567890123456789'[10:] ",
"123456789" ,
"",T(1.0)),
2148 test_ab<T>(
"a == '01234567890123456789'[2*6:10+6]",
"23456" ,
"",T(1.0)),
2149 test_ab<T>(
"a[:] == '23456' ",
"23456" ,
"",T(1.0)),
2150 test_ab<T>(
"a[0:9] == b ",
"01234567890123456789",
"0123456789",T(1.0)),
2151 test_ab<T>(
"a[0:9] == b[:] ",
"01234567890123456789",
"0123456789",T(1.0)),
2152 test_ab<T>(
"a[0:9] == b[0:] ",
"01234567890123456789",
"0123456789",T(1.0)),
2153 test_ab<T>(
"a[0:9] == b[:9] ",
"01234567890123456789",
"0123456789",T(1.0)),
2154 test_ab<T>(
"a[:9] == b[:9] ",
"01234567890123456789",
"0123456789",T(1.0)),
2155 test_ab<T>(
"a[10:] == b[:] ",
"01234567890123456789",
"0123456789",T(1.0)),
2156 test_ab<T>(
"a[0:9] != b ",
"01234567890123456789",
"123456789" ,T(1.0)),
2157 test_ab<T>(
"a[0:9] != b[:] ",
"01234567890123456789",
"123456789" ,T(1.0)),
2158 test_ab<T>(
"a[0:9] != b[0:] ",
"01234567890123456789",
"123456789" ,T(1.0)),
2159 test_ab<T>(
"a[0:9] != b[:8] ",
"01234567890123456789",
"123456789" ,T(1.0)),
2160 test_ab<T>(
"a[:9] != b[:8] ",
"01234567890123456789",
"123456789" ,T(1.0)),
2161 test_ab<T>(
"a[10:] != b[:] ",
"01234567890123456789",
"123456789" ,T(1.0)),
2162 test_ab<T>(
"a[2*6:10+6] == b ",
"01234567890123456789",
"23456" ,T(1.0)),
2163 test_ab<T>(
"b == a[0:9] ",
"01234567890123456789",
"0123456789",T(1.0)),
2164 test_ab<T>(
"b[:] == a[0:9] ",
"01234567890123456789",
"0123456789",T(1.0)),
2165 test_ab<T>(
"b[0:] == a[0:9] ",
"01234567890123456789",
"0123456789",T(1.0)),
2166 test_ab<T>(
"b[:9] == a[0:9] ",
"01234567890123456789",
"0123456789",T(1.0)),
2167 test_ab<T>(
"b[:9] == a[:9] ",
"01234567890123456789",
"0123456789",T(1.0)),
2168 test_ab<T>(
"b[:] == a[10:] ",
"01234567890123456789",
"0123456789",T(1.0)),
2169 test_ab<T>(
"b != a[0:9] ",
"01234567890123456789",
"123456789" ,T(1.0)),
2170 test_ab<T>(
"b[:] != a[0:9] ",
"01234567890123456789",
"123456789" ,T(1.0)),
2171 test_ab<T>(
"b[0:] != a[0:9] ",
"01234567890123456789",
"123456789" ,T(1.0)),
2172 test_ab<T>(
"b[:8] != a[0:9] ",
"01234567890123456789",
"123456789" ,T(1.0)),
2173 test_ab<T>(
"b[:8] != a[:9] ",
"01234567890123456789",
"123456789" ,T(1.0)),
2174 test_ab<T>(
"b[:] != a[10:] ",
"01234567890123456789",
"123456789" ,T(1.0)),
2175 test_ab<T>(
"b == a[2*6:10+6] ",
"01234567890123456789",
"23456" ,T(1.0)),
2176 test_ab<T>(
"a[2:6] == b" ,
"0123456789",
"23456" ,T(1.0)),
2177 test_ab<T>(
"a == b[2:6]" ,
"23456",
"0123456789" ,T(1.0)),
2178 test_ab<T>(
"a[1+1:2*3] == b" ,
"0123456789",
"23456" ,T(1.0)),
2179 test_ab<T>(
"a == b[4/2:sqrt(36)]",
"23456",
"0123456789" ,T(1.0)),
2180 test_ab<T>(
"a[0:6] == b" ,
"0123456789",
"0123456",T(1.0)),
2181 test_ab<T>(
"a[:6] == b" ,
"0123456789",
"0123456",T(1.0)),
2182 test_ab<T>(
"a[4/2-2:2+4] == b" ,
"0123456789",
"0123456",T(1.0)),
2183 test_ab<T>(
"a[:12/2] == b" ,
"0123456789",
"0123456",T(1.0)),
2184 test_ab<T>(
"a[0:] == b" ,
"0123456",
"0123456" ,T(1.0)),
2185 test_ab<T>(
"a[:] == b" ,
"0123456",
"0123456" ,T(1.0)),
2186 test_ab<T>(
"a == b[0:6]" ,
"0123456",
"0123456789",T(1.0)),
2187 test_ab<T>(
"a == b[:6]" ,
"0123456",
"0123456789",T(1.0)),
2188 test_ab<T>(
"a == b[4/2-2:2+4]" ,
"0123456",
"0123456789",T(1.0)),
2189 test_ab<T>(
"a == b[:12/2]" ,
"0123456",
"0123456789",T(1.0)),
2190 test_ab<T>(
"a == b[0:]" ,
"0123456",
"0123456" ,T(1.0)),
2191 test_ab<T>(
"a == b[:]" ,
"0123456",
"0123456" ,T(1.0)),
2192 test_ab<T>(
"a[:9] == b[0:9]" ,
"0123456789",
"01234567890123456789",T(1.0)),
2193 test_ab<T>(
"a[0:9] == b[0:9]" ,
"0123456789",
"01234567890123456789",T(1.0)),
2194 test_ab<T>(
"a[0:] == b[0:9]" ,
"0123456789",
"01234567890123456789",T(1.0)),
2195 test_ab<T>(
"a[:] == b[0:9]" ,
"0123456789",
"01234567890123456789",T(1.0)),
2196 test_ab<T>(
"a[:] == b[10:]" ,
"0123456789",
"01234567890123456789",T(1.0)),
2197 test_ab<T>(
"'!@#$%^&*([{}])-=' != ')]}{[(*&^%$#@!'",
"",
"",T(1.0)),
2198 test_ab<T>(
"('!@#$%^&*([{}])-=') != (')]}{[(*&^%$#@!')",
"",
"",T(1.0)),
2199 test_ab<T>(
"{[('a')]} == [{('a')}]",
"",
"",T(1.0)),
2200 test_ab<T>(
"{[('!@#$%^&*([{}])-=')]} != [{(')]}{[(*&^%$#@!')}]",
"",
"",T(1.0)),
2201 test_ab<T>(
"'!@#$%^&*([{}])-=' == '!@#$%^&*([{}])-='",
"",
"",T(1.0)),
2202 test_ab<T>(
"('!@#$%^&*([{}])-=') == ('!@#$%^&*([{}])-=')",
"",
"",T(1.0)),
2203 test_ab<T>(
"{[('!@#$%^&*([{}])-=')]} == [{('!@#$%^&*([{}])-=')}]",
"",
"",T(1.0)),
2204 test_ab<T>(
"'1234\\\\abc\nxyz\r890\tqaz\\'567' == a",
"1234\\abc\nxyz\r890\tqaz'567",
"",T(1.0)),
2205 test_ab<T>(
"a == '1234\\\\abc\nxyz\r890\tqaz\\'567'",
"1234\\abc\nxyz\r890\tqaz'567",
"",T(1.0)),
2208 test_ab<T>(
"'123'[] + '1234'[] == 7" ,
"",
"" ,T(1.0)),
2209 test_ab<T>(
"abs('123'[] - '1234'[]) == 1" ,
"",
"" ,T(1.0)),
2210 test_ab<T>(
"'1234'[] == a[]" ,
"1234",
"" ,T(1.0)),
2211 test_ab<T>(
"'123'[] + a[] == 7" ,
"1234",
"" ,T(1.0)),
2212 test_ab<T>(
"abs(a[] - '12345'[]) == 1" ,
"1234",
"" ,T(1.0)),
2213 test_ab<T>(
"'1234'[] + '12345'[] == a[] + b[]" ,
"1234",
"12345" ,T(1.0)),
2214 test_ab<T>(
"abs('123'[] -'1234'[]) == abs(a[] - b[])" ,
"1234",
"12345",T(1.0)),
2215 test_ab<T>(
"(a + b) == 'abc123' ",
"abc",
"123" ,T(1.0)),
2216 test_ab<T>(
"(a + '123') == 'abc123' ",
"abc",
"123" ,T(1.0)),
2217 test_ab<T>(
"('abc' + b) == 'abc123' ",
"abc",
"123" ,T(1.0)),
2218 test_ab<T>(
"(a + '1') == 'abc1' ",
"abc",
"123" ,T(1.0)),
2219 test_ab<T>(
"('a' + b) == 'a123' ",
"abc",
"123" ,T(1.0)),
2220 test_ab<T>(
"(a[2:7] + b) == 'cdefgh0123' ",
"abcdefghij",
"0123",T(1.0)),
2221 test_ab<T>(
"(a + b[2:7]) == 'abc234567' ",
"abc",
"0123456789" ,T(1.0)),
2222 test_ab<T>(
"(a[2:7] + '0123') == 'cdefgh0123' ",
"abcdefghij",
"0123",T(1.0)),
2223 test_ab<T>(
"('abc' + b[2:7]) == 'abc234567' ",
"abc",
"0123456789" ,T(1.0)),
2224 test_ab<T>(
"(a[2:2] + b[3:3]) == 'c3' ",
"abc",
"0123456789" ,T(1.0)),
2225 test_ab<T>(
"(a[3:] + b) == 'defghij0123' ",
"abcdefghij",
"0123",T(1.0)),
2226 test_ab<T>(
"('abc' + b[:7]) == 'abc01234567' ",
"abc",
"0123456789" ,T(1.0)),
2227 test_ab<T>(
"a + '123' == 'abc'+ b ",
"abc" ,
"123" , T(1.0)),
2228 test_ab<T>(
"a[0:2] + '123' == 'abc' + b[0:2] ",
"abcXYZ",
"123XYZ", T(1.0)),
2229 test_ab<T>(
"a[ :2] + '123' == 'abc' + b[ :2] ",
"abcXYZ",
"123XYZ", T(1.0)),
2230 test_ab<T>(
"a[3: ] + '123' == 'abc' + b[3: ]",
"XYZabc",
"XYZ123", T(1.0)),
2231 test_ab<T>(
"a[3:a[] - 1] + '123' == 'abc' + b[3:b[] - 1]",
"XYZabc",
"XYZ123", T(1.0)),
2232 test_ab<T>(
"(a[r0:r2] + b) == 'cdefgh0123' ",
"abcdefghij",
"0123",T(1.0)),
2233 test_ab<T>(
"(a + b[r0:r2]) == 'abc234567' ",
"abc",
"0123456789" ,T(1.0)),
2234 test_ab<T>(
"(a[r0:r2] + '0123') == 'cdefgh0123' ",
"abcdefghij",
"0123",T(1.0)),
2235 test_ab<T>(
"('abc' + b[r0:r2]) == 'abc234567' ",
"abc",
"0123456789" ,T(1.0)),
2236 test_ab<T>(
"(a[r0:r0] + b[r3:r3]) == 'c3' ",
"abc",
"0123456789" ,T(1.0)),
2237 test_ab<T>(
"(a[r3:] + b) == 'defghij0123' ",
"abcdefghij",
"0123",T(1.0)),
2238 test_ab<T>(
"('abc' + b[:r2]) == 'abc01234567' ",
"abc",
"0123456789" ,T(1.0)),
2239 test_ab<T>(
"a[0:r0] + '123' == 'abc' + b[0:r0] ",
"abcXYZ",
"123XYZ", T(1.0)),
2240 test_ab<T>(
"a[ :r0] + '123' == 'abc' + b[ :r0] ",
"abcXYZ",
"123XYZ", T(1.0)),
2241 test_ab<T>(
"a[r3: ] + '123' == 'abc' + b[r3: ]",
"XYZabc",
"XYZ123", T(1.0)),
2242 test_ab<T>(
"a[r3:a[] - 1] + '123' == 'abc' + b[r3:b[] - 1]",
"XYZabc",
"XYZ123", T(1.0)),
2243 test_ab<T>(
"(a[r0:r0] + b[r3:r0+1]) == 'c3' ",
"abc",
"0123456789" ,T(1.0)),
2244 test_ab<T>(
"(a[r0+1:] + b) == 'defghij0123' ",
"abcdefghij",
"0123",T(1.0)),
2245 test_ab<T>(
"a[r0+1: ] + '123' == 'abc' + b[r0+1: ]",
"XYZabc",
"XYZ123", T(1.0)),
2246 test_ab<T>(
"a[r0+1:a[] - 1] + '123' == 'abc' + b[r0+1:b[] - 1]",
"XYZabc",
"XYZ123", T(1.0)),
2247 test_ab<T>(
"(a + b)[ :13] == 'abcdefghij0123' ",
"abcdefghij",
"0123456789" ,T(1.0)),
2248 test_ab<T>(
"(a + b)[ 6: ] == 'ghij0123456789' ",
"abcdefghij",
"0123456789" ,T(1.0)),
2249 test_ab<T>(
"(a + b)[ 2:3r1-1] == 'cdefghij01234567' ",
"abcdefghij",
"0123456789" ,T(1.0)),
2250 test_ab<T>(
"(a[2:7] + b[2:7]) == 'cdefgh234567' ",
"abcdefghij",
"0123456789" ,T(1.0)),
2251 test_ab<T>(
"(a[2:7] + b[2:7])[3:8] == 'fgh234' ",
"abcdefghij",
"0123456789" ,T(1.0)),
2252 test_ab<T>(
"(a + b)[r0 - 2: r1 + r2] == 'abcdefghij0123' ",
"abcdefghij",
"0123456789" ,T(1.0)),
2253 test_ab<T>(
"(a + b)[r0*r3:] == 'ghij0123456789' ",
"abcdefghij",
"0123456789" ,T(1.0)),
2254 test_ab<T>(
"(a + b)[3r0: ] == 'ghij0123456789' ",
"abcdefghij",
"0123456789" ,T(1.0)),
2255 test_ab<T>(
"(a + b)[2r3: ] == 'ghij0123456789' ",
"abcdefghij",
"0123456789" ,T(1.0)),
2256 test_ab<T>(
"(a + b)[2:3r1 - 1] == 'cdefghij01234567' ",
"abcdefghij",
"0123456789" ,T(1.0)),
2257 test_ab<T>(
"(a[r0:7] + b[r0:r2])== 'cdefgh234567' ",
"abcdefghij",
"0123456789" ,T(1.0)),
2258 test_ab<T>(
"(a[r1 / r3:7] + b[r0:r2])[3:r2 + 1] == 'fgh234'",
"abcdefghij",
"0123456789" ,T(1.0)),
2259 test_ab<T>(
"(a += b) == 'abc123' ",
"abc",
"123" ,T(1.0)),
2260 test_ab<T>(
"(a += '123') == 'abc123' ",
"abc",
"123" ,T(1.0)),
2261 test_ab<T>(
"(a += b[3:5]) == 'abc123' ",
"abc",
"XXX123XXX" ,T(1.0)),
2262 test_ab<T>(
"(a += 'XXX123XXX'[3:5]) == 'abc123' ",
"abc",
"123" ,T(1.0)),
2263 test_ab<T>(
"(a += b)[:] == 'abc123' ",
"abc",
"123" ,T(1.0)),
2264 test_ab<T>(
"(a += '123')[:] == 'abc123' ",
"abc",
"123" ,T(1.0)),
2265 test_ab<T>(
"(a += b[3:5])[:] == 'abc123' ",
"abc",
"XXX123XXX" ,T(1.0)),
2266 test_ab<T>(
"(a += 'XXX123XXX'[3:5])[:] == 'abc123' ",
"abc",
"123" ,T(1.0)),
2267 test_ab<T>(
"(a += b[r1/2:r1-1]) == 'abc123' ",
"abc",
"XXX123XXX" ,T(1.0)),
2268 test_ab<T>(
"(a += 'XXX123XXX'[r0+1:r1-1]) == 'abc123' ",
"abc",
"123" ,T(1.0)),
2269 test_ab<T>(
"(a += b)[] == 6 ",
"abc",
"123" ,T(1.0)),
2270 test_ab<T>(
"(a += '123')[] == 6 ",
"abc",
"123" ,T(1.0)),
2271 test_ab<T>(
"(a += b[3:5])[] == 6 ",
"abc",
"XXX123XXX" ,T(1.0)),
2272 test_ab<T>(
"(a += b[r0+1:r1-1])[] == 6 ",
"abc",
"XXX123XXX" ,T(1.0)),
2273 test_ab<T>(
"(a + b)[:][] == 6 ",
"abc",
"123" ,T(1.0)),
2274 test_ab<T>(
"(a + b)[:][:][] == 6 ",
"abc",
"123" ,T(1.0)),
2275 test_ab<T>(
"(a + b)[:][:][:][] == 6 ",
"abc",
"123" ,T(1.0)),
2276 test_ab<T>(
"(a + b)[:][:][:][:][] == 6 ",
"abc",
"123" ,T(1.0)),
2277 test_ab<T>(
"(a + b)[:][:][:][:][:][] == 6 ",
"abc",
"123" ,T(1.0)),
2278 test_ab<T>(
"(a + b)[:][:][:][:][:][:][] == 6 ",
"abc",
"123" ,T(1.0)),
2279 test_ab<T>(
"(a + b)[:][:][:][:][:][:][:][]== 6 ",
"abc",
"123" ,T(1.0)),
2280 test_ab<T>(
"(a + b)[0:5] == 'abc123' ",
"abc",
"123" ,T(1.0)),
2281 test_ab<T>(
"(a + b)[0:5][1:4] == 'bc12' ",
"abc",
"123" ,T(1.0)),
2282 test_ab<T>(
"(a + b)[0:5][1:4][1:2] == 'c1' ",
"abc",
"123" ,T(1.0)),
2283 test_ab<T>(
"(a + b)[0:5][1:4][1:2][0:0] == 'c' ",
"abc",
"123" ,T(1.0)),
2284 test_ab<T>(
"(a + b)[0:5][] == 6 ",
"abc",
"123" ,T(1.0)),
2285 test_ab<T>(
"(a + b)[0:5][1:4][] == 4 ",
"abc",
"123" ,T(1.0)),
2286 test_ab<T>(
"(a + b)[0:5][1:4][1:2][] == 2 ",
"abc",
"123" ,T(1.0)),
2287 test_ab<T>(
"(a + b)[0:5][1:4][1:2][0:0][] == 1 ",
"abc",
"123" ,T(1.0)),
2288 test_ab<T>(
"(a[ : ] := b); (a == 'ABCDEFGHIJ');",
"0123456789",
"ABCDEFGHIJ" ,T(1.0)),
2289 test_ab<T>(
"(a[0: ] := b); (a == 'ABCDEFGHIJ');",
"0123456789",
"ABCDEFGHIJ" ,T(1.0)),
2290 test_ab<T>(
"(a[ :9] := b); (a == 'ABCDEFGHIJ');",
"0123456789",
"ABCDEFGHIJ" ,T(1.0)),
2291 test_ab<T>(
"(a[3:7] := b); (a == '012ABCDE89');",
"0123456789",
"ABCDEFGHIJ" ,T(1.0)),
2292 test_ab<T>(
"(a[2:8] := b); (a == '01ABCDEFG9');",
"0123456789",
"ABCDEFGHIJ" ,T(1.0)),
2293 test_ab<T>(
"(a[1:9] := b); (a == '0ABCDEFGHI');",
"0123456789",
"ABCDEFGHIJ" ,T(1.0)),
2294 test_ab<T>(
"(a[0:0] := b); (a == 'A123456789');",
"0123456789",
"ABCDEFGHIJ" ,T(1.0)),
2295 test_ab<T>(
"(a[1:1] := b); (a == '0A23456789');",
"0123456789",
"ABCDEFGHIJ" ,T(1.0)),
2296 test_ab<T>(
"(a[2:2] := b); (a == '01A3456789');",
"0123456789",
"ABCDEFGHIJ" ,T(1.0)),
2297 test_ab<T>(
"(a[3:3] := b); (a == '012A456789');",
"0123456789",
"ABCDEFGHIJ" ,T(1.0)),
2298 test_ab<T>(
"(a[4:4] := b); (a == '0123A56789');",
"0123456789",
"ABCDEFGHIJ" ,T(1.0)),
2299 test_ab<T>(
"(a[5:5] := b); (a == '01234A6789');",
"0123456789",
"ABCDEFGHIJ" ,T(1.0)),
2300 test_ab<T>(
"(a[6:6] := b); (a == '012345A789');",
"0123456789",
"ABCDEFGHIJ" ,T(1.0)),
2301 test_ab<T>(
"(a[7:7] := b); (a == '0123456A89');",
"0123456789",
"ABCDEFGHIJ" ,T(1.0)),
2302 test_ab<T>(
"(a[8:8] := b); (a == '01234567A9');",
"0123456789",
"ABCDEFGHIJ" ,T(1.0)),
2303 test_ab<T>(
"(a[9:9] := b); (a == '012345678A');",
"0123456789",
"ABCDEFGHIJ" ,T(1.0)),
2304 test_ab<T>(
"(a[0:1] := b); (a == 'AB23456789');",
"0123456789",
"ABCDEFGHIJ" ,T(1.0)),
2305 test_ab<T>(
"(a[1:2] := b); (a == '0AB3456789');",
"0123456789",
"ABCDEFGHIJ" ,T(1.0)),
2306 test_ab<T>(
"(a[2:3] := b); (a == '01AB456789');",
"0123456789",
"ABCDEFGHIJ" ,T(1.0)),
2307 test_ab<T>(
"(a[3:4] := b); (a == '012AB56789');",
"0123456789",
"ABCDEFGHIJ" ,T(1.0)),
2308 test_ab<T>(
"(a[4:5] := b); (a == '0123AB6789');",
"0123456789",
"ABCDEFGHIJ" ,T(1.0)),
2309 test_ab<T>(
"(a[5:6] := b); (a == '01234AB789');",
"0123456789",
"ABCDEFGHIJ" ,T(1.0)),
2310 test_ab<T>(
"(a[6:7] := b); (a == '012345AB89');",
"0123456789",
"ABCDEFGHIJ" ,T(1.0)),
2311 test_ab<T>(
"(a[7:8] := b); (a == '0123456AB9');",
"0123456789",
"ABCDEFGHIJ" ,T(1.0)),
2312 test_ab<T>(
"(a[8:9] := b); (a == '01234567AB');",
"0123456789",
"ABCDEFGHIJ" ,T(1.0)),
2313 test_ab<T>(
"(a[ : ] := b[3:b[] - 3]); (a == 'ABCDEFGHIJ');",
"0123456789",
"xyzABCDEFGHIJxyz",T(1.0)),
2314 test_ab<T>(
"(a[0: ] := b[3:b[] - 3]); (a == 'ABCDEFGHIJ');",
"0123456789",
"xyzABCDEFGHIJxyz",T(1.0)),
2315 test_ab<T>(
"(a[ :9] := b[3:b[] - 3]); (a == 'ABCDEFGHIJ');",
"0123456789",
"xyzABCDEFGHIJxyz",T(1.0)),
2316 test_ab<T>(
"(a[3:7] := b[3:b[] - 3]); (a == '012ABCDE89');",
"0123456789",
"xyzABCDEFGHIJxyz",T(1.0)),
2317 test_ab<T>(
"(a[2:8] := b[3:b[] - 3]); (a == '01ABCDEFG9');",
"0123456789",
"xyzABCDEFGHIJxyz",T(1.0)),
2318 test_ab<T>(
"(a[1:9] := b[3:b[] - 3]); (a == '0ABCDEFGHI');",
"0123456789",
"xyzABCDEFGHIJxyz",T(1.0)),
2319 test_ab<T>(
"(a[0:0] := b[3:b[] - 3]); (a == 'A123456789');",
"0123456789",
"xyzABCDEFGHIJxyz",T(1.0)),
2320 test_ab<T>(
"(a[1:1] := b[3:b[] - 3]); (a == '0A23456789');",
"0123456789",
"xyzABCDEFGHIJxyz",T(1.0)),
2321 test_ab<T>(
"(a[2:2] := b[3:b[] - 3]); (a == '01A3456789');",
"0123456789",
"xyzABCDEFGHIJxyz",T(1.0)),
2322 test_ab<T>(
"(a[3:3] := b[3:b[] - 3]); (a == '012A456789');",
"0123456789",
"xyzABCDEFGHIJxyz",T(1.0)),
2323 test_ab<T>(
"(a[4:4] := b[3:b[] - 3]); (a == '0123A56789');",
"0123456789",
"xyzABCDEFGHIJxyz",T(1.0)),
2324 test_ab<T>(
"(a[5:5] := b[3:b[] - 3]); (a == '01234A6789');",
"0123456789",
"xyzABCDEFGHIJxyz",T(1.0)),
2325 test_ab<T>(
"(a[6:6] := b[3:b[] - 3]); (a == '012345A789');",
"0123456789",
"xyzABCDEFGHIJxyz",T(1.0)),
2326 test_ab<T>(
"(a[7:7] := b[3:b[] - 3]); (a == '0123456A89');",
"0123456789",
"xyzABCDEFGHIJxyz",T(1.0)),
2327 test_ab<T>(
"(a[8:8] := b[3:b[] - 3]); (a == '01234567A9');",
"0123456789",
"xyzABCDEFGHIJxyz",T(1.0)),
2328 test_ab<T>(
"(a[9:9] := b[3:b[] - 3]); (a == '012345678A');",
"0123456789",
"xyzABCDEFGHIJxyz",T(1.0)),
2329 test_ab<T>(
"(a[0:1] := b[3:b[] - 3]); (a == 'AB23456789');",
"0123456789",
"xyzABCDEFGHIJxyz",T(1.0)),
2330 test_ab<T>(
"(a[1:2] := b[3:b[] - 3]); (a == '0AB3456789');",
"0123456789",
"xyzABCDEFGHIJxyz",T(1.0)),
2331 test_ab<T>(
"(a[2:3] := b[3:b[] - 3]); (a == '01AB456789');",
"0123456789",
"xyzABCDEFGHIJxyz",T(1.0)),
2332 test_ab<T>(
"(a[3:4] := b[3:b[] - 3]); (a == '012AB56789');",
"0123456789",
"xyzABCDEFGHIJxyz",T(1.0)),
2333 test_ab<T>(
"(a[4:5] := b[3:b[] - 3]); (a == '0123AB6789');",
"0123456789",
"xyzABCDEFGHIJxyz",T(1.0)),
2334 test_ab<T>(
"(a[5:6] := b[3:b[] - 3]); (a == '01234AB789');",
"0123456789",
"xyzABCDEFGHIJxyz",T(1.0)),
2335 test_ab<T>(
"(a[6:7] := b[3:b[] - 3]); (a == '012345AB89');",
"0123456789",
"xyzABCDEFGHIJxyz",T(1.0)),
2336 test_ab<T>(
"(a[7:8] := b[3:b[] - 3]); (a == '0123456AB9');",
"0123456789",
"xyzABCDEFGHIJxyz",T(1.0)),
2337 test_ab<T>(
"(a[8:9] := b[3:b[] - 3]); (a == '01234567AB');",
"0123456789",
"xyzABCDEFGHIJxyz",T(1.0)),
2338 test_ab<T>(
"(a[0:9] := b); (a == 'A123456789');",
"0123456789",
"A" ,T(1.0)),
2339 test_ab<T>(
"(a[0:9] := b); (a == 'AB23456789');",
"0123456789",
"AB" ,T(1.0)),
2340 test_ab<T>(
"(a[0:9] := b); (a == 'ABC3456789');",
"0123456789",
"ABC" ,T(1.0)),
2341 test_ab<T>(
"(a[0:9] := b); (a == 'ABCD456789');",
"0123456789",
"ABCD" ,T(1.0)),
2342 test_ab<T>(
"(a[0:9] := b); (a == 'ABCDE56789');",
"0123456789",
"ABCDE" ,T(1.0)),
2343 test_ab<T>(
"(a[0:9] := b); (a == 'ABCDEF6789');",
"0123456789",
"ABCDEF" ,T(1.0)),
2344 test_ab<T>(
"(a[0:9] := b); (a == 'ABCDEFG789');",
"0123456789",
"ABCDEFG" ,T(1.0)),
2345 test_ab<T>(
"(a[0:9] := b); (a == 'ABCDEFGH89');",
"0123456789",
"ABCDEFGH" ,T(1.0)),
2346 test_ab<T>(
"(a[0:9] := b); (a == 'ABCDEFGHI9');",
"0123456789",
"ABCDEFGHI" ,T(1.0)),
2347 test_ab<T>(
"(a[3:9] := b); (a == '012A456789');",
"0123456789",
"A" ,T(1.0)),
2348 test_ab<T>(
"(a[3:9] := b); (a == '012AB56789');",
"0123456789",
"AB" ,T(1.0)),
2349 test_ab<T>(
"(a[3:9] := b); (a == '012ABC6789');",
"0123456789",
"ABC" ,T(1.0)),
2350 test_ab<T>(
"(a[3:9] := b); (a == '012ABCD789');",
"0123456789",
"ABCD" ,T(1.0)),
2351 test_ab<T>(
"(a[3:9] := b); (a == '012ABCDE89');",
"0123456789",
"ABCDE" ,T(1.0)),
2352 test_ab<T>(
"(a[3:9] := b); (a == '012ABCDEF9');",
"0123456789",
"ABCDEF" ,T(1.0)),
2353 test_ab<T>(
"(a[r1 / r0:r2] := b[3:b[] - r3]); (a == '012ABCDE89');",
"0123456789",
"xyzABCDEFGHIJxyz",T(1.0)),
2354 test_ab<T>(
"(a[r0:r2 + 1] := b[r3:b[] - r3]); (a == '01ABCDEFG9');",
"0123456789",
"xyzABCDEFGHIJxyz",T(1.0)),
2355 test_ab<T>(
"'\\0x30\\0x31\\0x32\\0x33\\0x34\\0x35\\0x36\\0x37\\0x38\\0x39' == '0123456789'",
"",
"",T(1.0)),
2356 test_ab<T>(
"'abc\\0x30\\0x31\\0x32\\0x33xyz' == 'abc0123xyz'" ,
"",
"",T(1.0)),
2357 test_ab<T>(
"'\\0x30\\n\\0x31\\n\\0x32\\n\\0x33' == '0\\n1\\n2\\n3'" ,
"",
"",T(1.0)),
2358 test_ab<T>(
"('\\0x30' + '') == '0'" ,
"",
"",T(1.0)),
2359 test_ab<T>(
"('\\0x30' + '\\0x31\\0x32') == '012'" ,
"",
"",T(1.0)),
2360 test_ab<T>(
"('\\0x30' + '\\0x31\\0x32' + '\\0x33\\0x34\\0x35') == '012345'" ,
"",
"",T(1.0)),
2361 test_ab<T>(
"'a\\'\\\\b' == a" ,
"a'\\b",
"",T(1.0)),
2362 test_ab<T>(
"'a\\\\\\'b' == a" ,
"a\\'b",
"",T(1.0)),
2363 test_ab<T>(
"'a\\'\\\\\\\\b' == a" ,
"a'\\\\b",
"",T(1.0)),
2364 test_ab<T>(
"'a\\0x30\\'\\0x31\\\\\\0x32b' == a" ,
"a0'1\\2b",
"",T(1.0)),
2366 test_ab<T>(
"var x := 3; x > 2 and 'abc' like '*bc'" ,
"",
"",T(1.0)),
2367 test_ab<T>(
"var x := 3; x > 2 and 'abc' ilike '*Bc'" ,
"",
"",T(1.0)),
2368 test_ab<T>(
"var x := 3; x > 2 and 'abc' in '123abc123'",
"",
"",T(1.0)),
2370 test_ab<T>(
"var x := 3; var s := 'abc'; x > 2 and s like '*bc'" ,
"",
"",T(1.0)),
2371 test_ab<T>(
"var x := 3; var s := 'abc'; x > 2 and s ilike '*Bc'" ,
"",
"",T(1.0)),
2372 test_ab<T>(
"var x := 3; var s := 'abc'; x > 2 and s in '123abc123'",
"",
"",T(1.0)),
2374 test_ab<T>(
"var x := 3; var s := 'abc'; var t := '*bc'; x > 2 and s like t" ,
"",
"",T(1.0)),
2375 test_ab<T>(
"var x := 3; var s := 'abc'; var t := '*Bc'; x > 2 and s ilike t" ,
"",
"",T(1.0)),
2376 test_ab<T>(
"var x := 3; var s := 'abc'; var t := '123abc123'; x > 2 and s in t",
"",
"",T(1.0)),
2378 test_ab<T>(
"var x := 3; x > 2 and a like '*bc'" ,
"abc",
"",T(1.0)),
2379 test_ab<T>(
"var x := 3; x > 2 and a ilike '*Bc'" ,
"abc",
"",T(1.0)),
2380 test_ab<T>(
"var x := 3; x > 2 and a in '123abc123'",
"abc",
"",T(1.0)),
2382 test_ab<T>(
"var x := 3; x > 2 and a like b ",
"abc",
"*bc",T(1.0)),
2383 test_ab<T>(
"var x := 3; x > 2 and a ilike b",
"abc",
"*Bc",T(1.0)),
2384 test_ab<T>(
"var x := 3; x > 2 and a in b ",
"abc",
"123abc123",T(1.0)),
2386 test_ab<T>(
"a[] > 2 and a like '*bc'" ,
"abc",
"",T(1.0)),
2387 test_ab<T>(
"a[] > 2 and a ilike '*Bc'" ,
"abc",
"",T(1.0)),
2388 test_ab<T>(
"a[] > 2 and a in '123abc123'",
"abc",
"",T(1.0)),
2390 test_ab<T>(
"a[] > 2 and a like b ",
"abc",
"*bc",T(1.0)),
2391 test_ab<T>(
"a[] > 2 and a ilike b",
"abc",
"*Bc",T(1.0)),
2392 test_ab<T>(
"a[] > 2 and a in b ",
"abc",
"123abc123",T(1.0)),
2394 test_ab<T>(
"a[0:0] := b[ :]; a == '0XXXX'",
"XXXXX",
"01234567890",T(1.0)),
2395 test_ab<T>(
"a[0:1] := b[ :]; a == '01XXX'",
"XXXXX",
"01234567890",T(1.0)),
2396 test_ab<T>(
"a[0:2] := b[ :]; a == '012XX'",
"XXXXX",
"01234567890",T(1.0)),
2397 test_ab<T>(
"a[0:3] := b[ :]; a == '0123X'",
"XXXXX",
"01234567890",T(1.0)),
2398 test_ab<T>(
"a[0:4] := b[ :]; a == '01234'",
"XXXXX",
"01234567890",T(1.0)),
2399 test_ab<T>(
"a[0:0] := b[6:]; a == '6XXXX'",
"XXXXX",
"01234567890",T(1.0)),
2400 test_ab<T>(
"a[0:1] := b[6:]; a == '67XXX'",
"XXXXX",
"01234567890",T(1.0)),
2401 test_ab<T>(
"a[0:2] := b[6:]; a == '678XX'",
"XXXXX",
"01234567890",T(1.0)),
2402 test_ab<T>(
"a[0:3] := b[6:]; a == '6789X'",
"XXXXX",
"01234567890",T(1.0)),
2403 test_ab<T>(
"a[0:4] := b[6:]; a == '67890'",
"XXXXX",
"01234567890",T(1.0)),
2404 test_ab<T>(
"a[0:0] <=> b[ :]; (a == '0XXXX') and (b == 'X1234567890')",
"XXXXX",
"01234567890",T(1.0)),
2405 test_ab<T>(
"a[0:1] <=> b[ :]; (a == '01XXX') and (b == 'XX234567890')",
"XXXXX",
"01234567890",T(1.0)),
2406 test_ab<T>(
"a[0:2] <=> b[ :]; (a == '012XX') and (b == 'XXX34567890')",
"XXXXX",
"01234567890",T(1.0)),
2407 test_ab<T>(
"a[0:3] <=> b[ :]; (a == '0123X') and (b == 'XXXX4567890')",
"XXXXX",
"01234567890",T(1.0)),
2408 test_ab<T>(
"a[0:4] <=> b[ :]; (a == '01234') and (b == 'XXXXX567890')",
"XXXXX",
"01234567890",T(1.0)),
2409 test_ab<T>(
"a[0:0] <=> b[6:]; (a == '6XXXX') and (b == '012345X7890')",
"XXXXX",
"01234567890",T(1.0)),
2410 test_ab<T>(
"a[0:1] <=> b[6:]; (a == '67XXX') and (b == '012345XX890')",
"XXXXX",
"01234567890",T(1.0)),
2411 test_ab<T>(
"a[0:2] <=> b[6:]; (a == '678XX') and (b == '012345XXX90')",
"XXXXX",
"01234567890",T(1.0)),
2412 test_ab<T>(
"a[0:3] <=> b[6:]; (a == '6789X') and (b == '012345XXXX0')",
"XXXXX",
"01234567890",T(1.0)),
2413 test_ab<T>(
"a[0:4] <=> b[6:]; (a == '67890') and (b == '012345XXXXX')",
"XXXXX",
"01234567890",T(1.0)),
2414 test_ab<T>(
"var i := 0; a[0:i+0] := b[:]; a == '0XXXX'",
"XXXXX",
"01234567890",T(1.0)),
2415 test_ab<T>(
"var i := 0; a[0:i+1] := b[:]; a == '01XXX'",
"XXXXX",
"01234567890",T(1.0)),
2416 test_ab<T>(
"var i := 0; a[0:i+2] := b[:]; a == '012XX'",
"XXXXX",
"01234567890",T(1.0)),
2417 test_ab<T>(
"var i := 0; a[0:i+3] := b[:]; a == '0123X'",
"XXXXX",
"01234567890",T(1.0)),
2418 test_ab<T>(
"var i := 0; a[0:i+4] := b[:]; a == '01234'",
"XXXXX",
"01234567890",T(1.0)),
2419 test_ab<T>(
"var i := 0; a[0:i+0] <=> b[:]; (a == '0XXXX') and (b == 'X1234567890')",
"XXXXX",
"01234567890",T(1.0)),
2420 test_ab<T>(
"var i := 0; a[0:i+1] <=> b[:]; (a == '01XXX') and (b == 'XX234567890')",
"XXXXX",
"01234567890",T(1.0)),
2421 test_ab<T>(
"var i := 0; a[0:i+2] <=> b[:]; (a == '012XX') and (b == 'XXX34567890')",
"XXXXX",
"01234567890",T(1.0)),
2422 test_ab<T>(
"var i := 0; a[0:i+3] <=> b[:]; (a == '0123X') and (b == 'XXXX4567890')",
"XXXXX",
"01234567890",T(1.0)),
2423 test_ab<T>(
"var i := 0; a[0:i+4] <=> b[:]; (a == '01234') and (b == 'XXXXX567890')",
"XXXXX",
"01234567890",T(1.0)),
2425 test_ab<T>(
"var x := 'XXXXX'; var y := '01234567890'; x[0:0] := y[:]; x == '0XXXX'",
"",
"",T(1.0)),
2426 test_ab<T>(
"var x := 'XXXXX'; var y := '01234567890'; x[0:1] := y[:]; x == '01XXX'",
"",
"",T(1.0)),
2427 test_ab<T>(
"var x := 'XXXXX'; var y := '01234567890'; x[0:2] := y[:]; x == '012XX'",
"",
"",T(1.0)),
2428 test_ab<T>(
"var x := 'XXXXX'; var y := '01234567890'; x[0:3] := y[:]; x == '0123X'",
"",
"",T(1.0)),
2429 test_ab<T>(
"var x := 'XXXXX'; var y := '01234567890'; x[0:4] := y[:]; x == '01234'",
"",
"",T(1.0)),
2430 test_ab<T>(
"var x := 'XXXXX'; var y := '01234567890'; x[0:0] := y[6:]; x == '6XXXX'",
"",
"",T(1.0)),
2431 test_ab<T>(
"var x := 'XXXXX'; var y := '01234567890'; x[0:1] := y[6:]; x == '67XXX'",
"",
"",T(1.0)),
2432 test_ab<T>(
"var x := 'XXXXX'; var y := '01234567890'; x[0:2] := y[6:]; x == '678XX'",
"",
"",T(1.0)),
2433 test_ab<T>(
"var x := 'XXXXX'; var y := '01234567890'; x[0:3] := y[6:]; x == '6789X'",
"",
"",T(1.0)),
2434 test_ab<T>(
"var x := 'XXXXX'; var y := '01234567890'; x[0:4] := y[6:]; x == '67890'",
"",
"",T(1.0)),
2435 test_ab<T>(
"var x := 'XXXXX'; var y := '01234567890'; x[0:0] <=> y[:]; (x == '0XXXX') and (y == 'X1234567890')",
"",
"",T(1.0)),
2436 test_ab<T>(
"var x := 'XXXXX'; var y := '01234567890'; x[0:1] <=> y[:]; (x == '01XXX') and (y == 'XX234567890')",
"",
"",T(1.0)),
2437 test_ab<T>(
"var x := 'XXXXX'; var y := '01234567890'; x[0:2] <=> y[:]; (x == '012XX') and (y == 'XXX34567890')",
"",
"",T(1.0)),
2438 test_ab<T>(
"var x := 'XXXXX'; var y := '01234567890'; x[0:3] <=> y[:]; (x == '0123X') and (y == 'XXXX4567890')",
"",
"",T(1.0)),
2439 test_ab<T>(
"var x := 'XXXXX'; var y := '01234567890'; x[0:4] <=> y[:]; (x == '01234') and (y == 'XXXXX567890')",
"",
"",T(1.0)),
2440 test_ab<T>(
"var x := 'XXXXX'; var y := '01234567890'; x[0:0] <=> y[6:]; (x == '6XXXX') and (y == '012345X7890')",
"",
"",T(1.0)),
2441 test_ab<T>(
"var x := 'XXXXX'; var y := '01234567890'; x[0:1] <=> y[6:]; (x == '67XXX') and (y == '012345XX890')",
"",
"",T(1.0)),
2442 test_ab<T>(
"var x := 'XXXXX'; var y := '01234567890'; x[0:2] <=> y[6:]; (x == '678XX') and (y == '012345XXX90')",
"",
"",T(1.0)),
2443 test_ab<T>(
"var x := 'XXXXX'; var y := '01234567890'; x[0:3] <=> y[6:]; (x == '6789X') and (y == '012345XXXX0')",
"",
"",T(1.0)),
2444 test_ab<T>(
"var x := 'XXXXX'; var y := '01234567890'; x[0:4] <=> y[6:]; (x == '67890') and (y == '012345XXXXX')",
"",
"",T(1.0)),
2445 test_ab<T>(
"var x := 'XXXXX'; var y := '01234567890'; var i := 0; x[0:i+0] := y[:]; x == '0XXXX'",
"",
"",T(1.0)),
2446 test_ab<T>(
"var x := 'XXXXX'; var y := '01234567890'; var i := 0; x[0:i+1] := y[:]; x == '01XXX'",
"",
"",T(1.0)),
2447 test_ab<T>(
"var x := 'XXXXX'; var y := '01234567890'; var i := 0; x[0:i+2] := y[:]; x == '012XX'",
"",
"",T(1.0)),
2448 test_ab<T>(
"var x := 'XXXXX'; var y := '01234567890'; var i := 0; x[0:i+3] := y[:]; x == '0123X'",
"",
"",T(1.0)),
2449 test_ab<T>(
"var x := 'XXXXX'; var y := '01234567890'; var i := 0; x[0:i+4] := y[:]; x == '01234'",
"",
"",T(1.0)),
2450 test_ab<T>(
"var x := 'XXXXX'; var y := '01234567890'; var i := 0; x[0:i+0] <=> y[:]; (x == '0XXXX') and (y == 'X1234567890')",
"",
"",T(1.0)),
2451 test_ab<T>(
"var x := 'XXXXX'; var y := '01234567890'; var i := 0; x[0:i+1] <=> y[:]; (x == '01XXX') and (y == 'XX234567890')",
"",
"",T(1.0)),
2452 test_ab<T>(
"var x := 'XXXXX'; var y := '01234567890'; var i := 0; x[0:i+2] <=> y[:]; (x == '012XX') and (y == 'XXX34567890')",
"",
"",T(1.0)),
2453 test_ab<T>(
"var x := 'XXXXX'; var y := '01234567890'; var i := 0; x[0:i+3] <=> y[:]; (x == '0123X') and (y == 'XXXX4567890')",
"",
"",T(1.0)),
2454 test_ab<T>(
"var x := 'XXXXX'; var y := '01234567890'; var i := 0; x[0:i+4] <=> y[:]; (x == '01234') and (y == 'XXXXX567890')",
"",
"",T(1.0)),
2456 test_ab<T>(
"var v[4] := {1,2,3,4}; for (var i := 0; i < v[]; i += 1) { v[i] += 10; v[i] == 0 }; sum(v) == (1 + 2 + 3 + 4) + (v[] * 10)",
"",
"",T(1.0)),
2457 test_ab<T>(
"var v[4] := {1,2,3,4}; for (var i := 0; i < v[]; i += 1) { v[i] -= 10; v[i] == 0 }; sum(v) == (1 + 2 + 3 + 4) - (v[] * 10)",
"",
"",T(1.0)),
2458 test_ab<T>(
"var v[4] := {1,2,3,4}; for (var i := 0; i < v[]; i += 1) { v[i] *= 10; v[i] == 0 }; sum(v) == (1 + 2 + 3 + 4) * 10",
"",
"",T(1.0)),
2459 test_ab<T>(
"var v[4] := {1,2,3,4}; for (var i := 0; i < v[]; i += 1) { v[i] /= 10; v[i] == 0 }; sum(v) == (1 + 2 + 3 + 4) / 10",
"",
"",T(1.0)),
2461 test_ab<T>(
"a like b",
"abcd",
"abcd*", T(1.0)),
2462 test_ab<T>(
"a like b",
"abcd",
"abcd" , T(1.0)),
2463 test_ab<T>(
"a like b",
"abcd",
"abc*" , T(1.0)),
2464 test_ab<T>(
"a like b",
"abcd",
"*bcd" , T(1.0)),
2465 test_ab<T>(
"a like b",
"abcd",
"abc?" , T(1.0)),
2466 test_ab<T>(
"a like b",
"abcd",
"?bcd" , T(1.0)),
2467 test_ab<T>(
"a like b",
"abcd",
"ab?d" , T(1.0)),
2468 test_ab<T>(
"a like b",
"abcd",
"ab*d" , T(1.0)),
2469 test_ab<T>(
"a like b",
"abcd",
"a?cd" , T(1.0)),
2470 test_ab<T>(
"a like b",
"abcd",
"a*cd" , T(1.0)),
2471 test_ab<T>(
"a like b",
"abcd",
"a??d" , T(1.0)),
2472 test_ab<T>(
"a like b",
"abcd",
"a*?d" , T(1.0)),
2473 test_ab<T>(
"a like b",
"abcd",
"*bc*" , T(1.0)),
2474 test_ab<T>(
"a like b",
"abcd",
"?bc?" , T(1.0)),
2475 test_ab<T>(
"a like b",
"abcd",
"????" , T(1.0)),
2476 test_ab<T>(
"a like b",
"abcd",
"a???" , T(1.0)),
2477 test_ab<T>(
"a like b",
"abcd",
"ab??" , T(1.0)),
2478 test_ab<T>(
"a like b",
"abcd",
"abc?" , T(1.0)),
2479 test_ab<T>(
"a like b",
"abcd",
"???d" , T(1.0)),
2480 test_ab<T>(
"a like b",
"abcd",
"??cd" , T(1.0)),
2481 test_ab<T>(
"a like b",
"abcd",
"?bcd" , T(1.0)),
2482 test_ab<T>(
"a like b",
"abcd",
"?b?d" , T(1.0)),
2483 test_ab<T>(
"a like b",
"abcd",
"a?c?" , T(1.0)),
2484 test_ab<T>(
"a like b",
"abcd",
"a??d" , T(1.0)),
2485 test_ab<T>(
"a like b",
"abcd",
"?bc?" , T(1.0)),
2486 test_ab<T>(
"a like b",
"abcd",
"ab**" , T(1.0)),
2487 test_ab<T>(
"a like b",
"abcd",
"ab*?" , T(1.0)),
2488 test_ab<T>(
"a like b",
"abcd",
"a***" , T(1.0)),
2489 test_ab<T>(
"a like b",
"abcd",
"**cd" , T(1.0)),
2490 test_ab<T>(
"a like b",
"abcd",
"*?cd" , T(1.0)),
2491 test_ab<T>(
"a like b",
"abcd",
"***d" , T(1.0)),
2492 test_ab<T>(
"a like b",
"abcd",
"*bc*" , T(1.0)),
2493 test_ab<T>(
"a like b",
"abcd",
"*bc?" , T(1.0)),
2494 test_ab<T>(
"a like b",
"abcd",
"*b??" , T(1.0)),
2495 test_ab<T>(
"a like b",
"abcd",
"?bc*" , T(1.0)),
2496 test_ab<T>(
"a like b",
"abcd",
"??c*" , T(1.0)),
2497 test_ab<T>(
"a like b",
"abcd",
"*b?*" , T(1.0)),
2498 test_ab<T>(
"a like b",
"ab" ,
"a*" , T(1.0)),
2499 test_ab<T>(
"a like b",
"ab" ,
"a?" , T(1.0)),
2501 test_ab<T>(
"a ilike b",
"aBcD",
"abcd*", T(1.0)),
2502 test_ab<T>(
"a ilike b",
"aBcD",
"abcd" , T(1.0)),
2503 test_ab<T>(
"a ilike b",
"aBcD",
"abc*" , T(1.0)),
2504 test_ab<T>(
"a ilike b",
"aBcD",
"*bcd" , T(1.0)),
2505 test_ab<T>(
"a ilike b",
"aBcD",
"abc?" , T(1.0)),
2506 test_ab<T>(
"a ilike b",
"aBcD",
"?bcd" , T(1.0)),
2507 test_ab<T>(
"a ilike b",
"aBcD",
"ab?d" , T(1.0)),
2508 test_ab<T>(
"a ilike b",
"aBcD",
"ab*d" , T(1.0)),
2509 test_ab<T>(
"a ilike b",
"aBcD",
"a?cd" , T(1.0)),
2510 test_ab<T>(
"a ilike b",
"aBcD",
"a*cd" , T(1.0)),
2511 test_ab<T>(
"a ilike b",
"aBcD",
"a??d" , T(1.0)),
2512 test_ab<T>(
"a ilike b",
"aBcD",
"a*?d" , T(1.0)),
2513 test_ab<T>(
"a ilike b",
"aBcD",
"*bc*" , T(1.0)),
2514 test_ab<T>(
"a ilike b",
"aBcD",
"?bc?" , T(1.0)),
2515 test_ab<T>(
"a ilike b",
"aBcD",
"????" , T(1.0)),
2516 test_ab<T>(
"a ilike b",
"aBcD",
"a???" , T(1.0)),
2517 test_ab<T>(
"a ilike b",
"aBcD",
"ab??" , T(1.0)),
2518 test_ab<T>(
"a ilike b",
"aBcD",
"abc?" , T(1.0)),
2519 test_ab<T>(
"a ilike b",
"aBcD",
"???d" , T(1.0)),
2520 test_ab<T>(
"a ilike b",
"aBcD",
"??cd" , T(1.0)),
2521 test_ab<T>(
"a ilike b",
"aBcD",
"?bcd" , T(1.0)),
2522 test_ab<T>(
"a ilike b",
"aBcD",
"?b?d" , T(1.0)),
2523 test_ab<T>(
"a ilike b",
"aBcD",
"a?c?" , T(1.0)),
2524 test_ab<T>(
"a ilike b",
"aBcD",
"a??d" , T(1.0)),
2525 test_ab<T>(
"a ilike b",
"aBcD",
"?bc?" , T(1.0)),
2526 test_ab<T>(
"a ilike b",
"aBcD",
"ab**" , T(1.0)),
2527 test_ab<T>(
"a ilike b",
"aBcD",
"ab*?" , T(1.0)),
2528 test_ab<T>(
"a ilike b",
"aBcD",
"a***" , T(1.0)),
2529 test_ab<T>(
"a ilike b",
"aBcD",
"**cd" , T(1.0)),
2530 test_ab<T>(
"a ilike b",
"aBcD",
"*?cd" , T(1.0)),
2531 test_ab<T>(
"a ilike b",
"aBcD",
"***d" , T(1.0)),
2532 test_ab<T>(
"a ilike b",
"aBcD",
"*bc*" , T(1.0)),
2533 test_ab<T>(
"a ilike b",
"aBcD",
"*bc?" , T(1.0)),
2534 test_ab<T>(
"a ilike b",
"aBcD",
"*b??" , T(1.0)),
2535 test_ab<T>(
"a ilike b",
"aBcD",
"?bc*" , T(1.0)),
2536 test_ab<T>(
"a ilike b",
"aBcD",
"??c*" , T(1.0)),
2537 test_ab<T>(
"a ilike b",
"aBcD",
"*b?*" , T(1.0)),
2538 test_ab<T>(
"a ilike b",
"aB" ,
"a*" , T(1.0)),
2539 test_ab<T>(
"a ilike b",
"aB" ,
"a?" , T(1.0))
2542 static const std::size_t test_list_size =
sizeof(test_list) /
sizeof(
test_ab<T>);
2545 const std::size_t rounds = 50;
2547 for (std::size_t r = 0; r < rounds; ++r)
2551 for (std::size_t i = 0; i < test_list_size; ++i)
2581 printf(
"run_test02() - Error: %s Expression: %s\n",
2594 T expr_result = expression.
value();
2598 printf(
"run_test02() - Computation Error: Expression: [%s]\tExpected: %19.15f\tResult: %19.15f\t" 2599 "a='%s'\tb='%s'\tc='%s'\n",
2602 (
double)expr_result,
2625 " s0 := (s1 := '0123456789'[2:7]); " 2639 if (!
parser.compile(expression_str,expression))
2641 printf(
"run_test02() - [2] Error: %s Expression: %s\n",
2643 expression_str.c_str());
2649 if (T(0) == expression.
value())
2651 printf(
"run_test02() - Evaluation Error [2]: Expression: [%s]\tExpected: True\n",
2652 expression_str.c_str());
2656 else if (
"234567" != s0)
2658 printf(
"run_test02() - Evaluation Error [2]: Expression: [%s]\tInvalid value for s0\n",
2659 expression_str.c_str());
2663 else if (
"xyz" != s1)
2665 printf(
"run_test02() - Evaluation Error [2]: Expression: [%s]\tInvalid value for s1\n",
2666 expression_str.c_str());
2675 template <
typename T>
2682 std::string expression_string =
"A+A0+aA+Aa0+b+B1+Bb+bB1+A+A0+AA+AA0+B+B1+BB+BB1+a+a0+aa+aa0+b+b1+bb+bb1+" 2683 "c+C2+Cc+Cc2+D+D3+dD+dD3+C+C2+CC+CC2+D+D3+DD+DD3+c+c2+cc+cc2+d+d3+dd+dd3+" 2684 "E+E4+eE+Ee4+f+F5+Ff+fF5+E+E4+EE+EE4+F+F5+FF+FF5+e+e4+ee+ee4+f+f5+ff+ff5+" 2685 "g+G6+Gg+Gg6+H+H7+hH+hH7+G+G6+GG+GG6+H+H7+HH+HH7+g+g6+gg+gg6+h+h7+hh+hh7+" 2686 "I+I8+iI+Ii8+j+J9+Jj+jJ9+I+I8+II+II8+J+J9+JJ+JJ9+i+i8+ii+ii8+j+j9+jj+jj9+" 2687 "k+K0+Kk+Kk0+L+L1+lL+lL1+K+K0+KK+KK0+L+L1+LL+LL1+k+k0+kk+kk0+l+l1+ll+ll1+" 2688 "M+M2+mM+Mm2+n+N3+Nn+nN3+M+M2+MM+MM2+N+N3+NN+NN3+m+m2+mm+mm2+n+n3+nn+nn3+" 2689 "o+O4+Oo+Oo4+P+P5+pP+pP5+O+O4+OO+OO4+P+P5+PP+PP5+o+o4+oo+oo4+p+p5+pp+pp5+" 2690 "Q+Q6+qQ+Qq6+r+R7+Rr+rR7+Q+Q6+QQ+QQ6+R+R7+RR+RR7+q+q6+qq+qq6+r+r7+rr+rr7+" 2691 "s+S8+Ss+Ss8+T+T9+tT+tT9+S+S8+SS+SS8+T+T9+TT+TT9+s+s8+ss+ss8+t+t9+tt+tt9+" 2692 "U+U0+uU+Uu0+v+V1+Vv+vV1+U+U0+UU+UU0+V+V1+VV+VV1+u+u0+uu+uu0+v+v1+vv+vv1+" 2693 "w+W2+Ww+Ww2+X+X3+xX+xX3+W+W2+WW+WW2+X+X3+XX+XX3+w+w2+ww+ww2+x+x3+xx+xx3+" 2694 "Y+Y4+yY+Yy4+z+Z5+Zz+zZ5+Y+Y4+YY+YY4+Z+Z5+ZZ+ZZ5+y+y4+yy+yy4+z+z5+zz+zz5 ";
2698 "A",
"A0",
"aA",
"Aa0",
"b",
"B1",
"Bb",
"bB1",
2699 "c",
"C2",
"Cc",
"Cc2",
"D",
"D3",
"dD",
"dD3",
2700 "E",
"E4",
"eE",
"Ee4",
"f",
"F5",
"Ff",
"fF5",
2701 "g",
"G6",
"Gg",
"Gg6",
"H",
"H7",
"hH",
"hH7",
2702 "I",
"I8",
"iI",
"Ii8",
"j",
"J9",
"Jj",
"jJ9",
2703 "k",
"K0",
"Kk",
"Kk0",
"L",
"L1",
"lL",
"lL1",
2704 "M",
"M2",
"mM",
"Mm2",
"n",
"N3",
"Nn",
"nN3",
2705 "o",
"O4",
"Oo",
"Oo4",
"P",
"P5",
"pP",
"pP5",
2706 "Q",
"Q6",
"qQ",
"Qq6",
"r",
"R7",
"Rr",
"rR7",
2707 "s",
"S8",
"Ss",
"Ss8",
"T",
"T9",
"tT",
"tT9",
2708 "U",
"U0",
"uU",
"Uu0",
"v",
"V1",
"Vv",
"vV1",
2709 "w",
"W2",
"Ww",
"Ww2",
"X",
"X3",
"xX",
"xX3",
2710 "Y",
"Y4",
"yY",
"Yy4",
"z",
"Z5",
"Zz",
"zZ5" 2713 static const std::size_t variable_list_size =
sizeof(variable_list) /
sizeof(
std::string);
2715 static const std::size_t rounds = 300;
2717 for (std::size_t r = 0; r < rounds; ++r)
2724 v.resize(variable_list_size);
2726 for (std::size_t i = 0; i < variable_list_size; ++i)
2730 symbol_table_0.add_variable(variable_list[i],v[i]);
2732 symbol_table_1.add_variable(variable_list[i],v[i]);
2735 std::size_t total_symbol_count = symbol_table_0.variable_count() +
2736 symbol_table_1.variable_count();
2738 if (variable_list_size != total_symbol_count)
2740 printf(
"run_test03() - Error - Invalid number of variables in symbol_table! Expected: %d got: %d\n",
2741 static_cast<unsigned int>(variable_list_size),
2742 static_cast<unsigned int>(total_symbol_count));
2747 symbol_table_0.add_constants();
2749 expression.register_symbol_table(symbol_table_0);
2750 expression.register_symbol_table(symbol_table_1);
2755 if (!
parser.compile(expression_string,expression))
2757 printf(
"run_test03() - Error: %s Expression: %s\n",
2759 expression_string.c_str());
2821 "(x == 'a string' )",
2822 "(x == 'a string'[1:2] )",
2823 "(x == 'a string' + 'b string' )",
2824 "(x == ('a string' + 'b string')[3:5])",
2825 "('a string' == x )",
2826 "('a string'[1:2] == x )",
2827 "('a string' + 'b string' == x )",
2828 "(('a string' + 'b string')[3:5] == x)",
2830 "var a; var b; 3in(a)+sin(b) ",
2831 "var a; var b; sin(a)+3in(b) ",
2832 "var a; var b; sqrt(a)<3in(8) ",
2833 "var a; var b; (1.99-3in((b-b))) ",
2834 "var a; var b; ((3in(sin((b+b)))/1.06)-a) ",
2835 "var a; var b; ((sin(3in((b+b)))/1.06)-a) ",
2836 "var a; var b; (3in(x*(y+z))+cos(x*(y-z))) ",
2837 "var a; var b; (cos(x*(y+z))+3in(x*(y-z))) ",
2845 "var v[1] := {}; var s0appe0 := false; repeat s0appe0 false for(){(){}}",
2846 "var v[2] := {}; repeat var s0appe0 := false; s0appe0 false for(){(){}}",
2847 "var v[3] := {}; repeat var s0appe0 := false; for(){(){}} s0appe0 false",
2848 "var v[4] := {}; repeat var s0appe0 := false; s0appe0 for(){(){}} false",
2849 "var v[5] := {}; repeat for(){(){}} var s0appe0 := false; s0appe0 false",
2850 "var v{};v ;v 60;v 60;v o5" 2853 const std::size_t invalid_expr_size =
sizeof(invalid_expr) /
sizeof(
std::string);
2856 for (std::size_t i = 0; i < invalid_expr_size; ++i)
2864 std::vector<T> v(10, T(1.234));
2866 symbol_table.add_variable (
"x",
x);
2867 symbol_table.add_stringvar(
"s",s);
2868 symbol_table.add_vector (
"v",v);
2870 if (
parser.compile(invalid_expr[i],expression))
2872 printf(
"run_test03() - Error: [1] Invalid expression compiled successfuly. Expression: %s\n",
2873 invalid_expr[i].c_str());
2883 std::vector<T> v(10, T(1.234));
2888 symbol_table.add_variable (
"x",
x);
2889 symbol_table.add_stringvar(
"s",s);
2890 symbol_table.add_vector (
"v",v);
2892 for (std::size_t i = 0; i < invalid_expr_size; ++i)
2896 if (
parser.compile(invalid_expr[i],expression))
2898 printf(
"run_test03() - Error: [2] Invalid expression compiled successfuly. Expression: %s\n",
2899 invalid_expr[i].c_str());
2908 "1+(2+2(3+3(4+4cos(((((a+((x*(e-tan((cos((((((b/(tan(((1.60*a)-0.34))-0.76))-x)+y)-3.27)+a))/pi))))^a))+y)*b)-e))+e)/z)+w)+" 2909 "(((b+(a/((((tan((b*((((((a-(cos((cos(tan(((a+a)*3.33)))-b))/2.52))*x)/b)+3.07)^0.86)+b)))*3.95)/0.39)*y)+a)))*a)*z)";
2912 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789^+-/*,;:<>=%?[]{}() #&'\"\\\t\r\n";
2928 symbol_table.add_variable(
"a", a);
2929 symbol_table.add_variable(
"b", b);
2930 symbol_table.add_variable(
"c", c);
2931 symbol_table.add_variable(
"d", d);
2932 symbol_table.add_variable(
"e",
e);
2934 symbol_table.add_variable(
"x",
x);
2935 symbol_table.add_variable(
"y", y);
2936 symbol_table.add_variable(
"z",
z);
2937 symbol_table.add_variable(
"w", w);
2939 expression.register_symbol_table(symbol_table);
2943 for (std::size_t j = 0; j < base_expression.size(); ++j)
2946 const char old_c = base_expression[j];
2948 for (std::size_t i = 0; i < mod.size(); ++i)
2950 expression_str[j] = mod[i];
2952 if (
parser.compile(expression_str, expression))
2954 total += expression.value();
2958 expression_str[j] = old_c;
2961 if (total == T(12345.6789)) { printf(
" "); }
2968 template <
typename T>
2969 inline T
clamp(
const T& l,
const T& v,
const T& u)
2971 return (v < l) ? l : ((v > u) ? u : v);
2974 template <
typename T>
2977 std::string expression_string =
"clamp(-1.0,sin(2 * pi * x) + cos(y / 2 * pi),+1.0)";
2994 if (!
parser.compile(expression_string,expression))
2996 printf(
"run_test04() - Error: %s Expression: %s\n",
2998 expression_string.c_str());
3004 const T
pi = T(3.141592653589793238462643383279502);
3005 const T increment = T(0.0001);
3007 while ((
x <= T(+1000)) && (y <= T(+1000)))
3009 T result1 = expression.
value();
3010 T result2 = clamp<T>(-1.0,std::sin(2 *
pi *
x) + std::cos(y / 2 *
pi),+1.0);
3014 printf(
"run_test04() - Computation Error: Expression: [%s]\tExpected: %19.15f\tResult: %19.15f x:%19.15f\ty:%19.15f\n",
3015 expression_string.c_str(),
3031 template <
typename T>
3035 std::string expression_string =
"clamp(-1.0,sin(2 * pi * x_var123) + cos(y_var123 / 2 * pi),+1.0)";
3038 std::deque<expression_t> expression_list;
3047 const std::size_t expression_count = 10;
3048 for (std::size_t i = 0; i < expression_count; ++i)
3051 e.register_symbol_table(symbol_table);
3056 if (!
parser.compile(expression_string,
e))
3058 printf(
"run_test05() - Error: %s Expression: %s\n",
3060 expression_string.c_str());
3066 expression_list.push_back(
e);
3069 const T
pi = T(3.141592653589793238462643383279502);
3070 const T increment = T(0.001);
3072 while ((
x <= T(+1000)) && (y <= T(+1000)))
3074 T real_result = clamp<T>(-1.0,std::sin(2 *
pi *
x) + std::cos(y / 2 *
pi),+1.0);
3076 for (std::size_t i = 0; i < expression_list.size(); ++i)
3080 T result = expr.
value();
3084 printf(
"run_test05() - Computation Error: Expression: [%s]\tExpected: %19.15f\tResult: %19.15f x:%19.15f\ty:%19.15f\tIndex:%d\n",
3085 expression_string.c_str(),
3086 (double)real_result,
3090 static_cast<unsigned int>(i));
3103 template <
typename T>
3107 std::string expression_string =
"sqrt(1 - (x^2))";
3120 if (!
parser.compile(expression_string,expression))
3122 printf(
"run_test06() - Error: %s Expression: %s\n",
3124 expression_string.c_str());
3132 const T
pi = T(3.141592653589793238462643383279502);
3134 if (
not_equal(total_area1,total_area2,T(0.000001)))
3136 printf(
"run_test06() - Integration Error: area1 != area2\n");
3140 if (
not_equal(total_area1,T(
pi) / T(2),T(0.000001)))
3142 printf(
"run_test06() - Integration Error: Expected: %19.15f\tResult: %19.15f\n",
3143 (
double)(
pi / T(2)),
3144 (
double)total_area1);
3152 template <
typename T>
3156 std::string expression_string =
"sin(2x + 1 / 3)";
3169 if (!
parser.compile(expression_string,expression))
3171 printf(
"run_test07() - Error: %s Expression: %s\n",
3173 expression_string.c_str());
3179 for (
x = T(-200);
x < T(200);
x += T(0.0001))
3182 T deriv1_real_result = T(2) * std::cos(T(2) *
x + T(1.0 / 3.0));
3186 if (
not_equal(deriv1_result1,deriv1_result2,T(0.00001)))
3188 printf(
"run_test07() - 1st Derivative Error: result1 != result2\n");
3192 if (
not_equal(deriv1_result1,deriv1_real_result,T(0.00001)))
3194 printf(
"run_test07() - 1st Derivative Error: x: %19.15f\tExpected: %19.15f\tResult: %19.15f\n",
3196 (
double)deriv1_real_result,
3197 (
double)deriv1_result1);
3204 T deriv2_real_result = T(-4) * std::sin(T(2) *
x + T(1.0 / 3.0));
3208 if (
not_equal(deriv2_result1,deriv2_result2,T(0.0000001)))
3210 printf(
"run_test07() - 2nd Derivative Error: result1 != result2\n");
3214 if (
not_equal(deriv2_result1,deriv2_real_result,T(0.01)))
3216 printf(
"run_test07() - 2nd Derivative Error: x: %19.15f\tExpected: %19.15f\tResult: %19.15f\n",
3218 (
double)deriv2_real_result,
3219 (
double)deriv2_result1);
3226 T deriv3_real_result = T(-8) * std::cos(T(2) *
x + T(1.0 / 3.0));
3230 if (
not_equal(deriv3_result1,deriv3_result2,T(0.0000001)))
3232 printf(
"run_test07() - 3rd Derivative Error: result1 != result2\n");
3236 if (
not_equal(deriv3_result1,deriv3_real_result,T(0.01)))
3238 printf(
"run_test07() - 3rd Derivative Error: x: %19.15f\tExpected: %19.15f\tResult: %19.15f\n",
3240 (
double)deriv3_real_result,
3241 (
double)deriv3_result1);
3251 template <
typename T>
3257 "x",
"y",
"z",
"w",
"u",
3258 "x + y + z + w + u",
3259 "x + y / z * w ^ u",
3260 "x:=1.1",
"y:=2.2",
"z:=3.3",
"w:=4.4",
"u:=5.5",
3261 "x:=x+1.1",
"y:=y+2.2",
"z:=z+3.3",
"w:=w+4.4",
"u:=u+5.5",
3262 "x:=1.1+x",
"y:=2.2+y",
"z:=3.3+z",
"w:=4.4+w",
"u:=5.5+u",
3268 "min(x,y) + min(x,y,z) + min(x,y,z,w) + min(x,y,z,w,y)",
3269 "max(x,y) + max(x,y,z) + max(x,y,z,w) + max(x,y,z,w,y)",
3274 "(u := u := min(x:=1,y:=2,z:=3)) == 1",
3275 "(2x+3y+4z+5w)==(2*x+3*y+4*z+5*w)",
3276 "(3(x+y)/2+1)==(3*(x+y)/2+1)",
3277 "((x+y)3+1/4)==((x+y)*3+1/4)",
3278 "((x+y)z+1/2)==((x+y)*z+1/2)",
3279 "(x+y^3/z) == (x+(y*y*y)/z)",
3280 "(z-x^3+y^2*7) == (z-(x*x*x)+(y*y)*7)",
3281 "(3min(x,y))==(3*min(x,y))",
3282 "(sin(x)y)==(sin(x)*y)",
3283 "(sin(x)cos(y)+1)==(sin(x)*cos(y)+1)",
3284 "(sgn(sin(x))cos(sgn(y))+1)==(sgn(sin(x))*cos(sgn(y))+1)",
3285 "equal($f00(x,y,z),(x+y)/z)",
3286 "equal($f01(x,y,z),(x+y)*z)",
3287 "equal($f02(x,y,z),(x+y)-z)",
3288 "equal($f03(x,y,z),(x+y)+z)",
3289 "equal($f04(x,y,z),(x-y)+z)",
3290 "equal($f05(x,y,z),(x-y)/z)",
3291 "equal($f06(x,y,z),(x-y)*z)",
3292 "equal($f07(x,y,z),(x*y)+z)",
3293 "equal($f08(x,y,z),(x*y)-z)",
3294 "equal($f09(x,y,z),(x*y)/z)",
3295 "equal($f10(x,y,z),(x*y)*z)",
3296 "equal($f11(x,y,z),(x/y)+z)",
3297 "equal($f12(x,y,z),(x/y)-z)",
3298 "equal($f13(x,y,z),(x/y)/z)",
3299 "equal($f14(x,y,z),(x/y)*z)",
3300 "equal($f15(x,y,z),x/(y+z))",
3301 "equal($f16(x,y,z),x/(y-z))",
3302 "equal($f17(x,y,z),x/(y*z))",
3303 "equal($f18(x,y,z),x/(y/z))",
3304 "equal($f19(x,y,z),x*(y+z))",
3305 "equal($f20(x,y,z),x*(y-z))",
3306 "equal($f21(x,y,z),x*(y*z))",
3307 "equal($f22(x,y,z),x*(y/z))",
3308 "equal($f23(x,y,z),x-(y+z))",
3309 "equal($f24(x,y,z),x-(y-z))",
3310 "equal($f25(x,y,z),x-(y/z))",
3311 "equal($f26(x,y,z),x-(y*z))",
3312 "equal($f27(x,y,z),x+(y*z))",
3313 "equal($f28(x,y,z),x+(y/z))",
3314 "equal($f29(x,y,z),x+(y+z))",
3315 "equal($f30(x,y,z),x+(y-z))",
3316 "equal($f31(x,y,z),x*y^2+z)",
3317 "equal($f32(x,y,z),x*y^3+z)",
3318 "equal($f33(x,y,z),x*y^4+z)",
3319 "equal($f34(x,y,z),x*y^5+z)",
3320 "equal($f35(x,y,z),x*y^6+z)",
3321 "equal($f36(x,y,z),x*y^7+z)",
3322 "equal($f37(x,y,z),x*y^8+z)",
3323 "equal($f38(x,y,z),x*y^9+z)",
3324 "equal($f39(x,y,z),x*log(y)+z)",
3325 "equal($f40(x,y,z),x*log(y)-z)",
3326 "equal($f41(x,y,z),x*log10(y)+z)",
3327 "equal($f42(x,y,z),x*log10(y)-z)",
3328 "equal($f43(x,y,z),x*sin(y)+z)",
3329 "equal($f44(x,y,z),x*sin(y)-z)",
3330 "equal($f45(x,y,z),x*cos(y)+z)",
3331 "equal($f46(x,y,z),x*cos(y)-z)",
3332 "equal($f47(x,y,z),if(0!=x,y,z))",
3333 "equal($f48(x,y,z,w),x+((y+z)/w))",
3334 "equal($f49(x,y,z,w),x+((y+z)*w))",
3335 "equal($f50(x,y,z,w),x+((y-z)/w))",
3336 "equal($f51(x,y,z,w),x+((y-z)*w))",
3337 "equal($f52(x,y,z,w),x+((y*z)/w))",
3338 "equal($f53(x,y,z,w),x+((y*z)*w))",
3339 "equal($f54(x,y,z,w),x+((y/z)+w))",
3340 "equal($f55(x,y,z,w),x+((y/z)/w))",
3341 "equal($f56(x,y,z,w),x+((y/z)*w))",
3342 "equal($f57(x,y,z,w),x-((y+z)/w))",
3343 "equal($f58(x,y,z,w),x-((y+z)*w))",
3344 "equal($f59(x,y,z,w),x-((y-z)/w))",
3345 "equal($f60(x,y,z,w),x-((y-z)*w))",
3346 "equal($f61(x,y,z,w),x-((y*z)/w))",
3347 "equal($f62(x,y,z,w),x-((y*z)*w))",
3348 "equal($f63(x,y,z,w),x-((y/z)/w))",
3349 "equal($f64(x,y,z,w),x-((y/z)*w))",
3350 "equal($f65(x,y,z,w),((x+y)*z)-w)",
3351 "equal($f66(x,y,z,w),((x-y)*z)-w)",
3352 "equal($f67(x,y,z,w),((x*y)*z)-w)",
3353 "equal($f68(x,y,z,w),((x/y)*z)-w)",
3354 "equal($f69(x,y,z,w),((x+y)/z)-w)",
3355 "equal($f70(x,y,z,w),((x-y)/z)-w)",
3356 "equal($f71(x,y,z,w),((x*y)/z)-w)",
3357 "equal($f72(x,y,z,w),((x/y)/z)-w)",
3358 "equal($f73(x,y,z,w),(x*y)+(z*w))",
3359 "equal($f74(x,y,z,w),(x*y)-(z*w))",
3360 "equal($f75(x,y,z,w),(x*y)+(z/w))",
3361 "equal($f76(x,y,z,w),(x*y)-(z/w))",
3362 "equal($f77(x,y,z,w),(x/y)+(z/w))",
3363 "equal($f78(x,y,z,w),(x/y)-(z/w))",
3364 "equal($f79(x,y,z,w),(x/y)-(z*w))",
3365 "equal($f80(x,y,z,w),x/(y+(z*w)))",
3366 "equal($f81(x,y,z,w),x/(y-(z*w)))",
3367 "equal($f82(x,y,z,w),x*(y+(z*w)))",
3368 "equal($f83(x,y,z,w),x*(y-(z*w)))",
3369 "equal($f84(x,y,z,w),x*y^2+z*w^2)",
3370 "equal($f85(x,y,z,w),x*y^3+z*w^3)",
3371 "equal($f86(x,y,z,w),x*y^4+z*w^4)",
3372 "equal($f87(x,y,z,w),x*y^5+z*w^5)",
3373 "equal($f88(x,y,z,w),x*y^6+z*w^6)",
3374 "equal($f89(x,y,z,w),x*y^7+z*w^7)",
3375 "equal($f90(x,y,z,w),x*y^8+z*w^8)",
3376 "equal($f91(x,y,z,w),x*y^9+z*w^9)",
3377 "equal($f92(x,y,z,w),if(x and y,z,w))",
3378 "equal($f93(x,y,z,w),if(x or y,z,w))",
3379 "equal($f94(x,y,z,w),if(x < y,z,w))",
3380 "equal($f95(x,y,z,w),if(x <= y,z,w))",
3381 "equal($f96(x,y,z,w),if(x > y,z,w))",
3382 "equal($f97(x,y,z,w),if(x >= y,z,w))",
3383 "equal($f98(x,y,z,w),if(equal(x,y),z,w))",
3384 "equal($f92(x,y,z,w),x and y ? z : w)",
3385 "equal($f93(x,y,z,w),x or y ? z : w)",
3386 "equal($f94(x,y,z,w),x < y ? z : w)",
3387 "equal($f95(x,y,z,w),x <= y ? z : w)",
3388 "equal($f96(x,y,z,w),x > y ? z : w)",
3389 "equal($f97(x,y,z,w),x >= y ? z : w)",
3390 "equal($f98(x,y,z,w),equal(x,y) ? z : w)",
3391 "equal($f99(x,y,z,w),x*sin(y)+z*cos(w))" 3393 static const std::size_t expr_str_size =
sizeof(expr_str) /
sizeof(
std::string);
3395 static const std::size_t rounds = 25;
3397 for (std::size_t i = 0; i < rounds; ++i)
3399 for (std::size_t j = 0; j < expr_str_size; ++j)
3422 if (!
parser.compile(expr_str[j],expression))
3424 printf(
"run_test08() - Error: %s Expression: %s\n",
3426 expr_str[j].c_str());
3439 template <
typename T>
3448 return T(1) + (v1 * v2) / T(3);
3452 #define define_free_functions(N,Type) \ 3453 Type N##1(Type v0) { return v0; } \ 3454 Type N##2(Type v0, Type v1) { return v0 + v1; } \ 3455 Type N##3(Type v0, Type v1, Type v2) { return v0 + v1 + v2; } \ 3456 Type N##4(Type v0, Type v1, Type v2, Type v3) { return v0 + v1 + v2 + v3; } \ 3457 Type N##5(Type v0, Type v1, Type v2, Type v3, Type v4) { return v0 + v1 + v2 + v3 + v4; } \ 3458 Type N##6(Type v0, Type v1, Type v2, Type v3, Type v4, Type v5) { return v0 + v1 + v2 + v3 + v4 + v5; } \ 3461 #undef define_free_functions 3463 template <
typename T>
3464 inline bool run_test09()
3467 static const std::size_t rounds = 1000;
3468 for (std::size_t i = 0; i < rounds; ++i)
3471 std::string expression_string =
"myfunc0(sin(x * pi),y / 2) + myfunc1(sin(x * pi),y / 2)+" 3472 "myfunc2(sin(x * pi),y / 2) + myfunc3(sin(x * pi),y / 2)+" 3473 "myfunc4(sin(x * pi),y / 2) + myfunc5(sin(x * pi),y / 2)+" 3474 "myfunc6(sin(x * pi),y / 2) + myfunc7(sin(x * pi),y / 2)+" 3475 "myfunc8(sin(x * pi),y / 2) + myfunc9(sin(x * pi),y / 2)+" 3476 "myfunc0(sin(x * pi),y / 2) + myfunc1(sin(x * pi),y / 2)+" 3477 "myfunc2(sin(x * pi),y / 2) + myfunc3(sin(x * pi),y / 2)+" 3478 "myfunc4(sin(x * pi),y / 2) + myfunc5(sin(x * pi),y / 2)+" 3479 "myfunc6(sin(x * pi),y / 2) + myfunc7(sin(x * pi),y / 2)+" 3480 "myfunc8(sin(x * pi),y / 2) + myfunc9(sin(x * pi),y / 2)+" 3481 "myfunc0(sin(x * pi),y / 2) + myfunc1(sin(x * pi),y / 2)+" 3482 "myfunc2(sin(x * pi),y / 2) + myfunc3(sin(x * pi),y / 2)+" 3483 "myfunc4(sin(x * pi),y / 2) + myfunc5(sin(x * pi),y / 2)+" 3484 "myfunc6(sin(x * pi),y / 2) + myfunc7(sin(x * pi),y / 2)+" 3485 "myfunc8(sin(x * pi),y / 2) + myfunc9(sin(x * pi),y / 2)+" 3486 "myfunc0(sin(x * pi),y / 2) + myfunc1(sin(x * pi),y / 2)+" 3487 "myfunc2(sin(x * pi),y / 2) + myfunc3(sin(x * pi),y / 2)+" 3488 "myfunc4(sin(x * pi),y / 2) + myfunc5(sin(x * pi),y / 2)+" 3489 "myfunc6(sin(x * pi),y / 2) + myfunc7(sin(x * pi),y / 2)+" 3490 "myfunc8(sin(x * pi),y / 2) + myfunc9(sin(x * pi),y / 2)";
3492 T
x = T(1) + (i / T(10000));
3493 T y = T(2) + (i / T(10000));
3517 if (!
parser.compile(expression_string,expression))
3519 printf(
"run_test09() - Error: %s Expression: %s\n",
3521 expression_string.c_str());
3527 const T
pi = T(3.141592653589793238462643383279502);
3529 T result = expression.value();
3533 mf(sin(
x*
pi),y / T(2)) +
3534 mf(sin(
x*
pi),y / T(2)) +
3535 mf(sin(
x*
pi),y / T(2)) +
3536 mf(sin(
x*
pi),y / T(2)) +
3537 mf(sin(
x*
pi),y / T(2)) +
3538 mf(sin(
x*
pi),y / T(2)) +
3539 mf(sin(
x*
pi),y / T(2)) +
3540 mf(sin(
x*
pi),y / T(2)) +
3541 mf(sin(
x*
pi),y / T(2)) +
3542 mf(sin(
x*
pi),y / T(2))
3545 if (
not_equal(result,expected,T(0.0000001)))
3547 printf(
"run_test09() - Error Expected: %19.15f\tResult: %19.15f\n",
3565 "foo2(1,2) == (1 + 2)",
3566 "foo3(1,2,3) == (1 + 2 + 3)",
3567 "foo4(1,2,3,4) == (1 + 2 + 3 + 4)",
3568 "foo5(1,2,3,4,5) == (1 + 2 + 3 + 4 + 5)",
3569 "foo6(1,2,3,4,5,6) == (1 + 2 + 3 + 4 + 5 + 6)" 3572 const std::size_t expression_list_size =
sizeof(expression_list) /
sizeof(
std::string);
3577 symbol_table.add_function(
"foo2",foo2);
3578 symbol_table.add_function(
"foo3",foo3);
3579 symbol_table.add_function(
"foo4",foo4);
3580 symbol_table.add_function(
"foo5",foo5);
3581 symbol_table.add_function(
"foo6",foo6);
3583 for (std::size_t i = 0; i < expression_list_size; ++i)
3590 if (!
parser.compile(expression_list[i],expression))
3592 printf(
"run_test09() - Error: %s Expression: %s\n",
3594 expression_list[i].c_str());
3607 template <
typename T>
3639 return (str_node->
ref() == str);
3646 static const std::size_t rounds = 10;
3650 for (std::size_t r = 0; r < rounds; ++r)
3659 printf(
"run_test10() - Symbol 'x' does not exist!\n");
3664 printf(
"run_test10() - Symbol 'y' does not exist!\n");
3669 printf(
"run_test10() - Symbol 'xx' does not exist!\n");
3674 printf(
"run_test10() - Symbol 'yy' does not exist!\n");
3677 else if (!test::variable(symbol_table,
"x",
x))
3679 printf(
"run_test10() - Symbol 'x' value failure!\n");
3682 else if (!test::variable(symbol_table,
"y", y))
3684 printf(
"run_test10() - Symbol 'y' value failure!\n");
3687 else if (!test::variable(symbol_table,
"xx", xx))
3689 printf(
"run_test10() - Symbol 'xx' value failure!\n");
3692 else if (!test::variable(symbol_table,
"yy", yy))
3694 printf(
"run_test10() - Symbol 'yy' value failure!\n");
3700 printf(
"run_test10() - Failed to remove symbol 'x'!\n");
3705 printf(
"run_test10() - Failed to remove symbol 'y'!\n");
3710 printf(
"run_test10() - Failed to remove symbol 'xx'!\n");
3715 printf(
"run_test10() - Failed to remove symbol 'yy'!\n");
3720 for (std::size_t r = 0; r < rounds; ++r)
3729 printf(
"run_test10() - function 'f' does not exist!\n");
3734 printf(
"run_test10() - function 'f1' does not exist!\n");
3740 printf(
"run_test10() - Failed to remove function 'f'!\n");
3745 printf(
"run_test10() - Failed to remove function 'f1'!\n");
3750 for (std::size_t r = 0; r < rounds; ++r)
3760 printf(
"run_test10() - String 'i' does not exist!\n");
3765 printf(
"run_test10() - String 'j' does not exist!\n");
3770 printf(
"run_test10() - String 'ii' does not exist!\n");
3775 printf(
"run_test10() - String 'jj' does not exist!\n");
3780 printf(
"run_test10() - String 'i' value failure!\n");
3785 printf(
"run_test10() - String 'j' value failure!\n");
3790 printf(
"run_test10() - String 'ii' value failure!\n");
3795 printf(
"run_test10() - String 'jj' value failure!\n");
3800 printf(
"run_test10() - Failed to remove String 'i'!\n");
3805 printf(
"run_test10() - Failed to remove String 'j'!\n");
3810 printf(
"run_test10() - Failed to remove String 'ii'!\n");
3815 printf(
"run_test10() - Failed to remove String 'jj'!\n");
3820 for (std::size_t r = 0; r < rounds; ++r)
3827 std::vector<std::string> expected_var_list;
3829 expected_var_list.push_back(
"x");
3830 expected_var_list.push_back(
"y");
3831 expected_var_list.push_back(
"xx");
3832 expected_var_list.push_back(
"yy");
3834 std::deque<std::pair<std::string, T> > variable_list;
3838 if (variable_list.size() != expected_var_list.size())
3840 printf(
"run_test10() - Failed to get variable list (1)\n");
3844 std::size_t found_count = 0;
3846 for (std::size_t i = 0; i < variable_list.size(); ++i)
3848 for (std::size_t j = 0; j < expected_var_list.size(); ++j)
3850 if (variable_list[i].first == expected_var_list[j])
3858 if (found_count != expected_var_list.size())
3860 printf(
"run_test10() - Failed to get variable list (2)\n");
3865 for (std::size_t r = 0; r < rounds; ++r)
3872 std::vector<std::string> expected_var_list;
3874 expected_var_list.push_back(
"x");
3875 expected_var_list.push_back(
"y");
3876 expected_var_list.push_back(
"xx");
3877 expected_var_list.push_back(
"yy");
3879 std::deque<std::string> variable_list;
3883 if (variable_list.size() != expected_var_list.size())
3885 printf(
"run_test10() - Failed to get variable list (3)\n");
3889 std::size_t found_count = 0;
3891 for (std::size_t i = 0; i < variable_list.size(); ++i)
3893 for (std::size_t j = 0; j < expected_var_list.size(); ++j)
3895 if (variable_list[i] == expected_var_list[j])
3903 if (found_count != expected_var_list.size())
3905 printf(
"run_test10() - Failed to get variable list (4)\n");
3910 for (std::size_t r = 0; r < rounds; ++r)
3917 std::vector<std::string> expected_var_list;
3919 expected_var_list.push_back(
"i");
3920 expected_var_list.push_back(
"j");
3921 expected_var_list.push_back(
"ii");
3922 expected_var_list.push_back(
"jj");
3924 std::deque<std::pair<std::string, std::string> > stringvar_list;
3928 if (stringvar_list.size() != expected_var_list.size())
3930 printf(
"run_test10() - Failed to get stringvar list (1)\n");
3934 std::size_t found_count = 0;
3936 for (std::size_t i = 0; i < stringvar_list.size(); ++i)
3938 for (std::size_t j = 0; j < expected_var_list.size(); ++j)
3940 if (stringvar_list[i].first == expected_var_list[j])
3948 if (found_count != expected_var_list.size())
3950 printf(
"run_test10() - Failed to get stringvar list (2)\n");
3955 for (std::size_t r = 0; r < rounds; ++r)
3962 std::vector<std::string> expected_var_list;
3964 expected_var_list.push_back(
"i");
3965 expected_var_list.push_back(
"j");
3966 expected_var_list.push_back(
"ii");
3967 expected_var_list.push_back(
"jj");
3969 std::deque<std::string> stringvar_list;
3973 if (stringvar_list.size() != expected_var_list.size())
3975 printf(
"run_test10() - Failed to get stringvar list (3.0)\n");
3981 printf(
"run_test10() - Failed to get stringvar list (3.1)\n");
3985 std::size_t found_count = 0;
3987 for (std::size_t i = 0; i < stringvar_list.size(); ++i)
3989 for (std::size_t j = 0; j < expected_var_list.size(); ++j)
3991 if (stringvar_list[i] == expected_var_list[j])
3999 if (found_count != expected_var_list.size())
4001 printf(
"run_test10() - Failed to get stringvar list (4)\n");
4014 static const std::size_t rounds = 100;
4016 for (std::size_t i = 0; i < rounds; ++i)
4030 expression0.register_symbol_table(st0);
4035 if (!
parser.compile(expression_string,expression0))
4037 printf(
"run_test10() - Error: %s Expression: %s\n",
4039 expression_string.c_str());
4048 expression1.register_symbol_table(st1);
4053 if (!
parser.compile(expression_string,expression1))
4055 printf(
"run_test10() - Error: %s Expression: %s\n",
4057 expression_string.c_str());
4089 std::string expression_string =
"(E == '1234') and (sin(a) + C) / b";
4092 typedef typename parser_t::dependent_entity_collector::symbol_t symbol_t;
4094 std::deque<symbol_t> symbol_list;
4099 parser.dec().collect_variables() =
true;
4100 parser.dec().collect_functions() =
true;
4102 if (!
parser.compile(expression_string,expression))
4104 printf(
"run_test10() - Error: %s Expression: %s\n",
4106 expression_string.c_str());
4111 parser.dec().symbols(symbol_list);
4114 std::deque<symbol_t> expected_symbol_list;
4116 expected_symbol_list.push_back(symbol_t(
"a" ,parser_t::e_st_variable));
4117 expected_symbol_list.push_back(symbol_t(
"b" ,parser_t::e_st_variable));
4118 expected_symbol_list.push_back(symbol_t(
"c" ,parser_t::e_st_variable));
4119 expected_symbol_list.push_back(symbol_t(
"e" ,parser_t::e_st_string ));
4120 expected_symbol_list.push_back(symbol_t(
"sin",parser_t::e_st_function));
4122 bool result = (symbol_list.size() == expected_symbol_list.size()) &&
4125 expected_symbol_list.begin());
4128 printf(
"run_test10() - Failed variable list comparison.(5)\n");
4158 typedef typename parser_t::dependent_entity_collector::symbol_t symbol_t;
4160 std::deque<symbol_t> variable_list;
4165 parser.dec().collect_assignments() =
true;
4167 if (!
parser.compile(expression_string,expression))
4169 printf(
"run_test10() - Error: %s Expression: %s\n",
4171 expression_string.c_str());
4176 parser.dec().assignment_symbols(variable_list);
4179 std::deque<symbol_t> expected_assignment_list;
4181 expected_assignment_list.push_back(symbol_t(
"a",parser_t::e_st_variable));
4182 expected_assignment_list.push_back(symbol_t(
"b",parser_t::e_st_variable));
4183 expected_assignment_list.push_back(symbol_t(
"c",parser_t::e_st_variable));
4184 expected_assignment_list.push_back(symbol_t(
"e",parser_t::e_st_string ));
4186 bool result = (variable_list.size() == expected_assignment_list.size()) &&
4188 variable_list.end(),
4189 expected_assignment_list.begin());
4192 printf(
"run_test10() - Failed variable list comparison.(6)\n");
4201 if (symbol_table0 == symbol_table1)
4203 printf(
"run_test10() - Error symbol_table0 and symbol_table1 are equal\n");
4207 symbol_table0 = symbol_table1;
4208 symbol_table1 = symbol_table0;
4210 if (!(symbol_table0 == symbol_table1))
4212 printf(
"run_test10() - Error symbol_table0 and symbol_table1 are not equal\n");
4229 for (std::size_t i = 0; i < 10000; ++i)
4231 symbol_table0.
clear();
4232 symbol_table1.
clear();
4248 expression.register_symbol_table(symbol_table0);
4249 expression.register_symbol_table(symbol_table1);
4258 "var x := 1; var y := 2; 1",
4259 "var x := 1; var y := 2; x",
4260 "var x:=6; var y:=4; x + -3 == 3",
4261 "var x:=6; var y:=4; x - -3 == 9",
4262 "var x:=6; var y:=4; x * -3 == -18",
4263 "var x:=6; var y:=4; x / -3 == -2",
4264 "var x:=6; var y:=4; -x + -3 == -9",
4265 "var x:=6; var y:=4; -x - -3 == -3",
4266 "var x:=6; var y:=4; -x * -3 == 18",
4267 "var x:=6; var y:=4; -x / -3 == 2",
4268 "var x:=6; var y:=4; -3 + -x == -9",
4269 "var x:=6; var y:=4; -3 - -x == 3",
4270 "var x:=6; var y:=4; -3 * -x == 18",
4271 "var x:=6; var y:=4; -3 / -x == 0.5",
4272 "var x:=6; var y:=4; 3 + -x == -3",
4273 "var x:=6; var y:=4; 3 - -x == 9",
4274 "var x:=6; var y:=4; 3 * -x == -18",
4275 "var x:=6; var y:=4; 3 / -x == -0.5",
4276 "var x := 3; var y := 6; x + -y == -3",
4277 "var x := 3; var y := 6; x - -y == 9",
4278 "var x := 3; var y := 6; -x + -y == -9",
4279 "var x := 3; var y := 6; -x - -y == 3",
4280 "var x := 3; var y := 6; -x * -y == 18",
4281 "var x := 6; var y := 3; -x / -y == 2",
4282 "var x := 3; var y := 6; -(-x * -y) == -18",
4283 "var x := 6; var y := 3; -(-x / -y) == -2",
4284 "var x:=1; 2+(3+abs(x)) == 6 ",
4285 "var x:=1; (3+abs(x))+2 == 6 ",
4286 "var x:=1; 2+(abs(x)+3) == 6 ",
4287 "var x:=1; (abs(x)+3)+2 == 6 ",
4288 "var x:=1; 2+(3-abs(x)) == 4 ",
4289 "var x:=1; (3-abs(x))+2 == 4 ",
4290 "var x:=1; 2+(abs(x)-3) == 0 ",
4291 "var x:=1; (abs(x)-3)+2 == 0 ",
4292 "var x:=1; 2-(3+abs(x)) == -2 ",
4293 "var x:=1; (3+abs(x))-2 == 2 ",
4294 "var x:=1; 2-(abs(x)+3) == -2 ",
4295 "var x:=1; (abs(x)+3)-2 == 2 ",
4296 "var x:=1; 2*(3*abs(x)) == 6 ",
4297 "var x:=1; (3*abs(x))*2 == 6 ",
4298 "var x:=1; 2*(abs(x)*3) == 6 ",
4299 "var x:=1; (abs(x)*3)*2 == 6 ",
4300 "var x:=1; 2*(3/abs(x)) == 6 ",
4301 "var x:=1; (3/abs(x))*2 == 6 ",
4302 "var x:=1; 2*(abs(x)/3) == (2/3)",
4303 "var x:=1; (abs(x)/3)*2 == (2/3)",
4304 "var x:=1; 2/(3*abs(x)) == (2/3)",
4305 "var x:=1; (3*abs(x))/2 == (3/2)",
4306 "var x:=1; 2/(abs(x)*3) == (2/3)",
4307 "var x:=1; (abs(x)*3)/2 == (3/2)",
4308 "var x:=1; 2/(3/abs(x)) == (2/3)",
4309 "var x:=1; (3/abs(x))/2 == (3/2)",
4310 "var x:=1; 2/(abs(x)/3) == 6 ",
4311 "var x:=1; (abs(x)/3)/2 == (1/6)",
4312 "var x:=3; var y:=6; -(-x)*-(-y) == 18",
4313 "var x:=3; var y:=6; -(-x)*-(-(-y)) == -18",
4314 "var x:=3; var y:=6; -(-(-x))*-(-y) == -18",
4315 "var x:=3; var y:=6; -(-(-x))*-(-(-y)) == 18",
4316 "var x:=3; var y:=6; -(-(x+y))*-(-(y+x)) == 81",
4317 "var x:=3; var y:=6; -(-(-(x+y)))*-(-(y+x)) == -81",
4318 "var x:=3; var y:=6; -(-(x+y))*-(-(-(y+x))) == -81",
4319 "var x:=3; var y:=6; -(-(-(x+y)))*-(-(-(y+x))) == 81",
4320 "var x:= 2; var y := 3; (-abs(x)+-abs(y)) == -5 ",
4321 "var x:= 2; var y := 3; (-abs(x)--abs(y)) == 1 ",
4322 "var x:= 2; var y := 3; (-abs(x)*-abs(y)) == 6 ",
4323 "var x:= 2; var y := 3; (-abs(x)/-abs(y)) == (2/3) ",
4324 "var x:= 2; var y := 3; (-abs(x)+abs(y)) == 1 ",
4325 "var x:= 2; var y := 3; (-abs(x)-abs(y)) == -5 ",
4326 "var x:= 2; var y := 3; (-abs(x)*abs(y)) == -6 ",
4327 "var x:= 2; var y := 3; (-abs(x)/abs(y)) == -(2/3) ",
4328 "var x:= 2; var y := 3; (abs(x)+-abs(y)) == -1 ",
4329 "var x:= 2; var y := 3; (abs(x)--abs(y)) == 5 ",
4330 "var x:= 2; var y := 3; (abs(x)*-abs(y)) == -6 ",
4331 "var x:= 2; var y := 3; (abs(x)/-abs(y)) == -(2/3) ",
4332 "var x:= 2; var y := 3; (-abs(x + 0)+-abs(y - 0)) == -5 ",
4333 "var x:= 2; var y := 3; (-abs(x + 0)--abs(y - 0)) == 1 ",
4334 "var x:= 2; var y := 3; (-abs(x + 0)*-abs(y - 0)) == 6 ",
4335 "var x:= 2; var y := 3; (-abs(x + 0)/-abs(y - 0)) == (2/3) ",
4336 "var x:= 2; var y := 3; (-abs(x + 0)+abs(y - 0)) == 1 ",
4337 "var x:= 2; var y := 3; (-abs(x + 0)-abs(y - 0)) == -5 ",
4338 "var x:= 2; var y := 3; (-abs(x + 0)*abs(y - 0)) == -6 ",
4339 "var x:= 2; var y := 3; (-abs(x + 0)/abs(y - 0)) == -(2/3) ",
4340 "var x:= 2; var y := 3; (abs(x + 0)+-abs(y - 0)) == -1 ",
4341 "var x:= 2; var y := 3; (abs(x + 0)--abs(y - 0)) == 5 ",
4342 "var x:= 2; var y := 3; (abs(x + 0)*-abs(y - 0)) == -6 ",
4343 "var x:= 2; var y := 3; (abs(x + 0)/-abs(y - 0)) == -(2/3) ",
4344 "var x := 1; var y := 2; swap(x,y); (x == 2) and (y == 1)",
4345 "var x := 1; var y := 2; x <=> y ; (x == 2) and (y == 1)",
4346 "var x := 'abc'; x == 'abc' ",
4347 "var x := 'abc'; var y := '123'; x != y ",
4348 "var x := 'abc'; var y := x + '123'; y == 'abc123' ",
4349 "var x := 'abc'; var y := '123' + x; y == '123abc' ",
4350 "~{var x := '123'; x[]} + ~{var x := '1234'; x[]} == 7",
4351 "~{var x := '123'; x[]} + ~{~{var x := '1234'; x[]}} == 7",
4352 "~{~{var x := '123'; x[]}} + ~{var x := '1234'; x[]} == 7",
4353 "~{var x := '123'; x[]} + ~{var x := 4} == 7",
4354 "~{var x := 3} + ~{var x := '1234'; x[]} == 7",
4355 "~{var x := '123'; x[]} + ~{~{var x := 4}} == 7",
4356 "~{~{var x := 3}} + ~{var x := '1234'; x[]} == 7",
4357 "var v[2] := {1,2}; swap(v[0],v[1]); (v[0] == 2) and (v[1] == 1)",
4358 "var v[2] := {1,2}; v[0] <=> v[1] ; (v[0] == 2) and (v[1] == 1)",
4359 "var x := 1; var y := 2; ~(swap(x,y),(x == 2) and (y == 1))",
4360 "var x := 1; var y := 2; ~(x <=> y , (x == 2) and (y == 1))",
4361 "var v[2] := {1,2}; ~(swap(v[0],v[1]), (v[0] == 2) and (v[1] == 1))",
4362 "var v[2] := {1,2}; ~(v[0] <=> v[1] , (v[0] == 2) and (v[1] == 1))",
4363 "var v[2] := {1,2}; swap(v[zero],v[one]); (v[zero] == 2) and (v[one] == 1)",
4364 "var v[2] := {1,2}; v[zero] <=> v[one] ; (v[zero] == 2) and (v[one] == 1)",
4365 "var v[2] := {1,2}; ~(swap(v[zero],v[one]), (v[zero] == 2) and (v[one] == 1))",
4366 "var v[2] := {1,2}; ~(v[zero] <=> v[one] , (v[zero] == 2) and (v[one] == 1))",
4367 "var v[2] := {1,2}; swap(v[2 * zero],v[(2 * one) / (1 + 1)]); (v[2 * zero] == 2) and (v[(2 * one) / (1 + 1)] == 1)",
4368 "var v[2] := {1,2}; v[2 * zero] <=> v[(2*one)/(1+1)] ; (v[2 * zero] == 2) and (v[(2 * one) / (1 + 1)] == 1)",
4369 "var v[2] := {1,2}; ~(swap(v[2 * zero],v[(2 * one) / (1 + 1)]), (v[2 * zero] == 2) and (v[(2 * one) / (1 + 1)] == 1))",
4370 "var v[2] := {1,2}; ~(v[2 * zero] <=> v[(2 * one) / (1 + 1)] , (v[2 * zero] == 2) and (v[(2 * one) / (1 + 1)] == 1))",
4371 "var x := 1; var y := 2; var v[2] := {3,4}; swap(x,v[0]); swap(v[1],y); (x == 3) and (y == 4)",
4372 "var x := 1; var y := 2; var v[2] := {3,4}; x <=> v[0]; v[1] <=> y; (x == 3) and (y == 4)",
4373 "var x := 1; var y := 2; var v[2] := {3,4}; swap(x,v[zero]); swap(v[one],y); (x == 3) and (y == 4)",
4374 "var x := 1; var y := 2; var v[2] := {3,4}; x <=> v[zero]; v[one] <=> y; (x == 3) and (y == 4)",
4375 "var x := 1; var y := 2; var v[2] := {3,4}; swap(x,v[2 * zero]); swap(v[(2 * one) / (1 + 1)],y); (x == 3) and (y == 4)",
4376 "var x := 1; var y := 2; var v[2] := {3,4}; x <=> v[zero / 3]; v[(2 * one)/(1 + 1)] <=> y; (x == 3) and (y == 4)",
4377 "~{ var x := 1 } + ~{ var x := 2 } == 3",
4378 "(~{ var x := 1 } + ~{ var x := 2 }) == (~{ var x := 2 } + ~{ var x := 1 })",
4379 "(~{ var x := 1 } + ~{ var x := 2 } + ~{~{ var x := 1 } + ~{ var x := 2 }}) == 6",
4380 "(~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{~{ var x[1] := [1] } + ~{ var x[1] := [2] }}) == 6",
4381 "(~{ var x := [1] } + ~{ var x[1] := [2] } + ~{~{ var x[1] := [1] } + ~{ var x[1] := [2] }}) == 6",
4382 "(~{ var x[1] := [1] } + ~{ var x := [2] } + ~{~{ var x[1] := [1] } + ~{ var x[1] := [2] }}) == 6",
4383 "(~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{~{ var x := [1] } + ~{ var x[1] := [2] }}) == 6",
4384 "(~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{~{ var x[1] := [1] } + ~{ var x := [2] }}) == 6",
4385 "(~{~{ var x[1] := [1] } + ~{ var x[1] := [2] }} + ~{ var x[1] := [1] } + ~{ var x[1] := [2] }) == 6",
4386 "(~{~{ var x := [1] } + ~{ var x[1] := [2] }} + ~{ var x[1] := [1] } + ~{ var x[1] := [2] }) == 6",
4387 "(~{~{ var x[1] := [1] } + ~{ var x := [2] }} + ~{ var x[1] := [1] } + ~{ var x[1] := [2] }) == 6",
4388 "(~{~{ var x[1] := [1] } + ~{ var x[1] := [2] }} + ~{ var x := [1] } + ~{ var x[1] := [2] }) == 6",
4389 "(~{~{ var x[1] := [1] } + ~{ var x[1] := [2] }} + ~{ var x[1] := [1] } + ~{ var x := [2] }) == 6",
4390 "(~{~{ var x[1] := [1] }} + ~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{{ var x[1] := [2] }}) == 6",
4391 "(~{~{ var x := [1] }} + ~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{{ var x[1] := [2] }}) == 6",
4392 "(~{~{ var x[1] := [1] }} + ~{ var x := [1] } + ~{ var x[1] := [2] } + ~{{ var x[1] := [2] }}) == 6",
4393 "(~{~{ var x[1] := [1] }} + ~{ var x[1] := [1] } + ~{ var x := [2] } + ~{{ var x[1] := [2] }}) == 6",
4394 "(~{~{ var x[1] := [1] }} + ~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{{ var x := [2] }}) == 6",
4395 "(~{~{~{var x[1] := [1]}}} + ~{~{var x[1] := [2]}} + ~{var x[1] := [3]}) == 6",
4396 "(~{var x[1] := [1]} + ~{~{var x[1] := [2]}} + ~{~{~{var x[1] := [3]}}}) == 6",
4397 "(~{ var x[3] := [1] } + ~{ var x[6] := {6,5,4,3,2,1}}) == 7",
4398 "(~{ var x[6] := {6,5,4,3,2,1} } + ~{ var x := 1 }) == 7",
4399 "(~{ var x := 1 } + ~{ var x[6] := {6,5,4,3,2,1} }) == 7",
4400 "var x[3] := {}; (x[0] == 0) and (x[1] == 0) and (x[2] == 0)",
4401 "var x[3] := {1,2}; (x[0] == 1) and (x[1] == 2) and (x[2] == 0)",
4402 "var x[3] := {1,2,3}; (x[0] == 1) and (x[1] == 2) and (x[2] == 3)",
4403 "var x[3] := [1]; (x[0] == 1) and (x[1] == 1) and (x[2] == 1)",
4404 "var v[3] := [1]; v += 1; (v[0] == v[1]) and (v[0] == v[2]) and (v[0] == 2)",
4405 "var v[3] := [1]; v -= 1; (v[0] == v[1]) and (v[0] == v[2]) and (v[0] == 0)",
4406 "var v[3] := [1]; v *= 2; (v[0] == v[1]) and (v[0] == v[2]) and (v[0] == 2)",
4407 "var v[3] := [3]; v /= 3; (v[0] == v[1]) and (v[0] == v[2]) and (v[0] == 1)",
4408 "var v[3] := {1,2, 3}; v += 1; (v[0] == 2) and (v[1] == 3) and (v[2] == 4)",
4409 "var v[3] := {1,2, 3}; v -= 1; (v[0] == 0) and (v[1] == 1) and (v[2] == 2)",
4410 "var v[3] := {1,2, 3}; v *= 2; (v[0] == 2) and (v[1] == 4) and (v[2] == 6)",
4411 "var v[3] := {3,9,15}; v /= 3; (v[0] == 1) and (v[1] == 3) and (v[2] == 5)",
4412 "var v0[3] := [1]; var v1[3] := [1]; v0 += v1; (v0[0] == v0[1]) and (v0[0] == v0[2]) and (v0[0] == 2)",
4413 "var v0[3] := [1]; var v1[3] := [1]; v0 -= v1; (v0[0] == v0[1]) and (v0[0] == v0[2]) and (v0[0] == 0)",
4414 "var v0[3] := [1]; var v1[3] := [2]; v0 *= v1; (v0[0] == v0[1]) and (v0[0] == v0[2]) and (v0[0] == 2)",
4415 "var v0[3] := [3]; var v1[3] := [3]; v0 /= v1; (v0[0] == v0[1]) and (v0[0] == v0[2]) and (v0[0] == 1)",
4416 "var v0[3] := {1,2, 3}; var v1[3] := {1,1,1}; v0 += v1; (v0[0] == 2) and (v0[1] == 3) and (v0[2] == 4)",
4417 "var v0[3] := {1,2, 3}; var v1[3] := {1,1,1}; v0 -= v1; (v0[0] == 0) and (v0[1] == 1) and (v0[2] == 2)",
4418 "var v0[3] := {1,2, 3}; var v1[3] := {2,2,2}; v0 *= v1; (v0[0] == 2) and (v0[1] == 4) and (v0[2] == 6)",
4419 "var v0[3] := {3,9,15}; var v1[3] := {3,3,3}; v0 /= v1; (v0[0] == 1) and (v0[1] == 3) and (v0[2] == 5)",
4420 "var x[3] := {}; var y[4] := {1,2,3,4}; x := y; (x[0] == y[0]) and (x[1] == y[1]) and (x[2] == y[2])",
4421 "var x[3] := {}; var y[3] := {1,2,3}; x := y; (x[0] == y[0]) and (x[1] == y[1]) and (x[2] == y[2])",
4422 "var x[3] := {}; var y[2] := {1,2}; x := y; (x[0] == y[0]) and (x[1] == y[1]) and (x[2] == 0)",
4423 "var x[3] := {}; var y[1] := {1}; x := y; (x[0] == y[0]) and (x[1] == 0) and (x[2] == 0)",
4424 "var x[3] := {}; var y[4] := {1,2,3,4}; x := (y+=1); (x[0] == y[0]) and (x[1] == y[1]) and (x[2] == y[2])",
4425 "var x[3] := {}; var y[3] := {1,2,3}; x := (y+=1); (x[0] == y[0]) and (x[1] == y[1]) and (x[2] == y[2])",
4426 "var x[3] := {}; var y[2] := {1,2}; x := (y+=1); (x[0] == y[0]) and (x[1] == y[1]) and (x[2] == 0)",
4427 "var x[3] := {}; var y[1] := {1}; x := (y+=1); (x[0] == y[0]) and (x[1] == 0) and (x[2] == 0)",
4428 "var x[3] := {}; var y[4] := {1,2,3,4}; x += (y+=1); (x[0] == y[0]) and (x[1] == y[1]) and (x[2] == y[2])",
4429 "var x[3] := {}; var y[3] := {1,2,3}; x += (y+=1); (x[0] == y[0]) and (x[1] == y[1]) and (x[2] == y[2])",
4430 "var x[3] := {}; var y[2] := {1,2}; x += (y+=1); (x[0] == y[0]) and (x[1] == y[1]) and (x[2] == 0)",
4431 "var x[3] := {}; var y[1] := {1}; x += (y+=1); (x[0] == y[0]) and (x[1] == 0) and (x[2] == 0)",
4432 "var x[3] := [9]; var y[4] := {1,2,3,4}; x <=> y; (x[0] == 1) and (x[1] == 2) and (x[2] == 3)",
4433 "var x[3] := [9]; var y[3] := {1,2,3}; x <=> y; (x[0] == 1) and (x[1] == 2) and (x[2] == 3)",
4434 "var x[3] := [9]; var y[2] := {1,2}; x <=> y; (x[0] == 1) and (x[1] == 2) and (x[2] == 9)",
4435 "var x[3] := [9]; var y[1] := {1}; x <=> y; (x[0] == 1) and (x[1] == 9) and (x[2] == 9)",
4436 "var x[3] := [9]; var y[4] := {1,2,3,4}; x <=> (y += 1); (x[0] == 2) and (x[1] == 3) and (x[2] == 4)",
4437 "var x[3] := [9]; var y[3] := {1,2,3}; x <=> (y += 1); (x[0] == 2) and (x[1] == 3) and (x[2] == 4)",
4438 "var x[3] := [9]; var y[2] := {1,2}; x <=> (y += 1); (x[0] == 2) and (x[1] == 3) and (x[2] == 9)",
4439 "var x[3] := [9]; var y[1] := {1}; x <=> (y += 1); (x[0] == 2) and (x[1] == 9) and (x[2] == 9)",
4440 "var x[3] := [8]; var y[4] := {1,2,3,4}; (x += 1) <=> y; (x[0] == 1) and (x[1] == 2) and (x[2] == 3)",
4441 "var x[3] := [8]; var y[3] := {1,2,3}; (x += 1) <=> y; (x[0] == 1) and (x[1] == 2) and (x[2] == 3)",
4442 "var x[3] := [8]; var y[2] := {1,2}; (x += 1) <=> y; (x[0] == 1) and (x[1] == 2) and (x[2] == 9)",
4443 "var x[3] := [8]; var y[1] := {1}; (x += 1) <=> y; (x[0] == 1) and (x[1] == 9) and (x[2] == 9)",
4444 "var x[3] := [8]; var y[4] := {1,2,3,4}; (x += 1) <=> (y += 1); (x[0] == 2) and (x[1] == 3) and (x[2] == 4)",
4445 "var x[3] := [8]; var y[3] := {1,2,3}; (x += 1) <=> (y += 1); (x[0] == 2) and (x[1] == 3) and (x[2] == 4)",
4446 "var x[3] := [8]; var y[2] := {1,2}; (x += 1) <=> (y += 1); (x[0] == 2) and (x[1] == 3) and (x[2] == 9)",
4447 "var x[3] := [8]; var y[1] := {1}; (x += 1) <=> (y += 1); (x[0] == 2) and (x[1] == 9) and (x[2] == 9)",
4448 "var x[3] := [0]; var y[4] := {1,2,3,4}; X < y",
4449 "var x[3] := [0]; var y[3] := {1,2,3}; x < Y",
4450 "var x[3] := [0]; var y[2] := {1,2}; X < y",
4451 "var x[3] := [0]; var y[1] := {1}; x < Y",
4452 "var x[3] := [0]; var y[4] := {1,2,3,4}; x <= y",
4453 "var x[3] := [0]; var y[3] := {1,2,3}; x <= y",
4454 "var x[3] := [0]; var y[2] := {1,2}; x <= y",
4455 "var x[3] := [0]; var y[1] := {1}; x <= y",
4456 "var x[3] := [5]; var y[4] := {1,2,3,4}; x > y",
4457 "var x[3] := [5]; var y[3] := {1,2,3}; x > y",
4458 "var x[3] := [5]; var y[2] := {1,2}; x > y",
4459 "var x[3] := [5]; var y[1] := {1}; x > y",
4460 "var x[3] := [5]; var y[4] := {1,2,3,4}; x >= y",
4461 "var x[3] := [5]; var y[3] := {1,2,3}; x >= y",
4462 "var x[3] := [5]; var y[2] := {1,2}; x >= y",
4463 "var x[3] := [5]; var y[1] := {1}; x >= y",
4464 "var x[3] := [1]; var y[4] := [1]; x == y",
4465 "var x[3] := [1]; var y[3] := [1]; x == y",
4466 "var x[3] := [1]; var y[2] := [1]; x == y",
4467 "var x[3] := [1]; var y[1] := [1]; x == y",
4468 "var x[3] := [1]; var y[4] := [2]; x != y",
4469 "var x[3] := [1]; var y[3] := [2]; x != y",
4470 "var x[3] := [1]; var y[2] := [2]; x != y",
4471 "var x[3] := [1]; var y[1] := [2]; x != y",
4472 "var x[3] := [0]; var y[4] := {5,6,7,8}; (x += 1) < y",
4473 "var x[3] := [0]; var y[3] := {5,6,7}; (x += 1) < y",
4474 "var x[3] := [0]; var y[2] := {5,6}; (x += 1) < y",
4475 "var x[3] := [0]; var y[1] := {5}; (x += 1) < y",
4476 "var x[3] := [0]; var y[4] := {1,2,3,4}; x < (y += 1)",
4477 "var x[3] := [0]; var y[3] := {1,2,3}; x < (y += 1)",
4478 "var x[3] := [0]; var y[2] := {1,2}; x < (y += 1)",
4479 "var x[3] := [0]; var y[1] := {1}; x < (y += 1)",
4480 "var x[3] := [0]; var y[4] := {5,6,7,8}; (x += 1) < (y += 1)",
4481 "var x[3] := [0]; var y[3] := {5,6,7}; (x += 1) < (y += 1)",
4482 "var x[3] := [0]; var y[2] := {5,6}; (x += 1) < (y += 1)",
4483 "var x[3] := [0]; var y[1] := {5}; (x += 1) < (y += 1)",
4484 "var x[3] := {1,2,3}; var y := 5; x < y ",
4485 "var x[3] := {1,2,3}; var y := 3; x < y + 1 ",
4486 "var x[3] := {1,2,3}; var y := 5; x <= y ",
4487 "var x[3] := {1,2,3}; var y := 3; x <= y + 1",
4488 "var x[3] := {1,1,1}; var y := 1; x == y ",
4489 "var x[3] := {1,1,1}; var y := 2; x == y - 1",
4490 "var x[3] := {1,2,3}; var y := 5; y > x ",
4491 "var x[3] := {1,2,3}; var y := 3; y >= x ",
4492 "var x[3] := {1,2,3}; var y := 5; y + 1 > x ",
4493 "var x[3] := {1,1,1}; var y := 1; y == x ",
4494 "var x[3] := {1,1,1}; var y := 2; y - 1 == x",
4495 "var x[3] := {1,2,3}; var y := 5; equal(true,(x += 1) < y) ",
4496 "var x[3] := {1,2,3}; var y := 3; equal(true,(x -= 1) < y + 1)",
4497 "var x[3] := {1,2,3}; var y := 5; equal(true,(x -= 1) <= y) ",
4498 "var x[3] := {2,2,2}; var y := 1; (x -= 1) == y ",
4499 "var x[3] := {1,2,3}; var y := 5; y > (x += 1) ",
4500 "var x[3] := {1,2,3}; var y := 5; y + 1 > (x += 1) ",
4501 "var x[3] := {2,2,2}; var y := 1; y == (x -= 1) ",
4502 "var x[3] := {2,2,2}; var y := 0; y + 1 == (x -= 1)",
4503 "var x[3] := [1]; var y[4] := {1,2,3,4}; var z[3] := [1]; z := (x + y); z == (x + y)",
4504 "var x[3] := [1]; var y[3] := {1,2,3}; var z[3] := [1]; z := (x - y); z == (x - y)",
4505 "var x[3] := [1]; var y[2] := {1,2}; var z[3] := [1]; z := (x / y); z == (x / y)",
4506 "var x[3] := [1]; var y[1] := {1}; var z[3] := [1]; z := (x * y); z == (x * y)",
4507 "var x[3] := [1]; var y[4] := {1,2,3,4}; var z[3] := [1]; z := 2(x + y); z == (x + y)2",
4508 "var x[3] := [1]; var y[3] := {1,2,3}; var z[3] := [1]; z := 2(x - y); z == (x - y)2",
4509 "var x[3] := [1]; var y[2] := {1,2}; var z[3] := [1]; z := 2(x / y); z == (x / y)2",
4510 "var x[3] := [1]; var y[1] := {1}; var z[3] := [1]; z := 2(x * y); z == (x * y)2",
4511 "var x[3] := [1]; var y[4] := {1,2,3,4}; var z[3] := [1]; z := 2(x + y)/3; z == 2(x + y)/3",
4512 "var x[3] := [1]; var y[3] := {1,2,3}; var z[3] := [1]; z := 2(x - y)/3; z == 2(x - y)/3",
4513 "var x[3] := [1]; var y[2] := {1,2}; var z[3] := [1]; z := 2(x / y)/3; z == 2(x / y)/3",
4514 "var x[3] := [1]; var y[1] := {1}; var z[3] := [1]; z := 2(x * y)/3; z == 2(x * y)/3",
4515 "var x[6] := {1,2,3,4,5,6}; equal(sqrt(sum([x - avg(x)]^2) / x[]),1.7078251277)",
4516 "var x[3] := {-1,-2,-3}; sum(abs(x) ) == 6",
4517 "var x[3] := {0.1,0.2,0.3}; sum(trunc(x)) == 0",
4519 "var x[10^6]:=[2];var y[10^6]:=[3]; var s:=0;equal(for(var i:=0; i<10;i+=1){s+= sum(5 *(2x-y/3)) + i;},150000045.0)",
4521 "var x := 2; (~{ for (var i := 0; i < 10; i += 1) { for (var j := 0; j <= i; " 4522 "j += 1) { var y := 3; if ((i + j + y + x) < 6) { y += x; continue; } else " 4523 "break[i + j]; } } } + ~{ for (var i := 0; i < 10; i += 1) { for (var j := 0; " 4524 "j <= i; j += 1) { var y := 3; if ((i + j + y + x) < 6) { y += x; continue; } " 4525 " else break[i + j]; } } }) == 18 ",
4527 "var x := 2; var v0[3] := {1,2,3}; ( ~{ for (var i := 0; i < 10; i += 1) { " 4528 "for (var j := 0; j <= i; j += 1) { var y := 3; var v2[3] := {1,2,3}; if ( " 4529 "(i + j + y + x + abs(v0[i % v0[]] - v2[j % v2[]])) < 6) { var v3[3] := " 4530 "{1,2,3}; y += x / v3[j % v3[]]; continue; } else break[i + j]; } } } " 4531 "+ ~{ for (var i := 0; i < 10; i += 1) { for (var j := 0; j <= i; j += 1) " 4532 " { var y := 3; var v2[3] := {1,2,3}; if ((i + j + y + x + abs(v0[i % v0[]] - " 4533 "v2[j % v2[]])) < 6) { var v3[3] := {1,2,3}; y += x / v3[j % v3[]]; " 4534 "continue; } else break[i + j]; } } } ) == 18 ",
4536 "12 == (if (1 > 2) { var x:= 2; } else { var x[3] := {7,2,3}; sum(x); })",
4537 "12 == (if (1 < 2) { var x[3] := {7,2,3}; sum(x); } else { var x:= 2; })",
4538 "12 == (if (1 > 2) { var x:= 2; } else { var x[3] := {7,2,3}; sum(x); })",
4539 "12 == (if (1 < 2) { var x[3] := {7,2,3}; sum(x); } else { var x:= 2; })",
4541 "21 == (for (var i := 0; i < 10; i += 1) { if (i > 2) { break [i * 7]; i += 1;" 4542 "i += 2; i += 3; }; })",
4544 "21 == (for (var i := 0; i < 10; i += 1) { if (i > 2) { break [i * 7]; return " 4545 "[i * 8]; i += 1; i += 2; i += 3; }; })",
4547 "2 == for (var i := 0; i < 10; i += 1) { if (i > 2) { continue; i += 1; i += 2;" 4548 "i += 3; } else i; }",
4550 "2 == for (var i := 0; i < 10; i += 1) { if (i > 2) { continue; return [i * 8];" 4551 "i += 1; i += 2; i += 3; } else i; }",
4553 "var x[10] := [-1]; var y[10] := [-1]; for (var i := 0; i < 10; i += 1) { x[i] := i; " 4554 "y[i] := 2 * x[i]; }; (sum(x) == 45) and (sum(y) == (2 * sum(x)));" 4556 "7 == (for (var i := 0; i < 10; i += 1) { ~{break[7]; continue; i += i} })",
4557 "0 == (for (var i := 0; i < 10; i += 1) { ~{break[i]; continue; i += i} })",
4558 "0 == (for (var i := 0; i < 10; i += 1) { ~{continue; break[7]; i += i} })",
4559 "1 == (for (var i := 0; i < 10; i += 1) { ~{break[i += 1]; continue; i += i} })",
4561 "var s := 'abc'; s == ~{'abc' } ",
4562 "var s := 'abc'; s == ~{s } ",
4563 "var s := 'abc'; s == ~{'ab' + 'c'} ",
4564 "var s := 'abc'; ~{'abc' } == s ",
4565 "var s := 'abc'; ~{s } == s ",
4566 "var s := 'abc'; ~{'ab' + 'c'} == s ",
4567 "var s := 'abc'; ~{1 + 2; 'abc' + s; s} == s ",
4568 "var s := 'abc'; ~{1 + 2; var x := 'ab'; x + 'c'} == s ",
4570 "var x[10^6] := null; var y[10^7] := null; 0 * (min(x) + min(y)) + x[] + y[] == 10^7 + 10^6" 4573 const std::size_t expression_list_size =
sizeof(expression_list) /
sizeof(
std::string);
4575 static const std::size_t rounds = 20;
4586 bool failed =
false;
4588 for (std::size_t r = 0; r < rounds; ++r)
4590 for (std::size_t i = 0; i < expression_list_size; ++i)
4598 if (!
parser.compile(expression_list[i],expression))
4600 printf(
"run_test10() - swaps[1] Error: %s Expression: %s\n",
4602 expression_list[i].c_str());
4609 T result = expression.value();
4613 printf(
"run_test10() - swaps[1] evaluation error Expression: %s\n",
4614 expression_list[i].c_str());
4627 for (std::size_t r = 0; r < rounds; ++r)
4631 for (std::size_t i = 0; i < expression_list_size; ++i)
4636 if (!
parser.compile(expression_list[i],expression))
4638 printf(
"run_test10() - swaps[2] Error: %s Expression: %s\n",
4640 expression_list[i].c_str());
4646 T result = expression.value();
4650 printf(
"run_test10() - swaps[2] evaluation error Expression: %s\n",
4651 expression_list[i].c_str());
4667 template <
typename T>
4683 static const std::size_t rounds = 500;
4685 for (std::size_t i = 0; i < rounds; ++i)
4690 if (!
parser.compile(expression_string,expression))
4692 printf(
"run_test11() - Error: %s Expression: %s\n",
4694 expression_string.c_str());
4700 if (
not_equal(expression.value(),(
x + y) / T(3),T(0.000001)))
4702 printf(
"run_test11() - Error in evaluation!(1)\n");
4706 expression.release();
4708 if (
false == (!expression))
4710 printf(
"run_test11() - Error in evaluation!(2)\n");
4717 if (!
parser.compile(expression_string,expression))
4719 printf(
"run_test11() - Error: %s Expression: %s\n",
4721 expression_string.c_str());
4729 if (
not_equal(expression.value(),(
x + y) / T(3),T(0.000001)))
4731 printf(
"run_test11() - Error in evaluation!(3)\n");
4736 if (!exprtk::pgo_primer<T>())
4738 printf(
"run_test11() - Failed PGO primer\n");
4745 template <
typename T>
4751 "equal(poly01(x,2.2,1.1),(2.2x^1+1.1))",
4752 "equal(poly02(x,3.3,2.2,1.1),(3.3x^2+2.2x^1+1.1))",
4753 "equal(poly03(x,4.4,3.3,2.2,1.1),(4.4x^3+3.3x^2+2.2x^1+1.1))",
4754 "equal(poly04(x,5.5,4.4,3.3,2.2,1.1),(5.5x^4+4.4x^3+3.3x^2+2.2x^1+1.1))",
4755 "equal(poly05(x,6.6,5.5,4.4,3.3,2.2,1.1),(6.6x^5+5.5x^4+4.4x^3+3.3x^2+2.2x^1+1.1))",
4756 "equal(poly06(x,7.7,6.6,5.5,4.4,3.3,2.2,1.1),(7.7x^6+6.6x^5+5.5x^4+4.4x^3+3.3x^2+2.2x^1+1.1))",
4757 "equal(poly07(x,8.8,7.7,6.6,5.5,4.4,3.3,2.2,1.1),(8.8x^7+7.7x^6+6.6x^5+5.5x^4+4.4x^3+3.3x^2+2.2x^1+1.1))",
4758 "equal(poly08(x,9.9,8.8,7.7,6.6,5.5,4.4,3.3,2.2,1.1),(9.9x^8+8.8x^7+7.7x^6+6.6x^5+5.5x^4+4.4x^3+3.3x^2+2.2x^1+1.1))",
4759 "equal(poly09(x,1.1,9.9,8.8,7.7,6.6,5.5,4.4,3.3,2.2,1.1),(1.1x^9+9.9x^8+8.8x^7+7.7x^6+6.6x^5+5.5x^4+4.4x^3+3.3x^2+2.2x^1+1.1))",
4760 "equal(poly10(x,2.2,1.1,9.9,8.8,7.7,6.6,5.5,4.4,3.3,2.2,1.1),(2.2x^10+1.1x^9+9.9x^8+8.8x^7+7.7x^6+6.6x^5+5.5x^4+4.4x^3+3.3x^2+2.2x^1+1.1))",
4761 "equal(poly11(x,3.3,2.2,1.1,9.9,8.8,7.7,6.6,5.5,4.4,3.3,2.2,1.1),(3.3x^11+2.2x^10+1.1x^9+9.9x^8+8.8x^7+7.7x^6+6.6x^5+5.5x^4+4.4x^3+3.3x^2+2.2x^1+1.1))",
4762 "equal(poly12(x,4.4,3.3,2.2,1.1,9.9,8.8,7.7,6.6,5.5,4.4,3.3,2.2,1.1),(4.4x^12+3.3x^11+2.2x^10+1.1x^9+9.9x^8+8.8x^7+7.7x^6+6.6x^5+5.5x^4+4.4x^3+3.3x^2+2.2x^1+1.1))",
4763 "EquaL(Poly01(x,2.2,1.1),(2.2x^1+1.1))",
4764 "eQuAl(pOly02(x,3.3,2.2,1.1),(3.3x^2+2.2x^1+1.1))",
4765 "eqUal(poLy03(x,4.4,3.3,2.2,1.1),(4.4x^3+3.3x^2+2.2x^1+1.1))",
4766 "eQuAl(polY04(x,5.5,4.4,3.3,2.2,1.1),(5.5x^4+4.4x^3+3.3x^2+2.2x^1+1.1))",
4767 "EquAl(pOLy05(x,6.6,5.5,4.4,3.3,2.2,1.1),(6.6x^5+5.5x^4+4.4x^3+3.3x^2+2.2x^1+1.1))",
4768 "EqUaL(pOly06(x,7.7,6.6,5.5,4.4,3.3,2.2,1.1),(7.7x^6+6.6x^5+5.5x^4+4.4x^3+3.3x^2+2.2x^1+1.1))",
4769 "Equal(Poly07(x,8.8,7.7,6.6,5.5,4.4,3.3,2.2,1.1),(8.8x^7+7.7x^6+6.6x^5+5.5x^4+4.4x^3+3.3x^2+2.2x^1+1.1))",
4770 "eQual(PoLy08(x,9.9,8.8,7.7,6.6,5.5,4.4,3.3,2.2,1.1),(9.9x^8+8.8x^7+7.7x^6+6.6x^5+5.5x^4+4.4x^3+3.3x^2+2.2x^1+1.1))",
4771 "eqUal(pOlY09(x,1.1,9.9,8.8,7.7,6.6,5.5,4.4,3.3,2.2,1.1),(1.1x^9+9.9x^8+8.8x^7+7.7x^6+6.6x^5+5.5x^4+4.4x^3+3.3x^2+2.2x^1+1.1))",
4772 "equAl(POLY10(x,2.2,1.1,9.9,8.8,7.7,6.6,5.5,4.4,3.3,2.2,1.1),(2.2x^10+1.1x^9+9.9x^8+8.8x^7+7.7x^6+6.6x^5+5.5x^4+4.4x^3+3.3x^2+2.2x^1+1.1))",
4773 "equaL(PolY11(x,3.3,2.2,1.1,9.9,8.8,7.7,6.6,5.5,4.4,3.3,2.2,1.1),(3.3x^11+2.2x^10+1.1x^9+9.9x^8+8.8x^7+7.7x^6+6.6x^5+5.5x^4+4.4x^3+3.3x^2+2.2x^1+1.1))",
4774 "EQUAL(pOLy12(x,4.4,3.3,2.2,1.1,9.9,8.8,7.7,6.6,5.5,4.4,3.3,2.2,1.1),(4.4x^12+3.3x^11+2.2x^10+1.1x^9+9.9x^8+8.8x^7+7.7x^6+6.6x^5+5.5x^4+4.4x^3+3.3x^2+2.2x^1+1.1))" 4776 static const std::size_t expression_string_size =
sizeof(expression_string) /
sizeof(
std::string);
4812 static const std::size_t rounds = 500;
4814 for (std::size_t i = 0; i < rounds; ++i)
4816 for (std::size_t j = 0; j < expression_string_size; ++j)
4818 const std::string& expr_str = expression_string[j];
4823 if (!
parser.compile(expr_str,expression))
4825 printf(
"run_test12() - Error: %s Expression: %s\n",
4833 if (T(1) != expression.value())
4835 printf(
"run_test12() - Error in evaluation! Expression: %s\n",expr_str.c_str());
4844 template <
typename T>
4857 template <
typename T>
4870 template <
typename T>
4879 "equal(sin(30),0.5) ",
4880 "equal(cos(60),0.5) ",
4881 "equal(sin(60),sqrt(3)/2) ",
4882 "equal(cos(30),sqrt(3)/2) ",
4883 "equal(sin(x_deg),0.5) ",
4884 "equal(cos(y_deg),0.5) ",
4885 "equal(sin(y_deg),sqrt(3)/2) ",
4886 "equal(cos(x_deg),sqrt(3)/2) ",
4887 "equal(sin(30) + sin(30),1.0) ",
4888 "equal(cos(60) + cos(60),1.0) ",
4889 "equal(sin(60) + sin(60),sqrt(3)) ",
4890 "equal(cos(30) + cos(30),sqrt(3)) ",
4891 "equal(sin(x_deg) + sin(x_deg),1.0) ",
4892 "equal(cos(y_deg) + cos(y_deg),1.0) ",
4893 "equal(sin(y_deg) + sin(y_deg),sqrt(3))",
4894 "equal(cos(x_deg) + cos(x_deg),sqrt(3))" 4897 static const std::size_t expression_string_size =
sizeof(expression_string) /
sizeof(
std::string);
4910 symbol_table_1.add_variable(
"y_deg",y_deg);
4912 symbol_table_0.add_function(
"sine_deg", sine);
4913 symbol_table_1.add_function(
"cosine_deg", cosine);
4918 expression.register_symbol_table(symbol_table_1);
4920 static const std::size_t rounds = 100;
4922 for (std::size_t i = 0; i < rounds; ++i)
4924 for (std::size_t j = 0; j < expression_string_size; ++j)
4926 const std::string& expr_str = expression_string[j];
4931 parser.replace_symbol(
"sin",
"sine_deg");
4932 parser.replace_symbol(
"cos",
"cosine_deg");
4934 if (!
parser.compile(expr_str,expression))
4936 printf(
"run_test13() - Error: %s Expression: %s [1]\n",
4944 if (T(1) != expression.value())
4946 printf(
"run_test13() - Error in evaluation! Expression: %s [1]\n",expr_str.c_str());
4964 symbol_table_1.add_variable(
"y_deg",y_deg);
4966 symbol_table_0.add_reserved_function(
"sin", sine);
4967 symbol_table_1.add_reserved_function(
"cos",cosine);
4972 expression.register_symbol_table(symbol_table_1);
4974 static const std::size_t rounds = 100;
4976 for (std::size_t i = 0; i < rounds; ++i)
4978 for (std::size_t j = 0; j < expression_string_size; ++j)
4980 const std::string& expr_str = expression_string[j];
4983 typedef typename parser_t::settings_store settings_t;
4988 .disable_base_function(settings_t::e_bf_sin)
4989 .disable_base_function(settings_t::e_bf_cos);
4991 if (!
parser.compile(expr_str,expression))
4993 printf(
"run_test13() - Error: %s Expression: %s [2]\n",
5001 if (T(1) != expression.value())
5003 printf(
"run_test13() - Error in evaluation! Expression: %s [2]\n",expr_str.c_str());
5013 template <
typename Allocator,
5014 template <
typename,
typename>
class Sequence>
5016 Sequence<std::string,Allocator>& sequence)
5018 std::ifstream stream(file_name.c_str());
5020 if (!stream)
return 0;
5025 std::size_t line_count = 0;
5027 while (std::getline(stream,(
buffer)))
5031 else if (
'#' ==
buffer[0])
5035 sequence.push_back(
buffer);
5041 template <
typename T>
5088 std::deque<std::string> expr_str_list;
5093 if (expr_str_list.empty())
5098 std::deque<exprtk::expression<T> > expression_list;
5099 bool failure =
false;
5100 static const std::size_t rounds = 5;
5102 for (std::size_t r = 0; r < rounds; ++r)
5104 for (std::size_t i = 0; i < expr_str_list.size(); ++i)
5110 if (!
parser.compile(expr_str_list[i],current_expression))
5112 printf(
"run_test14() - Error: %s Expression: %s\n",
5114 expr_str_list[i].c_str());
5119 expression_list.push_back(current_expression);
5125 for (std::size_t i = 0; i < expression_list.size(); ++i)
5127 T result = expression_list[i].value();
5133 printf(
"run_test14() - Error with evaluation of expression: %s\n",
5134 expr_str_list[i].c_str());
5138 expression_list.clear();
5147 template <
typename T>
5164 "2 - (x + y) / z//Comment 01 ",
5165 "2 - (x + y) / z#Comment 02 ",
5166 "2 - (x + y) / z //Comment 03 ",
5167 "2 - (x + y) / z #Comment 04 ",
5168 "2 - (x + y) / z//Comment 05 \n",
5169 "2 - (x + y) / z#Comment 06 \n",
5170 "2 - (x + y) / z //Comment 07\n",
5171 "2 - (x + y) / z #Comment 08 \n",
5172 "/* Comment 09*/2 - (x + y) / z",
5173 "/* Comment 10*/2 - (x + y) / z\n",
5174 "/* Comment 11*/2 - (x + y) / z/* Comment 12*/",
5175 "/* Comment 13*/2 - (x + y) / z/* Comment 14*/\n",
5176 "2 - /* Comment 15 */(x + y) / z",
5177 "2 - /* Comment 16 */(x + y) /* Comment 17 *// z \n",
5178 "2 - /* Comment 18 */(x + y) /* Comment 19 */ / z //Comment 20\n",
5179 "2 - /* Comment 21 */(x + y) /* Comment 22 */ / z #Comment 23\n",
5180 "2 - /* Comment 24 */(x + y) /* Comment 25 */ / z //Comment 26",
5181 "2 - /* Comment 27 */(x + y) /* Comment 28 */ / z #Comment 29" 5183 static const std::size_t expr_str_list_size =
sizeof(expr_str_list) /
sizeof(
std::string);
5185 std::deque<expression_t> expression_list;
5187 for (std::size_t i = 0; i < expr_str_list_size; ++i)
5194 if (!
parser.compile(expr_str_list[i],expression))
5196 printf(
"run_test15() - Error: %s Expression: %s\n",
5198 expr_str_list[i].c_str());
5203 expression_list.push_back(expression);
5207 const std::string base_expr_str =
"2 - (x + y) / z";
5210 base_expression.register_symbol_table(symbol_table);
5214 if (!
parser.compile(base_expr_str,base_expression))
5216 printf(
"run_test15() - Error: %s Expression: %s\n",
5218 base_expr_str.c_str());
5224 bool failure =
false;
5226 for (std::size_t i = 0; i < expression_list.size(); ++i)
5228 T base_result = base_expression.value();
5229 T result = expression_list[i].value();
5233 printf(
"run_test15() - Error in evaluation! (1) Base: %20.10f\tResult: %20.10f\tExpression: %s\n",
5234 (
double)base_result,
5236 expr_str_list[i].c_str());
5245 template <
typename T>
5267 template <
typename T>
5302 "test_func0 = test_func0()",
5303 "test_func0 == test_func0()",
5304 "equal(1.1 + test_func0,test_func0() + 1.1)",
5305 "equal(test_func0 + 1.1,1.1 + test_func0())",
5306 "equal((1.1 + test_func0),(test_func0() + 1.1))",
5307 "equal((test_func0 + 1.1),(1.1 + test_func0()))",
5308 "equal(test_func0,test_func0())",
5309 "equal(test_func0,1.1234)",
5310 "equal(test_func0(),1.1234)",
5311 "equal(test_func0 + test_func0(),2 * 1.1234)",
5312 "equal((test_func0 + test_func0()),2 * 1.1234)",
5313 "equal((test_func0) + (test_func0()),2 * 1.1234)",
5314 "equal(test_func1(x),(x))",
5315 "equal(test_func2(x,y),(x + y))",
5316 "equal(test_func3(x,y,z),(x + y + z))",
5317 "equal(test_func4(x,y,z,w),(x + y + z + w))",
5318 "equal(test_func5(x,y,z,w,u),(x + y + z + w + u))",
5319 "equal(1.1 + test_func0,1.1234 + 1.1)",
5320 "equal(1.1 + test_func0(),1.1234 + 1.1)",
5321 "equal(1.1 + test_func1(x),(x + 1.1))",
5322 "equal(1.1 + test_func2(x,y),(x + y + 1.1))",
5323 "equal(1.1 + test_func3(x,y,z),(x + y + z + 1.1))",
5324 "equal(1.1 + test_func4(x,y,z,w),(x + y + z + w + 1.1))",
5325 "equal(1.1 + test_func5(x,y,z,w,u),(x + y + z + w + u + 1.1))",
5326 "equal(test_func0 + 2.2,1.1234 + 2.2)",
5327 "equal(test_func0() + 2.2,1.1234 + 2.2)",
5328 "equal(test_func1(x) + 2.2,(x + 2.2))",
5329 "equal(test_func2(x,y) + 2.2,(x + y + 2.2))",
5330 "equal(test_func3(x,y,z) + 2.2,(x + y + z + 2.2))",
5331 "equal(test_func4(x,y,z,w) + 2.2,(x + y + z + w + 2.2))",
5332 "equal(test_func5(x,y,z,w,u) + 2.2,(x + y + z + w + u + 2.2))",
5333 "equal({[test_func1(x)]},{[(x)]})",
5334 "equal({[test_func2(x,y)]},{[(x + y)]})",
5335 "equal({[test_func3(x,y,z)]},{[(x + y + z)]})",
5336 "equal({[test_func4(x,y,z,w)]},{[(x + y + z + w)]})",
5337 "equal({[test_func5(x,y,z,w,u)]},{[(x + y + z + w + u)]})",
5338 "equal(test_func1(2.12),(2.12))",
5339 "equal(test_func2(2.12,3.12),(2.12 + 3.12))",
5340 "equal(test_func3(2.12,3.12,4.12),(2.12 + 3.12 + 4.12))",
5341 "equal(test_func4(2.12,3.12,4.12,5.12),(2.12 + 3.12 + 4.12 + 5.12))",
5342 "equal(test_func5(2.12,3.12,4.12,5.12,6.12),(2.12 + 3.12 + 4.12 + 5.12 + 6.12))",
5343 "equal(1.1 + test_func1(2.12),(2.12 + 1.1))",
5344 "equal(1.1 + test_func2(2.12,3.12),(2.12 + 3.12 + 1.1))",
5345 "equal(1.1 + test_func3(2.12,3.12,4.12),(2.12 + 3.12 + 4.12 + 1.1))",
5346 "equal(1.1 + test_func4(2.12,3.12,4.12,5.12),(2.12 + 3.12 + 4.12 + 5.12 + 1.1))",
5347 "equal(1.1 + test_func5(2.12,3.12,4.12,5.12,6.12),(2.12 + 3.12 + 4.12 + 5.12 + 6.12 + 1.1))",
5348 "equal(test_func1(2.12) + 2.2,(2.12 + 2.2))",
5349 "equal(test_func2(2.12,3.12) + 2.2,(2.12 + 3.12 + 2.2))",
5350 "equal(test_func3(2.12,3.12,4.12) + 2.2,(2.12 + 3.12 + 4.12 + 2.2))",
5351 "equal(test_func4(2.12,3.12,4.12,5.12) + 2.2,(2.12 + 3.12 + 4.12 + 5.12 + 2.2))",
5352 "equal(test_func5(2.12,3.12,4.12,5.12,6.12) + 2.2,(2.12 + 3.12 + 4.12 + 5.12 + 6.12 + 2.2))",
5353 "equal({[test_func1(2.12)]},{[(2.12)]})",
5354 "equal({[test_func2(2.12,3.12)]},{[(2.12 + 3.12)]})",
5355 "equal({[test_func3(2.12,3.12,4.12)]},{[(2.12 + 3.12 + 4.12)]})",
5356 "equal({[test_func4(2.12,3.12,4.12,5.12)]},{[(2.12 + 3.12 + 4.12 + 5.12)]})",
5357 "equal({[test_func5(2.12,3.12,4.12,5.12,6.12)]},{[(2.12 + 3.12 + 4.12 + 5.12 + 6.12)]})",
5358 "TeSt_FuNc0 = tEsT_fUnC0()",
5359 "TEst_fuNC0 == tESt_fUNc0()",
5360 "EquaL(tEsT_FuNC1(x),(x))",
5361 "eQuAl(teSt_fUnc2(x,y),(x + y))",
5362 "EqUaL(tEsT_fUNc3(x,y,z),(x + y + z))",
5363 "EQUal(TEst_FunC4(x,y,z,w),(x + y + z + w))",
5364 "eqUAL(tEsT_FuNc5(x,y,z,w,u),(x + y + z + w + u))" 5366 static const std::size_t expr_str_list_size =
sizeof(expr_str_list) /
sizeof(
std::string);
5368 std::deque<expression_t> expression_list;
5370 for (std::size_t i = 0; i < expr_str_list_size; ++i)
5377 if (!
parser.compile(expr_str_list[i],expression))
5379 printf(
"run_test16() - Error: %s Expression: %s\n",
5381 expr_str_list[i].c_str());
5386 expression_list.push_back(expression);
5389 bool failure =
false;
5391 for (std::size_t i = 0; i < expression_list.size(); ++i)
5393 if (T(1) != expression_list[i].value())
5395 printf(
"run_test16() - Error in evaluation! (1) Expression: %s\n",
5396 expr_str_list[i].c_str());
5405 template <
typename T>
5436 "equal(mand(one,one),1.0)",
5437 "equal(mand(one,zero),0.0)",
5438 "equal(mand(zero,one),0.0)",
5439 "equal(mand(zero,zero),0.0)",
5440 "equal(mand(one,one),1.0)",
5441 "equal(mand(one,one,one),1.0)",
5442 "equal(mand(one,one,one,one),1.0)",
5443 "equal(mand(one,one,one,one,one),1.0)",
5444 "equal(mand(one,one,zero),0.0)",
5445 "equal(mand(one,one,one,zero),0.0)",
5446 "equal(mand(one,one,one,one,zero),0.0)",
5447 "equal(mand(one,one,one,one,one,zero),0.0)",
5448 "equal(mor(one,one),1.0)",
5449 "equal(mor(one,zero),1.0)",
5450 "equal(mor(zero,one),1.0)",
5451 "equal(mor(zero,zero),0.0)",
5452 "equal(mor(one,one),1.0)",
5453 "equal(mor(one,one,zero),1.0)",
5454 "equal(mor(one,zero,one),1.0)",
5455 "equal(mor(one,zero,one,zero),1.0)",
5456 "equal(mor(zero,one),1.0)",
5457 "equal(mor(zero,zero,one),1.0)",
5458 "equal(mor(zero,zero,zero,zero,one),1.0)",
5459 "equal(mor(zero,zero,zero,zero,zero,one),1.0)",
5460 "equal(mor(zero,zero,zero,zero,zero,zero,zero,zero),0.0)",
5461 "equal((one nand one),not(mand(one,one)))",
5462 "equal((one nand zero),not(mand(one,zero)))",
5463 "equal((zero nand one),not(mand(zero,one)))",
5464 "equal((zero nand zero),not(mand(zero,zero)))",
5465 "equal((one nor one),not(mor(one,one)))",
5466 "equal((one nor zero),not(mor(one,zero)))",
5467 "equal((zero nor one),not(mor(zero,one)))",
5468 "equal((zero nor zero),not(mor(zero,zero)))",
5469 "equal(sum(x,y,z,w,u,v,t),(x+y+z+w+u+v+t))",
5470 "equal(sum(x+t,y+v,z+u,w+w,u+z,v+y,t+x),2*(x+y+z+w+u+v+t))",
5471 "equal(mul(x,y,z,w,u,v,t),(x*y*z*w*u*v*t))",
5472 "equal(mul(x*t,y*v,z*u,w*w,u*z,v*y,t*x),(x*y*z*w*u*v*t)^2)",
5473 "equal(sum(x,1.0,y,2.0,z,3.0,w,4.0,u,5.0,v,6.0,t),(x+y+z+w+u+v+t+21.0))",
5474 "equal(sum(x+1.0,y+2.0,z+3.0,w+4.0,u+5.0,v+6.0,t),(x+y+z+w+u+v+t+21.0))",
5475 "equal(mul(x,1.0,y,2.0,z,3.0,w,4.0,u,5.0,v,6.0,t),(x*y*z*w*u*v*t*720.0))",
5476 "equal(mul(x*1.0,y*2.0,z*3.0,w*4.0,u*5.0,v*6.0,t),(x*y*z*w*u*v*t*720.0))",
5477 "equal(min(x,y,z,w,u,v,t,zero),zero)",
5478 "equal(min(x+y,z+w,u+v,t,zero),zero)",
5479 "equal(max(one,x,y,z,w,u,v,t),t)",
5480 "equal(max(x+y,z+w,u+v,t,one),u+v)",
5481 "equal(avg(x,y,z,w,u,v,t),(x+y+z+w+u+v+t)/7.0)",
5482 "equal(avg(x+t,y+v,z+u,w+w,u+z,v+y,t+x),2/7*(x+y+z+w+u+v+t))" 5484 static const std::size_t expr_str_list_size =
sizeof(expr_str_list) /
sizeof(
std::string);
5486 std::deque<expression_t> expression_list;
5488 for (std::size_t i = 0; i < expr_str_list_size; ++i)
5495 if (!
parser.compile(expr_str_list[i],expression))
5497 printf(
"run_test17() - Error: %s Expression: %s\n",
5499 expr_str_list[i].c_str());
5504 expression_list.push_back(expression);
5507 bool failure =
false;
5509 for (std::size_t i = 0; i < expression_list.size(); ++i)
5511 if (T(1) != expression_list[i].value())
5513 printf(
"run_test17() - Error in evaluation! (1) Expression: %s\n",
5514 expr_str_list[i].c_str());
5523 template <
typename T>
5537 for (std::size_t i = 0; i < arglist.size(); ++i)
5539 result += arglist[i];
5546 template <
typename T>
5566 for (std::size_t i = 0; i < params.
size(); ++i)
5584 return std::numeric_limits<T>::quiet_NaN();
5591 default :
return std::numeric_limits<T>::quiet_NaN();
5603 template <
typename T>
5624 template <
typename T>
5641 for (std::size_t i = 0; i < params.
size(); ++i)
5656 for (std::size_t
x = 0;
x < vector.
size(); ++
x)
5666 for (std::size_t
x = 0;
x <
string.size(); ++
x)
5673 default :
return std::numeric_limits<T>::quiet_NaN();
5686 template <
typename T>
5704 result.reserve(
string.size());
5709 for (std::size_t i = 0; i <
string.size(); ++i)
5711 if (
' ' != (c =
string[i]))
5712 result += static_cast<char>(std::toupper(c));
5720 if (1 == param_seq_index)
5727 template <
typename T>
5749 case 0 :
return T(0);
5750 case 1 :
return T(1);
5751 case 2 :
return T(2);
5752 default :
return std::numeric_limits<T>::quiet_NaN();
5757 template <
typename T>
5777 return std::accumulate(v.
begin(), v.
end(), T(0));
5781 template <
typename T>
5818 result =
"string result";
5826 for (std::size_t i = 0; i < parameters.
size(); ++i)
5861 template <
typename T>
5890 "equal(va_func,(0))",
5891 "equal(va_func(),(0))",
5892 "equal(va_func(1,2,3,4,5,6,7,8,9),(1+2+3+4+5+6+7+8+9))",
5893 "equal(va_func(1,x,3,y,5,z,7,w,9),(1+x+3+y+5+z+7+w+9))",
5894 "equal(va_func(x,2,y,4,z,6,w,8,u),(x+2+y+4+z+6+w+8+u))",
5895 "equal(va_func(x,y,z,w,u,v,t,1,2,3),(x+y+z+w+u+v+t+1+2+3))",
5896 "equal(va_func(x,y,z,w,u,v,t),(x+y+z+w+u+v+t))",
5897 "equal(va_func(x+t,y+v,z+u,w+w,u+z,v+y,t+x),2*(x+y+z+w+u+v+t))",
5898 "equal(1+va_func(1,x,3,y,5,z,7,w,9),(1+x+3+y+5+z+7+w+9)+1)",
5899 "equal(va_func(va_func(x,y,z,w,u,v,t),va_func(x,y,z,w,u,v,t)),2*(x+y+z+w+u+v+t))",
5900 "equal(va_func(va_func(x),va_func(y),va_func(z)),va_func(x,y,z))",
5901 "equal(va_func(va_func(va_func(va_func(va_func(va_func(va_func(va_func(x)))))))),x)",
5902 "equal(va_func(va_func(va_func(va_func(va_func(va_func(va_func(va_func(123.456)))))))),123.456)",
5903 "equal(va_func(va_func(va_func(va_func(va_func(va_func(va_func(va_func(x+1)))))))),x+1)",
5904 "equal(va_func(va_func(va_func(va_func(va_func(va_func(va_func(va_func(x+y)))))))),x+y)" 5906 static const std::size_t expr_str_list_size =
sizeof(expr_str_list) /
sizeof(
std::string);
5908 std::deque<expression_t> expression_list;
5910 for (std::size_t i = 0; i < expr_str_list_size; ++i)
5917 if (!
parser.compile(expr_str_list[i],expression))
5919 printf(
"run_test18() - VarArg Error: %s Expression: %s\n",
5921 expr_str_list[i].c_str());
5926 expression_list.push_back(expression);
5929 bool failure =
false;
5931 for (std::size_t i = 0; i < expression_list.size(); ++i)
5933 if (T(1) != expression_list[i].value())
5935 printf(
"run_test18() - Error in evaluation! (1) Expression: %s\n",
5936 expr_str_list[i].c_str());
5954 T v0[] = { T(1), T(1), T(1), T(1) };
5955 T v1[] = { T(1), T(2), T(3), T(4) };
5972 symbol_table.add_variable (
"x" ,
x);
5973 symbol_table.add_variable (
"y" , y);
5974 symbol_table.add_vector (
"v0" ,v0);
5975 symbol_table.add_vector (
"v1" ,v1);
5976 symbol_table.add_vector (
"v2" ,v2);
5977 symbol_table.add_stringvar(
"s0", s0);
5978 symbol_table.add_function (
"gen_func",
f);
5982 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; gen_func(v0,v1 + v2, v0[2], x, 2x + y, z, 2w / 3, 'abc123',s0[2:5]);",
5983 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; gen_func(v0,v1 + v2, v0[2], x, 2x + y, z, 2w / 3, 'abc123',s0[2:5]);",
5984 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; gen_func(v1 + v2, v0[2], x, 2x + y, z, 2w / 3, 'abc123',s0[2:5],v0);",
5985 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; gen_func(v0[2], x, 2x + y, z, 2w / 3, 'abc123',s0[2:5],v0, v1 + v2);",
5986 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; gen_func(x, 2x + y, z, 2w / 3, 'abc123',s0[2:5],v0, v1 + v2, v0[2]);",
5987 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; gen_func(2x + y, z, 2w / 3, 'abc123',s0[2:5],v0, v1 + v2, v0[2], x);",
5988 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; gen_func(z, 2w / 3, 'abc123',s0[2:5],v0, v1 + v2, v0[2], x, 2x + y);",
5989 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; gen_func(2w / 3, 'abc123',s0[2:5],v0, v1 + v2, v0[2], x, 2x + y, z);",
5990 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; gen_func('abc123', s0[2:5],v0, v1 + v2, v0[2], x, 2x + y, z,2w / 3);",
5991 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; gen_func(s0[2:5],v0, v1 + v2, v0[2], x, 2x + y, z,2w / 3, 'abc123');" 5994 static const std::size_t expression_list_size =
sizeof(expression_list) /
sizeof(
std::string);
5996 bool failure =
false;
5998 for (std::size_t i = 0; i < expression_list_size; ++i)
6006 if (!
parser.compile(expression_list[i],expression))
6008 printf(
"run_test18() - GenFunc Error: %s Expression: %s [2]\n",
6010 expression_list[i].c_str());
6023 (4 !=
f.scalar_count) ||
6024 (3 !=
f.vector_count) ||
6025 (2 !=
f.string_count)
6028 printf(
"run_test18() - Error in evaluation! (2) Expression: %s " 6032 expression_list[i].c_str(),
6033 static_cast<int>(
f.scalar_count),
6034 static_cast<int>(
f.vector_count),
6035 static_cast<int>(
f.string_count));
6053 T v0[] = { T(1), T(1), T(1), T(1) };
6054 T v1[] = { T(1), T(2), T(3), T(4) };
6055 T v2[] = { T(5), T(6), T(7), T(8) };
6065 symbol_table.add_variable (
"x" ,
x);
6066 symbol_table.add_variable (
"y" , y);
6067 symbol_table.add_vector (
"v0" ,v0);
6068 symbol_table.add_vector (
"v1" ,v1);
6069 symbol_table.add_vector (
"v2" ,v2);
6070 symbol_table.add_stringvar(
"s0", s0);
6071 symbol_table.add_function (
"foo",
f);
6075 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v1 + v2, v0[2], x, 2x + y, z, 2w / 3, 'abc123',s0[2:5]);",
6076 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v1 + v2, v0[2], x, 2x + y, z, 2w / 3, 'abc123',s0[2:5],v0);",
6077 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0[2], x, 2x + y, z, 2w / 3, 'abc123',s0[2:5],v0, v1 + v2);",
6078 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x, 2x + y, z, 2w / 3, 'abc123',s0[2:5],v0, v1 + v2, v0[2]);",
6079 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(2x + y, z, 2w / 3, 'abc123',s0[2:5],v0, v1 + v2, v0[2], x);",
6080 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(z, 2w / 3, 'abc123',s0[2:5],v0, v1 + v2, v0[2], x, 2x + y);",
6081 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(2w / 3, 'abc123',s0[2:5],v0, v1 + v2, v0[2], x, 2x + y, z);",
6082 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo('abc123', s0[2:5],v0, v1 + v2, v0[2], x, 2x + y, z,2w / 3);",
6083 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0[2:5],v0, v1 + v2, v0[2], x, 2x + y, z,2w / 3, 'abc123');",
6084 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0[2:3]+s0[4:5],v0, v1 + v2, v0[2], x, 2x + y, z,2w / 3, 'abc123');",
6085 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v1 + v2, v0[2], x, 2x + y, z, 2w / 3, 'abc123',s0[2:5]);",
6086 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v1 + v2, v0[2], x, 2x + y, z, 2w / 3, 'abc123',s0[2:5]);",
6087 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v1 + v2, v0[2], x, 2x + y, z, 2w / 3, 'abc123',s0[2:5]);",
6088 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v1 + v2, v0[2], x, 2x + y, z, 2w / 3, 'abc123',s0[2:5]);",
6089 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x);",
6090 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x);",
6091 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x,x);",
6092 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x,x,x);",
6093 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0);",
6094 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0);",
6095 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0,s0);",
6096 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0,s0,s0);",
6097 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0);",
6098 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0);",
6099 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0,v0);",
6100 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0,v0,v0);",
6101 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x);",
6102 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x);",
6103 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x,x);",
6104 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x,x,x);",
6105 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0);",
6106 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0);",
6107 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0,s0);",
6108 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0,s0,s0);",
6109 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0);",
6110 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0);",
6111 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0,v0);",
6112 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0,v0,v0);",
6113 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v1 + v2, v0[2], x, 2x + y, z, 2w / 3, 'abc123',s0[2:5]);",
6114 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v1 + v2, v0[2], x, 2x + y, z, 2w / 3, 'abc123',s0[2:5]);",
6115 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v1 + v2, v0[2], x, 2x + y, z, 2w / 3, 'abc123',s0[2:5]);",
6116 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v1 + v2, v0[2], x, 2x + y, z, 2w / 3, 'abc123',s0[2:5]);" 6119 static const std::size_t expression_list_size =
sizeof(expression_list) /
sizeof(
std::string);
6161 "TTTTTTT|STSTSTS|V*T*VS*" ,
6162 "TTTTTTT|STSTSTS|V*TTTTVSS",
6163 "TTTTTTT|STSTSTS|VVT*VSS" ,
6164 "TTTTTTT|STSTSTS|VVTTTTVS*",
6167 bool failure =
false;
6169 for (std::size_t i = 0; i < expression_list_size; ++i)
6177 f.parameter_sequence = parameter_type_list[i];
6179 if (!
parser.compile(expression_list[i],expression))
6181 printf(
"run_test18() - GenFunc2 Error: %s Expression: %s Parameter Sequence: %s [3]\n",
6183 expression_list[i].c_str(),
6184 parameter_type_list[i].c_str());
6198 bool failure =
false;
6202 "foo(v0,v1,v2,x,y,s0);",
6203 "foo(v1,v2,x,y,s0,v0);",
6204 "foo(v2,x,y,s0,v0,v1);",
6205 "foo(x,y,s0,v0,v1,v2);",
6206 "foo(y,s0,v0,v1,v2,x);",
6207 "foo(s0,v0,v1,v2,x,y);" 6210 static const std::size_t expression_list_size =
sizeof(expression_list) /
sizeof(
std::string);
6222 for (std::size_t i = 0; i < expression_list_size; ++i)
6231 T v0[] = { T(1), T(1), T(1), T(1) };
6232 T v1[] = { T(1), T(2), T(3), T(4) };
6233 T v2[] = { T(5), T(6), T(7), T(8) };
6240 T v0_inc[] = { T(2), T(2), T(2), T(2) };
6241 T v1_inc[] = { T(2), T(3), T(4), T(5) };
6242 T v2_inc[] = { T(6), T(7), T(8), T(9) };
6244 std::size_t sizeof_vec =
sizeof(v0) /
sizeof(T);
6254 symbol_table.add_variable (
"x" ,
x);
6255 symbol_table.add_variable (
"y" , y);
6256 symbol_table.add_vector (
"v0" ,v0);
6257 symbol_table.add_vector (
"v1" ,v1);
6258 symbol_table.add_vector (
"v2" ,v2);
6259 symbol_table.add_stringvar(
"s0", s0);
6260 symbol_table.add_function (
"foo",
f);
6268 f.parameter_sequence = parameter_type_list[i];
6270 if (!
parser.compile(expression_list[i],expression))
6272 printf(
"run_test18() - IncFunc Error: %s Expression: %s Parameter Sequence: %s [4]\n",
6274 expression_list[i].c_str(),
6275 parameter_type_list[i].c_str());
6285 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: x\n",
6286 expression_list[i].c_str());
6292 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: y\n",
6293 expression_list[i].c_str());
6299 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: y\n",
6300 expression_list[i].c_str());
6306 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: v0\n",
6307 expression_list[i].c_str());
6313 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: v1\n",
6314 expression_list[i].c_str());
6320 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: v2\n",
6321 expression_list[i].c_str());
6331 bool failure =
false;
6349 symbol_table.add_stringvar(
"s0", s0);
6350 symbol_table.add_stringvar(
"s1", s1);
6351 symbol_table.add_stringvar(
"s2", s2);
6352 symbol_table.add_stringvar(
"s3", s3);
6353 symbol_table.add_stringvar(
"s4", s4);
6355 symbol_table.add_function(
"remspc_uc",rsauc);
6358 " s1 := 'brown cow?'; " 6359 " s2 := remspc_uc(s0 + s1); " 6360 " s3 := remspc_uc(s0) + s1; " 6361 " s4 := s0 + remspc_uc(s1); " 6362 " remspc_uc(s0 + s1) == remspc_uc(s0) + remspc_uc(s1);";
6374 std::size_t parameter_type_list_size =
sizeof(parameter_type_list) /
sizeof(
std::string);
6376 for (std::size_t i = 0; i < parameter_type_list_size; ++i)
6384 rsauc.parameter_sequence = parameter_type_list[i];
6386 if (!
parser.compile(program,expression))
6388 printf(
"run_test18() - Error: %s\tExpression: %s\n",
6395 T result = expression.value();
6399 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Result <> 1\n",
6406 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s0\n",
6411 if (
"How now " != s0)
6413 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s0\n",
6418 if (
"brown cow?" != s1)
6420 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s1\n",
6425 if (
"HOWNOWBROWNCOW?" != s2)
6427 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s2\n",
6432 if (
"HOWNOWbrown cow?" != s3)
6434 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s3\n",
6439 if (
"How now BROWNCOW?" != s4)
6441 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s4\n",
6452 bool failure =
false;
6460 T v[4] = {T(5), T(6), T(7), T(8)};
6465 symbol_table.add_function(
"vararg_func",vaf);
6474 "equal(0,vararg_func())",
6475 "equal(1,vararg_func() + 1)",
6476 "equal(1,1 + vararg_func())",
6477 "equal(1,vararg_func + 1)",
6478 "equal(1,1 + vararg_func)",
6479 "equal(0,vararg_func() + vararg_func)",
6480 "equal(0,vararg_func + vararg_func())",
6481 "equal(1,vararg_func + vararg_func(1))",
6482 "equal(1,vararg_func + vararg_func(1,2))",
6483 "equal(2,vararg_func + vararg_func(v))",
6484 "equal(1,vararg_func() + vararg_func(1))",
6485 "equal(1,vararg_func() + vararg_func(1,2))",
6486 "equal(2,vararg_func() + vararg_func(v))",
6487 "equal(2,vararg_func(v))",
6488 "equal(1,vararg_func(1))",
6489 "equal(1,vararg_func(1,2,3))",
6490 "equal(1,vararg_func(5,6,7,8))",
6491 "equal(5,vararg_func(v) + 3)",
6492 "equal(5,vararg_func(1) + 4)",
6493 "equal(6,vararg_func(1,2,3) + 5)",
6494 "equal(7,vararg_func(5,6,7,8) + 6)" 6497 static const std::size_t programs_size =
sizeof(programs) /
sizeof(
std::string);
6499 for (std::size_t i = 0; i < programs_size; ++i)
6501 if (!
parser.compile(programs[i],expression))
6503 printf(
"run_test18() - Error: %s\tExpression: %s\n",
6505 programs[i].c_str());
6509 else if (T(1) != expression.value())
6511 printf(
"run_test18() - Error in evaluation! (5) Expression: %s\n",
6512 programs[i].c_str());
6523 bool failure =
false;
6535 v.push_back(T(N)); \ 6555 if (!
parser.compile(expr_string,expression))
6557 printf(
"run_test18() - Error: %s\tExpression: %s\n",
6559 expr_string.c_str());
6566 sum = expression.value();
6570 printf(
"run_test18() - Error in evaluation! (6) Expression: %s\n",
6571 expr_string.c_str());
6576 sum = expression.value();
6580 printf(
"run_test18() - Error in evaluation! (7) Expression: %s\n",
6581 expr_string.c_str());
6586 sum = expression.value();
6590 printf(
"run_test18() - Error in evaluation! (8) Expression: %s\n",
6591 expr_string.c_str());
6596 sum = expression.value();
6600 printf(
"run_test18() - Error in evaluation! (9) Expression: %s\n",
6601 expr_string.c_str());
6610 bool failure =
false;
6620 v.push_back(T(N)); \ 6625 pb(s, 3)
pb(s, 6)
pb(s, 9)
pb(s,12)
6626 pb(s,15)
pb(s,18)
pb(s,21)
6629 const std::string expr_string =
"v[0] + v[1] + v[2]";
6641 if (!
parser.compile(expr_string,expression))
6643 printf(
"run_test18() - Error: %s\tExpression: %s\n",
6645 expr_string.c_str());
6650 for (std::size_t i = 0; i < v0.size() - 4; ++i)
6654 T sum = expression.value();
6658 printf(
"run_test18() - Error in evaluation! (7) Expression: %s Expected: %5.3f Computed: %5.3f\n",
6659 expr_string.c_str(),
6673 bool failure =
false;
6683 v.push_back(T(N)); \ 6688 pb(s, 3)
pb(s, 6)
pb(s, 9)
pb(s,12)
6689 pb(s,15)
pb(s,18)
pb(s,21)
6692 const std::string expr_string =
"var i := 0; var j := 1; var k := 2; v[i] + v[j] + v[k]";
6704 if (!
parser.compile(expr_string,expression))
6706 printf(
"run_test18() - Error: %s\tExpression: %s\n",
6708 expr_string.c_str());
6713 for (std::size_t i = 0; i < v0.size() - 4; ++i)
6717 T sum = expression.value();
6721 printf(
"run_test18() - Error in evaluation! (8) Expression: %s Expected: %5.3f Computed: %5.3f\n",
6722 expr_string.c_str(),
6736 bool failure =
false;
6746 v.push_back(T(N)); \ 6751 pb(s, 3)
pb(s, 6)
pb(s, 9)
pb(s,12)
6752 pb(s,15)
pb(s,18)
pb(s,21)
6755 const std::string expr_string =
"var i := 0; v[i + 0] + v[i + 1] + v[i + 2]";
6767 if (!
parser.compile(expr_string,expression))
6769 printf(
"run_test18() - Error: %s\tExpression: %s\n",
6771 expr_string.c_str());
6776 for (std::size_t i = 0; i < v0.size() - 4; ++i)
6780 T sum = expression.value();
6784 printf(
"run_test18() - Error in evaluation! (9) Expression: %s Expected: %5.3f Computed: %5.3f\n",
6785 expr_string.c_str(),
6803 T v0[] = { T(0), T(1), T(2), T(3), T(4) };
6804 T v1[] = { T(5), T(6), T(7), T(8), T(9) };
6806 const std::size_t v0_size =
sizeof(v0) /
sizeof (T);
6807 const std::size_t v1_size =
sizeof(v1) /
sizeof (T);
6815 symbol_table.add_function(
"vec_sum",vec_sum);
6824 if (!
parser.compile(expr_string,expression))
6826 printf(
"run_test18() - Error: %s\tExpression: %s\n",
6828 expr_string.c_str());
6833 const T expected_result0 = std::accumulate(v0, v0 + v0_size,T(0));
6835 if (expression.value() != expected_result0)
6837 printf(
"run_test18() - Error in evaluation! (10.1) Expression: %s Expected: %5.3f Computed: %5.3f\n",
6838 expr_string.c_str(),
6840 expression.value());
6847 const T expected_result1 = std::accumulate(v1, v1 + v1_size,T(0));
6849 if (expression.value() != expected_result1)
6851 printf(
"run_test18() - Error in evaluation! (10.2) Expression: %s Expected: %5.3f Computed: %5.3f\n",
6852 expr_string.c_str(),
6854 expression.value());
6861 bool failure =
false;
6874 "var v[9] := {1,2,3,4,5,6,7,8,9}; all_true(v) == true" ,
6875 "var v[6] := {-1,-2,-3,-4,-5,-6}; all_true(v) == true" ,
6876 "var v[8] := {1,2,3,0,0,0,0,0}; all_true(v) == false",
6877 "var v[8] := {-1,-2,-3,0,0,0,0,0}; all_true(v) == false",
6878 "var v[9] := {0,0,0,0,0,0,0,0,0}; all_true(v + 1) == true",
6880 "var v[9] := {0,0,0,0,0,0,0,0,0}; all_false(v) == true" ,
6881 "var v[9] := {0,0,0,0,0,1,2,3,4}; all_false(v) == false" ,
6882 "var v[8] := {0,0,0,0,0,-1,-2,-3}; all_false(v) == false" ,
6883 "var v[9] := {1,1,1,1,1,1,1,1,1}; any_false(v - 1) == true",
6885 "var v[9] := {0,0,0,0,0,0,0,0,1}; any_true(v) == true" ,
6886 "var v[9] := {0,0,0,0,1,0,0,0,0}; any_true(v) == true" ,
6887 "var v[9] := {0,0,0,0,0,0,0,0,0}; any_true(v) == false" ,
6888 "var v[9] := {0,0,0,0,0,0,0,0,0}; any_true(v + 1) == true",
6890 "var v[9] := {1,1,1,1,1,1,1,1,0}; any_false(v) == true" ,
6891 "var v[9] := {1,1,1,1,0,1,1,1,1}; any_false(v) == true" ,
6892 "var v[9] := {1,1,1,1,1,1,1,1,1}; any_false(v) == false" ,
6893 "var v[9] := {1,1,1,1,1,1,1,1,1}; any_false(v - 1) == true",
6895 "var v[9] := {0,0,0,0,0,0,0,0,0}; count(v) == 0" ,
6896 "var v[9] := {0,0,0,0,0,0,0,0,1}; count(v) == 1" ,
6897 "var v[9] := {0,0,0,0,0,0,0,2,1}; count(v) == 2" ,
6898 "var v[9] := {0,0,0,0,0,0,3,2,1}; count(v) == 3" ,
6899 "var v[9] := {0,0,0,0,0,0,0,0,0}; count(v + 1) == v[]",
6900 "var v[9] := {1,1,1,1,1,1,1,1,1}; count(v - 1) == 0",
6902 "var v[9] := {1,2,3,4,5,6,7,8,9}; var r[9] := [0]; copy(v,r); sum(v == r) == v[]",
6903 "var v[9] := {1,2,3,4,5,6,7,8,9}; var r[9] := [0]; copy(v,0,8,r,0,8); sum(r) == 45",
6904 "var v[9] := {1,2,3,4,5,6,7,8,9}; var r[9] := [0]; copy(v,1,7,r,1,7); sum(r) == 35",
6905 "var v[9] := {1,2,3,4,5,6,7,8,9}; var r[5] := [0]; copy(v,0,4,r,0,4); sum(r) == 15",
6907 "var v[5] := {1,2,3,4,5}; var r[5] := {4,5,1,2,3}; rol(v,3); sum(v == r) == v[]",
6908 "var v[5] := {1,2,3,4,5}; var r[5] := {3,4,5,1,2}; ror(v,3); sum(v == r) == v[]",
6910 "var v[5] := {1,2,3,4,5}; var r[5] := {3,4,5,1,2}; rol(v,2); sum(v == r) == v[]",
6911 "var v[5] := {1,2,3,4,5}; var r[5] := {4,5,1,2,3}; ror(v,2); sum(v == r) == v[]",
6913 "var v[5] := {1,2,3,4,5}; var r[5] := {1,3,4,2,5}; rol(v,1,1,3); sum(v == r) == v[]",
6914 "var v[5] := {1,2,3,4,5}; var r[5] := {1,4,2,3,5}; ror(v,1,1,3); sum(v == r) == v[]",
6916 "var v[5] := {1,2,3,4,5}; var r[5] := {3,4,5,0,0}; shftl(v,2); sum(v == r) == v[]",
6917 "var v[5] := {1,2,3,4,5}; var r[5] := {5,0,0,0,0}; shftl(v,4); sum(v == r) == v[]",
6918 "var v[5] := {1,2,3,4,5}; var r[5] := {0,0,0,0,0}; shftl(v,5); sum(v == r) == v[]",
6920 "var v[5] := {1,2,3,4,5}; var r[5] := {0,0,1,2,3}; shftr(v,2); sum(v == r) == v[]",
6921 "var v[5] := {1,2,3,4,5}; var r[5] := {0,0,0,0,1}; shftr(v,4); sum(v == r) == v[]",
6922 "var v[5] := {1,2,3,4,5}; var r[5] := {0,0,0,0,0}; shftr(v,5); sum(v == r) == v[]",
6924 "var v[5] := {1,2,3,4,5}; var r[5] := {1,3,4,0,5}; shftl(v,1,1,3); sum(v == r) == v[]",
6925 "var v[5] := {1,2,3,4,5}; var r[5] := {1,0,2,3,5}; shftr(v,1,1,3); sum(v == r) == v[]",
6927 "var v[5] := {1,3,5,2,4}; var r[5] := {1,2,3,4,5}; sort(v); sum(v == r) == v[]",
6928 "var v[5] := {5,4,3,2,1}; var r[5] := {1,2,3,4,5}; sort(v); sum(v == r) == v[]",
6929 "var v[5] := {1,4,2,3,5}; var r[5] := {1,2,3,4,5}; sort(v,1,3); sum(v == r) == v[]",
6930 "var v[5] := {5,4,2,3,1}; var r[5] := {5,2,3,4,1}; sort(v,1,3); sum(v == r) == v[]",
6931 "var v[5] := {3,1,2,4,5}; var r[5] := {1,2,3,4,5}; sort(v,0,2); sum(v == r) == v[]",
6932 "var v[5] := {1,2,5,3,4}; var r[5] := {1,2,3,4,5}; sort(v,2,4); sum(v == r) == v[]",
6934 "var v[5] := {1,3,5,2,4}; var r[5] := {1,2,3,4,5}; sort(v,'ascending'); sum(v == r) == v[]",
6935 "var v[5] := {1,3,5,2,4}; var r[5] := {1,2,3,4,5}; sort(v,'aScEnDiNg'); sum(v == r) == v[]",
6936 "var v[5] := {5,4,3,2,1}; var r[5] := {1,2,3,4,5}; sort(v,'ascending'); sum(v == r) == v[]",
6937 "var v[5] := {1,4,2,3,5}; var r[5] := {1,2,3,4,5}; sort(v,'ascending',1,3); sum(v == r) == v[]",
6938 "var v[5] := {3,1,2,4,5}; var r[5] := {1,2,3,4,5}; sort(v,'ascending',0,2); sum(v == r) == v[]",
6939 "var v[5] := {1,2,5,3,4}; var r[5] := {1,2,3,4,5}; sort(v,'ascending',2,4); sum(v == r) == v[]",
6941 "var v[5] := {1,3,5,2,4}; var r[5] := {5,4,3,2,1}; sort(v,'descending'); sum(v == r) == v[]",
6942 "var v[5] := {1,3,5,2,4}; var r[5] := {5,4,3,2,1}; sort(v,'DeScEnDiNg'); sum(v == r) == v[]",
6943 "var v[5] := {5,4,3,2,1}; var r[5] := {5,4,3,2,1}; sort(v,'descending'); sum(v == r) == v[]",
6944 "var v[5] := {1,4,2,3,5}; var r[5] := {1,4,3,2,5}; sort(v,'descending',1,3); sum(v == r) == v[]",
6945 "var v[5] := {3,1,2,4,5}; var r[5] := {3,2,1,4,5}; sort(v,'descending',0,2); sum(v == r) == v[]",
6946 "var v[5] := {1,2,5,3,4}; var r[5] := {1,2,5,4,3}; sort(v,'descending',2,4); sum(v == r) == v[]",
6948 "var v[9] := {7,8,9,1,2,3,4,5,6}; nth_element(v,trunc(v[] / 2)); v[v[] / 2] == 5",
6949 "var v[9] := {7,8,9,1,2,3,4,5,6}; nth_element(v,trunc(v[] / 3)); v[v[] / 3] == 4",
6951 "var v[9] := {7,8,9,1,2,3,4,5,6}; nth_element(v,trunc(v[] / 2)); sort(v,0,trunc(v[] / 2)); (v[v[] / 2] == 5) and (v[0] == 1)",
6952 "var v[9] := {7,8,9,1,2,3,4,5,6}; nth_element(v,trunc(v[] / 3)); sort(v,0,trunc(v[] / 3)); (v[v[] / 3] == 4) and (v[0] == 1)",
6954 "var v[5]; iota(v,2); var r[5] := {0,2,4,6,8}; sum(v == r) == v[]",
6955 "var v[5]; iota(v,2,1); var r[5] := {1,3,5,7,9}; sum(v == r) == v[]",
6956 "var v[5]; iota(v,1,1,3); var r[5] := {0,0,1,2,0}; sum(v == r) == v[]",
6957 "var v[5]; iota(v,2,2,1,3);var r[5] := {0,2,4,6,0}; sum(v == r) == v[]",
6958 "var v[5]; iota(v,2,1,1,3);var r[5] := {0,1,3,5,0}; sum(v == r) == v[]",
6960 " var a := 2; var x[3] := {1,2,3}; var y[3] := {1,2,3}; var r[3] := [0]; r := a * x + y; axpy(a,x,y); sum(y == r) == y[]",
6961 " var a := 2; var b := 3; var x[3] := {1,2,3}; var y[3] := {1,2,3}; var r[3] := [0]; r := a * x + b * y; axpby(a,x,b,y); sum(y == r) == y[]",
6963 " var a := 2; var x[3] := {1,2,3}; var y[3] := {1,2,3}; var z[3] := [0]; var r[3] := [0]; r := a * x + y; axpyz(a,x,y,z); sum(z == r) == z[]",
6964 " var a := 2; var b := 3; var x[3] := {1,2,3}; var y[3] := {1,2,3}; var z[3] := [0]; var r[3] := [0]; r := a * x + b * y; axpbyz(a,x,b,y,z); sum(z == r) == z[]",
6965 " var a := 2; var b := 3; var x[3] := {1,2,3}; var z[3] := [0]; var r[3] := [0]; r := a * x + b; axpbz(a,x,b,z); sum(z == r) == z[]",
6968 const std::size_t expr_str_list_size =
sizeof(expr_str_list) /
sizeof(
std::string);
6972 for (std::size_t i = 0; i < expr_str_list_size; ++i)
6977 if (!
parser.compile(expr_str_list[i], expression))
6979 printf(
"run_test18() - Error: %s Expression: %s\n",
6981 expr_str_list[i].c_str());
6988 T result = expression.value();
6992 printf(
"run_test18() - Error in evaluation! (11) Expression: %s\n",
6993 expr_str_list[i].c_str());
7018 "T:T|T:TT|T:TTT|T:TTTT|" 7019 "T:S|T:SS|T:SSS|T:SSSS|" 7020 "T:ST|T:STS|T:STST|" 7021 "T:TS|T:TST|T:TSTS|" 7022 "T:TTSS|T:SSTT|T:STTS|T:TSST" 7041 typedef std::pair<std::string, typename overload_func<T>::test_result_t> test_pack_t;
7043 static const test_pack_t test_pack_list[] =
7045 test_pack_t(
"foo(x)" , test_result_t( 0,
"T" )),
7046 test_pack_t(
"foo(x, y)" , test_result_t( 1,
"TT" )),
7047 test_pack_t(
"foo(x, y, z)" , test_result_t( 2,
"TTT" )),
7048 test_pack_t(
"foo(x, y, z, w)" , test_result_t( 3,
"TTTT")),
7049 test_pack_t(
"foo(x + y)" , test_result_t( 0,
"T" )),
7050 test_pack_t(
"foo(x + y, y + z)" , test_result_t( 1,
"TT" )),
7051 test_pack_t(
"foo(x + y, y + z, z + w)" , test_result_t( 2,
"TTT" )),
7052 test_pack_t(
"foo(x + y, y + z, z + w, w)" , test_result_t( 3,
"TTTT")),
7053 test_pack_t(
"foo(a)" , test_result_t( 4,
"S" )),
7054 test_pack_t(
"foo(a, b)" , test_result_t( 5,
"SS" )),
7055 test_pack_t(
"foo(a, b, c)" , test_result_t( 6,
"SSS" )),
7056 test_pack_t(
"foo(a, b, c, d)" , test_result_t( 7,
"SSSS")),
7057 test_pack_t(
"foo(a + b)" , test_result_t( 4,
"S" )),
7058 test_pack_t(
"foo(a + b, b + c)" , test_result_t( 5,
"SS" )),
7059 test_pack_t(
"foo(a + b, b + c, c + d)" , test_result_t( 6,
"SSS" )),
7060 test_pack_t(
"foo(a + b, b + c, c + d, d)" , test_result_t( 7,
"SSSS")),
7061 test_pack_t(
"foo(a, x)" , test_result_t( 8,
"ST" )),
7062 test_pack_t(
"foo(a, x, b)" , test_result_t( 9,
"STS" )),
7063 test_pack_t(
"foo(a, x, b, y)" , test_result_t(10,
"STST")),
7064 test_pack_t(
"foo(a + b, x + y)" , test_result_t( 8,
"ST" )),
7065 test_pack_t(
"foo(a + b, x + y, b + c)" , test_result_t( 9,
"STS" )),
7066 test_pack_t(
"foo(a + b, x + y, b + c, y + z)" , test_result_t(10,
"STST")),
7067 test_pack_t(
"foo(x, a)" , test_result_t(11,
"TS" )),
7068 test_pack_t(
"foo(x, a, y)" , test_result_t(12,
"TST" )),
7069 test_pack_t(
"foo(x, a, y, b)" , test_result_t(13,
"TSTS")),
7070 test_pack_t(
"foo(x + y, a + b)" , test_result_t(11,
"TS" )),
7071 test_pack_t(
"foo(x + y, a + b, y + z)" , test_result_t(12,
"TST" )),
7072 test_pack_t(
"foo(x + y, a + b, y + z, b + c)" , test_result_t(13,
"TSTS")),
7073 test_pack_t(
"foo(x, y, a, b)" , test_result_t(14,
"TTSS")),
7074 test_pack_t(
"foo(a, b, x, y)" , test_result_t(15,
"SSTT")),
7075 test_pack_t(
"foo(a, x, y, b)" , test_result_t(16,
"STTS")),
7076 test_pack_t(
"foo(x, a, b, y)" , test_result_t(17,
"TSST")),
7077 test_pack_t(
"foo(x + y, y + z, a + b, b + c)" , test_result_t(14,
"TTSS")),
7078 test_pack_t(
"foo(a + b, b + c, x + y, y + z)" , test_result_t(15,
"SSTT")),
7079 test_pack_t(
"foo(a + b, x + y, y + z, b + c)" , test_result_t(16,
"STTS")),
7080 test_pack_t(
"foo(x + y, a + b, b + c, y + z)" , test_result_t(17,
"TSST"))
7083 static const std::size_t test_pack_list_size =
sizeof(test_pack_list) /
sizeof(test_pack_t);
7085 std::deque<expression_t> expression_list;
7087 for (std::size_t i = 0; i < test_pack_list_size; ++i)
7094 if (!
parser.compile(test_pack_list[i].first, expression))
7096 printf(
"run_test18() - (12) Overload VarArg Error: %s Expression: %s\n",
7098 test_pack_list[i].first.c_str());
7103 expression_list.push_back(expression);
7106 bool failure =
false;
7108 for (std::size_t i = 0; i < expression_list.size(); ++i)
7112 if (T(1) != expression_list[i].
value())
7114 printf(
"run_test18() - Error in evaluation! (12) Expression: %s\n",
7115 test_pack_list[i].first.c_str());
7122 printf(
"run_test18() - Error with ps_index (12) Expression: %s Expected: %d Got: %d\n",
7123 test_pack_list[i].first.c_str(),
7124 static_cast<int>(test_pack_list[i].second.ps_index),
7132 printf(
"run_test18() - Error with parameter seq (12) Expression: %s Expected: %s Got: %s\n",
7133 test_pack_list[i].first.c_str(),
7134 test_pack_list[i].second.param_seq.c_str(),
7162 "S:T|S:TT|S:TTT|S:TTTT|" 7163 "S:S|S:SS|S:SSS|S:SSSS|" 7164 "S:ST|S:STS|S:STST|" 7165 "S:TS|S:TST|S:TSTS|" 7166 "S:TTSS|S:SSTT|S:STTS|S:TSST" 7186 typedef std::pair<std::string, typename overload_func<T>::test_result_t> test_pack_t;
7188 static const test_pack_t test_pack_list[] =
7190 test_pack_t(
"result := foo(x)" , test_result_t( 0,
"T" )),
7191 test_pack_t(
"result := foo(x, y)" , test_result_t( 1,
"TT" )),
7192 test_pack_t(
"result := foo(x, y, z)" , test_result_t( 2,
"TTT" )),
7193 test_pack_t(
"result := foo(x, y, z, w)" , test_result_t( 3,
"TTTT")),
7194 test_pack_t(
"result := foo(x + y)" , test_result_t( 0,
"T" )),
7195 test_pack_t(
"result := foo(x + y, y + z)" , test_result_t( 1,
"TT" )),
7196 test_pack_t(
"result := foo(x + y, y + z, z + w)" , test_result_t( 2,
"TTT" )),
7197 test_pack_t(
"result := foo(x + y, y + z, z + w, w)" , test_result_t( 3,
"TTTT")),
7198 test_pack_t(
"result := foo(a)" , test_result_t( 4,
"S" )),
7199 test_pack_t(
"result := foo(a, b)" , test_result_t( 5,
"SS" )),
7200 test_pack_t(
"result := foo(a, b, c)" , test_result_t( 6,
"SSS" )),
7201 test_pack_t(
"result := foo(a, b, c, d)" , test_result_t( 7,
"SSSS")),
7202 test_pack_t(
"result := foo(a + b)" , test_result_t( 4,
"S" )),
7203 test_pack_t(
"result := foo(a + b, b + c)" , test_result_t( 5,
"SS" )),
7204 test_pack_t(
"result := foo(a + b, b + c, c + d)" , test_result_t( 6,
"SSS" )),
7205 test_pack_t(
"result := foo(a + b, b + c, c + d, d)" , test_result_t( 7,
"SSSS")),
7206 test_pack_t(
"result := foo(a, x)" , test_result_t( 8,
"ST" )),
7207 test_pack_t(
"result := foo(a, x, b)" , test_result_t( 9,
"STS" )),
7208 test_pack_t(
"result := foo(a, x, b, y)" , test_result_t(10,
"STST")),
7209 test_pack_t(
"result := foo(a + b, x + y)" , test_result_t( 8,
"ST" )),
7210 test_pack_t(
"result := foo(a + b, x + y, b + c)" , test_result_t( 9,
"STS" )),
7211 test_pack_t(
"result := foo(a + b, x + y, b + c, y + z)" , test_result_t(10,
"STST")),
7212 test_pack_t(
"result := foo(x, a)" , test_result_t(11,
"TS" )),
7213 test_pack_t(
"result := foo(x, a, y)" , test_result_t(12,
"TST" )),
7214 test_pack_t(
"result := foo(x, a, y, b)" , test_result_t(13,
"TSTS")),
7215 test_pack_t(
"result := foo(x + y, a + b)" , test_result_t(11,
"TS" )),
7216 test_pack_t(
"result := foo(x + y, a + b, y + z)" , test_result_t(12,
"TST" )),
7217 test_pack_t(
"result := foo(x + y, a + b, y + z, b + c)" , test_result_t(13,
"TSTS")),
7218 test_pack_t(
"result := foo(x, y, a, b)" , test_result_t(14,
"TTSS")),
7219 test_pack_t(
"result := foo(a, b, x, y)" , test_result_t(15,
"SSTT")),
7220 test_pack_t(
"result := foo(a, x, y, b)" , test_result_t(16,
"STTS")),
7221 test_pack_t(
"result := foo(x, a, b, y)" , test_result_t(17,
"TSST")),
7222 test_pack_t(
"result := foo(x + y, y + z, a + b, b + c)" , test_result_t(14,
"TTSS")),
7223 test_pack_t(
"result := foo(a + b, b + c, x + y, y + z)" , test_result_t(15,
"SSTT")),
7224 test_pack_t(
"result := foo(a + b, x + y, y + z, b + c)" , test_result_t(16,
"STTS")),
7225 test_pack_t(
"result := foo(x + y, a + b, b + c, y + z)" , test_result_t(17,
"TSST"))
7228 static const std::size_t test_pack_list_size =
sizeof(test_pack_list) /
sizeof(test_pack_t);
7230 std::deque<expression_t> expression_list;
7232 for (std::size_t i = 0; i < test_pack_list_size; ++i)
7239 if (!
parser.compile(test_pack_list[i].first, expression))
7241 printf(
"run_test18() - (13) Overload VarArg Error: %s Expression: %s\n",
7243 test_pack_list[i].first.c_str());
7248 expression_list.push_back(expression);
7251 bool failure =
false;
7253 for (std::size_t i = 0; i < expression_list.size(); ++i)
7257 expression_list[i].value();
7259 if (result !=
"string result")
7261 printf(
"run_test18() - Error in evaluation! (13) Expression: %s\n",
7262 test_pack_list[i].first.c_str());
7269 printf(
"run_test18() - Error with ps_index (13) Expression: %s Expected: %d Got: %d\n",
7270 test_pack_list[i].first.c_str(),
7271 static_cast<int>(test_pack_list[i].second.ps_index),
7279 printf(
"run_test18() - Error with parameter seq (13) Expression: %s Expected: %s Got: %s\n",
7280 test_pack_list[i].first.c_str(),
7281 test_pack_list[i].second.param_seq.c_str(),
7295 template <
typename T>
7302 typedef typename compositor_t::function function_t;
7307 compositor_t compositor;
7310 compositor.add(function_t(
"f",
"x + 2",
"x"));
7313 compositor.add(function_t(
"g",
"x^2 - 3",
"x"));
7316 compositor.add(function_t(
"fof",
"f(f(x))",
"x"));
7319 compositor.add(function_t(
"gog",
"g(g(x))",
"x"));
7322 compositor.add(function_t(
"fog",
"f(g(x))",
"x"));
7325 compositor.add(function_t(
"gof",
"g(f(x))",
"x"));
7328 compositor.add(function_t(
"fogof",
"f(g(f(x)))",
"x"));
7331 compositor.add(function_t(
"gofog",
"g(f(g(x)))",
"x"));
7334 symbol_table.add_constants();
7335 symbol_table.add_variable(
"x",
x);
7339 "equal(f(x),(x + 2))",
7340 "equal(g(x),(x^2 - 3))",
7341 "equal(fof(x),(x + 4))",
7342 "equal(gog(x),(x^4 - 6x^2 + 6))",
7343 "equal(fog(x),(x^2 - 1))",
7344 "equal(gof(x),(x^2 + 4x + 1))",
7345 "equal(fogof(x),(x^2 + 4x + 3))",
7346 "equal(gofog(x),(x^4 - 2x^2 - 2))" 7348 static const std::size_t expr_str_list_size =
sizeof(expr_str_list) /
sizeof(
std::string);
7350 std::deque<expression_t> expression_list;
7352 for (std::size_t i = 0; i < expr_str_list_size; ++i)
7359 if (!
parser.compile(expr_str_list[i],expression))
7361 printf(
"run_test19() - Error: %s Expression: %s\n",
7363 expr_str_list[i].c_str());
7368 expression_list.push_back(expression);
7371 bool failure =
false;
7373 for (std::size_t i = 0; i < expression_list.size(); ++i)
7375 if (T(1) != expression_list[i].value())
7377 printf(
"run_test19() - Error in evaluation! (1) Expression: %s\n",
7378 expr_str_list[i].c_str());
7388 const std::size_t rounds = 100;
7390 for (std::size_t r = 0; r < rounds; ++r)
7399 compositor_t compositor;
7405 .expression(
"3 * 2"));
7412 .expression(
"5 * (f0 + x)"));
7419 .expression(
"7 * (f1(x) + f1(y))"));
7425 .var(
"x").var(
"y").var(
"z")
7426 .expression(
"9 * (f2(x,y) + f2(y,z) + f2(x,z))"));
7432 .var(
"x").var(
"y").var(
"z").var(
"w")
7433 .expression(
"11 * (f3(x,y,z) + f3(y,z,w) + f3(z,w,x))"));
7439 .var(
"x").var(
"y").var(
"z").var(
"w").var(
"u")
7440 .expression(
"13 * (f4(x,y,z,w) + f4(y,z,w,u) + f4(z,w,u,x) + f4(w,u,x,y))"));
7446 .var(
"x").var(
"y").var(
"z")
7447 .var(
"w").var(
"u").var(
"v")
7448 .expression(
"17 * (f5(x,y,z,w,u) + f5(y,z,w,u,v) + f5(z,w,u,v,x) + f5(w,u,v,x,y))"));
7451 symbol_table.add_constants();
7452 symbol_table.add_variable(
"x",
x);
7453 symbol_table.add_variable(
"y",y);
7454 symbol_table.add_variable(
"z",
z);
7455 symbol_table.add_variable(
"w",w);
7456 symbol_table.add_variable(
"u",u);
7457 symbol_table.add_variable(
"v",v);
7476 const std::size_t expr_str_list_size =
sizeof(expr_str_list) /
sizeof(
std::string);
7478 const T result_list[] =
7494 bool failure =
false;
7496 for (std::size_t i = 0; i < expr_str_list_size; ++i)
7501 if (!
parser.compile(expr_str_list[i],expression))
7503 printf(
"run_test19() - Error: %s Expression: %s\n",
7505 expr_str_list[i].c_str());
7511 T result = expression.value();
7513 if (result_list[i] != result)
7515 printf(
"run_test19() - Error in evaluation! (2) Expression: %s Expected: %10.1f\tResult: %10.1f\n",
7516 expr_str_list[i].c_str(),
7532 compositor_t compositor;
7539 " if (0 == (x % y),false, " 7540 " is_prime_impl1(x,y - 1))) ",
7547 "if (frac(x) != 0, false, " 7548 " if (x <= 0, false, " 7549 " is_prime_impl1(x,min(x - 1,trunc(sqrt(x)) + 1)))) ",
7558 " case y == 1 : true; " 7559 " case (x % y) == 0 : false; " 7560 " default : is_prime_impl2(x,y - 1);" 7570 " case x <= 0 : false; " 7571 " case frac(x) != 0 : false; " 7572 " default : is_prime_impl2(x,min(x - 1,trunc(sqrt(x)) + 1));" 7584 " case y == 1 : ~(y := 0, true);" 7585 " case (x % y) == 0 : ~(y := 0,false);" 7586 " default : y := y - 1; " 7597 " case x <= 0 : false; " 7598 " case frac(x) != 0 : false; " 7599 " default : is_prime_impl3(x,min(x - 1,trunc(sqrt(x)) + 1));" 7609 " case 1 == x : false; " 7610 " case 2 == x : true; " 7611 " case 3 == x : true; " 7612 " case 5 == x : true; " 7613 " case 7 == x : true; " 7614 " case 0 == x % 2 : false; " 7617 " for (var i := 3; i < y; i += 2) " 7619 " if ((x % i) == 0) " 7634 " case x <= 0 : false; " 7635 " case frac(x) != 0 : false; " 7636 " default : is_prime_impl4(x,min(x - 1,trunc(sqrt(x)) + 1));" 7641 symbol_table.add_constants();
7642 symbol_table.add_variable(
"x",
x);
7651 const std::size_t expression_count =
sizeof(expression_str) /
sizeof(
std::string);
7653 std::vector<expression_t> expression_list;
7655 for (std::size_t i = 0; i < expression_count; ++i)
7662 if (!
parser.compile(expression_str[i],expression))
7664 printf(
"run_test19() - Error: %s Expression%d: %s\n",
7666 static_cast<unsigned int>(i),
7667 expression_str[i].c_str());
7672 expression_list.push_back(expression);
7675 bool failure =
false;
7677 const std::size_t prime_list[] =
7679 2, 3, 5, 7, 11, 13, 17, 19,
7680 877, 947, 1087, 1153, 1229, 1297, 1381, 1453,
7681 1523, 1597, 1663, 1741, 1823, 1901, 1993, 2063,
7682 2131, 2221, 2293, 2371, 2437, 2539, 2621, 2689,
7683 2749, 2833, 2909, 3001, 3083, 3187, 3259, 3343,
7684 3433, 3517, 3581, 3659, 3733, 3823, 3911, 4001,
7685 4073, 4153, 4241, 4327, 4421, 4507, 4591, 4663,
7686 4759, 4861, 4943, 5009, 5099, 5189, 5281, 5393,
7687 5449, 5527, 5641, 5701, 5801, 5861, 5953, 6067,
7688 6143, 6229, 6311, 6373, 6481, 6577, 6679, 6763,
7689 6841, 6947, 7001, 7109, 7211, 7307, 7417, 7507,
7690 104309, 104311, 104323, 104327, 104347, 104369, 104381, 104383,
7691 104393, 104399, 104417, 104459, 104471, 104473, 104479, 104491,
7692 104513, 104527, 104537, 104543, 104549, 104551, 104561, 104579,
7693 104593, 104597, 104623, 104639, 104651, 104659, 104677, 104681,
7694 104683, 104693, 104701, 104707, 104711, 104717, 104723, 104729,
7695 1000621, 1000639, 1000651, 1000667, 1000669, 1001023, 1001027, 1001041
7698 const std::size_t prime_list_size =
sizeof(prime_list) /
sizeof(std::size_t);
7700 for (std::size_t i = 0; (i < prime_list_size) && (!failure); ++i)
7702 x =
static_cast<T
>(prime_list[i]);
7704 std::vector<T> result(expression_count,T(0));
7706 for (std::size_t j = 0; j < expression_list.size(); ++j)
7708 result[j] = expression_list[j].value();
7711 for (std::size_t j = 1; j < expression_list.size(); ++j)
7713 if (result[j] != result[0])
7722 printf(
"run_test19() - Error in evaluation! (3) Results don't match! Prime: %d\n",
7723 static_cast<unsigned int>(prime_list[i]));
7725 for (std::size_t j = 0; j < expression_list.size(); ++j)
7727 printf(
"Expression[%02d]: %s = %d\n",
7728 static_cast<unsigned int>(j),
7729 expression_str[j].c_str(),
7730 static_cast<unsigned int>(result[j]));
7733 else if (T(1) != expression_list[0].
value())
7735 printf(
"run_test19() - Error in evaluation! (4) Results don't match! Prime: %d\n",
7736 static_cast<unsigned int>(prime_list[i]));
7738 for (std::size_t j = 0; j < expression_list.size(); ++j)
7740 printf(
"Expression[%02d]: %s = %d\n",
7741 static_cast<unsigned int>(j),
7742 expression_str[j].c_str(),
7743 static_cast<unsigned int>(result[j]));
7755 compositor_t compositor;
7763 " fibonacci1(x - 1) + fibonacci1(x - 2)))",
7772 " case x == 0 : 0; " 7773 " case x == 1 : 1; " 7774 " default : fibonacci2(x - 1) + fibonacci2(x - 2);" 7784 " case x == 0 : 0; " 7785 " case x == 1 : 1; " 7787 " while ((x := (x - 1)) > 0) " 7801 "fibonacci_impl3(x,0,1,0)",
7810 " case x == 0 : 0; " 7811 " case x == 1 : 1; " 7827 "fibonacci_impl4(x,0,1,0)",
7834 "if ((x == 0) or (x == 1)) " 7837 " fibonacci5(x - 1) + fibonacci5(x - 2); ",
7842 symbol_table.add_constants();
7843 symbol_table.add_variable(
"x",
x);
7853 const std::size_t expression_count =
sizeof(expression_str) /
sizeof(
std::string);
7855 std::vector<expression_t> expression_list;
7857 for (std::size_t i = 0; i < expression_count; ++i)
7864 if (!
parser.compile(expression_str[i],expression))
7866 printf(
"run_test19() - Error: %s Expression[%02d]: %s\n",
7868 static_cast<unsigned int>(i),
7869 expression_str[i].c_str());
7874 expression_list.push_back(expression);
7877 bool failure =
false;
7879 const std::size_t fibonacci_list[] =
7885 987, 1597, 2584, 4181,
7886 6765, 10946, 17711, 28657,
7887 46368, 75025, 121393, 196418,
7888 317811, 514229, 832040, 1346269
7891 const std::size_t fibonacci_list_size =
sizeof(fibonacci_list) /
sizeof(std::size_t);
7893 for (std::size_t i = 0; (i < fibonacci_list_size) && (!failure); ++i)
7895 x =
static_cast<T
>(i);
7897 std::vector<T> result(expression_count,T(0));
7899 for (std::size_t j = 0; j < expression_list.size(); ++j)
7901 result[j] = expression_list[j].value();
7904 for (std::size_t j = 1; j < expression_list.size(); ++j)
7906 if (result[j] != result[0])
7915 printf(
"run_test19() - Error in evaluation! (5) Results don't match! fibonacci(%d) = %d\n",
7916 static_cast<unsigned int>(i),
7917 static_cast<unsigned int>(fibonacci_list[i]));
7919 for (std::size_t j = 0; j < expression_list.size(); ++j)
7921 printf(
"Expression[%02d]: %s = %d\n",
7922 static_cast<unsigned int>(j),
7923 expression_str[j].c_str(),
7924 static_cast<unsigned int>(result[j]));
7927 else if (fibonacci_list[i] != expression_list[0].
value())
7929 printf(
"run_test19() - Error in evaluation! (6) Results don't match! fibonacci(%d) = %d\n",
7930 static_cast<unsigned int>(i),
7931 static_cast<unsigned int>(fibonacci_list[i]));
7933 for (std::size_t j = 0; j < expression_list.size(); ++j)
7935 printf(
"Expression[%02d]: %s = %d\n",
7936 static_cast<unsigned int>(j),
7937 expression_str[j].c_str(),
7938 static_cast<unsigned int>(result[j]));
7953 symbol_table.add_variable(
"x",
x);
7955 compositor_t compositor(symbol_table);
7963 " case x < 0 : -inf; " 7964 " case x == 0 : 0; " 7965 " case x == 1 : 1; " 7971 " y := (1 / 2) * (y + (x / y)); " 7972 " if (equal(y * y,x)) " 7974 " until ((z -= 1) <= 0); " 7983 "newton_sqrt_impl(x,0,0)",
"x"));
7993 if (!
parser.compile(expression_str,expression))
7995 printf(
"run_test19() - Error: %s Expression: %s\n",
7997 expression_str.c_str());
8002 bool failure =
false;
8004 for (std::size_t i = 0; i < 100; ++i)
8006 x =
static_cast<T
>(i);
8008 T result = expression.value();
8010 if (
not_equal(result,std::sqrt(
x),T(0.0000001)))
8012 printf(
"run_test19() - Computation Error " 8013 "Expression: [%s]\tExpected: %12.8f\tResult: %12.8f\n",
8014 expression_str.c_str(),
8015 (double)std::sqrt(
x),
8031 compositor_t compositor(symbol_table);
8037 " var width := 118; " 8038 " var height := 41; " 8039 " var imag_max := +1; " 8040 " var imag_min := -1; " 8041 " var real_max := +1; " 8042 " var real_min := -2.5; " 8043 " var x_step := (real_max - real_min) / width; " 8044 " var y_step := (imag_max - imag_min) / height; " 8045 " for (var y := 0; y < height; y += 1) " 8047 " var imag := imag_min + (y_step * y); " 8048 " for (var x := 0; x < width; x += 1) " 8050 " var real := real_min + x_step * x; " 8051 " var z_real := real; " 8052 " var z_imag := imag; " 8054 " for (var n := 0; n < 30; n += 1) " 8056 " var a := z_real^2; " 8057 " var b := z_imag^2; " 8058 " plot_value := n; " 8059 " if ((a + b) < 4) " 8061 " z_imag := 2 * z_real * z_imag + imag; " 8062 " z_real := a - b + real; " 8078 if (!
parser.compile(expression_str,expression))
8080 printf(
"run_test19() - Error: %s Expression: %s\n",
8082 expression_str.c_str());
8087 for (std::size_t i = 0; i < 100; ++i)
8100 compositor_t compositor(symbol_table);
8108 " fooboo(x - 1) + x; " 8121 if (!
parser.compile(expression_str,expression))
8123 printf(
"run_test19() - Error: %s Expression: %s\n",
8125 expression_str.c_str());
8132 for (std::size_t i = 0; i < 100; ++i)
8138 T result = expression.value();
8142 printf(
"run_test19() - FooBoo(%5.2f) Expected: %5.2f\tResult: %5.2f\n",
8159 " var sieve[10^7] := [false]; " 8160 " var m := trunc(sqrt(sieve[])); " 8162 " sieve[0] := true; " 8163 " sieve[1] := true; " 8165 " for (var i := 0; i <= m; i += 1) " 8167 " if (false == sieve[i]) " 8169 " for (var j := (i * i); j < sieve[]; j += i) " 8171 " sieve[j] := true; " 8176 " var prime_count := 0; " 8177 " for (var i := 0; i < sieve[]; i += 1) " 8179 " if (false == sieve[i]) " 8181 " prime_count += 1; " 8185 " prime_count == 664579; ";
8193 if (!
parser.compile(expression_str,expression))
8195 printf(
"run_test19() - Error: %s Expression: %s\n",
8197 expression_str.c_str());
8202 if (T(1) != expression.value())
8204 printf(
"run_test19() - Prime Sieve Computation Error");
8217 "var delta := 10^-7; var total := 0; for (var i := 0; i <= 3; i += delta) { total += " 8218 "erf(i) }; abs((delta * total) - (3 * erf(3) + (1 / exp(9) - 1) / sqrt(pi))) < 0.000001",
8220 "var delta := 10^-7; var total := 0; for (var i := 0; i <= 3; i += delta) { total += " 8221 "erfc(i) }; abs((delta * total) - (3 * erfc(3) + ((1 - 1 / exp(9)) / sqrt(pi)))) < 0.000001" 8228 for (std::size_t i = 0; i < 2; ++i)
8230 e[i].register_symbol_table(symbol_table);
8232 if (!
parser.compile(expression_str[i],
e[i]))
8234 printf(
"run_test19() - Error: %s Expression: %s\n",
8236 expression_str[i].c_str());
8241 if (T(1) !=
e[i].value())
8243 printf(
"run_test19() - erf/erfc computation error %d",
8244 static_cast<unsigned int>(i));
8254 template <
typename T>
8264 if (unknown_symbol[0] ==
'v')
8268 error_message.clear();
8272 else if (unknown_symbol[0] ==
'c')
8276 error_message.clear();
8282 error_message =
"Unknown symbol...";
8298 template <
typename T>
8312 bool result =
false;
8314 if (unknown_symbol[0] ==
'v')
8316 static T var_default_value = 1.0;
8318 if ((result = symbol_table.
create_variable(unknown_symbol, var_default_value++)) ==
false)
8320 error_message =
"Failed to create variable(" + unknown_symbol +
") in primary symbol table";
8323 else if (unknown_symbol[0] ==
'c')
8325 static T cvar_default_value = 1.0;
8327 if ((result = symbol_table.
add_constant(unknown_symbol, cvar_default_value++)) ==
false)
8329 error_message =
"Failed to create const variable(" + unknown_symbol +
") in primary symbol table";
8332 else if (0 == unknown_symbol.find(
"foo"))
8335 if (4 >= unknown_symbol.size())
8337 switch(unknown_symbol[3])
8339 case '1' : result = symbol_table.
add_function(unknown_symbol,foo1);
8342 case '2' : result = symbol_table.
add_function(unknown_symbol,foo2);
8345 case '3' : result = symbol_table.
add_function(unknown_symbol,foo3);
8348 case '4' : result = symbol_table.
add_function(unknown_symbol,foo4);
8351 case '5' : result = symbol_table.
add_function(unknown_symbol,foo5);
8354 case '6' : result = symbol_table.
add_function(unknown_symbol,foo6);
8361 error_message =
"Failed to add function(" + unknown_symbol +
") in primary symbol table";
8365 error_message =
"Indeterminable symbol type.";
8371 template <
typename T>
8377 for (std::size_t i = 0; i < 100; ++i)
8388 expression.register_symbol_table(symbol_table1);
8389 expression.register_symbol_table(symbol_table2);
8390 expression.register_symbol_table(symbol_table3);
8396 parser.enable_unknown_symbol_resolver(&musr);
8398 std::string expr_str =
"v01+c02+v03+c04+v05+c06+v07+c08+v09+c10+" 8399 "v11+c12+v13+c14+v15+c16+v17+c18+v19+c20+" 8400 "v21+c22+v23+c24+v25+c26+v27+c28+v29+c30 ";
8402 if (!
parser.compile(expr_str,expression))
8404 printf(
"run_test20() - [1] Error: %s Expression: %s\n",
8411 T sum_1_30 = T((1 + 30) * 15);
8412 T result = expression.value();
8414 if (sum_1_30 != result)
8416 printf(
"run_test20() - [1] Error in evaluation! (1) Expression: %s\n",
8425 for (std::size_t i = 0; i < 100; ++i)
8436 expression.register_symbol_table(symbol_table1);
8437 expression.register_symbol_table(symbol_table2);
8438 expression.register_symbol_table(symbol_table3);
8443 parser.enable_unknown_symbol_resolver(&musr);
8445 std::string expr_str =
"foo6(foo1(v0),foo2(c1,foo4(v2,c3,v4,c5)),foo3" 8446 "(v6,c7,foo5(v8,c9,v10,c11,v12)),c13,v14,c15) ";
8448 if (!
parser.compile(expr_str,expression))
8450 printf(
"run_test20() - [2] Error: %s Expression: %s\n",
8462 std::vector<T> vec(10,0.0);
8472 symbol_table.add_stringvar(
"str",str);
8473 symbol_table.add_vector (
"vec",vec);
8475 if (symbol_table.get_variable(
"val") == 0 || !symbol_table.symbol_exists(
"val"))
8477 printf(
"run_test20() - [3] Failed to get 'val' from symbol_table\n");
8481 if (symbol_table.get_stringvar(
"str") == 0 || !symbol_table.symbol_exists(
"str"))
8483 printf(
"run_test20() - [3] Failed to get 'str' from symbol_table\n");
8487 if (symbol_table.get_vector(
"vec") == 0 || !symbol_table.symbol_exists(
"vec"))
8489 printf(
"run_test20() - [3] Failed to get 'vec' from symbol_table\n");
8502 if (symbol_table.get_variable(
"val") == 0 || !symbol_table.symbol_exists(
"val"))
8504 printf(
"run_test20() - [4] Failed to get 'val' from symbol_table\n");
8508 if (symbol_table.get_stringvar(
"str") != 0 || symbol_table.symbol_exists(
"str"))
8510 printf(
"run_test20() - [4] Failed to get 'str' from symbol_table\n");
8514 if (symbol_table.get_vector(
"vec") != 0 || symbol_table.symbol_exists(
"vec"))
8516 printf(
"run_test20() - [4] Failed to get 'vec' from symbol_table\n");
8529 if (symbol_table.get_stringvar(
"str") == 0 || !symbol_table.symbol_exists(
"str"))
8531 printf(
"run_test20() - [5] Failed to get 'str' from symbol_table\n");
8535 if (symbol_table.get_variable(
"val") != 0 || symbol_table.symbol_exists(
"val"))
8537 printf(
"run_test20() - [5] Failed to get 'val' from symbol_table\n");
8541 if (symbol_table.get_vector(
"vec") != 0 || symbol_table.symbol_exists(
"vec"))
8543 printf(
"run_test20() - [5] Failed to get 'vec' from symbol_table\n");
8556 if (symbol_table.get_vector(
"vec") == 0 || !symbol_table.symbol_exists(
"vec"))
8558 printf(
"run_test20() - [6] Failed to get 'vec' from symbol_table\n");
8562 if (symbol_table.get_variable(
"val") != 0 || symbol_table.symbol_exists(
"val"))
8564 printf(
"run_test20() - [6] Failed to get 'val' from symbol_table\n");
8568 if (symbol_table.get_stringvar(
"str") != 0 || symbol_table.symbol_exists(
"str"))
8570 printf(
"run_test20() - [6] Failed to get 'str' from symbol_table\n");
8582 template <
typename T>
8586 typedef typename results_context_t::type_store_t type_t;
8590 for (std::size_t i = 0; i < results.
count(); ++i)
8592 type_t
t = results[i];
8596 case type_t::e_scalar : res_str +=
'T';
8599 case type_t::e_vector : res_str +=
'V';
8602 case type_t::e_string : res_str +=
'S';
8612 template <
typename T>
8616 typedef typename results_context_t::type_store_t type_t;
8617 typedef typename type_t::scalar_view scalar_t;
8619 if (1 != results.
count())
8621 else if (type_t::e_scalar != results[0].
type)
8624 return (
value == scalar_t(results[0])());
8627 template <
typename T>
8640 symbol_table.add_variable(
"x",
x);
8641 symbol_table.add_variable(
"y",y);
8642 symbol_table.add_variable(
"z",
z);
8650 "return[x + y,y - x]; x;",
8651 "return[x + y,y - x,'abc']; x;",
8652 "if (x < y) return [1,'abc1']; else return [2,'abc2',x];" ,
8653 "if (x > y) return [1,'abc1']; else return [2,'abc2',x];" ,
8654 "if (x < y) { return [1,'abc1'];} else { return [2,'abc2',x];}",
8655 "if (x > y) { return [1,'abc1'];} else { return [2,'abc2',x];}",
8656 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [1]; } ",
8657 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [1,'abc']; } ",
8658 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [1,'abc',x]; }",
8659 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [1,'abc',x,y]; }",
8660 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [1,'abc',x,y,z]; }",
8661 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [2,'abc2',x]; else x += 1; }",
8662 "for(var i := 0; i < 10; i += 1) { if (i == 5) { return [1,'abc1'];} else x += 1; }" 8685 static const std::size_t expression_list_size =
sizeof(expression_list) /
sizeof(
std::string);
8687 bool failure =
false;
8689 for (std::size_t i = 0; i < expression_list_size; ++i)
8696 if (!
parser.compile(expression_list[i],expression))
8698 printf(
"run_test21() - Error: %s Expression: %s [1]\n",
8700 expression_list[i].c_str());
8705 else if (!
parser.dec().return_present())
8707 printf(
"run_test21() - Expected a return statement Expression: %s [1]\n",
8708 expression_list[i].c_str());
8716 std::string pattern = results_to_string<T>(expression.results());
8718 if (!expression.return_invoked())
8720 printf(
"run_test21() - Invalid return invoke state [1] Expression: %s\n",
8721 expression_list[i].c_str());
8726 else if (result_list[i] != pattern)
8728 printf(
"run_test21() - Invalid return results [1] Expected %s Got: %s Expression: %s\n",
8729 result_list[i].c_str(),
8731 expression_list[i].c_str());
8745 "x := 1; x + 1; x + 2; x + 3; x + 5; x + 7; return [x + 1]; ",
8746 "x := 1; x + 1; x + 2; x + 3; x + 5; return [x + 1]; x := 7; ",
8747 "x := 1; x + 1; x + 2; x + 3; return [x + 1]; x + 5; x := 7; ",
8748 "x := 1; x + 1; x + 2; return [x + 1]; x + 3; x + 5; x := 7; ",
8749 "x := 1; x + 1; return [x + 1]; x + 2; x + 3; x + 5; x := 7; ",
8750 "x := 1; return [x + 1]; x + 1; x + 2; x + 3; x + 5; x := 7; ",
8751 "return [x + 1]; x := 1; x + 1; x + 2; x + 3; x + 5; x := 7; ",
8752 "~{x := 1; x + 1; x + 2; x + 3; x + 5; x + 7; return [x + 1]}",
8753 "~{x := 1; x + 1; x + 2; x + 3; x + 5; return [x + 1]; x := 7}",
8754 "~{x := 1; x + 1; x + 2; x + 3; return [x + 1]; x + 5; x := 7}",
8755 "~{x := 1; x + 1; x + 2; return [x + 1]; x + 3; x + 5; x := 7}",
8756 "~{x := 1; x + 1; return [x + 1]; x + 2; x + 3; x + 5; x := 7}",
8757 "~{x := 1; return [x + 1]; x + 1; x + 2; x + 3; x + 5; x := 7}",
8758 "~{return [x + 1]; x := 1; x + 1; x + 2; x + 3; x + 5; x := 7}" 8763 "T",
"T",
"T",
"T",
"T",
"T",
"T",
8764 "T",
"T",
"T",
"T",
"T",
"T",
"T",
8767 static const std::size_t expression_list_size =
sizeof(expression_list) /
sizeof(
std::string);
8769 bool failure =
false;
8771 for (std::size_t i = 0; i < expression_list_size; ++i)
8778 if (!
parser.compile(expression_list[i],expression))
8780 printf(
"run_test21() - Error: %s Expression: %s [2]\n",
8782 expression_list[i].c_str());
8787 else if (!
parser.dec().return_present())
8789 printf(
"run_test21() - Expected a return statement Expression: %s [2]\n",
8790 expression_list[i].c_str());
8798 std::string pattern = results_to_string<T>(expression.results());
8800 if (!expression.return_invoked())
8802 printf(
"run_test21() - Invalid return invoke state [2] Expression: %s\n",
8803 expression_list[i].c_str());
8808 else if (result_list[i] != pattern)
8810 printf(
"run_test21() - Invalid return results [2] Expected %s Got: %s Expression: %s\n",
8811 result_list[i].c_str(),
8813 expression_list[i].c_str());
8820 printf(
"run_test21() - Invalid return results [2] Expected %s Got: %s Expression: %s\n",
8821 result_list[i].c_str(),
8823 expression_list[i].c_str());
8837 template <
typename T>
8845 #define perform_test(Type,Number) \ 8847 exprtk::timer timer; \ 8849 if (!run_test##Number<Type>()) \ 8851 printf("run_test"#Number" (%s) *** FAILED! ***\n", \ 8852 type_name<Type>::value().c_str()); \ 8853 result = EXIT_FAILURE; \ 8858 printf("run_test"#Number" (%s) - Result: SUCCESS Time: %8.4fsec\n", \ 8859 type_name<Type>::value().c_str(), \