1354 test_xy<T>(
"(x + y) * (x + y)" ,T(2.2),T(3.3),T(30.25)),
1355 test_xy<T>(
"(x + y) / (x + y)" ,T(2.2),T(3.3),T(1.0 )),
1356 test_xy<T>(
"x + y > x and x + y > y" ,T(2.2),T(3.3),T(1.0)),
1357 test_xy<T>(
"1 + (x + y)" ,T(2.2),T(3.3),T(6.5 )),
1358 test_xy<T>(
"(x + y) - 1" ,T(2.2),T(3.3),T(4.5 )),
1359 test_xy<T>(
"1 + (x + y) * 2" ,T(2.2),T(3.3),T(12.0 )),
1360 test_xy<T>(
"2 * (x + y) - 1" ,T(2.2),T(3.3),T(10.0 )),
1361 test_xy<T>(
"y + (x + 1)" ,T(2.2),T(3.3),T(6.5 )),
1362 test_xy<T>(
"(x + 1) + y" ,T(2.2),T(3.3),T(6.5 )),
1391 test_xy<T>(
"(x - -1 + 1)" ,T(1.0),T(0.0),T(3)),
1392 test_xy<T>(
"(x --1 + 1)" ,T(1.0),T(0.0),T(3)),
1393 test_xy<T>(
"(x-- 1 + 1)" ,T(1.0),T(0.0),T(3)),
1394 test_xy<T>(
"(x--1 + 1)" ,T(1.0),T(0.0),T(3)),
1395 test_xy<T>(
"(x -- -1 + 1)" ,T(1.0),T(0.0),T(1)),
1396 test_xy<T>(
"(x + -1 + 1)" ,T(1.0),T(0.0),T(1)),
1397 test_xy<T>(
"(x +-1 + 1)" ,T(1.0),T(0.0),T(1)),
1398 test_xy<T>(
"(x+- 1 + 1)" ,T(1.0),T(0.0),T(1)),
1399 test_xy<T>(
"(x+-1 + 1)" ,T(1.0),T(0.0),T(1)),
1400 test_xy<T>(
"(x +- -1 + 1)" ,T(1.0),T(0.0),T(3)),
1401 test_xy<T>(
"(x + +1 + 1)" ,T(1.0),T(0.0),T(3)),
1402 test_xy<T>(
"(x ++1 + 1)" ,T(1.0),T(0.0),T(3)),
1403 test_xy<T>(
"(1 - -x + 1)" ,T(1.0),T(0.0),T(3)),
1404 test_xy<T>(
"(1 --x + 1)" ,T(1.0),T(0.0),T(3)),
1405 test_xy<T>(
"(1-- x + 1)" ,T(1.0),T(0.0),T(3)),
1406 test_xy<T>(
"(1--x + 1)" ,T(1.0),T(0.0),T(3)),
1407 test_xy<T>(
"(1 -- -x + 1)" ,T(1.0),T(0.0),T(1)),
1408 test_xy<T>(
"(1 + -x + 1)" ,T(1.0),T(0.0),T(1)),
1409 test_xy<T>(
"(1 +-x + 1)" ,T(1.0),T(0.0),T(1)),
1410 test_xy<T>(
"(1+- x + 1)" ,T(1.0),T(0.0),T(1)),
1411 test_xy<T>(
"(1+-x + 1)" ,T(1.0),T(0.0),T(1)),
1412 test_xy<T>(
"(1 +- -x + 1)" ,T(1.0),T(0.0),T(3)),
1413 test_xy<T>(
"(1 + +x + 1)" ,T(1.0),T(0.0),T(3)),
1414 test_xy<T>(
"(1 ++x + 1)" ,T(1.0),T(0.0),T(3)),
1415 test_xy<T>(
"(x - -1 - 1)" ,T(1.0),T(0.0),T(1)),
1416 test_xy<T>(
"(x --1 - 1)" ,T(1.0),T(0.0),T(1)),
1417 test_xy<T>(
"(x-- 1 - 1)" ,T(1.0),T(0.0),T(1)),
1418 test_xy<T>(
"(x--1 - 1)" ,T(1.0),T(0.0),T(1)),
1419 test_xy<T>(
"(x -- -1 - 1)" ,T(1.0),T(0.0),T(-1)),
1420 test_xy<T>(
"(x + -1 - 1)" ,T(1.0),T(0.0),T(-1)),
1421 test_xy<T>(
"(x +-1 - 1)" ,T(1.0),T(0.0),T(-1)),
1422 test_xy<T>(
"(x+- 1 - 1)" ,T(1.0),T(0.0),T(-1)),
1423 test_xy<T>(
"(x+-1 - 1)" ,T(1.0),T(0.0),T(-1)),
1424 test_xy<T>(
"(x +- -1 - 1)" ,T(1.0),T(0.0),T(1)),
1425 test_xy<T>(
"(x + +1 - 1)" ,T(1.0),T(0.0),T(1)),
1426 test_xy<T>(
"(x ++1 - 1)" ,T(1.0),T(0.0),T(1)),
1427 test_xy<T>(
"(1 - -x - 1)" ,T(1.0),T(0.0),T(1)),
1428 test_xy<T>(
"(1 --x - 1)" ,T(1.0),T(0.0),T(1)),
1429 test_xy<T>(
"(1-- x - 1)" ,T(1.0),T(0.0),T(1)),
1430 test_xy<T>(
"(1--x - 1)" ,T(1.0),T(0.0),T(1)),
1431 test_xy<T>(
"(1 -- -x - 1)" ,T(1.0),T(0.0),T(-1)),
1432 test_xy<T>(
"(1 + -x - 1)" ,T(1.0),T(0.0),T(-1)),
1433 test_xy<T>(
"(1 +-x - 1)" ,T(1.0),T(0.0),T(-1)),
1434 test_xy<T>(
"(1+- x - 1)" ,T(1.0),T(0.0),T(-1)),
1435 test_xy<T>(
"(1+-x - 1)" ,T(1.0),T(0.0),T(-1)),
1436 test_xy<T>(
"(1 +- -x - 1)" ,T(1.0),T(0.0),T(1)),
1437 test_xy<T>(
"(1 + +x - 1)" ,T(1.0),T(0.0),T(1)),
1438 test_xy<T>(
"(1 ++x - 1)" ,T(1.0),T(0.0),T(1)),
1439 test_xy<T>(
"x * 1 == x" ,T(2.0),T(3.0),T(1.0)),
1440 test_xy<T>(
"1 * x == x" ,T(2.0),T(3.0),T(1.0)),
1441 test_xy<T>(
"y * 1 == y" ,T(2.0),T(3.0),T(1.0)),
1442 test_xy<T>(
"1 * y == y" ,T(2.0),T(3.0),T(1.0)),
1443 test_xy<T>(
"x * 0 == 0" ,T(2.0),T(3.0),T(1.0)),
1444 test_xy<T>(
"0 * x == 0" ,T(2.0),T(3.0),T(1.0)),
1445 test_xy<T>(
"y * 0 == 0" ,T(2.0),T(3.0),T(1.0)),
1446 test_xy<T>(
"0 * y == 0" ,T(2.0),T(3.0),T(1.0)),
1447 test_xy<T>(
"x + 1 == 1 + x" ,T(2.0),T(3.0),T(1.0)),
1448 test_xy<T>(
"y + 1 == 1 + y" ,T(2.0),T(3.0),T(1.0)),
1449 test_xy<T>(
"x + y == y + x" ,T(2.0),T(3.0),T(1.0)),
1450 test_xy<T>(
"x * y == y * x" ,T(2.0),T(3.0),T(1.0)),
1455 test_xy<T>(
"x + y > y" ,T(2.0),T(3.0),T(1.0)),
1456 test_xy<T>(
"x + y > x" ,T(2.0),T(3.0),T(1.0)),
1457 test_xy<T>(
"x * y > y" ,T(2.0),T(3.0),T(1.0)),
1458 test_xy<T>(
"x * y > x" ,T(2.0),T(3.0),T(1.0)),
1459 test_xy<T>(
"(x + y) > y" ,T(2.0),T(3.0),T(1.0)),
1460 test_xy<T>(
"(x + y) > x" ,T(2.0),T(3.0),T(1.0)),
1461 test_xy<T>(
"(x * y) > y" ,T(2.0),T(3.0),T(1.0)),
1462 test_xy<T>(
"(x * y) > x" ,T(2.0),T(3.0),T(1.0)),
1463 test_xy<T>(
"(2x + 3y) == (2*x + 3*y)" ,T(2.0),T(3.0),T(1.0)),
1464 test_xy<T>(
"2(x + y) == (2*x + 2*y)" ,T(2.0),T(3.0),T(1.0)),
1465 test_xy<T>(
" (x + y)3 == (3*x + 3*y)" ,T(2.0),T(3.0),T(1.0)),
1466 test_xy<T>(
"2x + 3y == 2*x + 3*y" ,T(2.0),T(3.0),T(1.0)),
1467 test_xy<T>(
"2(x + y) == 2*x + 2*y" ,T(2.0),T(3.0),T(1.0)),
1468 test_xy<T>(
" (x + y)3 == 3*x + 3*y" ,T(2.0),T(3.0),T(1.0)),
1469 test_xy<T>(
" (x)y == (x*y)" ,T(2.0),T(3.0),T(1.0)),
1470 test_xy<T>(
" x(y) == (x*y)" ,T(2.0),T(3.0),T(1.0)),
1471 test_xy<T>(
" (x) y == (x*y)" ,T(2.0),T(3.0),T(1.0)),
1472 test_xy<T>(
" x (y) == (x*y)" ,T(2.0),T(3.0),T(1.0)),
1473 test_xy<T>(
" ((x) y) == (x*y)" ,T(2.0),T(3.0),T(1.0)),
1474 test_xy<T>(
" (x (y)) == (x*y)" ,T(2.0),T(3.0),T(1.0)),
1475 test_xy<T>(
" (x)3 == (x*3)" ,T(2.0),T(3.0),T(1.0)),
1476 test_xy<T>(
" x(3) == (x*3)" ,T(2.0),T(3.0),T(1.0)),
1477 test_xy<T>(
" (x) 3 == (x*3)" ,T(2.0),T(3.0),T(1.0)),
1478 test_xy<T>(
" x (3) == (x*3)" ,T(2.0),T(3.0),T(1.0)),
1479 test_xy<T>(
" ((x) 3) == (x*3)" ,T(2.0),T(3.0),T(1.0)),
1480 test_xy<T>(
" (x (3)) == (x*3)" ,T(2.0),T(3.0),T(1.0)),
1481 test_xy<T>(
" (2)y == (2*y)" ,T(2.0),T(3.0),T(1.0)),
1482 test_xy<T>(
" 2(y) == (2*y)" ,T(2.0),T(3.0),T(1.0)),
1483 test_xy<T>(
" (2) y == (2*y)" ,T(2.0),T(3.0),T(1.0)),
1484 test_xy<T>(
" 2 (y) == (2*y)" ,T(2.0),T(3.0),T(1.0)),
1485 test_xy<T>(
" ((2) y) == (2*y)" ,T(2.0),T(3.0),T(1.0)),
1486 test_xy<T>(
" (2 (y)) == (2*y)" ,T(2.0),T(3.0),T(1.0)),
1487 test_xy<T>(
"var a := 2; (a)(3) == 6" ,T(2.0),T(3.0),T(1.0)),
1488 test_xy<T>(
"var a := 2; (A){3} == 6" ,T(2.0),T(3.0),T(1.0)),
1489 test_xy<T>(
"var a := 2; (a)[3] == 6" ,T(2.0),T(3.0),T(1.0)),
1490 test_xy<T>(
"var a := 2; {a}(3) == 6" ,T(2.0),T(3.0),T(1.0)),
1491 test_xy<T>(
"var a := 2; {a}{3} == 6" ,T(2.0),T(3.0),T(1.0)),
1492 test_xy<T>(
"var a := 2; {a}[3] == 6" ,T(2.0),T(3.0),T(1.0)),
1493 test_xy<T>(
"var a := 2; var b := 3; (a)(b) == 6" ,T(2.0),T(3.0),T(1.0)),
1494 test_xy<T>(
"var a := 2; var b := 3; (a){B} == 6" ,T(2.0),T(3.0),T(1.0)),
1495 test_xy<T>(
"var a := 2; var b := 3; (a)[b] == 6" ,T(2.0),T(3.0),T(1.0)),
1496 test_xy<T>(
"var a := 2; var b := 3; {a}(b) == 6" ,T(2.0),T(3.0),T(1.0)),
1497 test_xy<T>(
"var a := 2; var b := 3; {a}{b} == 6" ,T(2.0),T(3.0),T(1.0)),
1498 test_xy<T>(
"var a := 2; var b := 3; {a}[b] == 6" ,T(2.0),T(3.0),T(1.0)),
1499 test_xy<T>(
"var a := 2; (a)(a+1) == 6" ,T(2.0),T(3.0),T(1.0)),
1500 test_xy<T>(
"var a := 2; (a){a+1} == 6" ,T(2.0),T(3.0),T(1.0)),
1501 test_xy<T>(
"var a := 2; (a)[a+1] == 6" ,T(2.0),T(3.0),T(1.0)),
1502 test_xy<T>(
"var a := 2; {a}(a+1) == 6" ,T(2.0),T(3.0),T(1.0)),
1503 test_xy<T>(
"var a := 2; {a}{a+1} == 6" ,T(2.0),T(3.0),T(1.0)),
1504 test_xy<T>(
"var a := 2; {a}[a+1] == 6" ,T(2.0),T(3.0),T(1.0)),
1505 test_xy<T>(
"var a := 2; var b := 3; (b-1)(b) == 6" ,T(2.0),T(3.0),T(1.0)),
1506 test_xy<T>(
"var a := 2; var b := 3; (b-1){b} == 6" ,T(2.0),T(3.0),T(1.0)),
1507 test_xy<T>(
"var a := 2; var b := 3; (b-1)[b] == 6" ,T(2.0),T(3.0),T(1.0)),
1508 test_xy<T>(
"var a := 2; var b := 3; {b-1}(b) == 6" ,T(2.0),T(3.0),T(1.0)),
1509 test_xy<T>(
"var a := 2; var b := 3; {b-1}{b} == 6" ,T(2.0),T(3.0),T(1.0)),
1510 test_xy<T>(
"var a := 2; var b := 3; {b-1}[b] == 6" ,T(2.0),T(3.0),T(1.0)),
1511 test_xy<T>(
"equal(x^2.2^1.1,17.15193942371376191362)" ,T(3.3),T(0.0),T(1.0)),
1512 test_xy<T>(
"equal(3.3^x^1.1,17.15193942371376191362)" ,T(2.2),T(0.0),T(1.0)),
1513 test_xy<T>(
"equal(3.3^2.2^x,17.15193942371376191362)" ,T(1.1),T(0.0),T(1.0)),
1514 test_xy<T>(
"equal(x^2.2^y,17.15193942371376191362)" ,T(3.3),T(1.1),T(1.0)),
1515 test_xy<T>(
"equal(x^y^1.1,17.15193942371376191362)" ,T(3.3),T(2.2),T(1.0)),
1516 test_xy<T>(
"equal(3.3^x^y,17.15193942371376191362)" ,T(2.2),T(1.1),T(1.0)),
1517 test_xy<T>(
"equal(x+y^3/7,x+(y*y*y)/7)",T(2.0),T(3.0),T(1.0)),
1518 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)),
1519 test_xy<T>(
"equal( x^0,1)",T(12.34),T(0.0),T(1.0)),
1520 test_xy<T>(
"equal( x^1,x)",T(12.34),T(0.0),T(1.0)),
1521 test_xy<T>(
"equal( x^2,x*x)",T(12.34),T(0.0),T(1.0)),
1522 test_xy<T>(
"equal( x^3,x*x*x)",T(12.34),T(0.0),T(1.0)),
1523 test_xy<T>(
"equal( x^4,x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1524 test_xy<T>(
"equal( x^5,x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1525 test_xy<T>(
"equal( x^6,x*x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1526 test_xy<T>(
"equal( x^7,x*x*x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1527 test_xy<T>(
"equal( x^8,x*x*x*x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1528 test_xy<T>(
"equal( x^9,x*x*x*x*x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1529 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)),
1530 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)),
1531 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)),
1532 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)),
1533 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)),
1534 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)),
1535 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)),
1536 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)),
1537 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)),
1538 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)),
1539 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)),
1540 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)),
1541 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)),
1542 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)),
1543 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)),
1544 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)),
1545 test_xy<T>(
"equal( y^0,1)",T(0.0),T(12.34),T(1.0)),
1546 test_xy<T>(
"equal( y^1,y)",T(0.0),T(12.34),T(1.0)),
1547 test_xy<T>(
"equal( y^2,y*y)",T(0.0),T(12.34),T(1.0)),
1548 test_xy<T>(
"equal( y^3,y*y*y)",T(0.0),T(12.34),T(1.0)),
1549 test_xy<T>(
"equal( y^4,y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1550 test_xy<T>(
"equal( y^5,y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1551 test_xy<T>(
"equal( y^6,y*y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1552 test_xy<T>(
"equal( y^7,y*y*y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1553 test_xy<T>(
"equal( y^8,y*y*y*y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1554 test_xy<T>(
"equal( y^9,y*y*y*y*y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1555 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)),
1556 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)),
1557 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)),
1558 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)),
1559 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)),
1560 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)),
1561 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)),
1562 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)),
1563 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)),
1564 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)),
1565 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)),
1566 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)),
1567 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)),
1568 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)),
1569 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)),
1570 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)),
1571 test_xy<T>(
"equal( x^-0,1/1)",T(12.34),T(0.0),T(1.0)),
1572 test_xy<T>(
"equal( x^-1,1/(x))",T(12.34),T(0.0),T(1.0)),
1573 test_xy<T>(
"equal( x^-2,1/(x*x))",T(12.34),T(0.0),T(1.0)),
1574 test_xy<T>(
"equal( x^-3,1/(x*x*x))",T(12.34),T(0.0),T(1.0)),
1575 test_xy<T>(
"equal( x^-4,1/(x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1576 test_xy<T>(
"equal( x^-5,1/(x*x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1577 test_xy<T>(
"equal( x^-6,1/(x*x*x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1578 test_xy<T>(
"equal( x^-7,1/(x*x*x*x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1579 test_xy<T>(
"equal( x^-8,1/(x*x*x*x*x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1580 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)),
1581 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)),
1582 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)),
1583 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)),
1584 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)),
1585 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)),
1586 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)),
1587 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)),
1588 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)),
1589 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)),
1590 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)),
1591 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)),
1592 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)),
1593 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)),
1594 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)),
1595 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)),
1596 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)),
1597 test_xy<T>(
"equal( y^-0,1/1)",T(0.0),T(12.34),T(1.0)),
1598 test_xy<T>(
"equal( y^-1,1/(y))",T(0.0),T(12.34),T(1.0)),
1599 test_xy<T>(
"equal( y^-2,1/(y*y))",T(0.0),T(12.34),T(1.0)),
1600 test_xy<T>(
"equal( y^-3,1/(y*y*y))",T(0.0),T(12.34),T(1.0)),
1601 test_xy<T>(
"equal( y^-4,1/(y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1602 test_xy<T>(
"equal( y^-5,1/(y*y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1603 test_xy<T>(
"equal( y^-6,1/(y*y*y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1604 test_xy<T>(
"equal( y^-7,1/(y*y*y*y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1605 test_xy<T>(
"equal( y^-8,1/(y*y*y*y*y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1606 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)),
1607 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)),
1608 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)),
1609 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)),
1610 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)),
1611 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)),
1612 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)),
1613 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)),
1614 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)),
1615 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)),
1616 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)),
1617 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)),
1618 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)),
1619 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)),
1620 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)),
1621 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)),
1622 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)),
1623 test_xy<T>(
"(2 + x) + 7",T(3.0),T(0.0),T((2.0 + 3.0) + 7.0)),
1624 test_xy<T>(
"(2 + x) - 7",T(3.0),T(0.0),T((2.0 + 3.0) - 7.0)),
1625 test_xy<T>(
"(2 - x) + 7",T(3.0),T(0.0),T((2.0 - 3.0) + 7.0)),
1626 test_xy<T>(
"(2 - x) - 7",T(3.0),T(0.0),T((2.0 - 3.0) - 7.0)),
1627 test_xy<T>(
"(2 * x) * 7",T(3.0),T(0.0),T((2.0 * 3.0) * 7.0)),
1628 test_xy<T>(
"(2 * x) / 7",T(3.0),T(0.0),T((2.0 * 3.0) / 7.0)),
1629 test_xy<T>(
"(2 / x) * 7",T(3.0),T(0.0),T((2.0 / 3.0) * 7.0)),
1630 test_xy<T>(
"(2 / x) / 7",T(3.0),T(0.0),T((2.0 / 3.0) / 7.0)),
1631 test_xy<T>(
"2 + (x + 7)",T(3.0),T(0.0),T(2.0 + (3.0 + 7.0))),
1632 test_xy<T>(
"2 + (x - 7)",T(3.0),T(0.0),T(2.0 + (3.0 - 7.0))),
1633 test_xy<T>(
"2 - (x + 7)",T(3.0),T(0.0),T(2.0 - (3.0 + 7.0))),
1634 test_xy<T>(
"2 - (x - 7)",T(3.0),T(0.0),T(2.0 - (3.0 - 7.0))),
1635 test_xy<T>(
"2 * (x * 7)",T(3.0),T(0.0),T(2.0 * (3.0 * 7.0))),
1636 test_xy<T>(
"2 * (x / 7)",T(3.0),T(0.0),T(2.0 * (3.0 / 7.0))),
1637 test_xy<T>(
"2 / (x * 7)",T(3.0),T(0.0),T(2.0 / (3.0 * 7.0))),
1638 test_xy<T>(
"2 / (x / 7)",T(3.0),T(0.0),T(2.0 / (3.0 / 7.0))),
1639 test_xy<T>(
"2 + (7 + x)",T(3.0),T(0.0),T(2.0 + (7.0 + 3.0))),
1640 test_xy<T>(
"2 + (7 - x)",T(3.0),T(0.0),T(2.0 + (7.0 - 3.0))),
1641 test_xy<T>(
"2 - (7 + x)",T(3.0),T(0.0),T(2.0 - (7.0 + 3.0))),
1642 test_xy<T>(
"2 - (7 - x)",T(3.0),T(0.0),T(2.0 - (7.0 - 3.0))),
1643 test_xy<T>(
"2 * (7 * x)",T(3.0),T(0.0),T(2.0 * (7.0 * 3.0))),
1644 test_xy<T>(
"2 * (7 / x)",T(3.0),T(0.0),T(2.0 * (7.0 / 3.0))),
1645 test_xy<T>(
"2 / (7 * x)",T(3.0),T(0.0),T(2.0 / (7.0 * 3.0))),
1646 test_xy<T>(
"2 / (7 / x)",T(3.0),T(0.0),T(2.0 / (7.0 / 3.0))),
1647 test_xy<T>(
"(x + 2) + 7",T(3.0),T(0.0),T((3.0 + 2.0) + 7.0)),
1648 test_xy<T>(
"(x + 2) - 7",T(3.0),T(0.0),T((3.0 + 2.0) - 7.0)),
1649 test_xy<T>(
"(x - 2) + 7",T(3.0),T(0.0),T((3.0 - 2.0) + 7.0)),
1650 test_xy<T>(
"(x - 2) - 7",T(3.0),T(0.0),T((3.0 - 2.0) - 7.0)),
1651 test_xy<T>(
"(x * 2) * 7",T(3.0),T(0.0),T((3.0 * 2.0) * 7.0)),
1652 test_xy<T>(
"(x * 2) / 7",T(3.0),T(0.0),T((3.0 * 2.0) / 7.0)),
1653 test_xy<T>(
"(x / 2) * 7",T(3.0),T(0.0),T((3.0 / 2.0) * 7.0)),
1654 test_xy<T>(
"(x / 2) / 7",T(3.0),T(0.0),T((3.0 / 2.0) / 7.0)),
1655 test_xy<T>(
"((2 + x) + (3 + y))",T(7.0),T(9.0),T(((2.0 + 7.0) + (3.0 + 9.0)))),
1656 test_xy<T>(
"((2 + x) - (3 + y))",T(7.0),T(9.0),T(((2.0 + 7.0) - (3.0 + 9.0)))),
1657 test_xy<T>(
"((2 - x) - (3 - y))",T(7.0),T(9.0),T(((2.0 - 7.0) - (3.0 - 9.0)))),
1658 test_xy<T>(
"((2 * x) * (3 * y))",T(7.0),T(9.0),T(((2.0 * 7.0) * (3.0 * 9.0)))),
1659 test_xy<T>(
"((x + 2) + (y + 3))",T(7.0),T(9.0),T(((7.0 + 2.0) + (9.0 + 3.0)))),
1660 test_xy<T>(
"((x + 2) - (y + 3))",T(7.0),T(9.0),T(((7.0 + 2.0) - (9.0 + 3.0)))),
1661 test_xy<T>(
"((x - 2) - (y - 3))",T(7.0),T(9.0),T(((7.0 - 2.0) - (9.0 - 3.0)))),
1662 test_xy<T>(
"((2 * x) * (3 * y))",T(7.0),T(9.0),T(((2.0 * 7.0) * (3.0 * 9.0)))),
1663 test_xy<T>(
"((2 + x) + (y + 3))",T(7.0),T(9.0),T(((2.0 + 7.0) + (9.0 + 3.0)))),
1664 test_xy<T>(
"((2 + x) - (y + 3))",T(7.0),T(9.0),T(((2.0 + 7.0) - (9.0 + 3.0)))),
1665 test_xy<T>(
"((2 - x) - (y - 3))",T(7.0),T(9.0),T(((2.0 - 7.0) - (9.0 - 3.0)))),
1666 test_xy<T>(
"((2 * x) * (3 * y))",T(7.0),T(9.0),T(((2.0 * 7.0) * (3.0 * 9.0)))),
1667 test_xy<T>(
"((x + 2) + (3 + y))",T(7.0),T(9.0),T(((7.0 + 2.0) + (3.0 + 9.0)))),
1668 test_xy<T>(
"((x + 2) - (3 + y))",T(7.0),T(9.0),T(((7.0 + 2.0) - (3.0 + 9.0)))),
1669 test_xy<T>(
"((x - 2) - (3 - y))",T(7.0),T(9.0),T(((7.0 - 2.0) - (3.0 - 9.0)))),
1670 test_xy<T>(
"((2 * x) * (3 * y))",T(7.0),T(9.0),T(((2.0 * 7.0) * (3.0 * 9.0)))),
1671 test_xy<T>(
"((2 * x) / (3 * y))",T(7.0),T(9.0),T(((2.0 * 7.0) / (3.0 * 9.0)))),
1672 test_xy<T>(
"((2 / x) * (3 / y))",T(7.0),T(9.0),T(((2.0 / 7.0) * (3.0 / 9.0)))),
1673 test_xy<T>(
"((2 * x) / (3 / y))",T(7.0),T(9.0),T(((2.0 * 7.0) / (3.0 / 9.0)))),
1674 test_xy<T>(
"((2 / x) / (3 * y))",T(7.0),T(9.0),T(((2.0 / 7.0) / (3.0 * 9.0)))),
1675 test_xy<T>(
"((x * 2) / (y * 3))",T(7.0),T(9.0),T(((7.0 * 2.0) / (9.0 * 3.0)))),
1676 test_xy<T>(
"((x / 2) * (y / 3))",T(7.0),T(9.0),T(((7.0 / 2.0) * (9.0 / 3.0)))),
1677 test_xy<T>(
"((x * 2) / (y / 3))",T(7.0),T(9.0),T(((7.0 * 2.0) / (9.0 / 3.0)))),
1678 test_xy<T>(
"((x / 2) / (y * 3))",T(7.0),T(9.0),T(((7.0 / 2.0) / (9.0 * 3.0)))),
1679 test_xy<T>(
"((2 * x) / (y * 3))",T(7.0),T(9.0),T(((2.0 * 7.0) / (9.0 * 3.0)))),
1680 test_xy<T>(
"((2 / x) * (y / 3))",T(7.0),T(9.0),T(((2.0 / 7.0) * (9.0 / 3.0)))),
1681 test_xy<T>(
"((2 * x) / (y / 3))",T(7.0),T(9.0),T(((2.0 * 7.0) / (9.0 / 3.0)))),
1682 test_xy<T>(
"((2 / x) / (y * 3))",T(7.0),T(9.0),T(((2.0 / 7.0) / (9.0 * 3.0)))),
1683 test_xy<T>(
"((x * 2) / (3 * y))",T(7.0),T(9.0),T(((7.0 * 2.0) / (3.0 * 9.0)))),
1684 test_xy<T>(
"((x / 2) * (3 / y))",T(7.0),T(9.0),T(((7.0 / 2.0) * (3.0 / 9.0)))),
1685 test_xy<T>(
"((x * 2) / (3 / y))",T(7.0),T(9.0),T(((7.0 * 2.0) / (3.0 / 9.0)))),
1686 test_xy<T>(
"((x / 2) / (3 * y))",T(7.0),T(9.0),T(((7.0 / 2.0) / (3.0 * 9.0)))),
1687 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))),
1688 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))),
1689 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))),
1690 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))),
1691 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))),
1692 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))),
1693 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))),
1694 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))),
1695 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))),
1696 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))),
1697 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))),
1698 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))),
1699 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))),
1700 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))),
1701 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))),
1702 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))),
1703 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))))),
1704 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))))),
1705 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))))),
1706 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))))),
1707 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))))),
1708 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))))),
1709 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))))),
1710 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))))),
1711 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))))),
1712 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))))),
1713 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))))),
1714 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))))),
1715 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))))),
1716 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))))),
1717 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))))),
1718 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))))),
1719 test_xy<T>(
"((2 * x) + (2 * y))",T(7.0),T(9.0),T(((2.0 * 7.0) + (2.0 * 9.0)))),
1720 test_xy<T>(
"((2 * x) - (2 * y))",T(7.0),T(9.0),T(((2.0 * 7.0) - (2.0 * 9.0)))),
1721 test_xy<T>(
"((2 * x) + (y * 2))",T(7.0),T(9.0),T(((2.0 * 7.0) + (9.0 * 2.0)))),
1722 test_xy<T>(
"((x * 2) - (y * 2))",T(7.0),T(9.0),T(((7.0 * 2.0) - (9.0 * 2.0)))),
1723 test_xy<T>(
"0 * (abs (x) + acos (y) + asin (x) + atan (y))",T(1.0),T(1.0),T(0.0)),
1724 test_xy<T>(
"0 * (ceil (x) + cos (y) + cosh (x) + exp (y))",T(1.0),T(1.0),T(0.0)),
1725 test_xy<T>(
"0 * (floor(x) + log (y) + log10(x) + round(y))",T(1.0),T(1.0),T(0.0)),
1726 test_xy<T>(
"0 * (sin (x) + sinh (y) + sqrt (x) + tan (y))",T(1.0),T(1.0),T(0.0)),
1727 test_xy<T>(
"0 * (sec (x) + csc (y) + tanh (x) + cot (y))",T(1.0),T(1.0),T(0.0)),
1728 test_xy<T>(
"0 * (erf (x) + erfc (y) + sgn (y) + frac (y))",T(1.0),T(1.0),T(0.0)),
1729 test_xy<T>(
"0 * (log1p(x) + expm1(y) + acosh(x) + asinh(y))",T(1.0),T(1.0),T(0.0)),
1730 test_xy<T>(
"0 * (deg2grad(x) + grad2deg(y) + rad2deg(x) + deg2rad(y))",T(1.0),T(1.0),T(0.0)),
1731 test_xy<T>(
"switch { case (x <= y) : (y - x); default: 1.12345; }",T(1.0),T(2.0),T(1.0)),
1732 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)),
1733 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)),
1734 test_xy<T>(
"switch { case [x <= y] : [y - x]; default: 1.12345; }",T(1.0),T(2.0),T(1.0)),
1735 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)),
1736 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)),
1737 test_xy<T>(
"switch { case {x <= y} : x; default: 1.12345; }",T(1.0),T(2.0),T(1.0)),
1738 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)),
1739 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)),
1740 test_xy<T>(
"switch { case [(x <= y)] : {y - x}; default: 1.12345; }",T(1.0),T(2.0),T(1.0)),
1741 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)),
1742 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)),
1743 test_xy<T>(
"[*]{ case x < y : x + y; case y < x : y - x; }",T(2.0),T(3.0),T(5.0)),
1744 test_xy<T>(
"[*]{ case x > y : x + y; case y > x : y - x; }",T(2.0),T(3.0),T(1.0)),
1745 test_xy<T>(
"[*]{ case x > y : x - y; case y < x : y + x; }",T(2.0),T(3.0),T(0.0)),
1746 test_xy<T>(
"0 ? x : y" ,T(1.0),T(2.0),T( 2.0)),
1747 test_xy<T>(
"1 ? x : y" ,T(1.0),T(2.0),T( 1.0)),
1748 test_xy<T>(
"x ? x : y" ,T(1.0),T(2.0),T( 1.0)),
1749 test_xy<T>(
"x ? x : y" ,T(0.0),T(2.0),T( 2.0)),
1750 test_xy<T>(
"(x + y < 4) ? 1 : 2" ,T(1.0),T(2.0),T( 1.0)),
1751 test_xy<T>(
"(x + y > 4) ? 1 : 2" ,T(1.0),T(2.0),T( 2.0)),
1752 test_xy<T>(
"x < y ? x + y : x - y" ,T(1.0),T(2.0),T( 3.0)),
1753 test_xy<T>(
"x > y ? x + y : x - y" ,T(1.0),T(2.0),T(-1.0)),
1754 test_xy<T>(
"(x + x < y ? 7 : 9) == 7" ,T(1.0),T(3.0),T( 1.0)),
1755 test_xy<T>(
"(x + x < y + y ? 7 : 9) == 7" ,T(1.0),T(3.0),T( 1.0)),
1756 test_xy<T>(
"(x > y + y ? 7 : 9) == 9" ,T(1.0),T(3.0),T( 1.0)),
1757 test_xy<T>(
"(x + x > y ? 7 : 9) == 9" ,T(1.0),T(3.0),T( 1.0)),
1758 test_xy<T>(
"(x + x > y + 3 ? 7 : 9) == 9" ,T(1.0),T(3.0),T( 1.0)),
1759 test_xy<T>(
"(x < (y + y) ? 7 : 9) == 7" ,T(1.0),T(3.0),T( 1.0)),
1760 test_xy<T>(
"((x + x) < y ? 7 : 9) == 7" ,T(1.0),T(3.0),T( 1.0)),
1761 test_xy<T>(
"((x + x) < (y + y) ? 7 : 9) == 7",T(1.0),T(3.0),T( 1.0)),
1762 test_xy<T>(
"(x += 2 ) == 3 " ,T(1),T(3),T(1)),
1763 test_xy<T>(
"(x += 2y) == 7 " ,T(1),T(3),T(1)),
1764 test_xy<T>(
"(x -= 2 ) == -1 " ,T(1),T(3),T(1)),
1765 test_xy<T>(
"(x -= 2y) == -5 " ,T(1),T(3),T(1)),
1766 test_xy<T>(
"(x *= 2 ) == 2 " ,T(1),T(3),T(1)),
1767 test_xy<T>(
"(x *= 2y) == 6 " ,T(1),T(3),T(1)),
1768 test_xy<T>(
"(x /= 2 ) == (1/2)" ,T(1),T(3),T(1)),
1769 test_xy<T>(
"(x /= 2y) == (1/6)" ,T(1),T(3),T(1)),
1770 test_xy<T>(
"for(var i := 0; (i < 10);) { i += 1; }; x;" ,T(1),T(20),T( 1)),
1771 test_xy<T>(
"for(var i := 0; (i < 10) and (i != y); i+=2) { x += i; }; x;" ,T(1),T(20),T(21)),
1772 test_xy<T>(
"for(var i := 0; (i < 10) and (i != y);) { x += i; i+=2; }; x;",T(1),T(20),T(21)),
1773 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)),
1774 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)),
1775 test_xy<T>(
"var a := 2; (0 * a) == 0",T(0),T(0),T(1)),
1776 test_xy<T>(
"var a := 2; (0 / a) == 0",T(0),T(0),T(1)),
1777 test_xy<T>(
"var a := 2; (a * 0) == 0",T(0),T(0),T(1)),
1778 test_xy<T>(
"var a := 2; (a / 1) == a",T(0),T(0),T(1)),
1779 test_xy<T>(
"var a := 2; (0 + a) == a",T(0),T(0),T(1)),
1780 test_xy<T>(
"var a := 2; (a + 0) == a",T(0),T(0),T(1)),
1781 test_xy<T>(
"var a := 2; (1 * a) == a",T(0),T(0),T(1)),
1782 test_xy<T>(
"var a.b := 3; (2 * a.b ) == 6",T(0),T(0),T(1)),
1783 test_xy<T>(
"var aa.bb := 3; (2 * aa.bb ) == 6",T(0),T(0),T(1)),
1784 test_xy<T>(
"var aaa.bbb := 3; (2 * aAa.BbB) == 6",T(0),T(0),T(1)),
1785 test_xy<T>(
"var a1.b2 := 3; (2 * a1.b2 ) == 6",T(0),T(0),T(1))
1788 static const std::size_t test_list_size =
sizeof(test_list) /
sizeof(
test_xy<T>);
1790 const std::size_t
rounds = 60;
1792 for (std::size_t r = 0; r <
rounds; ++r)
1794 bool loop_result =
true;
1796 for (std::size_t i = 0; i < test_list_size; ++i)
1815 printf(
"run_test01() - Error: %s Expression: %s\n",
1816 parser.
error().c_str(),
1819 loop_result =
false;
1825 const T result = expression.
value();
1829 printf(
"run_test01() - Computation Error: Expression: [%s]\tExpected: %19.15f\tResult: %19.15f\n",
1831 static_cast<double>(test.
result),
1832 static_cast<double>(result));
1834 loop_result =
false;
1848 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 ))),
1849 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 ))),
1850 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 ))),
1851 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 ))),
1852 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)))),
1853 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)))),
1854 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)))),
1855 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)))),
1856 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))),
1857 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))),
1858 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))),
1859 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))),
1860 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))),
1861 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))),
1862 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))),
1863 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))),
1864 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))),
1865 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))),
1866 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))),
1867 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))),
1868 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))),
1869 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))),
1870 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))),
1871 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))),
1872 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))))),
1873 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))))),
1874 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))))),
1875 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))))),
1876 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))))),
1877 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))))),
1878 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))))),
1879 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))))),
1880 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))))),
1881 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))))),
1882 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))))),
1883 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))))),
1884 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))))),
1885 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))))),
1886 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))))),
1887 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))))),
1888 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)),
1889 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)),
1890 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)),
1891 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)),
1892 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)),
1893 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)),
1894 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)),
1895 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)),
1896 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)),
1897 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)),
1898 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)),
1899 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))
1902 static const std::size_t test_list_size =
sizeof(test_list) /
sizeof(
test_xyzw<T>);
1904 const std::size_t
rounds = 60;
1906 for (std::size_t r = 0; r <
rounds; ++r)
1908 bool loop_result =
true;
1909 for (std::size_t i = 0; i < test_list_size; ++i)
1914 symbol_table.add_variable(
"x",test.
x);
1915 symbol_table.add_variable(
"y",test.
y);
1916 symbol_table.add_variable(
"z",test.
z);
1917 symbol_table.add_variable(
"w",test.
w);
1927 printf(
"run_test01() - Error: %s Expression: %s\n",
1928 parser.
error().c_str(),
1931 loop_result =
false;
1937 const T result = expression.
value();
1941 printf(
"run_test01() - Computation Error: Expression: [%s]\tExpected: %19.15f\tResult: %19.15f\n",
1943 static_cast<double>(test.
result),
1944 static_cast<double>(result));
1946 loop_result =
false;
1958 const std::string expr_list[] =
1960 "((v[1] + x) == (x + v[1]))",
1961 "((v[0] += x) == x)",
1962 "((v[0] += x + y) == (x + y))",
1963 "((v[0] -= x) == -x)",
1964 "((v[0] -= (x + y)) == -(x + y))",
1965 "((v[1] + v[2]) == (v[3 - 1] + v[2 * 1/2]))",
1966 "(v[v[1]] == v[1])",
1967 "(v[1] += v[1]) == v[1 + 1]",
1968 "((v[i[1]] + x) == (x + v[i[1]]))",
1969 "((v[i[0]] += x) == x)",
1970 "((v[i[0]] += x + y) == (x + y))",
1971 "((v[i[0]] -= x) == -x)",
1972 "((v[i[0]] -= (x + y)) == -(x + y))",
1973 "((v[i[1]] + v[2]) == (v[i[3] - i[1]] + v[i[2] * 1/2]))",
1974 "(v[v[i[1]]] == v[i[1]])",
1975 "(v[i[1]] += v[i[1]]) == v[i[1] + 1]"
1978 const std::size_t expr_list_size =
sizeof(expr_list) /
sizeof(std::string);
1980 const std::size_t
rounds = 60;
1982 for (std::size_t r = 0; r <
rounds; ++r)
1984 bool loop_result =
true;
1986 for (std::size_t i = 0; i < expr_list_size; ++i)
1988 T v[] = { T(0.0), T(1.1), T(2.2), T(3.3), T(4.4), T(5.5) };
1989 T index[] = { T(0) , T(1) , T(2) , T(3) , T(4) , T(5) };
2008 if (!parser.
compile(expr_list[i],expression))
2010 printf(
"run_test01() - Error: %s Expression: %s\n",
2011 parser.
error().c_str(),
2012 expr_list[i].c_str());
2014 loop_result =
false;
2020 const T result = expression.
value();
2024 printf(
"run_test01() - Computation Error: Expression: [%s]\tExpected: %19.15f\tResult: %19.15f\n",
2025 expr_list[i].c_str(),
2026 static_cast<double>(1.0),
2027 static_cast<double>(result));
2029 loop_result =
false;
2039 for (std::size_t r = 0; r <
rounds; ++r)
2041 bool loop_result =
true;
2043 for (std::size_t i = 0; i < expr_list_size; ++i)
2045 T v_[] = { T(0.0), T(1.1), T(2.2), T(3.3), T(4.4), T(5.5) };
2046 T index_[] = { T(0) , T(1) , T(2) , T(3) , T(4) , T(5) };
2068 if (!parser.
compile(expr_list[i],expression))
2070 printf(
"run_test01() - Error: %s Expression: %s\n",
2071 parser.
error().c_str(),
2072 expr_list[i].c_str());
2074 loop_result =
false;
2080 const T result = expression.
value();
2084 printf(
"run_test01() - Computation Error: Expression: [%s]\tExpected: %19.15f\tResult: %19.15f\n",
2085 expr_list[i].c_str(),
2086 static_cast<double>(1.0),
2087 static_cast<double>(result));
2088 loop_result =
false;
3915 std::string i_s =
"A String";
3916 std::string j_s =
"Another String";
3917 std::string ii_s =
"A String";
3918 std::string jj_s =
"Another String";
3922 static inline bool variable(
exprtk::symbol_table<T>& symbol_table,
const std::string& variable_name,
const T& value)
3932 static inline bool string(
exprtk::symbol_table<T>& symbol_table,
const std::string& string_name,
const std::string& str)
3937 return (str_node->
ref() == str);
3944 static const std::size_t
rounds = 10;
3948 for (std::size_t r = 0; r <
rounds; ++r)
3957 printf(
"run_test10() - Symbol 'x' does not exist!\n");
3962 printf(
"run_test10() - Symbol 'y' does not exist!\n");
3967 printf(
"run_test10() - Symbol 'xx' does not exist!\n");
3972 printf(
"run_test10() - Symbol 'yy' does not exist!\n");
3975 else if (!test::variable(symbol_table,
"x", x))
3977 printf(
"run_test10() - Symbol 'x' value failure!\n");
3980 else if (!test::variable(symbol_table,
"y", y))
3982 printf(
"run_test10() - Symbol 'y' value failure!\n");
3985 else if (!test::variable(symbol_table,
"xx", xx))
3987 printf(
"run_test10() - Symbol 'xx' value failure!\n");
3990 else if (!test::variable(symbol_table,
"yy", yy))
3992 printf(
"run_test10() - Symbol 'yy' value failure!\n");
3998 printf(
"run_test10() - Failed to remove symbol 'x'!\n");
4003 printf(
"run_test10() - Failed to remove symbol 'y'!\n");
4008 printf(
"run_test10() - Failed to remove symbol 'xx'!\n");
4013 printf(
"run_test10() - Failed to remove symbol 'yy'!\n");
4018 for (std::size_t r = 0; r <
rounds; ++r)
4027 printf(
"run_test10() - function 'f' does not exist!\n");
4032 printf(
"run_test10() - function 'f1' does not exist!\n");
4038 printf(
"run_test10() - Failed to remove function 'f'!\n");
4043 printf(
"run_test10() - Failed to remove function 'f1'!\n");
4048 for (std::size_t r = 0; r <
rounds; ++r)
4058 printf(
"run_test10() - String 'i' does not exist!\n");
4063 printf(
"run_test10() - String 'j' does not exist!\n");
4068 printf(
"run_test10() - String 'ii' does not exist!\n");
4073 printf(
"run_test10() - String 'jj' does not exist!\n");
4076 else if (!test::string(symbol_table,
"i", i_s))
4078 printf(
"run_test10() - String 'i' value failure!\n");
4081 else if (!test::string(symbol_table,
"j", j_s))
4083 printf(
"run_test10() - String 'j' value failure!\n");
4086 else if (!test::string(symbol_table,
"ii", ii_s))
4088 printf(
"run_test10() - String 'ii' value failure!\n");
4091 else if (!test::string(symbol_table,
"jj", jj_s))
4093 printf(
"run_test10() - String 'jj' value failure!\n");
4098 printf(
"run_test10() - Failed to remove String 'i'!\n");
4103 printf(
"run_test10() - Failed to remove String 'j'!\n");
4108 printf(
"run_test10() - Failed to remove String 'ii'!\n");
4113 printf(
"run_test10() - Failed to remove String 'jj'!\n");
4118 for (std::size_t r = 0; r <
rounds; ++r)
4125 std::vector<std::string> expected_var_list;
4127 expected_var_list.push_back(
"x" );
4128 expected_var_list.push_back(
"y" );
4129 expected_var_list.push_back(
"xx");
4130 expected_var_list.push_back(
"yy");
4132 std::deque<std::pair<std::string, T> > variable_list;
4136 if (variable_list.size() != expected_var_list.size())
4138 printf(
"run_test10() - Failed to get variable list (1)\n");
4142 std::size_t found_count = 0;
4144 for (std::size_t i = 0; i < variable_list.size(); ++i)
4146 for (std::size_t j = 0; j < expected_var_list.size(); ++j)
4148 if (variable_list[i].first == expected_var_list[j])
4156 if (found_count != expected_var_list.size())
4158 printf(
"run_test10() - Failed to get variable list (2)\n");
4163 for (std::size_t r = 0; r <
rounds; ++r)
4170 std::vector<std::string> expected_var_list;
4172 expected_var_list.push_back(
"x" );
4173 expected_var_list.push_back(
"y" );
4174 expected_var_list.push_back(
"xx");
4175 expected_var_list.push_back(
"yy");
4177 std::deque<std::string> variable_list;
4181 if (variable_list.size() != expected_var_list.size())
4183 printf(
"run_test10() - Failed to get variable list (3)\n");
4187 std::size_t found_count = 0;
4189 for (std::size_t i = 0; i < variable_list.size(); ++i)
4191 for (std::size_t j = 0; j < expected_var_list.size(); ++j)
4193 if (variable_list[i] == expected_var_list[j])
4201 if (found_count != expected_var_list.size())
4203 printf(
"run_test10() - Failed to get variable list (4)\n");
4208 for (std::size_t r = 0; r <
rounds; ++r)
4215 std::vector<std::string> expected_var_list;
4217 expected_var_list.push_back(
"i" );
4218 expected_var_list.push_back(
"j" );
4219 expected_var_list.push_back(
"ii");
4220 expected_var_list.push_back(
"jj");
4222 std::deque<std::pair<std::string, std::string> > stringvar_list;
4226 if (stringvar_list.size() != expected_var_list.size())
4228 printf(
"run_test10() - Failed to get stringvar list (1)\n");
4232 std::size_t found_count = 0;
4234 for (std::size_t i = 0; i < stringvar_list.size(); ++i)
4236 for (std::size_t j = 0; j < expected_var_list.size(); ++j)
4238 if (stringvar_list[i].first == expected_var_list[j])
4246 if (found_count != expected_var_list.size())
4248 printf(
"run_test10() - Failed to get stringvar list (2)\n");
4253 for (std::size_t r = 0; r <
rounds; ++r)
4260 std::vector<std::string> expected_var_list;
4262 expected_var_list.push_back(
"i" );
4263 expected_var_list.push_back(
"j" );
4264 expected_var_list.push_back(
"ii");
4265 expected_var_list.push_back(
"jj");
4267 std::deque<std::string> stringvar_list;
4271 if (stringvar_list.size() != expected_var_list.size())
4273 printf(
"run_test10() - Failed to get stringvar list (3.0)\n");
4279 printf(
"run_test10() - Failed to get stringvar list (3.1)\n");
4283 std::size_t found_count = 0;
4285 for (std::size_t i = 0; i < stringvar_list.size(); ++i)
4287 for (std::size_t j = 0; j < expected_var_list.size(); ++j)
4289 if (stringvar_list[i] == expected_var_list[j])
4297 if (found_count != expected_var_list.size())
4299 printf(
"run_test10() - Failed to get stringvar list (4)\n");
4310 std::string expression_string =
"(x0 + y0) / z0";
4312 static const std::size_t
rounds = 100;
4314 for (std::size_t i = 0; i <
rounds; ++i)
4316 expression_t expression0;
4328 expression0.register_symbol_table(st0);
4333 if (!parser.
compile(expression_string,expression0))
4335 printf(
"run_test10() - Error: %s Expression: %s\n",
4336 parser.
error().c_str(),
4337 expression_string.c_str());
4344 expression_t expression1;
4346 expression1.register_symbol_table(st1);
4351 if (!parser.
compile(expression_string,expression1))
4353 printf(
"run_test10() - Error: %s Expression: %s\n",
4354 parser.
error().c_str(),
4355 expression_string.c_str());
4374 std::string e =
"string";
4384 expression_t expression;
4385 expression.register_symbol_table(symbol_table);
4387 std::string expression_string =
"(E == '1234') and (sin(a) + C) / b";
4390 typedef typename parser_t::dependent_entity_collector::symbol_t symbol_t;
4392 std::deque<symbol_t> symbol_list;
4398 parser.dec().collect_functions() =
true;
4400 if (!parser.compile(expression_string,expression))
4402 printf(
"run_test10() - Error: %s Expression: %s\n",
4403 parser.error().c_str(),
4404 expression_string.c_str());
4409 parser.dec().symbols(symbol_list);
4412 std::deque<symbol_t> expected_symbol_list;
4414 expected_symbol_list.push_back(symbol_t(
"a" ,parser_t::e_st_variable));
4415 expected_symbol_list.push_back(symbol_t(
"b" ,parser_t::e_st_variable));
4416 expected_symbol_list.push_back(symbol_t(
"c" ,parser_t::e_st_variable));
4417 expected_symbol_list.push_back(symbol_t(
"e" ,parser_t::e_st_string ));
4418 expected_symbol_list.push_back(symbol_t(
"sin",parser_t::e_st_function));
4420 bool result = (symbol_list.size() == expected_symbol_list.size()) &&
4421 std::equal(symbol_list.begin(),
4423 expected_symbol_list.begin());
4426 printf(
"run_test10() - Failed variable list comparison.(5)\n");
4437 std::string e =
"string";
4447 expression_t expression;
4448 expression.register_symbol_table(symbol_table);
4450 const std::string expression_string =
4457 typedef typename parser_t::dependent_entity_collector::symbol_t symbol_t;
4459 std::deque<symbol_t> variable_list;
4466 if (!parser.compile(expression_string,expression))
4468 printf(
"run_test10() - Error: %s Expression: %s\n",
4469 parser.error().c_str(),
4470 expression_string.c_str());
4475 parser.dec().assignment_symbols(variable_list);
4478 std::deque<symbol_t> expected_assignment_list;
4480 expected_assignment_list.push_back(symbol_t(
"a",parser_t::e_st_variable));
4481 expected_assignment_list.push_back(symbol_t(
"b",parser_t::e_st_variable));
4482 expected_assignment_list.push_back(symbol_t(
"c",parser_t::e_st_variable));
4483 expected_assignment_list.push_back(symbol_t(
"e",parser_t::e_st_string ));
4485 bool result = (variable_list.size() == expected_assignment_list.size()) &&
4486 std::equal(variable_list.begin(),
4487 variable_list.end(),
4488 expected_assignment_list.begin());
4491 printf(
"run_test10() - Failed variable list comparison.(6)\n");
4500 if (symbol_table0 == symbol_table1)
4502 printf(
"run_test10() - Error symbol_table0 and symbol_table1 are equal\n");
4506 symbol_table0 = symbol_table1;
4507 symbol_table1 = symbol_table0;
4509 if (!(symbol_table0 == symbol_table1))
4511 printf(
"run_test10() - Error symbol_table0 and symbol_table1 are not equal\n");
4522 std::string e =
"a string";
4526 expression_t expression;
4528 for (std::size_t i = 0; i < 10000; ++i)
4530 symbol_table0.
clear();
4531 symbol_table1.
clear();
4547 expression.register_symbol_table(symbol_table0);
4548 expression.register_symbol_table(symbol_table1);
4553 const std::string expression =
4554 "for (var i := 0; i < min(x[],y[],z[]); i += 1)"
4555 "{ z[i] := 3sin(x[i]) + 2log(y[i]); }";
4557 std::vector<std::string> var_symbol_list;
4558 std::vector<std::string> func_symbol_list;
4562 printf(
"run_test10() - Failed to collect variables.\n");
4568 printf(
"run_test10() - Failed to collect functions.\n");
4572 std::sort(var_symbol_list .begin(), var_symbol_list .end());
4573 std::sort(func_symbol_list.begin(), func_symbol_list.end());
4575 std::vector<std::string> expected_var_symbol_list;
4576 std::vector<std::string> expected_func_symbol_list;
4578 expected_var_symbol_list.push_back(
"i");
4579 expected_var_symbol_list.push_back(
"x");
4580 expected_var_symbol_list.push_back(
"y");
4581 expected_var_symbol_list.push_back(
"z");
4583 expected_func_symbol_list.push_back(
"log");
4584 expected_func_symbol_list.push_back(
"min");
4585 expected_func_symbol_list.push_back(
"sin");
4587 const bool var_result = (var_symbol_list.size() == expected_var_symbol_list.size()) &&
4588 std::equal(var_symbol_list.begin(),
4589 var_symbol_list.end(),
4590 expected_var_symbol_list.begin());
4593 printf(
"run_test10() - Failed collected variable comparison between received and expected variables\n");
4597 const bool func_result = (func_symbol_list.size() == expected_func_symbol_list.size()) &&
4598 std::equal(func_symbol_list.begin(),
4599 func_symbol_list.end(),
4600 expected_func_symbol_list.begin());
4603 printf(
"run_test10() - Failed collected functions comparison between received and expected functions\n");
4613 "var x:= 1; x - -1 == 2",
4614 "var x:= 1; x --1 == 2",
4615 "var x:= 1; x-- 1 == 2",
4616 "var x:= 1; x--1 == 2",
4617 "var x:= 1; x -- -1== 0",
4618 "var x:= 1; x + -1 == 0",
4619 "var x:= 1; x +-1 == 0",
4620 "var x:= 1; x+- 1 == 0",
4621 "var x:= 1; x+-1 == 0",
4622 "var x:= 1; x +- -1== 2",
4623 "var x:= 1; x + +1 == 2",
4624 "var x:= 1; x ++1 == 2",
4625 "var x:= 1; 1 - -x == 2",
4626 "var x:= 1; 1 --x == 2",
4627 "var x:= 1; 1-- x == 2",
4628 "var x:= 1; 1--x == 2",
4629 "var x:= 1; 1 -- -x== 0",
4630 "var x:= 1; 1 + -x == 0",
4631 "var x:= 1; 1 +-x == 0",
4632 "var x:= 1; 1+- x == 0",
4633 "var x:= 1; 1+-x == 0",
4634 "var x:= 1; 1 +- -x== 2",
4635 "var x:= 1; 1 + +x == 2",
4636 "var x:= 1; 1 ++x == 2",
4637 "var x:= 1; (x - -1 + 1) == 3",
4638 "var x:= 1; (x --1 + 1) == 3",
4639 "var x:= 1; (x-- 1 + 1) == 3",
4640 "var x:= 1; (x--1 + 1) == 3",
4641 "var x:= 1; (x -- -1 + 1) == 1",
4642 "var x:= 1; (x + -1 + 1) == 1",
4643 "var x:= 1; (x +-1 + 1) == 1",
4644 "var x:= 1; (x+- 1 + 1) == 1",
4645 "var x:= 1; (x+-1 + 1) == 1",
4646 "var x:= 1; (x +- -1 + 1) == 3",
4647 "var x:= 1; (x + +1 + 1) == 3",
4648 "var x:= 1; (x ++1 + 1) == 3",
4649 "var x:= 1; (1 - -x + 1) == 3",
4650 "var x:= 1; (1 --x + 1) == 3",
4651 "var x:= 1; (1-- x + 1) == 3",
4652 "var x:= 1; (1--x + 1) == 3",
4653 "var x:= 1; (1 -- -x + 1) == 1",
4654 "var x:= 1; (1 + -x + 1) == 1",
4655 "var x:= 1; (1 +-x + 1) == 1",
4656 "var x:= 1; (1+- x + 1) == 1",
4657 "var x:= 1; (1+-x + 1) == 1",
4658 "var x:= 1; (1 +- -x + 1) == 3",
4659 "var x:= 1; (1 + +x + 1) == 3",
4660 "var x:= 1; (1 ++x + 1) == 3",
4661 "var x:= 1; (x - -1 - 1) == 1",
4662 "var x:= 1; (x --1 - 1) == 1",
4663 "var x:= 1; (x-- 1 - 1) == 1",
4664 "var x:= 1; (x--1 - 1) == 1",
4665 "var x:= 1; (x -- -1 - 1) == -1",
4666 "var x:= 1; (x + -1 - 1) == -1",
4667 "var x:= 1; (x +-1 - 1) == -1",
4668 "var x:= 1; (x+- 1 - 1) == -1",
4669 "var x:= 1; (x+-1 - 1) == -1",
4670 "var x:= 1; (x +- -1 - 1) == 1",
4671 "var x:= 1; (x + +1 - 1) == 1",
4672 "var x:= 1; (x ++1 - 1) == 1",
4673 "var x:= 1; (1 - -x - 1) == 1",
4674 "var x:= 1; (1 --x - 1) == 1",
4675 "var x:= 1; (1-- x - 1) == 1",
4676 "var x:= 1; (1--x - 1) == 1",
4677 "var x:= 1; (1 -- -x - 1) == -1",
4678 "var x:= 1; (1 + -x - 1) == -1",
4679 "var x:= 1; (1 +-x - 1) == -1",
4680 "var x:= 1; (1+- x - 1) == -1",
4681 "var x:= 1; (1+-x - 1) == -1",
4682 "var x:= 1; (1 +- -x - 1) == 1",
4683 "var x:= 1; (1 + +x - 1) == 1",
4684 "var x:= 1; (1 ++x - 1) == 1",
4685 "var x := 1; var y := 2; 1",
4686 "var x := 1; var y := 2; x",
4687 "var x:=6; var y:=4; x + -3 == 3",
4688 "var x:=6; var y:=4; x - -3 == 9",
4689 "var x:=6; var y:=4; x * -3 == -18",
4690 "var x:=6; var y:=4; x / -3 == -2",
4691 "var x:=6; var y:=4; -x + -3 == -9",
4692 "var x:=6; var y:=4; -x - -3 == -3",
4693 "var x:=6; var y:=4; -x * -3 == 18",
4694 "var x:=6; var y:=4; -x / -3 == 2",
4695 "var x:=6; var y:=4; -3 + -x == -9",
4696 "var x:=6; var y:=4; -3 - -x == 3",
4697 "var x:=6; var y:=4; -3 * -x == 18",
4698 "var x:=6; var y:=4; -3 / -x == 0.5",
4699 "var x:=6; var y:=4; 3 + -x == -3",
4700 "var x:=6; var y:=4; 3 - -x == 9",
4701 "var x:=6; var y:=4; 3 * -x == -18",
4702 "var x:=6; var y:=4; 3 / -x == -0.5",
4703 "var x := 3; var y := 6; x + -y == -3",
4704 "var x := 3; var y := 6; x - -y == 9",
4705 "var x := 3; var y := 6; -x + -y == -9",
4706 "var x := 3; var y := 6; -x - -y == 3",
4707 "var x := 3; var y := 6; -x * -y == 18",
4708 "var x := 6; var y := 3; -x / -y == 2",
4709 "var x := 3; var y := 6; -(-x * -y) == -18",
4710 "var x := 6; var y := 3; -(-x / -y) == -2",
4711 "var x:=1; 2+(3+abs(x)) == 6 ",
4712 "var x:=1; (3+abs(x))+2 == 6 ",
4713 "var x:=1; 2+(abs(x)+3) == 6 ",
4714 "var x:=1; (abs(x)+3)+2 == 6 ",
4715 "var x:=1; 2+(3-abs(x)) == 4 ",
4716 "var x:=1; (3-abs(x))+2 == 4 ",
4717 "var x:=1; 2+(abs(x)-3) == 0 ",
4718 "var x:=1; (abs(x)-3)+2 == 0 ",
4719 "var x:=1; 2-(3+abs(x)) == -2 ",
4720 "var x:=1; (3+abs(x))-2 == 2 ",
4721 "var x:=1; 2-(abs(x)+3) == -2 ",
4722 "var x:=1; (abs(x)+3)-2 == 2 ",
4723 "var x:=1; 2*(3*abs(x)) == 6 ",
4724 "var x:=1; (3*abs(x))*2 == 6 ",
4725 "var x:=1; 2*(abs(x)*3) == 6 ",
4726 "var x:=1; (abs(x)*3)*2 == 6 ",
4727 "var x:=1; 2*(3/abs(x)) == 6 ",
4728 "var x:=1; (3/abs(x))*2 == 6 ",
4729 "var x:=1; 2*(abs(x)/3) == (2/3)",
4730 "var x:=1; (abs(x)/3)*2 == (2/3)",
4731 "var x:=1; 2/(3*abs(x)) == (2/3)",
4732 "var x:=1; (3*abs(x))/2 == (3/2)",
4733 "var x:=1; 2/(abs(x)*3) == (2/3)",
4734 "var x:=1; (abs(x)*3)/2 == (3/2)",
4735 "var x:=1; 2/(3/abs(x)) == (2/3)",
4736 "var x:=1; (3/abs(x))/2 == (3/2)",
4737 "var x:=1; 2/(abs(x)/3) == 6 ",
4738 "var x:=1; (abs(x)/3)/2 == (1/6)",
4739 "var x:=3; var y:=6; -(-x)*-(-y) == 18",
4740 "var x:=3; var y:=6; -(-x)*-(-(-y)) == -18",
4741 "var x:=3; var y:=6; -(-(-x))*-(-y) == -18",
4742 "var x:=3; var y:=6; -(-(-x))*-(-(-y)) == 18",
4743 "var x:=3; var y:=6; -(-(x+y))*-(-(y+x)) == 81",
4744 "var x:=3; var y:=6; -(-(-(x+y)))*-(-(y+x)) == -81",
4745 "var x:=3; var y:=6; -(-(x+y))*-(-(-(y+x))) == -81",
4746 "var x:=3; var y:=6; -(-(-(x+y)))*-(-(-(y+x))) == 81",
4747 "var x:= 2; var y := 3; (-abs(x)+-abs(y)) == -5 ",
4748 "var x:= 2; var y := 3; (-abs(x)--abs(y)) == 1 ",
4749 "var x:= 2; var y := 3; (-abs(x)*-abs(y)) == 6 ",
4750 "var x:= 2; var y := 3; (-abs(x)/-abs(y)) == (2/3) ",
4751 "var x:= 2; var y := 3; (-abs(x)+abs(y)) == 1 ",
4752 "var x:= 2; var y := 3; (-abs(x)-abs(y)) == -5 ",
4753 "var x:= 2; var y := 3; (-abs(x)*abs(y)) == -6 ",
4754 "var x:= 2; var y := 3; (-abs(x)/abs(y)) == -(2/3) ",
4755 "var x:= 2; var y := 3; (abs(x)+-abs(y)) == -1 ",
4756 "var x:= 2; var y := 3; (abs(x)--abs(y)) == 5 ",
4757 "var x:= 2; var y := 3; (abs(x)*-abs(y)) == -6 ",
4758 "var x:= 2; var y := 3; (abs(x)/-abs(y)) == -(2/3) ",
4759 "var x:= 2; var y := 3; (-abs(x + 0)+-abs(y - 0)) == -5 ",
4760 "var x:= 2; var y := 3; (-abs(x + 0)--abs(y - 0)) == 1 ",
4761 "var x:= 2; var y := 3; (-abs(x + 0)*-abs(y - 0)) == 6 ",
4762 "var x:= 2; var y := 3; (-abs(x + 0)/-abs(y - 0)) == (2/3) ",
4763 "var x:= 2; var y := 3; (-abs(x + 0)+abs(y - 0)) == 1 ",
4764 "var x:= 2; var y := 3; (-abs(x + 0)-abs(y - 0)) == -5 ",
4765 "var x:= 2; var y := 3; (-abs(x + 0)*abs(y - 0)) == -6 ",
4766 "var x:= 2; var y := 3; (-abs(x + 0)/abs(y - 0)) == -(2/3) ",
4767 "var x:= 2; var y := 3; (abs(x + 0)+-abs(y - 0)) == -1 ",
4768 "var x:= 2; var y := 3; (abs(x + 0)--abs(y - 0)) == 5 ",
4769 "var x:= 2; var y := 3; (abs(x + 0)*-abs(y - 0)) == -6 ",
4770 "var x:= 2; var y := 3; (abs(x + 0)/-abs(y - 0)) == -(2/3) ",
4771 "var x := 1; var y := 2; swap(x,y); (x == 2) and (y == 1)",
4772 "var x := 1; var y := 2; x <=> y ; (x == 2) and (y == 1)",
4773 "var x := 'abc'; x == 'abc' ",
4774 "var x := 'abc'; var y := '123'; x != y ",
4775 "var x := 'abc'; var y := x + '123'; y == 'abc123' ",
4776 "var x := 'abc'; var y := '123' + x; y == '123abc' ",
4777 "~{var x := '123'; x[]} + ~{var x := '1234'; x[]} == 7",
4778 "~{var x := '123'; x[]} + ~{~{var x := '1234'; x[]}} == 7",
4779 "~{~{var x := '123'; x[]}} + ~{var x := '1234'; x[]} == 7",
4780 "~{var x := '123'; x[]} + ~{var x := 4} == 7",
4781 "~{var x := 3} + ~{var x := '1234'; x[]} == 7",
4782 "~{var x := '123'; x[]} + ~{~{var x := 4}} == 7",
4783 "~{~{var x := 3}} + ~{var x := '1234'; x[]} == 7",
4784 "var v[2] := {1,2}; swap(v[0],v[1]); (v[0] == 2) and (v[1] == 1)",
4785 "var v[2] := {1,2}; v[0] <=> v[1] ; (v[0] == 2) and (v[1] == 1)",
4786 "var x := 1; var y := 2; ~(swap(x,y),(x == 2) and (y == 1))",
4787 "var x := 1; var y := 2; ~(x <=> y , (x == 2) and (y == 1))",
4788 "var v[2] := {1,2}; ~(swap(v[0],v[1]), (v[0] == 2) and (v[1] == 1))",
4789 "var v[2] := {1,2}; ~(v[0] <=> v[1] , (v[0] == 2) and (v[1] == 1))",
4790 "var v[2] := {1,2}; swap(v[zero],v[one]); (v[zero] == 2) and (v[one] == 1)",
4791 "var v[2] := {1,2}; v[zero] <=> v[one] ; (v[zero] == 2) and (v[one] == 1)",
4792 "var v[2] := {1,2}; ~(swap(v[zero],v[one]), (v[zero] == 2) and (v[one] == 1))",
4793 "var v[2] := {1,2}; ~(v[zero] <=> v[one] , (v[zero] == 2) and (v[one] == 1))",
4794 "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)",
4795 "var v[2] := {1,2}; v[2 * zero] <=> v[(2*one)/(1+1)] ; (v[2 * zero] == 2) and (v[(2 * one) / (1 + 1)] == 1)",
4796 "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))",
4797 "var v[2] := {1,2}; ~(v[2 * zero] <=> v[(2 * one) / (1 + 1)] , (v[2 * zero] == 2) and (v[(2 * one) / (1 + 1)] == 1))",
4798 "var x := 1; var y := 2; var v[2] := {3,4}; swap(x,v[0]); swap(v[1],y); (x == 3) and (y == 4)",
4799 "var x := 1; var y := 2; var v[2] := {3,4}; x <=> v[0]; v[1] <=> y; (x == 3) and (y == 4)",
4800 "var x := 1; var y := 2; var v[2] := {3,4}; swap(x,v[zero]); swap(v[one],y); (x == 3) and (y == 4)",
4801 "var x := 1; var y := 2; var v[2] := {3,4}; x <=> v[zero]; v[one] <=> y; (x == 3) and (y == 4)",
4802 "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)",
4803 "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)",
4804 "~{ var x := 1 } + ~{ var x := 2 } == 3",
4805 "(~{ var x := 1 } + ~{ var x := 2 }) == (~{ var x := 2 } + ~{ var x := 1 })",
4806 "(~{ var x := 1 } + ~{ var x := 2 } + ~{~{ var x := 1 } + ~{ var x := 2 }}) == 6",
4807 "(~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{~{ var x[1] := [1] } + ~{ var x[1] := [2] }}) == 6",
4808 "(~{ var x := [1] } + ~{ var x[1] := [2] } + ~{~{ var x[1] := [1] } + ~{ var x[1] := [2] }}) == 6",
4809 "(~{ var x[1] := [1] } + ~{ var x := [2] } + ~{~{ var x[1] := [1] } + ~{ var x[1] := [2] }}) == 6",
4810 "(~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{~{ var x := [1] } + ~{ var x[1] := [2] }}) == 6",
4811 "(~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{~{ var x[1] := [1] } + ~{ var x := [2] }}) == 6",
4812 "(~{~{ var x[1] := [1] } + ~{ var x[1] := [2] }} + ~{ var x[1] := [1] } + ~{ var x[1] := [2] }) == 6",
4813 "(~{~{ var x := [1] } + ~{ var x[1] := [2] }} + ~{ var x[1] := [1] } + ~{ var x[1] := [2] }) == 6",
4814 "(~{~{ var x[1] := [1] } + ~{ var x := [2] }} + ~{ var x[1] := [1] } + ~{ var x[1] := [2] }) == 6",
4815 "(~{~{ var x[1] := [1] } + ~{ var x[1] := [2] }} + ~{ var x := [1] } + ~{ var x[1] := [2] }) == 6",
4816 "(~{~{ var x[1] := [1] } + ~{ var x[1] := [2] }} + ~{ var x[1] := [1] } + ~{ var x := [2] }) == 6",
4817 "(~{~{ var x[1] := [1] }} + ~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{{ var x[1] := [2] }}) == 6",
4818 "(~{~{ var x := [1] }} + ~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{{ var x[1] := [2] }}) == 6",
4819 "(~{~{ var x[1] := [1] }} + ~{ var x := [1] } + ~{ var x[1] := [2] } + ~{{ var x[1] := [2] }}) == 6",
4820 "(~{~{ var x[1] := [1] }} + ~{ var x[1] := [1] } + ~{ var x := [2] } + ~{{ var x[1] := [2] }}) == 6",
4821 "(~{~{ var x[1] := [1] }} + ~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{{ var x := [2] }}) == 6",
4822 "(~{~{~{var x[1] := [1]}}} + ~{~{var x[1] := [2]}} + ~{var x[1] := [3]}) == 6",
4823 "(~{var x[1] := [1]} + ~{~{var x[1] := [2]}} + ~{~{~{var x[1] := [3]}}}) == 6",
4824 "(~{ var x[3] := [1] } + ~{ var x[6] := {6,5,4,3,2,1}}) == 7",
4825 "(~{ var x[6] := {6,5,4,3,2,1} } + ~{ var x := 1 }) == 7",
4826 "(~{ var x := 1 } + ~{ var x[6] := {6,5,4,3,2,1} }) == 7",
4827 "var x[3] := {}; (x[0] == 0) and (x[1] == 0) and (x[2] == 0)",
4828 "var x[3] := {1,2}; (x[0] == 1) and (x[1] == 2) and (x[2] == 0)",
4829 "var x[3] := {1,2,3}; (x[0] == 1) and (x[1] == 2) and (x[2] == 3)",
4830 "var x[3] := [1]; (x[0] == 1) and (x[1] == 1) and (x[2] == 1)",
4831 "var v[3] := [1]; v += 1; (v[0] == v[1]) and (v[0] == v[2]) and (v[0] == 2)",
4832 "var v[3] := [1]; v -= 1; (v[0] == v[1]) and (v[0] == v[2]) and (v[0] == 0)",
4833 "var v[3] := [1]; v *= 2; (v[0] == v[1]) and (v[0] == v[2]) and (v[0] == 2)",
4834 "var v[3] := [3]; v /= 3; (v[0] == v[1]) and (v[0] == v[2]) and (v[0] == 1)",
4835 "var v[3] := {1,2, 3}; v += 1; (v[0] == 2) and (v[1] == 3) and (v[2] == 4)",
4836 "var v[3] := {1,2, 3}; v -= 1; (v[0] == 0) and (v[1] == 1) and (v[2] == 2)",
4837 "var v[3] := {1,2, 3}; v *= 2; (v[0] == 2) and (v[1] == 4) and (v[2] == 6)",
4838 "var v[3] := {3,9,15}; v /= 3; (v[0] == 1) and (v[1] == 3) and (v[2] == 5)",
4839 "var v0[3] := [1]; var v1[3] := [1]; v0 += v1; (v0[0] == v0[1]) and (v0[0] == v0[2]) and (v0[0] == 2)",
4840 "var v0[3] := [1]; var v1[3] := [1]; v0 -= v1; (v0[0] == v0[1]) and (v0[0] == v0[2]) and (v0[0] == 0)",
4841 "var v0[3] := [1]; var v1[3] := [2]; v0 *= v1; (v0[0] == v0[1]) and (v0[0] == v0[2]) and (v0[0] == 2)",
4842 "var v0[3] := [3]; var v1[3] := [3]; v0 /= v1; (v0[0] == v0[1]) and (v0[0] == v0[2]) and (v0[0] == 1)",
4843 "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)",
4844 "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)",
4845 "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)",
4846 "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)",
4847 "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])",
4848 "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])",
4849 "var x[3] := {}; var y[2] := {1,2}; x := y; (x[0] == y[0]) and (x[1] == y[1]) and (x[2] == 0)",
4850 "var x[3] := {}; var y[1] := {1}; x := y; (x[0] == y[0]) and (x[1] == 0) and (x[2] == 0)",
4851 "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])",
4852 "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])",
4853 "var x[3] := {}; var y[2] := {1,2}; x := (y+=1); (x[0] == y[0]) and (x[1] == y[1]) and (x[2] == 0)",
4854 "var x[3] := {}; var y[1] := {1}; x := (y+=1); (x[0] == y[0]) and (x[1] == 0) and (x[2] == 0)",
4855 "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])",
4856 "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])",
4857 "var x[3] := {}; var y[2] := {1,2}; x += (y+=1); (x[0] == y[0]) ",
4858 "var x[3] := {}; var y[2] := {1,2}; x += (y+=1); (x[0] == y[0]) and (x[1] == y[1]) ",
4859 "var x[3] := {}; var y[2] := {1,2}; x += (y+=1); (x[0] == y[0]) and (x[1] == y[1]) and (x[2] == 0)",
4860 "var x[3] := {}; var y[1] := {1}; x += (y+=1); (x[0] == y[0]) ",
4861 "var x[3] := {}; var y[1] := {1}; x += (y+=1); (x[0] == y[0]) and (x[1] == 0) ",
4862 "var x[3] := {}; var y[1] := {1}; x += (y+=1); (x[0] == y[0]) and (x[1] == 0) and (x[2] == 0)",
4863 "var x[3] := [9]; var y[4] := {1,2,3,4}; x <=> y; (x[0] == 1) and (x[1] == 2) and (x[2] == 3)",
4864 "var x[3] := [9]; var y[3] := {1,2,3}; x <=> y; (x[0] == 1) and (x[1] == 2) and (x[2] == 3)",
4865 "var x[3] := [9]; var y[2] := {1,2}; x <=> y; (x[0] == 1) and (x[1] == 2) and (x[2] == 9)",
4866 "var x[3] := [9]; var y[1] := {1}; x <=> y; (x[0] == 1) and (x[1] == 9) and (x[2] == 9)",
4867 "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)",
4868 "var x[3] := [9]; var y[3] := {1,2,3}; x <=> (y += 1); (x[0] == 2) and (x[1] == 3) and (x[2] == 4)",
4869 "var x[3] := [9]; var y[2] := {1,2}; x <=> (y += 1); (x[0] == 2) and (x[1] == 3) and (x[2] == 9)",
4870 "var x[3] := [9]; var y[1] := {1}; x <=> (y += 1); (x[0] == 2) and (x[1] == 9) and (x[2] == 9)",
4871 "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)",
4872 "var x[3] := [8]; var y[3] := {1,2,3}; (x += 1) <=> y; (x[0] == 1) and (x[1] == 2) and (x[2] == 3)",
4873 "var x[3] := [8]; var y[2] := {1,2}; (x += 1) <=> y; (x[0] == 1) and (x[1] == 2) and (x[2] == 9)",
4874 "var x[3] := [8]; var y[1] := {1}; (x += 1) <=> y; (x[0] == 1) and (x[1] == 9) and (x[2] == 9)",
4875 "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)",
4876 "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)",
4877 "var x[3] := [8]; var y[2] := {1,2}; (x += 1) <=> (y += 1); (x[0] == 2) and (x[1] == 3) and (x[2] == 9)",
4878 "var x[3] := [8]; var y[1] := {1}; (x += 1) <=> (y += 1); (x[0] == 2) and (x[1] == 9) and (x[2] == 9)",
4879 "var x[3] := [0]; var y[4] := {1,2,3,4}; X < y",
4880 "var x[3] := [0]; var y[3] := {1,2,3}; x < Y",
4881 "var x[3] := [0]; var y[2] := {1,2}; X < y",
4882 "var x[3] := [0]; var y[1] := {1}; x < Y",
4883 "var x[3] := [0]; var y[4] := {1,2,3,4}; x <= y",
4884 "var x[3] := [0]; var y[3] := {1,2,3}; x <= y",
4885 "var x[3] := [0]; var y[2] := {1,2}; x <= y",
4886 "var x[3] := [0]; var y[1] := {1}; x <= y",
4887 "var x[3] := [5]; var y[4] := {1,2,3,4}; x > y",
4888 "var x[3] := [5]; var y[3] := {1,2,3}; x > y",
4889 "var x[3] := [5]; var y[2] := {1,2}; x > y",
4890 "var x[3] := [5]; var y[1] := {1}; x > y",
4891 "var x[3] := [5]; var y[4] := {1,2,3,4}; x >= y",
4892 "var x[3] := [5]; var y[3] := {1,2,3}; x >= y",
4893 "var x[3] := [5]; var y[2] := {1,2}; x >= y",
4894 "var x[3] := [5]; var y[1] := {1}; x >= y",
4895 "var x[3] := [1]; var y[4] := [1]; x == y",
4896 "var x[3] := [1]; var y[3] := [1]; x == y",
4897 "var x[3] := [1]; var y[2] := [1]; x == y",
4898 "var x[3] := [1]; var y[1] := [1]; x == y",
4899 "var x[3] := [1]; var y[4] := [2]; x != y",
4900 "var x[3] := [1]; var y[3] := [2]; x != y",
4901 "var x[3] := [1]; var y[2] := [2]; x != y",
4902 "var x[3] := [1]; var y[1] := [2]; x != y",
4903 "var x[3] := [0]; var y[4] := {5,6,7,8}; (x += 1) < y",
4904 "var x[3] := [0]; var y[3] := {5,6,7}; (x += 1) < y",
4905 "var x[3] := [0]; var y[2] := {5,6}; (x += 1) < y",
4906 "var x[3] := [0]; var y[1] := {5}; (x += 1) < y",
4907 "var x[3] := [0]; var y[4] := {1,2,3,4}; x < (y += 1)",
4908 "var x[3] := [0]; var y[3] := {1,2,3}; x < (y += 1)",
4909 "var x[3] := [0]; var y[2] := {1,2}; x < (y += 1)",
4910 "var x[3] := [0]; var y[1] := {1}; x < (y += 1)",
4911 "var x[3] := [0]; var y[4] := {5,6,7,8}; (x += 1) < (y += 1)",
4912 "var x[3] := [0]; var y[3] := {5,6,7}; (x += 1) < (y += 1)",
4913 "var x[3] := [0]; var y[2] := {5,6}; (x += 1) < (y += 1)",
4914 "var x[3] := [0]; var y[1] := {5}; (x += 1) < (y += 1)",
4915 "var x[3] := {1,2,3}; var y := 5; x < y ",
4916 "var x[3] := {1,2,3}; var y := 3; x < y + 1 ",
4917 "var x[3] := {1,2,3}; var y := 5; x <= y ",
4918 "var x[3] := {1,2,3}; var y := 3; x <= y + 1",
4919 "var x[3] := {1,1,1}; var y := 1; x == y ",
4920 "var x[3] := {1,1,1}; var y := 2; x == y - 1",
4921 "var x[3] := {1,2,3}; var y := 5; y > x ",
4922 "var x[3] := {1,2,3}; var y := 3; y >= x ",
4923 "var x[3] := {1,2,3}; var y := 5; y + 1 > x ",
4924 "var x[3] := {1,1,1}; var y := 1; y == x ",
4925 "var x[3] := {1,1,1}; var y := 2; y - 1 == x",
4926 "var x[3] := {1,2,3}; var y := 5; equal(true,(x += 1) < y) ",
4927 "var x[3] := {1,2,3}; var y := 3; equal(true,(x -= 1) < y + 1)",
4928 "var x[3] := {1,2,3}; var y := 5; equal(true,(x -= 1) <= y) ",
4929 "var x[3] := {2,2,2}; var y := 1; (x -= 1) == y ",
4930 "var x[3] := {1,2,3}; var y := 5; y > (x += 1) ",
4931 "var x[3] := {1,2,3}; var y := 5; y + 1 > (x += 1) ",
4932 "var x[3] := {2,2,2}; var y := 1; y == (x -= 1) ",
4933 "var x[3] := {2,2,2}; var y := 0; y + 1 == (x -= 1)",
4934 "var x[3] := [1]; var y[4] := {1,2,3,4}; var z[3] := [1]; z := (x + y); z == (x + y)",
4935 "var x[3] := [1]; var y[3] := {1,2,3}; var z[3] := [1]; z := (x - y); z == (x - y)",
4936 "var x[3] := [1]; var y[2] := {1,2}; var z[3] := [1]; z := (x / y); z == (x / y)",
4937 "var x[3] := [1]; var y[1] := {1}; var z[3] := [1]; z := (x * y); z == (x * y)",
4938 "var x[3] := [1]; var y[4] := {1,2,3,4}; var z[3] := [1]; z := 2(x + y); z == (x + y)2",
4939 "var x[3] := [1]; var y[3] := {1,2,3}; var z[3] := [1]; z := 2(x - y); z == (x - y)2",
4940 "var x[3] := [1]; var y[2] := {1,2}; var z[3] := [1]; z := 2(x / y); z == (x / y)2",
4941 "var x[3] := [1]; var y[1] := {1}; var z[3] := [1]; z := 2(x * y); z == (x * y)2",
4942 "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",
4943 "var x[3] := [1]; var y[3] := {1,2,3}; var z[3] := [1]; z := 2(x - y)/3; z == 2(x - y)/3",
4944 "var x[3] := [1]; var y[2] := {1,2}; var z[3] := [1]; z := 2(x / y)/3; z == 2(x / y)/3",
4945 "var x[3] := [1]; var y[1] := {1}; var z[3] := [1]; z := 2(x * y)/3; z == 2(x * y)/3",
4946 "var x[6] := {1,2,3,4,5,6}; equal(sqrt(sum([x - avg(x)]^2) / x[]),1.70782512765993300)",
4947 "var x[3] := {-1,-2,-3}; sum(abs(x) ) == 6",
4948 "var x[3] := {0.1,0.2,0.3}; sum(trunc(x)) == 0",
4950 "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)",
4952 "var x := 2; (~{ for (var i := 0; i < 10; i += 1) { for (var j := 0; j <= i; "
4953 "j += 1) { var y := 3; if ((i + j + y + x) < 6) { y += x; continue; } else "
4954 "break[i + j]; } } } + ~{ for (var i := 0; i < 10; i += 1) { for (var j := 0; "
4955 "j <= i; j += 1) { var y := 3; if ((i + j + y + x) < 6) { y += x; continue; } "
4956 " else break[i + j]; } } }) == 18 ",
4958 "var x := 2; var v0[3] := {1,2,3}; ( ~{ for (var i := 0; i < 10; i += 1) { "
4959 "for (var j := 0; j <= i; j += 1) { var y := 3; var v2[3] := {1,2,3}; if ( "
4960 "(i + j + y + x + abs(v0[i % v0[]] - v2[j % v2[]])) < 6) { var v3[3] := "
4961 "{1,2,3}; y += x / v3[j % v3[]]; continue; } else break[i + j]; } } } "
4962 "+ ~{ for (var i := 0; i < 10; i += 1) { for (var j := 0; j <= i; j += 1) "
4963 " { var y := 3; var v2[3] := {1,2,3}; if ((i + j + y + x + abs(v0[i % v0[]] - "
4964 "v2[j % v2[]])) < 6) { var v3[3] := {1,2,3}; y += x / v3[j % v3[]]; "
4965 "continue; } else break[i + j]; } } } ) == 18 ",
4967 "12 == (if (1 > 2) { var x:= 2; } else { var x[3] := {7,2,3}; sum(x); })",
4968 "12 == (if (1 < 2) { var x[3] := {7,2,3}; sum(x); } else { var x:= 2; })",
4969 "12 == (if (1 > 2) { var x:= 2; } else { var x[3] := {7,2,3}; sum(x); })",
4970 "12 == (if (1 < 2) { var x[3] := {7,2,3}; sum(x); } else { var x:= 2; })",
4972 "21 == (for (var i := 0; i < 10; i += 1) { if (i > 2) { break [i * 7]; i += 1;"
4973 "i += 2; i += 3; }; })",
4975 "21 == (for (var i := 0; i < 10; i += 1) { if (i > 2) { break [i * 7]; return "
4976 "[i * 8]; i += 1; i += 2; i += 3; }; })",
4978 "2 == for (var i := 0; i < 10; i += 1) { if (i > 2) { continue; i += 1; i += 2;"
4979 "i += 3; } else i; }",
4981 "2 == for (var i := 0; i < 10; i += 1) { if (i > 2) { continue; return [i * 8];"
4982 "i += 1; i += 2; i += 3; } else i; }",
4984 "var x[10] := [-1]; var y[10] := [-1]; for (var i := 0; i < 10; i += 1) { x[i] := i; "
4985 "y[i] := 2 * x[i]; }; (sum(x) == 45) and (sum(y) == (2 * sum(x)));"
4987 "7 == (for (var i := 0; i < 10; i += 1) { ~{break[7]; continue; i += i} })",
4988 "0 == (for (var i := 0; i < 10; i += 1) { ~{break[i]; continue; i += i} })",
4989 "0 == (for (var i := 0; i < 10; i += 1) { ~{continue; break[7]; i += i} })",
4990 "1 == (for (var i := 0; i < 10; i += 1) { ~{break[i += 1]; continue; i += i} })",
4992 "var s := 'abc'; s == ~{'abc' } ",
4993 "var s := 'abc'; s == ~{s } ",
4994 "var s := 'abc'; s == ~{'ab' + 'c'} ",
4995 "var s := 'abc'; ~{'abc' } == s ",
4996 "var s := 'abc'; ~{s } == s ",
4997 "var s := 'abc'; ~{'ab' + 'c'} == s ",
4998 "var s := 'abc'; ~{1 + 2; 'abc' + s; s} == s ",
4999 "var s := 'abc'; ~{1 + 2; var x := 'ab'; x + 'c'} == s ",
5001 "var x[10^6] := null; var y[10^7] := null; 0 * (min(x) + min(y)) + x[] + y[] == 10^7 + 10^6",
5003 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; if (1 < 2, v0, v1) == v0",
5004 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; if (1 > 2, v0, v1) == v1",
5005 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; if (1 < 2, v0 - v1, v1 - v0) == (v0 - v1)",
5006 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; if (1 > 2, v0 - v1, v1 - v0) == (v1 - v0)",
5007 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; var x := 1; var y := 2; if (x < y, v0, v1) == v0",
5008 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; var x := 1; var y := 2; if (x > y, v0, v1) == v1",
5009 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; var x := 1; var y := 2; if (x < y, v0 - v1, v1 - v0) == (v0 - v1)",
5010 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; var x := 1; var y := 2; if (x > y, v0 - v1, v1 - v0) == (v1 - v0)",
5012 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; if (1 < 2, v0, v1) == v0",
5013 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; if (1 > 2, v0, v1) == v1",
5014 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; if (1 < 2, v0 - v1, v1 - v0) == (v0 - v1)",
5015 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; if (1 > 2, v0 - v1, v1 - v0) == (v1 - v0)",
5016 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; var x := 1; var y := 2; if (x < y, v0, v1) == v0",
5017 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; var x := 1; var y := 2; if (x > y, v0, v1) == v1",
5018 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; var x := 1; var y := 2; if (x < y, v0 - v1, v1 - v0) == (v0 - v1)",
5019 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; var x := 1; var y := 2; if (x > y, v0 - v1, v1 - v0) == (v1 - v0)",
5021 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; (if (1 < 2) v0; else v1;) == v0",
5022 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; (if (1 > 2) v0; else v1;) == v1",
5023 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; (if (1 < 2) v0 - v1; else v1 - v0;) == (v0 - v1)",
5024 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; (if (1 > 2) v0 - v1; else v1 - v0;) == (v1 - v0)",
5025 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; var x := 1; var y := 2; (if (x < y) v0; else v1;) == v0",
5026 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; var x := 1; var y := 2; (if (x > y) v0; else v1;) == v1",
5027 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; var x := 1; var y := 2; (if (x < y) v0 - v1; else v1 - v0;) == (v0 - v1)",
5028 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; var x := 1; var y := 2; (if (x > y) v0 - v1; else v1 - v0;) == (v1 - v0)",
5030 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; (if (1 < 2) v0; else v1;) == v0",
5031 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; (if (1 > 2) v0; else v1;) == v1",
5032 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; (if (1 < 2) v0 - v1; else v1 - v0;) == (v0 - v1)",
5033 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; (if (1 > 2) v0 - v1; else v1 - v0;) == (v1 - v0)",
5034 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; var x := 1; var y := 2; (if (x < y) v0; else v1;) == v0",
5035 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; var x := 1; var y := 2; (if (x > y) v0; else v1;) == v1",
5036 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; var x := 1; var y := 2; (if (x < y) v0 - v1; else v1 - v0;) == (v0 - v1)",
5037 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; var x := 1; var y := 2; (if (x > y) v0 - v1; else v1 - v0;) == (v1 - v0)",
5039 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((-x * -y)); true;",
5040 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((-x + -y)); true;",
5041 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((-x - -y)); true;",
5042 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((-x / -y)); true;",
5043 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) + (1.123 * y)); true;",
5044 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) - (1.123 * y)); true;",
5045 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) + (y * 1.123)); true;",
5046 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) - (y * 1.123)); true;",
5047 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) * (y / z)); true;",
5048 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) / (y / z)); true;",
5049 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) / y); true;",
5050 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) * 2.123); true;",
5051 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) / 2.123); true;",
5052 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) * (2.123 * y)); true;",
5053 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) * (y * 2.123)); true;",
5054 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) / (2.123 * y)); true;",
5055 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) / (2.123 / y)); true;",
5056 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) / (y * 2.123)); true;",
5057 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) / (y / 2.123)); true;",
5058 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 + x) + 2.123); true;",
5059 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 + x) - 2.123); true;",
5060 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 + x) + (2.123 + y)); true;",
5061 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 + x) + (y + 2.123)); true;",
5062 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 + x) - (2.123 + y)); true;",
5063 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 + x) - (y + 2.123)); true;",
5064 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 - x) + 2.123); true;",
5065 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 - x) - 2.123); true;",
5066 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 - x) - (2.123 - y)); true;",
5067 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 - x) - (y - 2.123)); true;",
5068 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) * 2.123); true;",
5069 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) / 2.123); true;",
5070 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) * (2.123 / y)); true;",
5071 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) * (y / 2.123)); true;",
5072 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) / (2.123 * y)); true;",
5073 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) / (2.123 / y)); true;",
5074 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) / (y * 2.123)); true;",
5075 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) / (y / 2.123)); true;",
5076 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) * (2.123 * x)); true;",
5077 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) * (2.123 / x)); true;",
5078 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) * (x * 2.123)); true;",
5079 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) * (x / 2.123)); true;",
5080 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) + (2.123 + x)); true;",
5081 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) + (2.123 - x)); true;",
5082 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) + (x + 2.123)); true;",
5083 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) + (x - 2.123)); true;",
5084 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) - (2.123 + x)); true;",
5085 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) - (2.123 - x)); true;",
5086 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) - (x + 2.123)); true;",
5087 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) - (x - 2.123)); true;",
5088 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) / (2.123 * x)); true;",
5089 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) / (2.123 / x)); true;",
5090 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) / (x * 2.123)); true;",
5091 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) / (x / 2.123)); true;",
5092 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) * 2.123); true;",
5093 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) / 2.123); true;",
5094 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x + 1.123) + 2.123); true;",
5095 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x + 1.123) - 2.123); true;",
5096 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x - 1.123) + 2.123); true;",
5097 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x - 1.123) - 2.123); true;",
5098 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) * 2.123); true;",
5099 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) / 2.123); true;",
5100 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x ^ 1.123) ^ 2.123); true;",
5101 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) + (1.123 * y)); true;",
5102 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) - (1.123 * y)); true;",
5103 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) + (y * 1.123)); true;",
5104 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) - (y * 1.123)); true;",
5105 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) * (2.123 * y)); true;",
5106 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) * (y * 2.123)); true;",
5107 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) / (2.123 * y)); true;",
5108 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) / (2.123 / y)); true;",
5109 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) / (y * 2.123)); true;",
5110 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) / (y / 2.123)); true;",
5111 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * y) / (z / w)); true;",
5112 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x + 1.123) + (2.123 + y)); true;",
5113 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x + 1.123) + (y + 2.123)); true;",
5114 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x + 1.123) - (2.123 + y)); true;",
5115 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x + 1.123) - (y + 2.123)); true;",
5116 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x + y) / (z / w)); true;",
5117 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x - 1.123) - (2.123 - y)); true;",
5118 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x - 1.123) - (y - 2.123)); true;",
5119 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x - y) / (z / w)); true;",
5120 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) * (y / z)); true;",
5121 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) + (y / 1.123)); true;",
5122 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) - (y / 1.123)); true;",
5123 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) / (y / z)); true;",
5124 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) / y); true;",
5125 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) * (2.123 / y)); true;",
5126 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) * (y + 2.123)); true;",
5127 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) * (y - 2.123)); true;",
5128 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) * (y / 2.123)); true;",
5129 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) / (2.123 * y)); true;",
5130 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) / (2.123 / y)); true;",
5131 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) / (y * 2.123)); true;",
5132 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) / (y / 2.123)); true;",
5133 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / y) * (1.123 / z)); true;",
5134 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / y) * (z / 1.123)); true;",
5135 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / y) * (z / w)); true;",
5136 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / y) / (1.123 / z)); true;",
5137 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / y) / (z / 1.123)); true;",
5138 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / y) / (z / w)); true;",
5139 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / y) / 1.123); true;",
5140 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / y) / z); true;",
5145 static const std::size_t
rounds = 20;
5156 bool failed =
false;
5158 for (std::size_t r = 0; r <
rounds; ++r)
5162 expression_t expression;
5163 expression.register_symbol_table(symbol_table);
5170 printf(
"run_test10() - swaps[1] Error: %s Expression: %s\n",
5171 parser.
error().c_str(),
5179 const T result = expression.value();
5183 printf(
"run_test10() - swaps[1] evaluation error Expression: %s\n",
5189 expression.release();
5199 for (std::size_t r = 0; r <
rounds; ++r)
5205 expression_t expression;
5206 expression.register_symbol_table(symbol_table);
5210 printf(
"run_test10() - swaps[2] Error: %s Expression: %s\n",
5211 parser.
error().c_str(),
5218 const T result = expression.value();
5222 printf(
"run_test10() - swaps[2] evaluation error Expression: %s\n",
6509 const bool result1 = symbol_table.
add_variable(
"x", x);
6513 if (!result1 || !result2 || result3)
6515 printf(
"run_test18() - Failed sym_tab add/remove [1]\n");
6525 if (!result1 || !result2 || result3)
6527 printf(
"run_test18() - Failed sym_tab add/remove [2]\n");
6532 std::vector<T> x(10,T(0));
6533 const bool result1 = symbol_table.
add_vector(
"x", x);
6537 if (!result1 || !result2 || result3)
6539 printf(
"run_test18() - Failed sym_tab add/remove [3]\n");
6545 const bool result1 = symbol_table.
add_function(
"x", x);
6549 if (!result1 || !result2 || result3)
6551 printf(
"run_test18() - Failed sym_tab add/remove [4]\n");
6557 const bool result1 = symbol_table.
add_function(
"x", x);
6561 if (!result1 || !result2 || result3)
6563 printf(
"run_test18() - Failed sym_tab add/remove [5]\n");
6608 static const std::string expr_str_list[] =
6610 "equal(va_func,(0))",
6611 "equal(va_func(),(0))",
6612 "equal(va_func(1,2,3,4,5,6,7,8,9),(1+2+3+4+5+6+7+8+9))",
6613 "equal(va_func(1,x,3,y,5,z,7,w,9),(1+x+3+y+5+z+7+w+9))",
6614 "equal(va_func(x,2,y,4,z,6,w,8,u),(x+2+y+4+z+6+w+8+u))",
6615 "equal(va_func(x,y,z,w,u,v,t,1,2,3),(x+y+z+w+u+v+t+1+2+3))",
6616 "equal(va_func(x,y,z,w,u,v,t),(x+y+z+w+u+v+t))",
6617 "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))",
6618 "equal(1+va_func(1,x,3,y,5,z,7,w,9),(1+x+3+y+5+z+7+w+9)+1)",
6619 "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))",
6620 "equal(va_func(va_func(x),va_func(y),va_func(z)),va_func(x,y,z))",
6621 "equal(va_func(va_func(va_func(va_func(va_func(va_func(va_func(va_func(x)))))))),x)",
6622 "equal(va_func(va_func(va_func(va_func(va_func(va_func(va_func(va_func(123.456)))))))),123.456)",
6623 "equal(va_func(va_func(va_func(va_func(va_func(va_func(va_func(va_func(x+1)))))))),x+1)",
6624 "equal(va_func(va_func(va_func(va_func(va_func(va_func(va_func(va_func(x+y)))))))),x+y)"
6626 static const std::size_t expr_str_list_size =
sizeof(expr_str_list) /
sizeof(std::string);
6630 for (std::size_t i = 0; i < expr_str_list_size; ++i)
6632 expression_t expression;
6633 expression.register_symbol_table(symbol_table);
6637 if (!parser.
compile(expr_str_list[i],expression))
6639 printf(
"run_test18() - [1] VarArg Error: %s Expression: %s\n",
6640 parser.
error().c_str(),
6641 expr_str_list[i].c_str());
6649 bool error_found =
false;
6655 printf(
"run_test18() - Error in evaluation! (1) Expression: %s\n",
6656 expr_str_list[i].c_str());
6676 T v0[] = { T(1), T(1), T(1), T(1) };
6677 T v1[] = { T(1), T(2), T(3), T(4) };
6686 std::string s0 =
"AbCdEfGhIj";
6690 symbol_table_t symbol_table;
6692 symbol_table.add_constants();
6694 symbol_table.add_variable (
"x" , x);
6695 symbol_table.add_variable (
"y" , y);
6696 symbol_table.add_vector (
"v0" ,v0);
6697 symbol_table.add_vector (
"v1" ,v1);
6698 symbol_table.add_vector (
"v2" ,v2);
6699 symbol_table.add_stringvar(
"s0", s0);
6700 symbol_table.add_function (
"gen_func", f);
6704 "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:6]);",
6705 "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:6]);",
6706 "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:6],v0);",
6707 "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:6],v0, v1 + v2);",
6708 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; gen_func(x, 2x + y, z, 2w / 3, 'abc123',s0[2:6],v0, v1 + v2, v0[2]);",
6709 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; gen_func(2x + y, z, 2w / 3, 'abc123',s0[2:6],v0, v1 + v2, v0[2], x);",
6710 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; gen_func(z, 2w / 3, 'abc123',s0[2:6],v0, v1 + v2, v0[2], x, 2x + y);",
6711 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; gen_func(2w / 3, 'abc123',s0[2:6],v0, v1 + v2, v0[2], x, 2x + y, z);",
6712 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; gen_func('abc123', s0[2:6],v0, v1 + v2, v0[2], x, 2x + y, z,2w / 3);",
6713 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; gen_func(s0[2:6],v0, v1 + v2, v0[2], x, 2x + y, z,2w / 3, 'abc123');"
6718 bool error_found =
false;
6723 expression_t expression;
6725 expression.register_symbol_table(symbol_table);
6729 if (!parser.compile(expression_str,expression))
6731 printf(
"run_test18() - [2] GenFunc Error: %s Expression: %s [2]\n",
6732 parser.error().c_str(),
6733 expression_str.c_str());
6751 printf(
"run_test18() - Error in evaluation! (2) Expression: %s "
6763 expression.release();
6780 T v0[] = { T(1), T(1), T(1), T(1) };
6781 T v1[] = { T(1), T(2), T(3), T(4) };
6782 T v2[] = { T(5), T(6), T(7), T(8) };
6784 std::string s0 =
"AbCdEfGhIj";
6788 symbol_table_t symbol_table;
6790 symbol_table.add_constants();
6792 symbol_table.add_variable (
"x" , x);
6793 symbol_table.add_variable (
"y" , y);
6794 symbol_table.add_vector (
"v0" ,v0);
6795 symbol_table.add_vector (
"v1" ,v1);
6796 symbol_table.add_vector (
"v2" ,v2);
6797 symbol_table.add_stringvar(
"s0", s0);
6798 symbol_table.add_function (
"foo", f);
6802 "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:6]);",
6803 "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:6],v0);",
6804 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0[2], x, 2x + y, z, 2w / 3, 'abc123',s0[2:6],v0, v1 + v2);",
6805 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x, 2x + y, z, 2w / 3, 'abc123',s0[2:6],v0, v1 + v2, v0[2]);",
6806 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(2x + y, z, 2w / 3, 'abc123',s0[2:6],v0, v1 + v2, v0[2], x);",
6807 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(z, 2w / 3, 'abc123',s0[2:6],v0, v1 + v2, v0[2], x, 2x + y);",
6808 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(2w / 3, 'abc123',s0[2:6],v0, v1 + v2, v0[2], x, 2x + y, z);",
6809 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo('abc123', s0[2:6],v0, v1 + v2, v0[2], x, 2x + y, z,2w / 3);",
6810 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0[2:6],v0, v1 + v2, v0[2], x, 2x + y, z,2w / 3, 'abc123');",
6811 "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');",
6812 "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]);",
6813 "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]);",
6814 "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]);",
6815 "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]);",
6816 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x);",
6817 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x);",
6818 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x,x);",
6819 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x,x,x);",
6820 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0);",
6821 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0);",
6822 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0,s0);",
6823 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0,s0,s0);",
6824 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0);",
6825 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0);",
6826 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0,v0);",
6827 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0,v0,v0);",
6828 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x);",
6829 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x);",
6830 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x,x);",
6831 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x,x,x);",
6832 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0);",
6833 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0);",
6834 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0,s0);",
6835 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0,s0,s0);",
6836 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0);",
6837 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0);",
6838 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0,v0);",
6839 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0,v0,v0);",
6840 "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]);",
6841 "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]);",
6842 "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]);",
6843 "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]);"
6848 const std::string parameter_type_list[] =
6888 "TTTTTTT|STSTSTS|V*T*VS*" ,
6889 "TTTTTTT|STSTSTS|V*TTTTVSS",
6890 "TTTTTTT|STSTSTS|VVT*VSS" ,
6891 "TTTTTTT|STSTSTS|VVTTTTVS*",
6894 bool error_found =
false;
6899 expression_t expression;
6901 expression.register_symbol_table(symbol_table);
6907 if (!parser.compile(expression_str,expression))
6909 printf(
"run_test18() - [3] GenFunc2 Error: %s Expression: %s Parameter Sequence: %s [3]\n",
6910 parser.error().c_str(),
6911 expression_str.c_str(),
6912 parameter_type_list[i].c_str());
6928 bool error_found =
false;
6932 "foo(v0,v1,v2,x,y,s0);",
6933 "foo(v1,v2,x,y,s0,v0);",
6934 "foo(v2,x,y,s0,v0,v1);",
6935 "foo(x,y,s0,v0,v1,v2);",
6936 "foo(y,s0,v0,v1,v2,x);",
6937 "foo(s0,v0,v1,v2,x,y);"
6942 const std::string parameter_type_list[] =
6961 T v0[] = { T(1), T(1), T(1), T(1) };
6962 T v1[] = { T(1), T(2), T(3), T(4) };
6963 T v2[] = { T(5), T(6), T(7), T(8) };
6965 std::string s0 =
"AbCdEfGhIj";
6970 T v0_inc[] = { T(2), T(2), T(2), T(2) };
6971 T v1_inc[] = { T(2), T(3), T(4), T(5) };
6972 T v2_inc[] = { T(6), T(7), T(8), T(9) };
6974 std::size_t sizeof_vec =
sizeof(v0) /
sizeof(T);
6976 std::string s0_inc =
"BcDeFgHiJk";
6980 symbol_table_t symbol_table;
6982 symbol_table.add_constants();
6984 symbol_table.add_variable (
"x" , x );
6985 symbol_table.add_variable (
"y" , y );
6986 symbol_table.add_vector (
"v0" , v0);
6987 symbol_table.add_vector (
"v1" , v1);
6988 symbol_table.add_vector (
"v2" , v2);
6989 symbol_table.add_stringvar(
"s0", s0);
6990 symbol_table.add_function (
"foo", f );
6992 expression_t expression;
6994 expression.register_symbol_table(symbol_table);
7002 printf(
"run_test18() - [4] IncFunc Error: %s Expression: %s Parameter Sequence: %s [4]\n",
7003 parser.error().c_str(),
7005 parameter_type_list[i].c_str());
7015 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: x\n",
7022 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: y\n",
7029 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: y\n",
7034 if (!std::equal(v0,v0 + sizeof_vec,v0_inc))
7036 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: v0\n",
7041 if (!std::equal(v1,v1 + sizeof_vec,v1_inc))
7043 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: v1\n",
7048 if (!std::equal(v2,v2 + sizeof_vec,v2_inc))
7050 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: v2\n",
7063 bool error_found =
false;
7067 std::string s0 =
"XXXXXXXXXXXXXXX";
7068 std::string s1 =
"XXXXXXXXXXXXXXX";
7069 std::string s2 =
"XXXXXXXXXXXXXXX";
7070 std::string s3 =
"XXXXXXXXXXXXXXX";
7071 std::string s4 =
"XXXXXXXXXXXXXXX";
7077 symbol_table_t symbol_table;
7079 symbol_table.add_constants();
7081 symbol_table.add_stringvar(
"s0", s0);
7082 symbol_table.add_stringvar(
"s1", s1);
7083 symbol_table.add_stringvar(
"s2", s2);
7084 symbol_table.add_stringvar(
"s3", s3);
7085 symbol_table.add_stringvar(
"s4", s4);
7087 symbol_table.add_function(
"remspc_uc", rsauc);
7089 const std::string program =
7090 " s0 := 'How now '; "
7091 " s1 := 'brown cow?'; "
7092 " s2 := remspc_uc(s0 + s1); "
7093 " s3 := remspc_uc(s0) + s1; "
7094 " s4 := s0 + remspc_uc(s1); "
7095 " remspc_uc(s0 + s1) == remspc_uc(s0) + remspc_uc(s1); ";
7097 const std::string parameter_type_list[] =
7107 std::size_t parameter_type_list_size =
sizeof(parameter_type_list) /
sizeof(std::string);
7109 for (std::size_t i = 0; i < parameter_type_list_size; ++i)
7111 expression_t expression;
7113 expression.register_symbol_table(symbol_table);
7119 if (!parser.compile(program,expression))
7121 printf(
"run_test18() - [5] Error: %s\tExpression: %s\n",
7122 parser.error().c_str(),
7128 const T result = expression.value();
7132 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Result <> 1\n",
7139 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s0\n",
7144 if (
"How now " != s0)
7146 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s0\n",
7151 if (
"brown cow?" != s1)
7153 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s1\n",
7158 if (
"HOWNOWBROWNCOW?" != s2)
7160 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s2\n",
7165 if (
"HOWNOWbrown cow?" != s3)
7167 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s3\n",
7172 if (
"How now BROWNCOW?" != s4)
7174 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s4\n",
7187 bool error_found =
false;
7193 symbol_table_t symbol_table;
7195 T v[4] = {T(5), T(6), T(7), T(8)};
7197 symbol_table.add_vector(
"v",v);
7200 symbol_table.add_function(
"vararg_func",vaf);
7202 expression_t expression;
7203 expression.register_symbol_table(symbol_table);
7207 const std::string programs[] =
7209 "equal(0,vararg_func())",
7210 "equal(1,vararg_func() + 1)",
7211 "equal(1,1 + vararg_func())",
7212 "equal(1,vararg_func + 1)",
7213 "equal(1,1 + vararg_func)",
7214 "equal(0,vararg_func() + vararg_func)",
7215 "equal(0,vararg_func + vararg_func())",
7216 "equal(1,vararg_func + vararg_func(1))",
7217 "equal(1,vararg_func + vararg_func(1,2))",
7218 "equal(2,vararg_func + vararg_func(v))",
7219 "equal(1,vararg_func() + vararg_func(1))",
7220 "equal(1,vararg_func() + vararg_func(1,2))",
7221 "equal(2,vararg_func() + vararg_func(v))",
7222 "equal(2,vararg_func(v))",
7223 "equal(1,vararg_func(1))",
7224 "equal(1,vararg_func(1,2,3))",
7225 "equal(1,vararg_func(5,6,7,8))",
7226 "equal(5,vararg_func(v) + 3)",
7227 "equal(5,vararg_func(1) + 4)",
7228 "equal(6,vararg_func(1,2,3) + 5)",
7229 "equal(7,vararg_func(5,6,7,8) + 6)"
7232 static const std::size_t programs_size =
sizeof(programs) /
sizeof(std::string);
7234 for (std::size_t i = 0; i < programs_size; ++i)
7236 if (!parser.compile(programs[i],expression))
7238 printf(
"run_test18() - [6] Error: %s\tExpression: %s\n",
7239 parser.error().c_str(),
7240 programs[i].c_str());
7244 else if (T(1) != expression.value())
7246 printf(
"run_test18() - Error in evaluation! (5) Expression: %s\n",
7247 programs[i].c_str());
7260 bool error_found =
false;
7272 v.push_back(T(N)); \
7280 const std::string expr_string =
"sum(v + 1)";
7284 symbol_table_t symbol_table;
7285 symbol_table.add_vector(
"v",v);
7287 expression_t expression;
7288 expression.register_symbol_table(symbol_table);
7292 if (!parser.compile(expr_string,expression))
7294 printf(
"run_test18() - [7] Error: %s\tExpression: %s\n",
7295 parser.error().c_str(),
7296 expr_string.c_str());
7303 sum = expression.value();
7307 printf(
"run_test18() - Error in evaluation! (6) Expression: %s\n",
7308 expr_string.c_str());
7314 sum = expression.value();
7318 printf(
"run_test18() - Error in evaluation! (7) Expression: %s\n",
7319 expr_string.c_str());
7324 sum = expression.value();
7328 printf(
"run_test18() - Error in evaluation! (8) Expression: %s\n",
7329 expr_string.c_str());
7334 sum = expression.value();
7338 printf(
"run_test18() - Error in evaluation! (9) Expression: %s\n",
7339 expr_string.c_str());
7350 bool error_found =
false;
7360 v.push_back(T(N)); \
7365 pb(s, 3)
pb(s, 6)
pb(s, 9)
pb(s,12)
7366 pb(s,15)
pb(s,18)
pb(s,21)
7369 const std::string expr_string =
"v[0] + v[1] + v[2]";
7373 symbol_table_t symbol_table;
7374 symbol_table.add_vector(
"v",v);
7376 expression_t expression;
7377 expression.register_symbol_table(symbol_table);
7381 if (!parser.compile(expr_string,expression))
7383 printf(
"run_test18() - [8] Error: %s\tExpression: %s\n",
7384 parser.error().c_str(),
7385 expr_string.c_str());
7390 for (std::size_t i = 0; i < v0.size() - 4; ++i)
7394 T sum = expression.value();
7398 printf(
"run_test18() - Error in evaluation! (7) Expression: %s Expected: %5.3f Computed: %5.3f\n",
7399 expr_string.c_str(),
7415 bool error_found =
false;
7425 v.push_back(T(N)); \
7430 pb(s, 3)
pb(s, 6)
pb(s, 9)
pb(s,12)
7431 pb(s,15)
pb(s,18)
pb(s,21)
7434 const std::string expr_string =
"var i := 0; var j := 1; var k := 2; v[i] + v[j] + v[k]";
7438 symbol_table_t symbol_table;
7439 symbol_table.add_vector(
"v",v);
7441 expression_t expression;
7442 expression.register_symbol_table(symbol_table);
7446 if (!parser.compile(expr_string,expression))
7448 printf(
"run_test18() - [9] Error: %s\tExpression: %s\n",
7449 parser.error().c_str(),
7450 expr_string.c_str());
7455 for (std::size_t i = 0; i < v0.size() - 4; ++i)
7459 T sum = expression.value();
7463 printf(
"run_test18() - Error in evaluation! (8) Expression: %s Expected: %5.3f Computed: %5.3f\n",
7464 expr_string.c_str(),
7484 const std::string const_folded_expression_list[] =
7486 "(0 * dot(2 * v0,v1 - 1))",
7487 "(0 * dot(2 * v0,v1 - 1)) + (dot(2 * v0,v1 - 1) * 0)",
7488 "(0 * dot(v0 - v1,v1 / v0))",
7489 "(0 * dot(v0 - v1,v1 / v0)) + (dot(v0 - v1,v1 / v0) * 0)",
7491 "(0 * dot(v0,v1)) + (dot(v0,v1) * 0)",
7492 "(0 / dot(2 * v0,v1 - 1))",
7493 "(0 / dot(2 * v0,v1 - 1)) + (dot(2 * v0,v1 - 1) * 0)",
7494 "(0 / dot(v0 - v1,v1 / v0))",
7495 "(0 / dot(v0 - v1,v1 / v0)) + (dot(v0 - v1,v1 / v0) * 0)",
7497 "(0 / dot(v0,v1)) + (dot(v0,v1) * 0)",
7498 "(dot(2 * v0,v1 - 1) * 0)",
7499 "(dot(2 * v0,v1 - 1) * 0) + (0 * dot(2 * v0,v1 - 1))",
7500 "(dot(2 * v0,v1 - 1) * 0) + (0 / dot(2 * v0,v1 - 1))",
7501 "(dot(v0 - v1,v1 / v0) * 0)",
7502 "(dot(v0 - v1,v1 / v0) * 0) + (0 * dot(v0 - v1,v1 / v0))",
7503 "(dot(v0 - v1,v1 / v0) * 0) + (0 / dot(v0 - v1,v1 / v0))",
7505 "(dot(v0,v1) * 0) + (0 * dot(v0,v1))",
7506 "(dot(v0,v1) * 0) + (0 / dot(v0,v1))"
7509 const std::size_t const_folded_expression_list_size =
sizeof(const_folded_expression_list) /
sizeof(std::string);
7511 const std::size_t vector_size = 5;
7512 T v0[vector_size] = { 0, 2, 4, 6, 8 };
7513 T v1[vector_size] = { 1, 3, 5, 7, 9 };
7521 symbol_table_t symbol_table;
7523 symbol_table.add_package( vector_package );
7524 symbol_table.add_package( io_package );
7525 symbol_table.add_vector (
"v0" , vv0 );
7526 symbol_table.add_vector (
"v1" , vv1 );
7528 expression_t expression;
7529 expression.register_symbol_table(symbol_table);
7533 for (std::size_t i = 0; i < const_folded_expression_list_size; ++i)
7535 const std::string& expression_string = const_folded_expression_list[i];
7537 if (!parser.compile(expression_string, expression))
7539 printf(
"run_test18() - [10] Error: %s Expression: %s\n",
7540 parser.error().c_str(),
7541 expression_string.c_str());
7548 printf(
"run_test18() - Error: Expression did not compile to a constant! [1] Expression: %s\n",
7549 expression_string.c_str());
7554 for (std::size_t j = 0; j < 100; ++j)
7567 const T result = expression.value();
7571 printf(
"run_test18() - Error: Expected result of zero, result: %8.4f for Expression: %s\n",
7573 expression_string.c_str());
7579 expression.release();
7588 const std::string rebase_expression_list[] =
7591 "dot(2 * v0,v1 - 1) + dot(2 * v0,v1 - 1)",
7592 "dot(2 * v0,v1 - 1)",
7593 "dot(v0 - v1,v1 / v0) + dot(v0 - v1,v1 / v0)",
7594 "dot(v0 - v1,v1 / v0)",
7595 "dot(v0,v1) + dot(v0,v1)",
7597 "dot(2 * v0,v1 - 1) * x + dot(2 * v0,v1 - 1) * y",
7598 "x / dot(2 * v0,v1 - 1)",
7599 "x / dot(v0 - v1,v1 / v0) + dot(v0 - v1,v1 / v0) / y",
7600 "x * dot(v0 - v1,v1 / v0) / y",
7601 "x - dot(v0,v1) + dot(v0,v1) + y",
7604 const std::size_t rebase_expression_list_size =
sizeof(rebase_expression_list) /
sizeof(std::string);
7609 const std::size_t vector_size = 5;
7610 T v0[vector_size] = { 0, 2, 4, 6, 8 };
7611 T v1[vector_size] = { 1, 3, 5, 7, 9 };
7619 symbol_table_t symbol_table;
7621 symbol_table.add_package ( vector_package );
7622 symbol_table.add_package ( io_package );
7623 symbol_table.add_variable(
"x" , x );
7624 symbol_table.add_variable(
"y" , y );
7625 symbol_table.add_vector (
"v0" , vv0 );
7626 symbol_table.add_vector (
"v1" , vv1 );
7628 expression_t expression;
7629 expression.register_symbol_table(symbol_table);
7633 for (std::size_t i = 0; i < rebase_expression_list_size; ++i)
7635 const std::string& expression_string = rebase_expression_list[i];
7637 if (!parser.compile(expression_string, expression))
7639 printf(
"run_test18() - [11] Error: %s Expression: %s\n",
7640 parser.error().c_str(),
7641 expression_string.c_str());
7646 for (std::size_t j = 0; j < 100; ++j)
7662 expression.release();
7667 bool error_found =
false;
7677 v.push_back(T(N)); \
7682 pb(s, 3)
pb(s, 6)
pb(s, 9)
pb(s,12)
7683 pb(s,15)
pb(s,18)
pb(s,21)
7686 const std::string expr_string =
"var i := 0; v[i + 0] + v[i + 1] + v[i + 2]";
7690 symbol_table_t symbol_table;
7691 symbol_table.add_vector(
"v",v);
7693 expression_t expression;
7694 expression.register_symbol_table(symbol_table);
7698 if (!parser.compile(expr_string,expression))
7700 printf(
"run_test18() - [12] Error: %s\tExpression: %s\n",
7701 parser.error().c_str(),
7702 expr_string.c_str());
7707 for (std::size_t i = 0; i < v0.size() - 4; ++i)
7711 const T sum = expression.value();
7715 printf(
"run_test18() - Error in evaluation! (9) Expression: %s Expected: %5.3f Computed: %5.3f\n",
7716 expr_string.c_str(),
7736 T v0[] = { T(0), T(1), T(2), T(3), T(4) };
7737 T v1[] = { T(5), T(6), T(7), T(8), T(9) };
7739 const std::size_t v0_size =
sizeof(v0) /
sizeof (T);
7740 const std::size_t v1_size =
sizeof(v1) /
sizeof (T);
7746 symbol_table_t symbol_table;
7747 symbol_table.add_vector(
"v",v);
7748 symbol_table.add_function(
"vec_sum",vec_sum);
7750 expression_t expression;
7751 expression.register_symbol_table(symbol_table);
7755 const std::string expr_string =
"vec_sum(v)";
7757 if (!parser.compile(expr_string,expression))
7759 printf(
"run_test18() - [13] Error: %s\tExpression: %s\n",
7760 parser.error().c_str(),
7761 expr_string.c_str());
7766 const T expected_result0 = std::accumulate(v0, v0 + v0_size, T(0));
7768 if (expression.value() != expected_result0)
7770 printf(
"run_test18() - Error in evaluation! (10.1) Expression: %s Expected: %5.3f Computed: %5.3f\n",
7771 expr_string.c_str(),
7773 expression.value());
7780 const T expected_result1 = std::accumulate(v1, v1 + v1_size, T(0));
7782 if (expression.value() != expected_result1)
7784 printf(
"run_test18() - Error in evaluation! (10.2) Expression: %s Expected: %5.3f Computed: %5.3f\n",
7785 expr_string.c_str(),
7787 expression.value());
7794 bool error_found =
false;
7802 symbol_table_t symbol_table;
7803 symbol_table.add_package(vecops_pkg);
7805 const std::string expr_str_list[] =
7807 "var v[9] := {1,2,3,4,5,6,7,8,9}; all_true(v) == true" ,
7808 "var v[6] := {-1,-2,-3,-4,-5,-6}; all_true(v) == true" ,
7809 "var v[8] := {1,2,3,0,0,0,0,0}; all_true(v) == false",
7810 "var v[8] := {-1,-2,-3,0,0,0,0,0}; all_true(v) == false",
7811 "var v[9] := {0,0,0,0,0,0,0,0,0}; all_true(v + 1) == true",
7813 "var v[9] := {0,0,0,0,0,0,0,0,0}; all_false(v) == true" ,
7814 "var v[9] := {0,0,0,0,0,1,2,3,4}; all_false(v) == false" ,
7815 "var v[8] := {0,0,0,0,0,-1,-2,-3}; all_false(v) == false" ,
7816 "var v[9] := {1,1,1,1,1,1,1,1,1}; any_false(v - 1) == true",
7818 "var v[9] := {0,0,0,0,0,0,0,0,1}; any_true(v) == true" ,
7819 "var v[9] := {0,0,0,0,1,0,0,0,0}; any_true(v) == true" ,
7820 "var v[9] := {0,0,0,0,0,0,0,0,0}; any_true(v) == false" ,
7821 "var v[9] := {0,0,0,0,0,0,0,0,0}; any_true(v + 1) == true",
7823 "var v[9] := {1,1,1,1,1,1,1,1,0}; any_false(v) == true" ,
7824 "var v[9] := {1,1,1,1,0,1,1,1,1}; any_false(v) == true" ,
7825 "var v[9] := {1,1,1,1,1,1,1,1,1}; any_false(v) == false" ,
7826 "var v[9] := {1,1,1,1,1,1,1,1,1}; any_false(v - 1) == true",
7828 "var v[9] := {0,0,0,0,0,0,0,0,0}; count(v) == 0" ,
7829 "var v[9] := {0,0,0,0,0,0,0,0,1}; count(v) == 1" ,
7830 "var v[9] := {0,0,0,0,0,0,0,2,1}; count(v) == 2" ,
7831 "var v[9] := {0,0,0,0,0,0,3,2,1}; count(v) == 3" ,
7832 "var v[9] := {0,0,0,0,0,0,0,0,0}; count(v + 1) == v[]",
7833 "var v[9] := {1,1,1,1,1,1,1,1,1}; count(v - 1) == 0",
7835 "var v[9] := {1,2,3,4,5,6,7,8,9}; var r[9] := [0]; copy(v,r); sum(v == r) == v[]",
7836 "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",
7837 "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",
7838 "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",
7840 "var v[5] := {1,2,3,4,5}; var r[5] := {4,5,1,2,3}; rol(v,3); sum(v == r) == v[]",
7841 "var v[5] := {1,2,3,4,5}; var r[5] := {3,4,5,1,2}; ror(v,3); sum(v == r) == v[]",
7843 "var v[5] := {1,2,3,4,5}; var r[5] := {3,4,5,1,2}; rol(v,2); sum(v == r) == v[]",
7844 "var v[5] := {1,2,3,4,5}; var r[5] := {4,5,1,2,3}; ror(v,2); sum(v == r) == v[]",
7846 "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[]",
7847 "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[]",
7849 "var v[5] := {1,2,3,4,5}; var r[5] := {3,4,5,0,0}; shftl(v,2); sum(v == r) == v[]",
7850 "var v[5] := {1,2,3,4,5}; var r[5] := {5,0,0,0,0}; shftl(v,4); sum(v == r) == v[]",
7851 "var v[5] := {1,2,3,4,5}; var r[5] := {0,0,0,0,0}; shftl(v,5); sum(v == r) == v[]",
7853 "var v[5] := {1,2,3,4,5}; var r[5] := {0,0,1,2,3}; shftr(v,2); sum(v == r) == v[]",
7854 "var v[5] := {1,2,3,4,5}; var r[5] := {0,0,0,0,1}; shftr(v,4); sum(v == r) == v[]",
7855 "var v[5] := {1,2,3,4,5}; var r[5] := {0,0,0,0,0}; shftr(v,5); sum(v == r) == v[]",
7857 "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[]",
7858 "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[]",
7860 "var v[5] := {1,3,5,2,4}; var r[5] := {1,2,3,4,5}; sort(v); sum(v == r) == v[]",
7861 "var v[5] := {5,4,3,2,1}; var r[5] := {1,2,3,4,5}; sort(v); sum(v == r) == v[]",
7862 "var v[5] := {1,4,2,3,5}; var r[5] := {1,2,3,4,5}; sort(v,1,3); sum(v == r) == v[]",
7863 "var v[5] := {5,4,2,3,1}; var r[5] := {5,2,3,4,1}; sort(v,1,3); sum(v == r) == v[]",
7864 "var v[5] := {3,1,2,4,5}; var r[5] := {1,2,3,4,5}; sort(v,0,2); sum(v == r) == v[]",
7865 "var v[5] := {1,2,5,3,4}; var r[5] := {1,2,3,4,5}; sort(v,2,4); sum(v == r) == v[]",
7867 "var v[5] := {1,3,5,2,4}; var r[5] := {1,2,3,4,5}; sort(v,'ascending'); sum(v == r) == v[]",
7868 "var v[5] := {1,3,5,2,4}; var r[5] := {1,2,3,4,5}; sort(v,'aScEnDiNg'); sum(v == r) == v[]",
7869 "var v[5] := {5,4,3,2,1}; var r[5] := {1,2,3,4,5}; sort(v,'ascending'); sum(v == r) == v[]",
7870 "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[]",
7871 "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[]",
7872 "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[]",
7874 "var v[5] := {1,3,5,2,4}; var r[5] := {5,4,3,2,1}; sort(v,'descending'); sum(v == r) == v[]",
7875 "var v[5] := {1,3,5,2,4}; var r[5] := {5,4,3,2,1}; sort(v,'DeScEnDiNg'); sum(v == r) == v[]",
7876 "var v[5] := {5,4,3,2,1}; var r[5] := {5,4,3,2,1}; sort(v,'descending'); sum(v == r) == v[]",
7877 "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[]",
7878 "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[]",
7879 "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[]",
7881 "var v[9] := {7,8,9,1,2,3,4,5,6}; nth_element(v,trunc(v[] / 2)); v[v[] / 2] == 5",
7882 "var v[9] := {7,8,9,1,2,3,4,5,6}; nth_element(v,trunc(v[] / 3)); v[v[] / 3] == 4",
7884 "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)",
7885 "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)",
7887 "var v[5]; iota(v, 0,1); var r[5] := { 0, 1, 2, 3, 4}; sum(v == r) == v[]",
7888 "var v[5]; iota(v, 0,2); var r[5] := { 0, 2, 4, 6, 8}; sum(v == r) == v[]",
7889 "var v[5]; iota(v, 1,1); var r[5] := { 1, 2, 3, 4, 5}; sum(v == r) == v[]",
7890 "var v[5]; iota(v, 1,2); var r[5] := { 1, 3, 5, 7, 9}; sum(v == r) == v[]",
7891 "var v[5]; iota(v,-1,1); var r[5] := {-1, 0, 1, 2, 3}; sum(v == r) == v[]",
7892 "var v[5]; iota(v,-1,2); var r[5] := {-1, 1, 3, 5, 7}; sum(v == r) == v[]",
7893 "var v[5]; iota(v,-2,1); var r[5] := {-2,-1, 0, 1, 2}; sum(v == r) == v[]",
7894 "var v[5]; iota(v,-2,2); var r[5] := {-2, 0, 2, 4, 6}; sum(v == r) == v[]",
7895 "var v[5]; iota(v, 0); var r[5] := { 0, 1, 2, 3, 4}; sum(v == r) == v[]",
7896 "var v[5]; iota(v, 1); var r[5] := { 1, 2, 3, 4, 5}; sum(v == r) == v[]",
7897 "var v[5]; iota(v,-1); var r[5] := {-1, 0, 1, 2, 3}; sum(v == r) == v[]",
7898 "var v[5]; iota(v,-2); var r[5] := {-2,-1, 0, 1, 2}; sum(v == r) == v[]",
7899 "var v[5]; iota(v, 0, 0); var r[5] := { 0, 0, 0, 0, 0}; sum(v == r) == v[]",
7900 "var v[5]; iota(v, 1, 0); var r[5] := { 1, 1, 1, 1, 1}; sum(v == r) == v[]",
7902 "var v[5]; iota(v, 0, v[] - 1, 0,1); var r[5] := { 0, 1, 2, 3, 4}; sum(v == r) == v[]",
7903 "var v[5]; iota(v, 0, v[] - 1, 0,2); var r[5] := { 0, 2, 4, 6, 8}; sum(v == r) == v[]",
7904 "var v[5]; iota(v, 0, v[] - 1, 1,1); var r[5] := { 1, 2, 3, 4, 5}; sum(v == r) == v[]",
7905 "var v[5]; iota(v, 0, v[] - 1, 1,2); var r[5] := { 1, 3, 5, 7, 9}; sum(v == r) == v[]",
7906 "var v[5]; iota(v, 0, v[] - 1,-1,1); var r[5] := {-1, 0, 1, 2, 3}; sum(v == r) == v[]",
7907 "var v[5]; iota(v, 0, v[] - 1,-1,2); var r[5] := {-1, 1, 3, 5, 7}; sum(v == r) == v[]",
7908 "var v[5]; iota(v, 0, v[] - 1,-2,1); var r[5] := {-2,-1, 0, 1, 2}; sum(v == r) == v[]",
7909 "var v[5]; iota(v, 0, v[] - 1,-2,2); var r[5] := {-2, 0, 2, 4, 6}; sum(v == r) == v[]",
7910 "var v[5]; iota(v, 0, v[] - 1, 0 ); var r[5] := { 0, 1, 2, 3, 4}; sum(v == r) == v[]",
7911 "var v[5]; iota(v, 0, v[] - 1, 1 ); var r[5] := { 1, 2, 3, 4, 5}; sum(v == r) == v[]",
7912 "var v[5]; iota(v, 0, v[] - 1,-1 ); var r[5] := {-1, 0, 1, 2, 3}; sum(v == r) == v[]",
7913 "var v[5]; iota(v, 0, v[] - 1,-2 ); var r[5] := {-2,-1, 0, 1, 2}; sum(v == r) == v[]",
7914 "var v[5]; iota(v, 0, v[] - 1, 0,0); var r[5] := { 0, 0, 0, 0, 0}; sum(v == r) == v[]",
7915 "var v[5]; iota(v, 0, v[] - 1, 1,0); var r[5] := { 1, 1, 1, 1, 1}; sum(v == r) == v[]",
7917 "var v[5]; iota(v, 1, v[] - 1, 0,1); var r[5] := { 0, 0, 1, 2, 3 }; sum(v == r) == v[]",
7918 "var v[5]; iota(v, 1, v[] - 1, 0,2); var r[5] := { 0, 0, 2, 4, 6 }; sum(v == r) == v[]",
7919 "var v[5]; iota(v, 1, v[] - 1, 1,1); var r[5] := { 0, 1, 2, 3, 4 }; sum(v == r) == v[]",
7920 "var v[5]; iota(v, 1, v[] - 1, 1,2); var r[5] := { 0, 1, 3, 5, 7 }; sum(v == r) == v[]",
7921 "var v[5]; iota(v, 1, v[] - 1,-1,1); var r[5] := { 0, -1, 0, 1, 2 }; sum(v == r) == v[]",
7922 "var v[5]; iota(v, 1, v[] - 1,-1,2); var r[5] := { 0, -1, 1, 3, 5 }; sum(v == r) == v[]",
7923 "var v[5]; iota(v, 1, v[] - 1,-2,1); var r[5] := { 0, -2,-1, 0, 1 }; sum(v == r) == v[]",
7924 "var v[5]; iota(v, 1, v[] - 1,-2,2); var r[5] := { 0, -2, 0, 2, 4 }; sum(v == r) == v[]",
7925 "var v[5]; iota(v, 1, v[] - 1, 0 ); var r[5] := { 0, 0, 1, 2, 3 }; sum(v == r) == v[]",
7926 "var v[5]; iota(v, 1, v[] - 1, 1 ); var r[5] := { 0, 1, 2, 3, 4 }; sum(v == r) == v[]",
7927 "var v[5]; iota(v, 1, v[] - 1,-1 ); var r[5] := { 0, -1, 0, 1, 2 }; sum(v == r) == v[]",
7928 "var v[5]; iota(v, 1, v[] - 1,-2 ); var r[5] := { 0, -2,-1, 0, 1 }; sum(v == r) == v[]",
7930 "var v[5]; iota(v, 1, v[] - 2, 0,1); var r[5] := { 0, 0, 1, 2, 0 }; sum(v == r) == v[]",
7931 "var v[5]; iota(v, 1, v[] - 2, 0,2); var r[5] := { 0, 0, 2, 4, 0 }; sum(v == r) == v[]",
7932 "var v[5]; iota(v, 1, v[] - 2, 1,1); var r[5] := { 0, 1, 2, 3, 0 }; sum(v == r) == v[]",
7933 "var v[5]; iota(v, 1, v[] - 2, 1,2); var r[5] := { 0, 1, 3, 5, 0 }; sum(v == r) == v[]",
7934 "var v[5]; iota(v, 1, v[] - 2,-1,1); var r[5] := { 0, -1, 0, 1, 0 }; sum(v == r) == v[]",
7935 "var v[5]; iota(v, 1, v[] - 2,-1,2); var r[5] := { 0, -1, 1, 3, 0 }; sum(v == r) == v[]",
7936 "var v[5]; iota(v, 1, v[] - 2,-2,1); var r[5] := { 0, -2,-1, 0, 0 }; sum(v == r) == v[]",
7937 "var v[5]; iota(v, 1, v[] - 2,-2,2); var r[5] := { 0, -2, 0, 2, 0 }; sum(v == r) == v[]",
7938 "var v[5]; iota(v, 1, v[] - 2, 0 ); var r[5] := { 0, 0, 1, 2, 0 }; sum(v == r) == v[]",
7939 "var v[5]; iota(v, 1, v[] - 2, 1 ); var r[5] := { 0, 1, 2, 3, 0 }; sum(v == r) == v[]",
7940 "var v[5]; iota(v, 1, v[] - 2,-1 ); var r[5] := { 0, -1, 0, 1, 0 }; sum(v == r) == v[]",
7941 "var v[5]; iota(v, 1, v[] - 2,-2 ); var r[5] := { 0, -2,-1, 0, 0 }; sum(v == r) == v[]",
7943 "var v[5]; iota(v, 0, v[] - 2, 0,1); var r[5] := { 0, 1, 2, 3, 0}; sum(v == r) == v[]",
7944 "var v[5]; iota(v, 0, v[] - 2, 0,2); var r[5] := { 0, 2, 4, 6, 0}; sum(v == r) == v[]",
7945 "var v[5]; iota(v, 0, v[] - 2, 1,1); var r[5] := { 1, 2, 3, 4, 0}; sum(v == r) == v[]",
7946 "var v[5]; iota(v, 0, v[] - 2, 1,2); var r[5] := { 1, 3, 5, 7, 0}; sum(v == r) == v[]",
7947 "var v[5]; iota(v, 0, v[] - 2,-1,1); var r[5] := {-1, 0, 1, 2, 0}; sum(v == r) == v[]",
7948 "var v[5]; iota(v, 0, v[] - 2,-1,2); var r[5] := {-1, 1, 3, 5, 0}; sum(v == r) == v[]",
7949 "var v[5]; iota(v, 0, v[] - 2,-2,1); var r[5] := {-2,-1, 0, 1, 0}; sum(v == r) == v[]",
7950 "var v[5]; iota(v, 0, v[] - 2,-2,2); var r[5] := {-2, 0, 2, 4, 0}; sum(v == r) == v[]",
7951 "var v[5]; iota(v, 0, v[] - 2, 0 ); var r[5] := { 0, 1, 2, 3, 0}; sum(v == r) == v[]",
7952 "var v[5]; iota(v, 0, v[] - 2, 1 ); var r[5] := { 1, 2, 3, 4, 0}; sum(v == r) == v[]",
7953 "var v[5]; iota(v, 0, v[] - 2,-1 ); var r[5] := {-1, 0, 1, 2, 0}; sum(v == r) == v[]",
7954 "var v[5]; iota(v, 0, v[] - 2,-2 ); var r[5] := {-2,-1, 0, 1, 0}; sum(v == r) == v[]",
7956 "var v[5]; iota(v, 0, -1); var r[5] := { 0, -1, -2, -3, -4}; sum(v == r) == v[]",
7957 "var v[5]; iota(v, 0, -2); var r[5] := { 0, -2, -4, -6, -8}; sum(v == r) == v[]",
7958 "var v[5]; iota(v, -1, -2); var r[5] := { -1, -3, -5, -7, -9}; sum(v == r) == v[]",
7960 "var v[5]; iota(v, 0, v[] -1, 0, -1); var r[5] := { 0, -1, -2, -3, -4}; sum(v == r) == v[]",
7961 "var v[5]; iota(v, 0, v[] -1, 0, -2); var r[5] := { 0, -2, -4, -6, -8}; sum(v == r) == v[]",
7962 "var v[5]; iota(v, 0, v[] -1, -1, -2); var r[5] := { -1, -3, -5, -7, -9}; sum(v == r) == v[]",
7964 "var v[5]; iota(v, 0,1); threshold_below(v,2, 0); var r[5] := { 0, 0, 2, 3, 4}; sum(v == r) == v[]",
7965 "var v[5]; iota(v, 0,1); threshold_above(v,2, 0); var r[5] := { 0, 1, 2, 0, 0}; sum(v == r) == v[]",
7967 "var v[5]; iota(v, 0,1); threshold_below(v,0,v[] - 1,2, 0); var r[5] := { 0, 0, 2, 3, 4}; sum(v == r) == v[]",
7968 "var v[5]; iota(v, 0,1); threshold_above(v,0,v[] - 1,2, 0); var r[5] := { 0, 1, 2, 0, 0}; sum(v == r) == v[]",
7970 "var v[5]; iota(v, 1,1); threshold_below(v,1,v[] - 1,2, 0); var r[5] := { 1, 2, 3, 4, 5}; sum(v == r) == v[]",
7971 "var v[5]; iota(v, 1,1); threshold_above(v,1,v[] - 1,2, 0); var r[5] := { 1, 2, 0, 0, 0}; sum(v == r) == v[]",
7973 "var v[5]; iota(v, 0,1); threshold_below(v,0,v[] - 2,2, 0); var r[5] := { 0, 0, 2, 3, 4}; sum(v == r) == v[]",
7974 "var v[5]; iota(v, 0,1); threshold_above(v,0,v[] - 2,2, 0); var r[5] := { 0, 1, 2, 0, 4}; sum(v == r) == v[]",
7976 " 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[]",
7977 " 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[]",
7979 " 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[]",
7980 " 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[]",
7981 " 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[]",
7984 const std::size_t expr_str_list_size =
sizeof(expr_str_list) /
sizeof(std::string);
7988 for (std::size_t i = 0; i < expr_str_list_size; ++i)
7990 expression_t expression;
7991 expression.register_symbol_table(symbol_table);
7993 if (!parser.compile(expr_str_list[i], expression))
7995 printf(
"run_test18() - [14] Error: %s Expression: %s\n",
7996 parser.error().c_str(),
7997 expr_str_list[i].c_str());
8004 const T result = expression.value();
8008 printf(
"run_test18() - Error in evaluation! (11) Expression: %s\n",
8009 expr_str_list[i].c_str());
8024 std::string a =
"a";
8025 std::string b =
"b";
8026 std::string c =
"c";
8027 std::string d =
"d";
8036 "T:T|T:TT|T:TTT|T:TTTT|"
8037 "T:S|T:SS|T:SSS|T:SSSS|"
8038 "T:ST|T:STS|T:STST|"
8039 "T:TS|T:TST|T:TSTS|"
8040 "T:TTSS|T:SSTT|T:STTS|T:TSST"
8059 typedef std::pair<std::string, typename overload_func<T>::test_result_t> test_pack_t;
8061 static const test_pack_t test_pack_list[] =
8063 test_pack_t(
"foo(x)" , test_result_t( 0,
"T" )),
8064 test_pack_t(
"foo(x, y)" , test_result_t( 1,
"TT" )),
8065 test_pack_t(
"foo(x, y, z)" , test_result_t( 2,
"TTT" )),
8066 test_pack_t(
"foo(x, y, z, w)" , test_result_t( 3,
"TTTT")),
8067 test_pack_t(
"foo(x + y)" , test_result_t( 0,
"T" )),
8068 test_pack_t(
"foo(x + y, y + z)" , test_result_t( 1,
"TT" )),
8069 test_pack_t(
"foo(x + y, y + z, z + w)" , test_result_t( 2,
"TTT" )),
8070 test_pack_t(
"foo(x + y, y + z, z + w, w)" , test_result_t( 3,
"TTTT")),
8071 test_pack_t(
"foo(a)" , test_result_t( 4,
"S" )),
8072 test_pack_t(
"foo(a, b)" , test_result_t( 5,
"SS" )),
8073 test_pack_t(
"foo(a, b, c)" , test_result_t( 6,
"SSS" )),
8074 test_pack_t(
"foo(a, b, c, d)" , test_result_t( 7,
"SSSS")),
8075 test_pack_t(
"foo(a + b)" , test_result_t( 4,
"S" )),
8076 test_pack_t(
"foo(a + b, b + c)" , test_result_t( 5,
"SS" )),
8077 test_pack_t(
"foo(a + b, b + c, c + d)" , test_result_t( 6,
"SSS" )),
8078 test_pack_t(
"foo(a + b, b + c, c + d, d)" , test_result_t( 7,
"SSSS")),
8079 test_pack_t(
"foo(a, x)" , test_result_t( 8,
"ST" )),
8080 test_pack_t(
"foo(a, x, b)" , test_result_t( 9,
"STS" )),
8081 test_pack_t(
"foo(a, x, b, y)" , test_result_t(10,
"STST")),
8082 test_pack_t(
"foo(a + b, x + y)" , test_result_t( 8,
"ST" )),
8083 test_pack_t(
"foo(a + b, x + y, b + c)" , test_result_t( 9,
"STS" )),
8084 test_pack_t(
"foo(a + b, x + y, b + c, y + z)" , test_result_t(10,
"STST")),
8085 test_pack_t(
"foo(x, a)" , test_result_t(11,
"TS" )),
8086 test_pack_t(
"foo(x, a, y)" , test_result_t(12,
"TST" )),
8087 test_pack_t(
"foo(x, a, y, b)" , test_result_t(13,
"TSTS")),
8088 test_pack_t(
"foo(x + y, a + b)" , test_result_t(11,
"TS" )),
8089 test_pack_t(
"foo(x + y, a + b, y + z)" , test_result_t(12,
"TST" )),
8090 test_pack_t(
"foo(x + y, a + b, y + z, b + c)" , test_result_t(13,
"TSTS")),
8091 test_pack_t(
"foo(x, y, a, b)" , test_result_t(14,
"TTSS")),
8092 test_pack_t(
"foo(a, b, x, y)" , test_result_t(15,
"SSTT")),
8093 test_pack_t(
"foo(a, x, y, b)" , test_result_t(16,
"STTS")),
8094 test_pack_t(
"foo(x, a, b, y)" , test_result_t(17,
"TSST")),
8095 test_pack_t(
"foo(x + y, y + z, a + b, b + c)" , test_result_t(14,
"TTSS")),
8096 test_pack_t(
"foo(a + b, b + c, x + y, y + z)" , test_result_t(15,
"SSTT")),
8097 test_pack_t(
"foo(a + b, x + y, y + z, b + c)" , test_result_t(16,
"STTS")),
8098 test_pack_t(
"foo(x + y, a + b, b + c, y + z)" , test_result_t(17,
"TSST"))
8101 static const std::size_t test_pack_list_size =
sizeof(test_pack_list) /
sizeof(test_pack_t);
8105 for (std::size_t i = 0; i < test_pack_list_size; ++i)
8107 expression_t expression;
8108 expression.register_symbol_table(symbol_table);
8112 if (!parser.
compile(test_pack_list[i].first, expression))
8114 printf(
"run_test18() - [15] Overload VarArg Error: %s Expression: %s\n",
8115 parser.
error().c_str(),
8116 test_pack_list[i].first.c_str());
8124 bool error_found =
false;
8132 printf(
"run_test18() - Error in evaluation! (12) Expression: %s\n",
8133 test_pack_list[i].first.c_str());
8140 printf(
"run_test18() - Error with ps_index (12) Expression: %s Expected: %d Got: %d\n",
8141 test_pack_list[i].first.c_str(),
8142 static_cast<int>(test_pack_list[i].second.ps_index),
8150 printf(
"run_test18() - Error with parameter seq (12) Expression: %s Expected: %s Got: %s\n",
8151 test_pack_list[i].first.c_str(),
8152 test_pack_list[i].second.param_seq.c_str(),
8169 std::string a =
"a";
8170 std::string b =
"b";
8171 std::string c =
"c";
8172 std::string d =
"d";
8173 std::string result =
"";
8182 "S:T|S:TT|S:TTT|S:TTTT|"
8183 "S:S|S:SS|S:SSS|S:SSSS|"
8184 "S:ST|S:STS|S:STST|"
8185 "S:TS|S:TST|S:TSTS|"
8186 "S:TTSS|S:SSTT|S:STTS|S:TSST"
8206 typedef std::pair<std::string, typename overload_func<T>::test_result_t> test_pack_t;
8208 static const test_pack_t test_pack_list[] =
8210 test_pack_t(
"result := foo(x)" , test_result_t( 0,
"T" )),
8211 test_pack_t(
"result := foo(x, y)" , test_result_t( 1,
"TT" )),
8212 test_pack_t(
"result := foo(x, y, z)" , test_result_t( 2,
"TTT" )),
8213 test_pack_t(
"result := foo(x, y, z, w)" , test_result_t( 3,
"TTTT")),
8214 test_pack_t(
"result := foo(x + y)" , test_result_t( 0,
"T" )),
8215 test_pack_t(
"result := foo(x + y, y + z)" , test_result_t( 1,
"TT" )),
8216 test_pack_t(
"result := foo(x + y, y + z, z + w)" , test_result_t( 2,
"TTT" )),
8217 test_pack_t(
"result := foo(x + y, y + z, z + w, w)" , test_result_t( 3,
"TTTT")),
8218 test_pack_t(
"result := foo(a)" , test_result_t( 4,
"S" )),
8219 test_pack_t(
"result := foo(a, b)" , test_result_t( 5,
"SS" )),
8220 test_pack_t(
"result := foo(a, b, c)" , test_result_t( 6,
"SSS" )),
8221 test_pack_t(
"result := foo(a, b, c, d)" , test_result_t( 7,
"SSSS")),
8222 test_pack_t(
"result := foo(a + b)" , test_result_t( 4,
"S" )),
8223 test_pack_t(
"result := foo(a + b, b + c)" , test_result_t( 5,
"SS" )),
8224 test_pack_t(
"result := foo(a + b, b + c, c + d)" , test_result_t( 6,
"SSS" )),
8225 test_pack_t(
"result := foo(a + b, b + c, c + d, d)" , test_result_t( 7,
"SSSS")),
8226 test_pack_t(
"result := foo(a, x)" , test_result_t( 8,
"ST" )),
8227 test_pack_t(
"result := foo(a, x, b)" , test_result_t( 9,
"STS" )),
8228 test_pack_t(
"result := foo(a, x, b, y)" , test_result_t(10,
"STST")),
8229 test_pack_t(
"result := foo(a + b, x + y)" , test_result_t( 8,
"ST" )),
8230 test_pack_t(
"result := foo(a + b, x + y, b + c)" , test_result_t( 9,
"STS" )),
8231 test_pack_t(
"result := foo(a + b, x + y, b + c, y + z)" , test_result_t(10,
"STST")),
8232 test_pack_t(
"result := foo(x, a)" , test_result_t(11,
"TS" )),
8233 test_pack_t(
"result := foo(x, a, y)" , test_result_t(12,
"TST" )),
8234 test_pack_t(
"result := foo(x, a, y, b)" , test_result_t(13,
"TSTS")),
8235 test_pack_t(
"result := foo(x + y, a + b)" , test_result_t(11,
"TS" )),
8236 test_pack_t(
"result := foo(x + y, a + b, y + z)" , test_result_t(12,
"TST" )),
8237 test_pack_t(
"result := foo(x + y, a + b, y + z, b + c)" , test_result_t(13,
"TSTS")),
8238 test_pack_t(
"result := foo(x, y, a, b)" , test_result_t(14,
"TTSS")),
8239 test_pack_t(
"result := foo(a, b, x, y)" , test_result_t(15,
"SSTT")),
8240 test_pack_t(
"result := foo(a, x, y, b)" , test_result_t(16,
"STTS")),
8241 test_pack_t(
"result := foo(x, a, b, y)" , test_result_t(17,
"TSST")),
8242 test_pack_t(
"result := foo(x + y, y + z, a + b, b + c)" , test_result_t(14,
"TTSS")),
8243 test_pack_t(
"result := foo(a + b, b + c, x + y, y + z)" , test_result_t(15,
"SSTT")),
8244 test_pack_t(
"result := foo(a + b, x + y, y + z, b + c)" , test_result_t(16,
"STTS")),
8245 test_pack_t(
"result := foo(x + y, a + b, b + c, y + z)" , test_result_t(17,
"TSST"))
8248 static const std::size_t test_pack_list_size =
sizeof(test_pack_list) /
sizeof(test_pack_t);
8252 for (std::size_t i = 0; i < test_pack_list_size; ++i)
8254 expression_t expression;
8255 expression.register_symbol_table(symbol_table);
8259 if (!parser.
compile(test_pack_list[i].first, expression))
8261 printf(
"run_test18() - [16] Overload VarArg Error: %s Expression: %s\n",
8262 parser.
error().c_str(),
8263 test_pack_list[i].first.c_str());
8271 bool error_found =
false;
8279 if (result !=
"string result")
8281 printf(
"run_test18() - Error in evaluation! (13) Expression: %s\n",
8282 test_pack_list[i].first.c_str());
8289 printf(
"run_test18() - Error with ps_index (13) Expression: %s Expected: %d Got: %d\n",
8290 test_pack_list[i].first.c_str(),
8291 static_cast<int>(test_pack_list[i].second.ps_index),
8299 printf(
"run_test18() - Error with parameter seq (13) Expression: %s Expected: %s Got: %s\n",
8300 test_pack_list[i].first.c_str(),
8301 test_pack_list[i].second.param_seq.c_str(),
8319 typedef std::pair<std::string,std::size_t> rtc_test_t;
8320 static const rtc_test_t rtc_tests[] =
8322 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i + v[]]; } ", 5 ),
8323 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i + 10]; } ", 5 ),
8324 std::make_pair(
" x:= 0; for (var i := 0; i < (2 * v[]); i += 1) { x += (v[i] == vv[i]); } ", 10),
8325 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i + v[]] := i; } ", 5 ),
8326 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i + v[]] <=> v[i]; } ", 5 ),
8327 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i] <=> v[i + v[]]; } ", 10),
8328 std::make_pair(
" var z[5] := [1]; for (var i := 0; i < z[]; i += 1) { z[i + z[]]; } ", 5 ),
8329 std::make_pair(
" var z[5] := [1]; for (var i := 0; i < z[]; i += 1) { z[i + 10]; } ", 5 ),
8330 std::make_pair(
" var z[5] := [1]; for (var i := 0; i < z[]; i += 1) { z[i + z[]] := i; } ", 5 ),
8331 std::make_pair(
" var z[5] := [1]; for (var i := 0; i < z[]; i += 1) { z[i + z[]] <=> z[i]; } ", 5 ),
8332 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v*w)[i + v[]]; } ", 10),
8333 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v*w)[i+w[]]; } ", 10),
8334 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v+w)[i + v[]]; } ", 10),
8335 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v+w)[i+w[]]; } ", 10),
8336 std::make_pair(
" var z[4] := [1]; for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v*z)[i+v[]]; } ", 10),
8337 std::make_pair(
" var z[4] := [1]; for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v*z)[i+w[]]; } ", 9 ),
8338 std::make_pair(
" var z[4] := [1]; for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v+z)[i+v[]]; } ", 10),
8339 std::make_pair(
" var z[4] := [1]; for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v+z)[i+z[]]; } ", 10),
8340 std::make_pair(
" var xx := 1; var yy := 1; var qq[5] := {0,1,2,3,4}; var i[5] := {0,1,2,3,4}; qq[i[0]] += xx ", 0 ),
8341 std::make_pair(
" var xx := 1; var yy := 1; var qq[5] := {0,1,2,3,4}; var i[5] := {0,1,2,3,4}; ((qq[1] + xx) == (xx + qq[1])) ", 0 ),
8342 std::make_pair(
" var xx := 1; var yy := 1; var qq[5] := {0,1,2,3,4}; var i[5] := {0,1,2,3,4}; ((qq[0] += xx) == xx) ", 0 ),
8343 std::make_pair(
" var xx := 1; var yy := 1; var qq[5] := {0,1,2,3,4}; var i[5] := {0,1,2,3,4}; ((qq[0] += xx + yy) == (xx + yy)) ", 0 ),
8344 std::make_pair(
" var xx := 1; var yy := 1; var qq[5] := {0,1,2,3,4}; var i[5] := {0,1,2,3,4}; ((qq[0] -= xx) == -xx) ", 0 ),
8345 std::make_pair(
" var xx := 1; var yy := 1; var qq[5] := {0,1,2,3,4}; var i[5] := {0,1,2,3,4}; ((qq[0] -= (xx + yy)) == -(xx + yy)) ", 0 ),
8346 std::make_pair(
" var xx := 1; var yy := 1; var qq[5] := {0,1,2,3,4}; var i[5] := {0,1,2,3,4}; ((qq[1] + qq[2]) == (qq[3 - 1] + qq[2 * 1/2]))", 0 ),
8347 std::make_pair(
" var xx := 1; var yy := 1; var qq[5] := {0,1,2,3,4}; var i[5] := {0,1,2,3,4}; (qq[qq[1]] == qq[1]) ", 0 ),
8348 std::make_pair(
" var xx := 1; var yy := 1; var qq[5] := {0,1,2,3,4}; var i[5] := {0,1,2,3,4}; (qq[1] += qq[1]) == qq[1 + 1] ", 0 ),
8349 std::make_pair(
" var xx := 1; var yy := 1; var qq[5] := {0,1,2,3,4}; var i[5] := {0,1,2,3,4}; ((qq[i[1]] + xx) == (xx + qq[i[1]])) ", 0 ),
8350 std::make_pair(
" var xx := 1; var yy := 1; var qq[5] := {0,1,2,3,4}; var i[5] := {0,1,2,3,4}; ((qq[i[0]] += xx) == xx) ", 0 ),
8351 std::make_pair(
" var xx := 1; var yy := 1; var qq[5] := {0,1,2,3,4}; var i[5] := {0,1,2,3,4}; ((qq[i[0]] += xx + yy) == (xx + yy)) ", 0 ),
8352 std::make_pair(
" var xx := 1; var yy := 1; var qq[5] := {0,1,2,3,4}; var i[5] := {0,1,2,3,4}; ((qq[i[0]] -= xx) == -xx) ", 0 ),
8353 std::make_pair(
" var xx := 1; var yy := 1; var qq[5] := {0,1,2,3,4}; var i[5] := {0,1,2,3,4}; ((qq[i[0]] -= (xx + yy)) == -(xx + yy))", 0 ),
8354 std::make_pair(
" var xx := 1; var yy := 1; var qq[5] := {0,1,2,3,4}; var i[5] := {0,1,2,3,4}; ((qq[i[1]] + qq[2]) == (qq[i[3] - i[1]] + qq[i[2] * 1/2]))", 0 ),
8355 std::make_pair(
" var xx := 1; var yy := 1; var qq[5] := {0,1,2,3,4}; var i[5] := {0,1,2,3,4}; (qq[qq[i[1]]] == qq[i[1]]) ", 0 ),
8356 std::make_pair(
" var xx := 1; var yy := 1; var qq[5] := {0,1,2,3,4}; var i[5] := {0,1,2,3,4}; (qq[i[1]] += qq[i[1]]) == qq[i[1] + 1] ", 0 ),
8359 static const std::size_t rtc_tests_size =
sizeof(rtc_tests) /
sizeof(rtc_test_t);
8361 bool error_found =
false;
8363 for (std::size_t i = 0; i < rtc_tests_size; ++i)
8365 const std::string& expression_str = rtc_tests[i].first;
8369 T v[5] = { 0, 1, 2, 3, 4 };
8370 T w[3] = { 0, 1, 2 };
8374 symbol_table_t symbol_table;
8375 expression_t expression;
8378 symbol_table.add_variable(
"x" , x );
8379 symbol_table.add_vector (
"v" , v );
8380 symbol_table.add_vector (
"w" , w );
8381 symbol_table.add_vector (
"vv", vv);
8382 symbol_table.add_vector (
"ww", ww);
8386 expression.register_symbol_table(symbol_table);
8388 parser.register_vector_access_runtime_check(vartc);
8390 if (!parser.compile(expression_str, expression))
8392 printf(
"run_test18() - Error: %s\t [1] Expression: %s\n",
8393 parser.error().c_str(),
8394 expression_str.c_str());
8403 if (vartc.
rtc_count != rtc_tests[i].second)
8405 printf(
"run_test18() - Expected rtc_count: %d got rtc_count: %d [0] Expression: %s\n",
8406 static_cast<unsigned int>(rtc_tests[i].second),
8407 static_cast<unsigned int>(vartc.
rtc_count),
8408 expression_str.c_str());
8415 T v[5] = { 0, 1, 2, 3, 4 };
8416 T w[3] = { 0, 1, 2 };
8417 T v0[5] = { 0, 1, 2, 3, 4 };
8418 T v1[5] = { 0, 1, 2, 3, 4 };
8422 symbol_table_t symbol_table;
8423 expression_t expression;
8426 symbol_table.add_variable(
"x" , x );
8427 symbol_table.add_vector (
"v" , v );
8428 symbol_table.add_vector (
"w" , w );
8429 symbol_table.add_vector (
"vv", vv);
8430 symbol_table.add_vector (
"ww", ww);
8434 expression.register_symbol_table(symbol_table);
8436 parser.register_vector_access_runtime_check(vartc);
8438 if (!parser.compile(expression_str, expression))
8440 printf(
"run_test18() - Error: %s\t [2] Expression: %s\n",
8441 parser.error().c_str(),
8442 expression_str.c_str());
8452 if (vartc.
rtc_count != rtc_tests[i].second)
8454 printf(
"run_test18() - Expected rtc_count: %d got rtc_count: %d [1] Expression: %s\n",
8455 static_cast<unsigned int>(rtc_tests[i].second),
8456 static_cast<unsigned int>(vartc.
rtc_count),
8457 expression_str.c_str());
8465 if (vartc.
rtc_count != rtc_tests[i].second)
8467 printf(
"run_test18() - Expected rtc_count: %d got rtc_count: %d [2] Expression: %s\n",
8468 static_cast<unsigned int>(rtc_tests[i].second),
8469 static_cast<unsigned int>(vartc.
rtc_count),
8470 expression_str.c_str());
8515 typedef typename compositor_t::function function_t;
8520 compositor_t compositor;
8523 compositor.add(function_t(
"f",
"x + 2",
"x"));
8526 compositor.add(function_t(
"g",
"x^2 - 3",
"x"));
8529 compositor.add(function_t(
"fof",
"f(f(x))",
"x"));
8532 compositor.add(function_t(
"gog",
"g(g(x))",
"x"));
8535 compositor.add(function_t(
"fog",
"f(g(x))",
"x"));
8538 compositor.add(function_t(
"gof",
"g(f(x))",
"x"));
8541 compositor.add(function_t(
"fogof",
"f(g(f(x)))",
"x"));
8544 compositor.add(function_t(
"gofog",
"g(f(g(x)))",
"x"));
8546 symbol_table_t& symbol_table = compositor.symbol_table();
8547 symbol_table.add_constants();
8548 symbol_table.add_variable(
"x", x);
8550 static const std::string expr_str_list[] =
8552 "equal(f(x),(x + 2))",
8553 "equal(g(x),(x^2 - 3))",
8554 "equal(fof(x),(x + 4))",
8555 "equal(gog(x),(x^4 - 6x^2 + 6))",
8556 "equal(fog(x),(x^2 - 1))",
8557 "equal(gof(x),(x^2 + 4x + 1))",
8558 "equal(fogof(x),(x^2 + 4x + 3))",
8559 "equal(gofog(x),(x^4 - 2x^2 - 2))"
8561 static const std::size_t expr_str_list_size =
sizeof(expr_str_list) /
sizeof(std::string);
8565 for (std::size_t i = 0; i < expr_str_list_size; ++i)
8567 expression_t expression;
8568 expression.register_symbol_table(symbol_table);
8572 if (!parser.compile(expr_str_list[i], expression))
8574 printf(
"run_test19() - Error: %s Expression: %s\n",
8575 parser.error().c_str(),
8576 expr_str_list[i].c_str());
8584 bool error_found =
false;
8590 printf(
"run_test19() - Error in evaluation! (1) Expression: %s\n",
8591 expr_str_list[i].c_str());
8604 const std::size_t
rounds = 100;
8606 for (std::size_t r = 0; r <
rounds; ++r)
8615 compositor_t compositor;
8621 .expression(
"3 * 2"));
8628 .expression(
"5 * (f0 + x)"));
8635 .expression(
"7 * (f1(x) + f1(y))"));
8641 .var(
"x").var(
"y").var(
"z")
8642 .expression(
"9 * (f2(x,y) + f2(y,z) + f2(x,z))"));
8648 .var(
"x").var(
"y").var(
"z").var(
"w")
8649 .expression(
"11 * (f3(x,y,z) + f3(y,z,w) + f3(z,w,x))"));
8655 .var(
"x").var(
"y").var(
"z").var(
"w").var(
"u")
8656 .expression(
"13 * (f4(x,y,z,w) + f4(y,z,w,u) + f4(z,w,u,x) + f4(w,u,x,y))"));
8662 .var(
"x").var(
"y").var(
"z")
8663 .var(
"w").var(
"u").var(
"v")
8664 .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))"));
8666 symbol_table_t& symbol_table = compositor.symbol_table();
8667 symbol_table.add_constants();
8668 symbol_table.add_variable(
"x", x);
8669 symbol_table.add_variable(
"y", y);
8670 symbol_table.add_variable(
"z", z);
8671 symbol_table.add_variable(
"w", w);
8672 symbol_table.add_variable(
"u", u);
8673 symbol_table.add_variable(
"v", v);
8677 const std::string expr_str_list[] =
8693 const std::size_t expr_str_list_size =
sizeof(expr_str_list) /
sizeof(std::string);
8695 const T result_list[] =
8711 bool error_found =
false;
8713 for (std::size_t i = 0; i < expr_str_list_size; ++i)
8715 expression_t expression;
8716 expression.register_symbol_table(symbol_table);
8718 if (!parser.compile(expr_str_list[i], expression))
8720 printf(
"run_test19() - Error: %s Expression: %s\n",
8721 parser.error().c_str(),
8722 expr_str_list[i].c_str());
8728 const T result = expression.value();
8730 if (result_list[i] != result)
8732 printf(
"run_test19() - Error in evaluation! (2) Expression: %s Expected: %10.1f\tResult: %10.1f\n",
8733 expr_str_list[i].c_str(),
8752 compositor_t compositor;
8759 " if (0 == (x % y),false, "
8760 " is_prime_impl1(x,y - 1))) ",
8767 "if (frac(x) != 0, false, "
8768 " if (x <= 0, false, "
8769 " is_prime_impl1(x,min(x - 1,trunc(sqrt(x)) + 1)))) ",
8778 " case y == 1 : true; "
8779 " case (x % y) == 0 : false; "
8780 " default : is_prime_impl2(x,y - 1);"
8790 " case x <= 0 : false; "
8791 " case frac(x) != 0 : false; "
8792 " default : is_prime_impl2(x,min(x - 1,trunc(sqrt(x)) + 1));"
8804 " case y == 1 : ~(y := 0, true);"
8805 " case (x % y) == 0 : ~(y := 0,false);"
8806 " default : y := y - 1; "
8817 " case x <= 0 : false; "
8818 " case frac(x) != 0 : false; "
8819 " default : is_prime_impl3(x,min(x - 1,trunc(sqrt(x)) + 1));"
8829 " case 1 == x : false; "
8830 " case 2 == x : true; "
8831 " case 3 == x : true; "
8832 " case 5 == x : true; "
8833 " case 7 == x : true; "
8834 " case 0 == x % 2 : false; "
8837 " for (var i := 3; i < y; i += 2) "
8839 " if ((x % i) == 0) "
8854 " case x <= 0 : false; "
8855 " case frac(x) != 0 : false; "
8856 " default : is_prime_impl4(x,min(x - 1,trunc(sqrt(x)) + 1));"
8860 symbol_table_t& symbol_table = compositor.symbol_table();
8861 symbol_table.add_constants();
8862 symbol_table.add_variable(
"x",x);
8864 const std::string expression_str[] =
8872 const std::size_t expression_count =
sizeof(expression_str) /
sizeof(std::string);
8876 for (std::size_t i = 0; i < expression_count; ++i)
8880 expression_t expression;
8881 expression.register_symbol_table(symbol_table);
8883 if (!parser.compile(expression_str[i],expression))
8885 printf(
"run_test19() - Error: %s Expression%d: %s\n",
8886 parser.error().c_str(),
8887 static_cast<unsigned int>(i),
8888 expression_str[i].c_str());
8896 bool error_found =
false;
8898 const std::size_t prime_list[] =
8900 2, 3, 5, 7, 11, 13, 17, 19,
8901 877, 947, 1087, 1153, 1229, 1297, 1381, 1453,
8902 1523, 1597, 1663, 1741, 1823, 1901, 1993, 2063,
8903 2131, 2221, 2293, 2371, 2437, 2539, 2621, 2689,
8904 2749, 2833, 2909, 3001, 3083, 3187, 3259, 3343,
8905 3433, 3517, 3581, 3659, 3733, 3823, 3911, 4001,
8906 4073, 4153, 4241, 4327, 4421, 4507, 4591, 4663,
8907 4759, 4861, 4943, 5009, 5099, 5189, 5281, 5393,
8908 5449, 5527, 5641, 5701, 5801, 5861, 5953, 6067,
8909 6143, 6229, 6311, 6373, 6481, 6577, 6679, 6763,
8910 6841, 6947, 7001, 7109, 7211, 7307, 7417, 7507,
8911 104309, 104311, 104323, 104327, 104347, 104369, 104381, 104383,
8912 104393, 104399, 104417, 104459, 104471, 104473, 104479, 104491,
8913 104513, 104527, 104537, 104543, 104549, 104551, 104561, 104579,
8914 104593, 104597, 104623, 104639, 104651, 104659, 104677, 104681,
8915 104683, 104693, 104701, 104707, 104711, 104717, 104723, 104729,
8916 1000621, 1000639, 1000651, 1000667, 1000669, 1001023, 1001027, 1001041
8919 const std::size_t prime_list_size =
sizeof(prime_list) /
sizeof(std::size_t);
8921 for (std::size_t i = 0; (i < prime_list_size) && (!error_found); ++i)
8923 x =
static_cast<T
>(prime_list[i]);
8925 std::vector<T> result(expression_count,T(0));
8934 if (result[j] != result[0])
8943 printf(
"run_test19() - Error in evaluation! (3) Results don't match! Prime: %d\n",
8944 static_cast<unsigned int>(prime_list[i]));
8948 printf(
"Expression[%02d]: %s = %d\n",
8949 static_cast<unsigned int>(j),
8950 expression_str[j].c_str(),
8951 static_cast<unsigned int>(result[j]));
8956 printf(
"run_test19() - Error in evaluation! (4) Results don't match! Prime: %d\n",
8957 static_cast<unsigned int>(prime_list[i]));
8961 printf(
"Expression[%02d]: %s = %d\n",
8962 static_cast<unsigned int>(j),
8963 expression_str[j].c_str(),
8964 static_cast<unsigned int>(result[j]));
8978 compositor_t compositor;
8986 " fibonacci1(x - 1) + fibonacci1(x - 2)))",
8995 " case x == 0 : 0; "
8996 " case x == 1 : 1; "
8997 " default : fibonacci2(x - 1) + fibonacci2(x - 2);"
9007 " case x == 0 : 0; "
9008 " case x == 1 : 1; "
9010 " while ((x := (x - 1)) > 0) "
9024 "fibonacci_impl3(x,0,1,0)",
9033 " case x == 0 : 0; "
9034 " case x == 1 : 1; "
9050 "fibonacci_impl4(x,0,1,0)",
9057 "if ((x == 0) or (x == 1)) "
9060 " fibonacci5(x - 1) + fibonacci5(x - 2); ",
9063 symbol_table_t& symbol_table = compositor.symbol_table();
9065 symbol_table.add_constants();
9066 symbol_table.add_variable(
"x",x);
9068 const std::string expression_str[] =
9077 const std::size_t expression_count =
sizeof(expression_str) /
sizeof(std::string);
9081 for (std::size_t i = 0; i < expression_count; ++i)
9085 expression_t expression;
9086 expression.register_symbol_table(symbol_table);
9088 if (!parser.compile(expression_str[i],expression))
9090 printf(
"run_test19() - Error: %s Expression[%02d]: %s\n",
9091 parser.error().c_str(),
9092 static_cast<unsigned int>(i),
9093 expression_str[i].c_str());
9101 bool error_found =
false;
9103 const std::size_t fibonacci_list[] =
9109 987, 1597, 2584, 4181,
9110 6765, 10946, 17711, 28657,
9111 46368, 75025, 121393, 196418,
9112 317811, 514229, 832040, 1346269
9115 const std::size_t fibonacci_list_size =
sizeof(fibonacci_list) /
sizeof(std::size_t);
9117 for (std::size_t i = 0; (i < fibonacci_list_size) && (!error_found); ++i)
9119 x =
static_cast<T
>(i);
9121 std::vector<T> result(expression_count,T(0));
9130 if (result[j] != result[0])
9139 printf(
"run_test19() - Error in evaluation! (5) Results don't match! fibonacci(%d) = %d\n",
9140 static_cast<unsigned int>(i),
9141 static_cast<unsigned int>(fibonacci_list[i]));
9145 printf(
"Expression[%02d]: %s = %d\n",
9146 static_cast<unsigned int>(j),
9147 expression_str[j].c_str(),
9148 static_cast<unsigned int>(result[j]));
9153 printf(
"run_test19() - Error in evaluation! (6) Results don't match! fibonacci(%d) = %d\n",
9154 static_cast<unsigned int>(i),
9155 static_cast<unsigned int>(fibonacci_list[i]));
9159 printf(
"Expression[%02d]: %s = %d\n",
9160 static_cast<unsigned int>(j),
9161 expression_str[j].c_str(),
9162 static_cast<unsigned int>(result[j]));
9176 symbol_table_t symbol_table;
9178 symbol_table.add_constants();
9179 symbol_table.add_variable(
"x",x);
9181 compositor_t compositor(symbol_table);
9189 " case x < 0 : -inf; "
9190 " case x == 0 : 0; "
9191 " case x == 1 : 1; "
9197 " y := (1 / 2) * (y + (x / y)); "
9198 " if (equal(y * y,x)) "
9200 " until ((z -= 1) <= 0); "
9209 "newton_sqrt_impl(x,0,0)",
"x"));
9211 std::string expression_str =
"newton_sqrt(x)";
9213 expression_t expression;
9215 expression.register_symbol_table(symbol_table);
9219 if (!parser.compile(expression_str,expression))
9221 printf(
"run_test19() - Error: %s Expression: %s\n",
9222 parser.error().c_str(),
9223 expression_str.c_str());
9228 bool error_found =
false;
9230 for (std::size_t i = 0; i < 100; ++i)
9232 x =
static_cast<T
>(i);
9234 const T result = expression.value();
9236 if (
not_equal(result, std::sqrt(x), T(0.0000001)))
9238 printf(
"run_test19() - Computation Error "
9239 "Expression: [%s]\tExpected: %12.8f\tResult: %12.8f\n",
9240 expression_str.c_str(),
9241 static_cast<double>(std::sqrt(x)),
9242 static_cast<double>(result));
9255 symbol_table_t symbol_table;
9257 symbol_table.add_constants();
9259 compositor_t compositor(symbol_table);
9265 " var width := 118; "
9266 " var height := 41; "
9267 " var imag_max := +1; "
9268 " var imag_min := -1; "
9269 " var real_max := +1; "
9270 " var real_min := -2.5; "
9271 " var x_step := (real_max - real_min) / width; "
9272 " var y_step := (imag_max - imag_min) / height; "
9273 " for (var y := 0; y < height; y += 1) "
9275 " var imag := imag_min + (y_step * y); "
9276 " for (var x := 0; x < width; x += 1) "
9278 " var real := real_min + x_step * x; "
9279 " var z_real := real; "
9280 " var z_imag := imag; "
9282 " for (var n := 0; n < 30; n += 1) "
9284 " var a := z_real^2; "
9285 " var b := z_imag^2; "
9286 " plot_value := n; "
9287 " if ((a + b) < 4) "
9289 " z_imag := 2 * z_real * z_imag + imag; "
9290 " z_real := a - b + real; "
9298 std::string expression_str =
"mandelbrot()";
9300 expression_t expression;
9302 expression.register_symbol_table(symbol_table);
9306 if (!parser.compile(expression_str,expression))
9308 printf(
"run_test19() - Error: %s Expression: %s\n",
9309 parser.error().c_str(),
9310 expression_str.c_str());
9315 for (std::size_t i = 0; i < 100; ++i)
9324 symbol_table_t symbol_table;
9326 symbol_table.add_variable(
"x",x);
9328 compositor_t compositor(symbol_table);
9336 " fooboo(x - 1) + x; "
9341 std::string expression_str =
"fOoBoO(x)";
9343 expression_t expression;
9345 expression.register_symbol_table(symbol_table);
9349 if (!parser.compile(expression_str,expression))
9351 printf(
"run_test19() - Error: %s Expression: %s\n",
9352 parser.error().c_str(),
9353 expression_str.c_str());
9360 for (std::size_t i = 0; i < 100; ++i)
9366 const T result = expression.value();
9370 printf(
"run_test19() - FooBoo(%5.2f) Expected: %5.2f\tResult: %5.2f\n",
9381 const std::pair<std::string,std::string> test_funcprog[] =
9385 " var s := depth_to_str(depth); "
9389 " if (recursive(depth - 1) == false) "
9395 " s == depth_to_str(depth); ",
9402 " var v[7] := [ depth ]; "
9406 " if (recursive(depth - 1) == false) "
9412 " return [sum(v == depth) == v[]]; ",
9419 " var v1[ 7] := [ depth ]; "
9420 " var v2[21] := [ depth ]; "
9424 " if (recursive(depth - 1) == false) "
9430 " (sum(v1 == depth) == v1[]) and "
9431 " (sum(v2 == depth) == v2[]) ; "
9439 " var s := depth_to_str(depth); "
9441 " for (var i := 0; i < 2; i += 1) "
9445 " if (recursive(depth - 1) == false) "
9452 " s == depth_to_str(depth); ",
9459 " var s := depth_to_str(depth); "
9461 " for (var i := 0; i < 2; i += 1) "
9463 " for (var j := 0; j < 2; j += 1) "
9467 " if (recursive(depth - 1) == false) "
9475 " s == depth_to_str(depth); ",
9482 " var v[7] := [ depth ]; "
9484 " for (var i := 0; i < 2; i += 1) "
9486 " var w[21] := [ depth + 1 ]; "
9490 " if (recursive(depth - 1) == false) "
9496 " if (sum(w == (depth + 1)) != w[]) "
9502 " return [sum(v == depth) == v[]]; ",
9509 " var v[7] := [ depth ]; "
9511 " for (var i := 0; i < 2; i += 1) "
9513 " var u[21] := [ depth + 1 ]; "
9515 " for (var j := 0; j < 2; j += 1) "
9517 " var w[35] := [ depth + 2 ]; "
9521 " if (recursive(depth - 1) == false) "
9527 " if (sum(w == (depth + 2)) != w[]) "
9533 " if (sum(u == (depth + 1)) != u[]) "
9539 " return [sum(v == depth) == v[]]; ",
9546 " var s := depth_to_str(depth); "
9547 " var v[7] := [ depth ]; "
9551 " if (recursive(depth - 1) == false) "
9559 " (s == depth_to_str(depth)) and "
9560 " (sum(v == depth) == v[]) "
9568 " var s0 := depth_to_str(depth); "
9569 " var v0[7] := [ depth ]; "
9570 " var s1 := depth_to_str(depth); "
9571 " var v1[42] := [ depth ]; "
9575 " if (recursive(depth - 1) == false) "
9583 " (s0 == depth_to_str(depth)) and "
9584 " (sum(v0 == depth) == v0[]) and "
9585 " (s1 == depth_to_str(depth)) and "
9586 " (sum(v1 == depth) == v1[]) "
9594 " var s := depth_to_str(depth); "
9595 " var v[7] := [ depth ]; "
9597 " for (var i := 0; i < 2; i += 1) "
9601 " if (recursive(depth - 1) == false) "
9610 " (s == depth_to_str(depth)) and "
9611 " (sum(v == depth) == v[]) "
9619 " var s0 := depth_to_str(depth); "
9620 " var v0[7] := [ depth ]; "
9621 " var s1 := depth_to_str(depth); "
9622 " var v1[42] := [ depth ]; "
9624 " for (var i := 0; i < 2; i += 1) "
9628 " if (recursive(depth - 1) == false) "
9637 " (s0 == depth_to_str(depth)) and "
9638 " (sum(v0 == depth) == v0[]) and "
9639 " (s1 == depth_to_str(depth)) and "
9640 " (sum(v1 == depth) == v1[]) "
9648 " var s0 := depth_to_str(depth); "
9649 " var v0[7] := [ depth ]; "
9651 " for (var i := 0; i < 2; i += 1) "
9653 " var s1 := depth_to_str(depth); "
9654 " var v1[21] := [ depth + 1 ]; "
9658 " if (recursive(depth - 1) == false) "
9664 " if (s1 != depth_to_str(depth)) "
9669 " if (sum(v1 == (depth + 1)) != v1[]) "
9677 " (s0 == depth_to_str(depth)) and "
9678 " (sum(v0 == depth) == v0[]) "
9689 " recursive(depth - 1) + "
9690 " recursive(depth - 2) ; ",
9695 " for (var i := 0; i < n; i += 1) "
9697 " total += recursive(i); "
9704 const std::size_t test_funcprog_size =
sizeof(test_funcprog) /
sizeof(std::pair<std::string,std::string>);
9705 const std::size_t
rounds = 5;
9709 for (std::size_t r = 0; r <
rounds; ++r)
9711 for (std::size_t i = 0; i < test_funcprog_size; ++i)
9715 symbol_table_t symbol_table;
9716 symbol_table.add_function(
"depth_to_str",dts);
9718 compositor_t compositor(symbol_table);
9720 const bool comp_result = compositor.add(
9721 function_t(
"recursive")
9724 ( test_funcprog[i].first ));
9728 printf(
"run_test19() - Compositor Error: %s\nfunction: %s\n",
9729 compositor.error().c_str(),
9730 test_funcprog[i].first.c_str());
9736 expression_t expression;
9737 expression.register_symbol_table(symbol_table);
9741 if (!parser.compile(test_funcprog[i].second, expression))
9743 printf(
"run_test19() - Error: %s Expression: %s\n",
9744 parser.error().c_str(),
9745 test_funcprog[i].second.c_str());
9751 if (T(1) != expression.value())
9753 printf(
"run_test19() - Evaluation Error: test_funcprog %d function: %s\n",
9754 static_cast<int>(i),
9755 test_funcprog[i].second.c_str());
9770 symbol_table_t symbol_table;
9772 symbol_table.add_constants();
9774 const std::string expression_string =
9775 " var sieve[10^7] := [false]; "
9776 " var m := trunc(sqrt(sieve[])); "
9778 " sieve[0] := true; "
9779 " sieve[1] := true; "
9781 " for (var i := 0; i <= m; i += 1) "
9783 " if (false == sieve[i]) "
9785 " for (var j := (i * i); j < sieve[]; j += i) "
9787 " sieve[j] := true; "
9792 " var prime_count := 0; "
9793 " for (var i := 0; i < sieve[]; i += 1) "
9795 " if (false == sieve[i]) "
9797 " prime_count += 1; "
9801 " prime_count == 664579; ";
9803 expression_t expression;
9805 expression.register_symbol_table(symbol_table);
9809 if (!parser.compile(expression_string,expression))
9811 printf(
"run_test19() - Error: %s Expression: %s\n",
9812 parser.error().c_str(),
9813 expression_string.c_str());
9818 if (T(1) != expression.value())
9820 printf(
"run_test19() - Prime Sieve Computation Error");
9827 symbol_table_t symbol_table;
9829 symbol_table.add_constants();
9831 const std::string expression_str[] =
9833 "var delta := 10^-7; var total := 0; for (var i := 0; i <= 3; i += delta) { total += "
9834 "erf(i) }; abs((delta * total) - (3 * erf(3) + (1 / exp(9) - 1) / sqrt(pi))) < 0.000001",
9836 "var delta := 10^-7; var total := 0; for (var i := 0; i <= 3; i += delta) { total += "
9837 "erfc(i) }; abs((delta * total) - (3 * erfc(3) + ((1 - 1 / exp(9)) / sqrt(pi)))) < 0.000001"
9844 for (std::size_t i = 0; i < 2; ++i)
9846 e[i].register_symbol_table(symbol_table);
9848 if (!parser.compile(expression_str[i],e[i]))
9850 printf(
"run_test19() - Error: %s Expression: %s\n",
9851 parser.error().c_str(),
9852 expression_str[i].c_str());
9857 if (T(1) != e[i].value())
9859 printf(
"run_test19() - erf/erfc computation error %d",
9860 static_cast<unsigned int>(i));
10398 bool error_found =
false;
10405 symbol_table_t symbol_table;
10406 symbol_table.add_constants();
10407 symbol_table.add_variable(
"x",x);
10408 symbol_table.add_variable(
"y",y);
10409 symbol_table.add_variable(
"z",z);
10416 "return[x + y,y - x]; x;",
10417 "return[x + y,y - x,'abc']; x;",
10418 "if (x < y) return [1,'abc1']; else return [2,'abc2',x];" ,
10419 "if (x > y) return [1,'abc1']; else return [2,'abc2',x];" ,
10420 "if (x < y) { return [1,'abc1'];} else { return [2,'abc2',x];}",
10421 "if (x > y) { return [1,'abc1'];} else { return [2,'abc2',x];}",
10422 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [1]; } ",
10423 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [1,'abc']; } ",
10424 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [1,'abc',x]; }",
10425 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [1,'abc',x,y]; }",
10426 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [1,'abc',x,y,z]; }",
10427 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [2,'abc2',x]; else x += 1; }",
10428 "for(var i := 0; i < 10; i += 1) { if (i == 5) { return [1,'abc1'];} else x += 1; }"
10431 static const std::string result_list[] =
10455 expression_t expression;
10456 expression.register_symbol_table(symbol_table);
10462 printf(
"run_test21() - Error: %s Expression: %s [1]\n",
10463 parser.error().c_str(),
10466 error_found =
true;
10469 else if (!parser.dec().return_present())
10471 printf(
"run_test21() - Expected a return statement Expression: %s [1]\n",
10474 error_found =
true;
10478 expression.value();
10480 std::string pattern = results_to_string<T>(expression.results());
10482 if (!expression.return_invoked())
10484 printf(
"run_test21() - Invalid return invoke state [1] Expression: %s\n",
10487 error_found =
true;
10490 else if (result_list[i] != pattern)
10492 printf(
"run_test21() - Invalid return results [1] Expected %s Got: %s Expression: %s\n",
10493 result_list[i].c_str(),
10497 error_found =
true;
10513 symbol_table_t symbol_table;
10514 symbol_table.add_constants();
10515 symbol_table.add_variable(
"x",x);
10516 symbol_table.add_variable(
"y",y);
10517 symbol_table.add_variable(
"z",z);
10521 "x := 1; x + 1; x + 2; x + 3; x + 5; x + 7; return [x + 1]; ",
10522 "x := 1; x + 1; x + 2; x + 3; x + 5; return [x + 1]; x := 7; ",
10523 "x := 1; x + 1; x + 2; x + 3; return [x + 1]; x + 5; x := 7; ",
10524 "x := 1; x + 1; x + 2; return [x + 1]; x + 3; x + 5; x := 7; ",
10525 "x := 1; x + 1; return [x + 1]; x + 2; x + 3; x + 5; x := 7; ",
10526 "x := 1; return [x + 1]; x + 1; x + 2; x + 3; x + 5; x := 7; ",
10527 "return [x + 1]; x := 1; x + 1; x + 2; x + 3; x + 5; x := 7; ",
10528 "~{x := 1; x + 1; x + 2; x + 3; x + 5; x + 7; return [x + 1]}",
10529 "~{x := 1; x + 1; x + 2; x + 3; x + 5; return [x + 1]; x := 7}",
10530 "~{x := 1; x + 1; x + 2; x + 3; return [x + 1]; x + 5; x := 7}",
10531 "~{x := 1; x + 1; x + 2; return [x + 1]; x + 3; x + 5; x := 7}",
10532 "~{x := 1; x + 1; return [x + 1]; x + 2; x + 3; x + 5; x := 7}",
10533 "~{x := 1; return [x + 1]; x + 1; x + 2; x + 3; x + 5; x := 7}",
10534 "~{return [x + 1]; x := 1; x + 1; x + 2; x + 3; x + 5; x := 7}"
10537 static const std::string result_list[] =
10539 "T",
"T",
"T",
"T",
"T",
"T",
"T",
10540 "T",
"T",
"T",
"T",
"T",
"T",
"T",
10547 expression_t expression;
10548 expression.register_symbol_table(symbol_table);
10554 printf(
"run_test21() - Error: %s Expression: %s [2]\n",
10555 parser.error().c_str(),
10558 error_found =
true;
10561 else if (!parser.dec().return_present())
10563 printf(
"run_test21() - Expected a return statement Expression: %s [2]\n",
10566 error_found =
true;
10570 expression.value();
10572 std::string pattern = results_to_string<T>(expression.results());
10574 if (!expression.return_invoked())
10576 printf(
"run_test21() - Invalid return invoke state [2] Expression: %s\n",
10579 error_found =
true;
10582 else if (result_list[i] != pattern)
10584 printf(
"run_test21() - Invalid return results [2] Expected %s Got: %s Expression: %s\n",
10585 result_list[i].c_str(),
10589 error_found =
true;
10592 else if (!
result_equal(expression.results(), x + T(1)))
10594 printf(
"run_test21() - Invalid return results [2] Expected %s Got: %s Expression: %s\n",
10595 result_list[i].c_str(),
10599 error_found =
true;
10615 T v[] = {0 , 1, 2, 3 };
10616 std::string s =
"Hello ";
10620 symbol_table_t symbol_table;
10621 expression_t expression;
10624 symbol_table.add_variable (
"x", x);
10625 symbol_table.add_variable (
"y", y);
10626 symbol_table.add_variable (
"z", z);
10627 symbol_table.add_vector (
"v", v);
10628 symbol_table.add_stringvar(
"s", s);
10630 expression.register_symbol_table(symbol_table);
10632 const std::string expression_str =
10636 " return [ x, x + y, 2 * v, s + 'world' ]; ";
10638 if (!parser.compile(expression_str, expression))
10640 printf(
"run_test21() - ERROR: %s\tExpression: %s\n",
10641 parser.error().c_str(),
10642 expression_str.c_str());
10646 expression.value();
10649 const results_context_t& results = expression.results();
10651 if (results.count() != 4)
10653 printf(
"run_test21() - ERROR Expected 4 return results, instead got: %d\n",
10654 static_cast<unsigned int>(results.count()));
10660 std::string result_s;
10661 std::vector<T> result_v;
10663 const T expected_result_v[] = {0 , 2, 4, 6 };
10664 const std::string expected_result_s =
"Hello world";
10666 if (!results.get_scalar(0,result_x0))
10668 printf(
"run_test21() - ERROR Failed to get scalar index0 from return result!\n");
10671 else if (result_x0 != T(1))
10673 printf(
"run_test21() - ERROR result_x0 is not expected value!\n");
10676 else if (!results.get_scalar(1,result_x1))
10678 printf(
"run_test21() - ERROR Failed to get scalar index1 from return result!\n");
10681 else if (result_x1 != T(3))
10683 printf(
"run_test21() - ERROR result_x1 is not expected value!\n");
10686 else if (!results.get_vector(2,result_v))
10688 printf(
"run_test21() - ERROR Failed to get vector from return result!\n");
10692 (result_v.size() != (
sizeof(expected_result_v) /
sizeof(T))) ||
10693 !std::equal(result_v.begin(),result_v.end(),expected_result_v)
10696 printf(
"run_test21() - ERROR result_v is not expected value!\n");
10699 else if (!results.get_string(3,result_s))
10701 printf(
"run_test21() - ERROR Failed to get string from return result!\n");
10704 else if (result_s != expected_result_s)
10706 printf(
"run_test21() - ERROR result_s is not expected value!\n");
10712 const std::string invalid_expressions[] =
10725 "var i := 2; v[i] := x",
10726 "var i := 2; v[i] += x",
10732 "var i := 2; aa[i:3] := bb",
10733 "var i := 2; aa[i+1:3] := bb",
10734 "var i := 2; aa[0:i] := bb",
10735 "var i := 2; aa[0:i+1] := bb",
10736 "var i := 1; var j := 3; aa[i:j] := bb",
10737 "var i := 1; var j := 3; aa[i+1:j] := bb",
10738 "var i := 1; var j := 3; aa[i:j+1] := bb",
10739 "var i := 1; var j := 3; aa[i+1:j+1] := bb",
10742 const std::size_t invalid_expressions_size =
sizeof(invalid_expressions) /
sizeof(std::string);
10744 for (std::size_t i = 0; i < invalid_expressions_size; ++i)
10746 symbol_table_t mutable_symbol_table;
10747 symbol_table_t immutable_symbol_table(symbol_table_t::e_immutable);
10751 std::string s =
"xyz";
10752 std::string aa =
"0123456789";
10753 std::string bb =
"A";
10757 std::string s_ =
"xyz";
10759 std::string a_ =
"0123456789";
10760 std::string b_ =
"A";
10762 immutable_symbol_table.add_variable (
"x" , x );
10763 immutable_symbol_table.add_vector (
"v" , v );
10764 immutable_symbol_table.add_stringvar(
"s" , s );
10765 immutable_symbol_table.add_stringvar(
"aa", aa);
10766 immutable_symbol_table.add_stringvar(
"bb", bb);
10768 mutable_symbol_table.add_variable (
"x_", x_);
10769 mutable_symbol_table.add_vector (
"v_", v_);
10770 mutable_symbol_table.add_stringvar (
"s_", s_);
10771 mutable_symbol_table.add_stringvar (
"a_", a_);
10772 mutable_symbol_table.add_stringvar (
"b_", b_);
10774 const std::string& expression_str = invalid_expressions[i];
10775 expression_t expression;
10776 expression.register_symbol_table(immutable_symbol_table);
10777 expression.register_symbol_table(mutable_symbol_table );
10780 const bool compile_result = parser.compile(expression_str, expression);
10782 if (compile_result)
10784 expression.value();
10785 printf(
"run_test21() - Invalid expression due to immutability was successfully compiled. Expression: %s\n",
10786 expression_str.c_str());
10797 symbol_table_t mutable_symbol_table;
10798 symbol_table_t immutable_symbol_table(symbol_table_t::e_immutable);
10800 mutable_symbol_table.add_variable(
"x", x);
10801 mutable_symbol_table.add_variable(
"y", y);
10803 immutable_symbol_table.add_variable(
"w", w);
10804 immutable_symbol_table.add_variable(
"z", z);
10806 expression_t expression;
10807 expression.register_symbol_table(mutable_symbol_table );
10808 expression.register_symbol_table(immutable_symbol_table);
10812 typedef std::pair<std::string,bool> local_test_t;
10814 const local_test_t expressions[] =
10816 std::make_pair<std::string,bool>(
"x := y + (z / w)" ,
true ),
10817 std::make_pair<std::string,bool>(
"y := y / x + (z / w)" ,
true ),
10818 std::make_pair<std::string,bool>(
"z := y + x - w" ,
false),
10819 std::make_pair<std::string,bool>(
"z == (w += y / x)" ,
false)
10822 const std::size_t expressions_size =
sizeof(expressions) /
sizeof(local_test_t);
10824 for (std::size_t i = 0; i < expressions_size; ++i)
10826 const std::string expression_str = expressions[i].first;
10827 const bool expected_compile_result = expressions[i].second;
10829 if (expected_compile_result != parser.compile(expression_str, expression))
10831 printf(
"run_test21() - Invalid compilation of expression. Expected compile result: %c Expression: %s\n",
10832 expected_compile_result ?
'T' :
'F',
10833 expression_str.c_str());
10835 error_found =
true;
10843 expression.value();
10853 typedef typename parser_t::settings_store settings_t;
10855 const std::string invalid_expressions[] =
10857 "var result := 0; if (true) { result := 2 } if (true) { result := 3 }; result",
10858 "var result := 0; if (true) { result := 2 }; if (true) { result := 3 } result",
10859 "var result := 0; if (true) { result := 2 } if (true) { result := 3 } result",
10860 "var result := 0; var x:=1; if (x > 0) { result := 2 } else if (x > 0) { result := 3 } result",
10861 "var result := 0; var x := 1; if (x > 0) { result := 2 } if (x > 0) { result := 3 }; result",
10862 "var result := 0; var x := 1; if (x > 0) { result := 2 }; if (x > 0) { result := 3 } result",
10863 "var result := 0; var x := 1; if (x > 0) { result := 2 } if (x > 0) { result := 3 } result",
10864 "var result := 0; var x := 1; if (x > 0) { result := 2 } else if (x > 0) { result := 3 } result",
10865 "var result := 0; var x := 1; if (x > 0) result := 2 else if (x > 0) { result := 3 } result",
10866 "var result := 0; var x := 1; if (x > 0) {result := 2 } else if (x > 0) result := 3 result",
10867 "var x := 2; var y := 0; x y ",
10868 "var x := 2; x var y := 0; ",
10869 "var x := 2; var y := 0; while (y < 3) { x := x * x; y += 1; } x ",
10870 "var x := 2; var y := 0; for (var i := 0; i < 2; i += 1) { x := x * x; y += 1; } x ",
10871 "var x := 2; var y := 0; while (y < 3) { x := x * x; y += 1; } 1 ",
10872 "var x := 2; var y := 0; for (var i := 0; i < 2; i += 1) { x := x * x; y += 1; } 1 ",
10873 "var x := 2; var y := 0; x while (y < 3) { x := x * x; y += 1; } ",
10874 "var x := 2; var y := 0; x for (var i := 0; i < 2; i += 1) { x := x * x; y += 1; } ",
10875 "var x := 2; var y := 0; for (var i := 0; i < 2; i += 1) { x := x * x; y += 1; } (1 + x)",
10876 "var x := 2; var y := 0; for (var i := 0; i < 2; i += 1) { x := x * x; y += 1; } (x + 1)",
10877 "var x := 2; var y := 0; (1 + x) for (var i := 0; i < 2; i += 1) { x := x * x; y += 1; }",
10878 "var x := 2; var y := 0; (x + 1) for (var i := 0; i < 2; i += 1) { x := x * x; y += 1; }",
10879 "var x := 2; var y := 0; (x + y) for (var i := 0; i < 2; i += 1) { x := x * x; y += 1; }",
10887 "var x := 2; 1 2 ",
10888 "var x := 2; 1 x ",
10889 "var x := 2; x 1 ",
10890 "var x := 2; a 1 ",
10891 "var x := 2; x a ",
10892 "var x := 2; x a b ",
10893 "var x := 2; x a b c ",
10894 "var x := 2; a x ",
10895 "var x := 2; a x b ",
10896 "var x := 2; a x b c ",
10897 "var x := 2; 'hello' 1",
10898 "var x := 2; 1 'hello'",
10899 "var x := 2; 'hello' x",
10900 "var x := 2; x 'hello'",
10901 "var x := 2; (x 1) ",
10902 "var x := 2; (1 x) ",
10903 "var x := 2; 2 + (x 1) ",
10904 "var x := 2; 2 + (1 x) ",
10905 "var x := 2; x + (x 1) ",
10906 "var x := 2; x + (1 x) ",
10907 "var x := 2; (x 1) + 2 ",
10908 "var x := 2; (1 x) + 2 ",
10909 "var x := 2; (x 1) + x ",
10910 "var x := 2; (1 x) + x ",
10911 "var x := 2; var y := 3; (x y) ",
10912 "var x := 2; var y := 3; (y x) ",
10913 "var x := 2; var y := 3; 2 + (x y) ",
10914 "var x := 2; var y := 3; 2 + (y x) ",
10915 "var x := 2; var y := 3; x + (x y) ",
10916 "var x := 2; var y := 3; x + (y x) ",
10917 "var x := 2; var y := 3; (x y) + 2 ",
10918 "var x := 2; var y := 3; (y x) + 2 ",
10919 "var x := 2; var y := 3; (x y) + x ",
10920 "var x := 2; var y := 3; (y x) + x ",
10921 "var x := 2; 2 + x 1 ",
10922 "var x := 2; 2 + 1 x ",
10923 "var x := 2; x + x 1 ",
10924 "var x := 2; x + 1 x ",
10925 "var x := 2; var y := 3; 2 + x y ",
10926 "var x := 2; var y := 3; 2 + y x ",
10927 "var x := 2; var y := 3; x + x y ",
10928 "var x := 2; var y := 3; x + y x ",
10931 "var x := 2; x ~{x; 1; 2} ",
10932 "var x := 2; 1 ~{x; 1; 2} ",
10933 "var x := 2; ~{x; 1; 2} x ",
10934 "var x := 2; ~{x; 1; 2} 1 ",
10937 "var x := 2; x ~(x; 1; 2) ",
10938 "var x := 2; 1 ~(x; 1; 2) ",
10939 "var x := 2; ~(x; 1; 2) x ",
10940 "var x := 2; ~(x; 1; 2) 1 ",
10941 "var x := 2; (x + 1) ~{x; 1; 2} ",
10942 "var x := 2; (1 + x) ~{x; 1; 2} ",
10943 "var x := 2; ~{x; 1; 2} (x + 1) ",
10944 "var x := 2; ~{x; 1; 2} (1 + x) ",
10945 "var x := 2; x + 1 ~{x; 1; 2} ",
10946 "var x := 2; 1 + x ~{x; 1; 2} ",
10947 "var x := 2; ~{x; 1; 2} x + 1 ",
10948 "var x := 2; ~{x; 1; 2} 1 + x ",
10951 "var x := 2; x ~(x, 1, 2) ",
10952 "var x := 2; 1 ~(x, 1, 2) ",
10953 "var x := 2; ~(x, 1, 2) x ",
10954 "var x := 2; ~(x, 1, 2) 1 ",
10955 "var x := 2; 1 switch { case x > 1 : 1; case x < 3 : 2; default : 3; } ",
10956 "var x := 2; x switch { case x > 1 : 1; case x < 3 : 2; default : 3; } ",
10957 "var x := 2; switch { case x > 1 : 1; case x < 3 : 2; default : 3; } x ",
10958 "var x := 2; 1 [*] { case x > 1 : 1; case x < 3 : 2; } ",
10959 "var x := 2; x [*] { case x > 1 : 1; case x < 3 : 2; } ",
10960 "var x := 2; [*] { case x > 1 : 1; case x < 3 : 2; } x ",
10961 "var x := 2; (x + 1) switch { case x > 1 : 1; case x < 3 : 2; default : 3; } ",
10962 "var x := 2; switch { case x > 1 : 1; case x < 3 : 2; default : 3; } (x + 1) ",
10963 "var x := 2; (x + 1) [*] { case x > 1 : 1; case x < 3 : 2; } ",
10964 "var x := 2; [*] { case x > 1 : 1; case x < 3 : 2; } (x + 1) ",
10965 "var x := 2; for (var i := 0; i < 2; i += 1) { return [i] 1; } ",
10966 "var x := 2; for (var i := 0; i < 2; i += 1) { 1 return [i]; } ",
10967 "var x := 2; for (var i := 0; i < 2; i += 1) { return [i] i; } ",
10968 "var x := 2; for (var i := 0; i < 2; i += 1) { i return [i]; } ",
10969 "var x := 2; for (var i := 0; i < 2; i += 1) { return [i] 1 + i; } ",
10970 "var x := 2; for (var i := 0; i < 2; i += 1) { 1 + i return [i]; } ",
10971 "var x := 2; for (var i := 0; i < 2; i += 1) { return [i] i + 1; } ",
10972 "var x := 2; for (var i := 0; i < 2; i += 1) { i + 1 return [i]; } ",
10973 "var x := 2; for (var i := 0; i < 2; i += 1) { 1 if (i > 3) return [i]; } ",
10974 "var x := 2; for (var i := 0; i < 2; i += 1) { if (i > 3) return [i] 1; } ",
10975 "var x := 2; for (var i := 0; i < 2; i += 1) { x if (i > 3) return [i]; } ",
10976 "var x := 2; for (var i := 0; i < 2; i += 1) { if (i > 3) return [i] x; } ",
10977 "var x := 2; for (var i := 0; i < 2; i += 1) { x + 1 if (i > 3) return [i]; }",
10978 "var x := 2; for (var i := 0; i < 2; i += 1) { if (i > 3) return [i] x + 1; }",
10979 "var x := 2; for (var i := 0; i < 2; i += 1) { 1 + x if (i > 3) return [i]; }",
10980 "var x := 2; for (var i := 0; i < 2; i += 1) { if (i > 3) return [i] 1 + x; }",
10981 "var x := 2; for (var i := 0; i < 2; i += 1) { 1 for (var j := 0; j < 2; j += 1){} } ",
10982 "var x := 2; for (var i := 0; i < 2; i += 1) { for (var j := 0; j < 2; j += 1){} 1 } ",
10983 "var x := 2; for (var i := 0; i < 2; i += 1) { x for (var j := 0; j < 2; j += 1){} } ",
10984 "var x := 2; for (var i := 0; i < 2; i += 1) { for (var j := 0; j < 2; j += 1){} x } ",
10985 "var x := 2; for (var i := 0; i < 2; i += 1) { x + 1 for (var j := 0; j < 2; j += 1){} } ",
10986 "var x := 2; for (var i := 0; i < 2; i += 1) { for (var j := 0; j < 2; j += 1){} x + 1 } ",
10987 "var x := 2; for (var i := 0; i < 2; i += 1) { 1 + x for (var j := 0; j < 2; j += 1){} } ",
10988 "var x := 2; for (var i := 0; i < 2; i += 1) { for (var j := 0; j < 2; j += 1){} 1 + x } "
10991 const std::size_t expressions_size =
sizeof(invalid_expressions) /
sizeof(std::string);
10993 static const std::size_t compile_options =
10994 settings_t::e_replacer +
10995 settings_t::e_joiner +
10996 settings_t::e_numeric_check +
10997 settings_t::e_bracket_check +
10998 settings_t::e_sequence_check +
10999 settings_t::e_strength_reduction;
11001 const settings_t settings(compile_options);
11002 parser_t parser(settings);
11008 symbol_table_t symbol_table;
11009 symbol_table.add_variable(
"a", a);
11010 symbol_table.add_variable(
"b", b);
11011 symbol_table.add_variable(
"c", c);
11013 for (std::size_t e = 0; e < expressions_size; ++e)
11015 const std::string& expression_string = invalid_expressions[e];
11017 expression_t expression;
11018 expression.register_symbol_table(symbol_table);
11020 if (parser.compile(expression_string,expression))
11022 printf(
"run_test21() - Expected compilation error for expression: %s\n",
11023 expression_string.c_str());
11024 error_found =
true;
11028 expression.value();
11038 const std::string expressions[] =
11041 "var x := 2; sum(if (x > 1) { vv8 } else { vv7 }) == sum(vv8)",
11042 "var x := 2; sum(if (x > 1) { vv8 + 1 } else { vv8 + 2 }) == sum(vv8 + 1)",
11045 "var v[8] := {1,1,1,1,1,1,1,1}; vv8 += 1; sgn(vv8) == v",
11046 "abs(-1 * vv8) == vv8",
11047 "abs(vv8 * -1) == vv8",
11048 "var x := -1; abs(x * vv8) == vv8",
11049 "var x := -1; abs(vv8 * x) == vv8",
11050 "var x := 1; abs(-x * vv8) == vv8",
11051 "var x := 1; abs(vv8 * -x) == vv8",
11052 "var x := -2; abs(x * vv8) == 2vv8",
11053 "var x := -2; abs(vv8 * x) == 2vv8",
11054 "var x := 2; abs(-x * vv8) == 2vv8",
11055 "var x := 2; abs(vv8 * -x) == 2vv8",
11056 "var x := -2; abs(x * vv8) == -x * vv8",
11057 "var x := -2; abs(vv8 * x) == -x * vv8",
11058 "var x := 2; abs(-x * vv8) == x * vv8",
11059 "var x := 2; abs(vv8 * -x) == x * vv8",
11060 "var x := -2; abs(x * vv8) == vv8 * -x",
11061 "var x := -2; abs(vv8 * x) == vv8 * -x",
11062 "var x := 2; abs(-x * vv8) == vv8 * x",
11063 "var x := 2; abs(vv8 * -x) == vv8 * x",
11064 "var x := -2; abs(x * vv8) == abs(x) * vv8",
11065 "var x := -2; abs(vv8 * x) == abs(x) * vv8",
11066 "var x := -2; abs(x * vv8) == vv8 * abs(x)",
11067 "var x := -2; abs(vv8 * x) == vv8 * abs(x)",
11070 "var v[8] := {1,2,3,4,5,6,7,8}; var x := 1; (vv8 + x) == v",
11071 "var v[7] := {1,2,3,4,5,6,7}; var x := 1; (vv8 + x) == v",
11072 "var v[6] := {1,2,3,4,5,6}; var x := 1; (vv8 + x) == v",
11073 "var v[5] := {1,2,3,4,5}; var x := 1; (vv8 + x) == v",
11074 "var v[4] := {1,2,3,4}; var x := 1; (vv8 + x) == v",
11075 "var v[3] := {1,2,3}; var x := 1; (vv8 + x) == v",
11076 "var v[2] := {1,2}; var x := 1; (vv8 + x) == v",
11077 "var v[1] := {1}; var x := 1; (vv8 + x) == v",
11078 "var v[8] := {1,2,3,4,5,6,7,8}; var x := 1; (x + vv8) == v",
11079 "var v[7] := {1,2,3,4,5,6,7}; var x := 1; (x + vv8) == v",
11080 "var v[6] := {1,2,3,4,5,6}; var x := 1; (x + vv8) == v",
11081 "var v[5] := {1,2,3,4,5}; var x := 1; (x + vv8) == v",
11082 "var v[4] := {1,2,3,4}; var x := 1; (x + vv8) == v",
11083 "var v[3] := {1,2,3}; var x := 1; (x + vv8) == v",
11084 "var v[2] := {1,2}; var x := 1; (x + vv8) == v",
11085 "var v[1] := {1}; var x := 1; (x + vv8) == v",
11088 "var v[8] := [-1]; v < vv8",
11089 "var v[7] := [-1]; v < vv8",
11090 "var v[3] := [-1]; v < vv8",
11091 "var v[2] := [-1]; v < vv8",
11092 "var v[1] := [-1]; v < vv8",
11095 "var vv8sum := sum(vv8); vv8 += (vv8 + 1); sum(vv8) == (2 * sum(vv8sum) + vv8[] * 1)",
11096 "var vv8sum := sum(vv8); vv8 += (vv8 - 1); sum(vv8) == (2 * sum(vv8sum) - vv8[] * 1)",
11097 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 + x); sum(vv8) == (2 * sum(vv8sum) + vv8[] * 1)",
11098 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 - x); sum(vv8) == (2 * sum(vv8sum) - vv8[] * 1)",
11099 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 + (vv8 + x)); sum(vv8) == (3 * sum(vv8sum) + vv8[] * 1)",
11100 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 + (vv8 - x)); sum(vv8) == (3 * sum(vv8sum) - vv8[] * 1)",
11101 "var vv8sum := sum(vv8); vv8 += (vv8 += 1); sum(vv8) == (2 * vv8sum + 2 * (vv8[] * 1))",
11102 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 += x); sum(vv8) == (2 * vv8sum + 2 * (vv8[] * x))",
11103 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 -= x); sum(vv8) == (2 * vv8sum - 2 * (vv8[] * x))",
11104 "var vv8sum := sum(vv8); vv8 += (vv8 + 1); sum(vv8) == (2 * sum(vv8sum) + vv8[] * 1);",
11105 "var vv8sum := sum(vv8); vv8 += (vv8 - 1); sum(vv8) == (2 * sum(vv8sum) - vv8[] * 1);",
11106 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 + x); sum(vv8) == (2 * sum(vv8sum) + vv8[] * 1);",
11107 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 - x); sum(vv8) == (2 * sum(vv8sum) - vv8[] * 1);",
11108 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 + (vv8 + x)); sum(vv8) == (3 * sum(vv8sum) + vv8[] * 1);",
11109 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 + (vv8 - x)); sum(vv8) == (3 * sum(vv8sum) - vv8[] * 1);",
11110 "var vv8sum := sum(vv8); vv8 += (vv8 += 1); sum(vv8) == (2 * vv8sum + 2 * (vv8[] * 1));",
11111 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 += x); sum(vv8) == (2 * vv8sum + 2 * (vv8[] * x));",
11112 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 -= x); sum(vv8) == (2 * vv8sum - 2 * (vv8[] * x));",
11113 "var vv3sum := sum(vv3); vv3 += (vv3 + 1); sum(vv3) == (2 * sum(vv3sum) + vv3[] * 1)",
11114 "var vv3sum := sum(vv3); vv3 += (vv3 - 1); sum(vv3) == (2 * sum(vv3sum) - vv3[] * 1)",
11115 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 + x); sum(vv3) == (2 * sum(vv3sum) + vv3[] * 1)",
11116 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 - x); sum(vv3) == (2 * sum(vv3sum) - vv3[] * 1)",
11117 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 + (vv3 + x)); sum(vv3) == (3 * sum(vv3sum) + vv3[] * 1)",
11118 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 + (vv3 - x)); sum(vv3) == (3 * sum(vv3sum) - vv3[] * 1)",
11119 "var vv3sum := sum(vv3); vv3 += (vv3 += 1); sum(vv3) == (2 * vv3sum + 2 * (vv3[] * 1))",
11120 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 += x); sum(vv3) == (2 * vv3sum + 2 * (vv3[] * x))",
11121 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 -= x); sum(vv3) == (2 * vv3sum - 2 * (vv3[] * x))",
11122 "var vv3sum := sum(vv3); vv3 += (vv3 + 1); sum(vv3) == (2 * sum(vv3sum) + vv3[] * 1);",
11123 "var vv3sum := sum(vv3); vv3 += (vv3 - 1); sum(vv3) == (2 * sum(vv3sum) - vv3[] * 1);",
11124 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 + x); sum(vv3) == (2 * sum(vv3sum) + vv3[] * 1);",
11125 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 - x); sum(vv3) == (2 * sum(vv3sum) - vv3[] * 1);",
11126 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 + (vv3 + x)); sum(vv3) == (3 * sum(vv3sum) + vv3[] * 1);",
11127 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 + (vv3 - x)); sum(vv3) == (3 * sum(vv3sum) - vv3[] * 1);",
11128 "var vv3sum := sum(vv3); vv3 += (vv3 += 1); sum(vv3) == (2 * vv3sum + 2 * (vv3[] * 1));",
11129 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 += x); sum(vv3) == (2 * vv3sum + 2 * (vv3[] * x));",
11130 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 -= x); sum(vv3) == (2 * vv3sum - 2 * (vv3[] * x));",
11133 "var vv8sum := sum(vv8); vv8 += 1; sum(vv8) == (vv8sum + vv8[] * 1)",
11134 "var vv7sum := sum(vv7); vv7 += 1; sum(vv7) == (vv7sum + vv7[] * 1)",
11135 "var vv6sum := sum(vv6); vv6 += 1; sum(vv6) == (vv6sum + vv6[] * 1)",
11136 "var vv5sum := sum(vv5); vv5 += 1; sum(vv5) == (vv5sum + vv5[] * 1)",
11137 "var vv4sum := sum(vv4); vv4 += 1; sum(vv4) == (vv4sum + vv4[] * 1)",
11138 "var vv3sum := sum(vv3); vv3 += 1; sum(vv3) == (vv3sum + vv3[] * 1)",
11139 "var vv2sum := sum(vv2); vv2 += 1; sum(vv2) == (vv2sum + vv2[] * 1)",
11140 "var vv1sum := sum(vv1); vv1 += 1; sum(vv1) == (vv1sum + vv1[] * 1)",
11141 "var vv8sum := sum(vv8); var x := 7; vv8 += (x - 1) / 2; sum(vv8) == (vv8sum + vv8[] * 3)",
11142 "var vv7sum := sum(vv7); var x := 7; vv7 += (x - 1) / 2; sum(vv7) == (vv7sum + vv7[] * 3)",
11143 "var vv6sum := sum(vv6); var x := 7; vv6 += (x - 1) / 2; sum(vv6) == (vv6sum + vv6[] * 3)",
11144 "var vv5sum := sum(vv5); var x := 7; vv5 += (x - 1) / 2; sum(vv5) == (vv5sum + vv5[] * 3)",
11145 "var vv4sum := sum(vv4); var x := 7; vv4 += (x - 1) / 2; sum(vv4) == (vv4sum + vv4[] * 3)",
11146 "var vv3sum := sum(vv3); var x := 7; vv3 += (x - 1) / 2; sum(vv3) == (vv3sum + vv3[] * 3)",
11147 "var vv2sum := sum(vv2); var x := 7; vv2 += (x - 1) / 2; sum(vv2) == (vv2sum + vv2[] * 3)",
11148 "var vv1sum := sum(vv1); var x := 7; vv1 += (x - 1) / 2; sum(vv1) == (vv1sum + vv1[] * 3)",
11151 "var v[8] := [-1]; vv8 := v; sum(vv8) == (-1 * 8 + 0)",
11152 "var v[7] := [-1]; vv8 := v; sum(vv8) == (-1 * 7 + (7))",
11153 "var v[6] := [-1]; vv8 := v; sum(vv8) == (-1 * 6 + (6+7))",
11154 "var v[5] := [-1]; vv8 := v; sum(vv8) == (-1 * 5 + (5+6+7))",
11155 "var v[4] := [-1]; vv8 := v; sum(vv8) == (-1 * 4 + (4+5+6+7))",
11156 "var v[3] := [-1]; vv8 := v; sum(vv8) == (-1 * 3 + (3+4+5+6+7))",
11157 "var v[2] := [-1]; vv8 := v; sum(vv8) == (-1 * 2 + (2+3+4+5+6+7))",
11158 "var v[1] := [-1]; vv8 := v; sum(vv8) == (-1 * 1 + (1+2+3+4+5+6+7))",
11159 "var v[8] := [-1]; vv8 := v; var x[8] := { -1, -1, -1, -1, -1, -1, -1, -1 }; x == vv8",
11160 "var v[7] := [-1]; vv8 := v; var x[8] := { -1, -1, -1, -1, -1, -1, -1, 7 }; x == vv8",
11161 "var v[6] := [-1]; vv8 := v; var x[8] := { -1, -1, -1, -1, -1, -1, 6, 7 }; x == vv8",
11162 "var v[5] := [-1]; vv8 := v; var x[8] := { -1, -1, -1, -1, -1, 5, 6, 7 }; x == vv8",
11163 "var v[4] := [-1]; vv8 := v; var x[8] := { -1, -1, -1, -1, 4, 5, 6, 7 }; x == vv8",
11164 "var v[3] := [-1]; vv8 := v; var x[8] := { -1, -1, -1, 3, 4, 5, 6, 7 }; x == vv8",
11165 "var v[2] := [-1]; vv8 := v; var x[8] := { -1, -1, 2, 3, 4, 5, 6, 7 }; x == vv8",
11166 "var v[1] := [-1]; vv8 := v; var x[8] := { -1, 1, 2, 3, 4, 5, 6, 7 }; x == vv8",
11167 "var v[3] := [-1]; vv3 := v; sum(vv3) == (-1 * 3 + (0))",
11168 "var v[2] := [-1]; vv3 := v; sum(vv3) == (-1 * 2 + (2))",
11169 "var v[1] := [-1]; vv3 := v; sum(vv3) == (-1 * 1 + (1+2))",
11170 "var v[3] := [-1]; vv3 := v; var x[3] := { -1, -1, -1}; x == vv3",
11171 "var v[2] := [-1]; vv3 := v; var x[3] := { -1, -1, 2}; x == vv3",
11172 "var v[1] := [-1]; vv3 := v; var x[3] := { -1, 1, 2}; x == vv3",
11173 "vv8 := vv7; sum(vv8) == (sum(vv7) + 7)",
11174 "vv8 := vv6; sum(vv8) == (sum(vv6) + 6+ 7)",
11175 "vv8 := vv5; sum(vv8) == (sum(vv5) + 5 + 6 + 7)",
11176 "vv8 := vv4; sum(vv8) == (sum(vv4) + 4 + 5 + 6 + 7)",
11177 "vv8 := vv3; sum(vv8) == (sum(vv3) + 3 + 4 + 5 + 6 + 7)",
11178 "vv8 := vv2; sum(vv8) == (sum(vv2) + 2 + 3 + 4 + 5 + 6 + 7)",
11179 "vv8 := vv1; sum(vv8) == (sum(vv1) + 1 + 2 + 3 + 4 + 5 + 6 + 7)",
11180 "vv8 := vv7 + vv7; sum(vv8) == (2 * sum(vv7) + 7)",
11181 "vv8 := vv6 + vv6; sum(vv8) == (2 * sum(vv6) + 6+ 7)",
11182 "vv8 := vv5 + vv5; sum(vv8) == (2 * sum(vv5) + 5 + 6 + 7)",
11183 "vv8 := vv4 + vv4; sum(vv8) == (2 * sum(vv4) + 4 + 5 + 6 + 7)",
11184 "vv8 := vv3 + vv3; sum(vv8) == (2 * sum(vv3) + 3 + 4 + 5 + 6 + 7)",
11185 "vv8 := vv2 + vv2; sum(vv8) == (2 * sum(vv2) + 2 + 3 + 4 + 5 + 6 + 7)",
11186 "vv8 := vv1 + vv1; sum(vv8) == (2 * sum(vv1) + 1 + 2 + 3 + 4 + 5 + 6 + 7)",
11189 "var x := 3; vv8 := 2*x+1; sum(vv8) == (vv8[] * 7)",
11190 "var x := 3; vv7 := 2*x+1; sum(vv7) == (vv7[] * 7)",
11191 "var x := 3; vv6 := 2*x+1; sum(vv6) == (vv6[] * 7)",
11192 "var x := 3; vv5 := 2*x+1; sum(vv5) == (vv5[] * 7)",
11193 "var x := 3; vv4 := 2*x+1; sum(vv4) == (vv4[] * 7)",
11194 "var x := 3; vv3 := 2*x+1; sum(vv3) == (vv3[] * 7)",
11195 "var x := 3; vv2 := 2*x+1; sum(vv2) == (vv2[] * 7)",
11196 "var x := 3; vv1 := 2*x+1; sum(vv1) == (vv1[] * 7)",
11197 "var x[3] := [3]; vv8 := 2x[0]+1; sum(vv8) == (vv8[] * 7)",
11198 "var x[3] := [3]; vv7 := 2x[1]+1; sum(vv7) == (vv7[] * 7)",
11199 "var x[3] := [3]; vv6 := 2x[2]+1; sum(vv6) == (vv6[] * 7)",
11200 "var x[3] := [3]; vv5 := 2x[0]+1; sum(vv5) == (vv5[] * 7)",
11201 "var x[3] := [3]; vv4 := 2x[1]+1; sum(vv4) == (vv4[] * 7)",
11202 "var x[3] := [3]; vv3 := 2x[2]+1; sum(vv3) == (vv3[] * 7)",
11203 "var x[3] := [3]; vv2 := 2x[0]+1; sum(vv2) == (vv2[] * 7)",
11204 "var x[3] := [3]; vv1 := 2x[1]+1; sum(vv1) == (vv1[] * 7)",
11205 "var x[3] := [3]; var y[3] := [1]; vv8 := 2x[0]+y[0]; sum(vv8) == (vv8[] * 7)",
11206 "var x[3] := [3]; var y[3] := [1]; vv7 := 2x[1]+y[1]; sum(vv7) == (vv7[] * 7)",
11207 "var x[3] := [3]; var y[3] := [1]; vv6 := 2x[2]+y[2]; sum(vv6) == (vv6[] * 7)",
11208 "var x[3] := [3]; var y[3] := [1]; vv5 := 2x[0]+y[0]; sum(vv5) == (vv5[] * 7)",
11209 "var x[3] := [3]; var y[3] := [1]; vv4 := 2x[1]+y[1]; sum(vv4) == (vv4[] * 7)",
11210 "var x[3] := [3]; var y[3] := [1]; vv3 := 2x[2]+y[2]; sum(vv3) == (vv3[] * 7)",
11211 "var x[3] := [3]; var y[3] := [1]; vv2 := 2x[0]+y[0]; sum(vv2) == (vv2[] * 7)",
11212 "var x[3] := [3]; var y[3] := [1]; vv1 := 2x[1]+y[1]; sum(vv1) == (vv1[] * 7)",
11215 "var v[8] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 8 + 0)",
11216 "var v[7] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 7 + (7))",
11217 "var v[6] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 6 + (6+7))",
11218 "var v[5] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 5 + (5+6+7))",
11219 "var v[4] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 4 + (4+5+6+7))",
11220 "var v[3] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 3 + (3+4+5+6+7))",
11221 "var v[2] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 2 + (2+3+4+5+6+7))",
11222 "var v[1] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 1 + (1+2+3+4+5+6+7))",
11223 "var v[8] := [-1]; vv8 <=> v; var x[8] := { -1, -1, -1, -1, -1, -1, -1, -1 }; x == vv8",
11224 "var v[7] := [-1]; vv8 <=> v; var x[8] := { -1, -1, -1, -1, -1, -1, -1, 7 }; x == vv8",
11225 "var v[6] := [-1]; vv8 <=> v; var x[8] := { -1, -1, -1, -1, -1, -1, 6, 7 }; x == vv8",
11226 "var v[5] := [-1]; vv8 <=> v; var x[8] := { -1, -1, -1, -1, -1, 5, 6, 7 }; x == vv8",
11227 "var v[4] := [-1]; vv8 <=> v; var x[8] := { -1, -1, -1, -1, 4, 5, 6, 7 }; x == vv8",
11228 "var v[3] := [-1]; vv8 <=> v; var x[8] := { -1, -1, -1, 3, 4, 5, 6, 7 }; x == vv8",
11229 "var v[2] := [-1]; vv8 <=> v; var x[8] := { -1, -1, 2, 3, 4, 5, 6, 7 }; x == vv8",
11230 "var v[1] := [-1]; vv8 <=> v; var x[8] := { -1, 1, 2, 3, 4, 5, 6, 7 }; x == vv8",
11231 "var v[3] := [-1]; vv3 <=> v; sum(vv3) == (-1 * 3 + (0))",
11232 "var v[2] := [-1]; vv3 <=> v; sum(vv3) == (-1 * 2 + (2))",
11233 "var v[1] := [-1]; vv3 <=> v; sum(vv3) == (-1 * 1 + (1+2))",
11234 "var v[3] := [-1]; vv3 <=> v; var x[3] := { -1, -1, -1}; x == vv3",
11235 "var v[2] := [-1]; vv3 <=> v; var x[3] := { -1, -1, 2}; x == vv3",
11236 "var v[1] := [-1]; vv3 <=> v; var x[3] := { -1, 1, 2}; x == vv3",
11241 "vv8[vv8[] - 1] == vv8[] - 1",
11242 "var vec_sum := 0; for (var i := 0; i < vv8[]; i +=1) { vec_sum += vv8[i]; }; vec_sum == (vv8[] - 1) * vv8[] / 2",
11243 "var vec_sum := 0; for (var i := 0; i < vv8[]; i +=1) { vec_sum += vv8[2i / 2]; }; vec_sum == (vv8[] - 1) * vv8[] / 2",
11244 "var x:= 1; var y:= 1; (vv8 + x)[y / x] == 2",
11245 "var x:= 1; var y:= 1; (vv8 + x - y)[y / x] == 1",
11246 "var x:= 1; (x + vv8)[1] == 2",
11247 "var x:= 1; var y:= 1; (x + vv8)[y / x] == 2",
11248 "var x:= 1; var y:= 1; (x + vv8 - y)[y / x] == 1",
11249 "var successes := 0; for(var i:=0; i < vv8[]; i += 1) { successes += (vv8 + 1)[i] == i + 1; }; successes == vv8[]",
11250 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (vv8 + x)[i] == i + x; }; successes == vv8[]",
11251 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (x + vv8)[i] == i + x; }; successes == vv8[]",
11252 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (vv8 + x)[i / x] == i + x; }; successes == vv8[]",
11253 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (x + vv8)[i / x] == i + x; }; successes == vv8[]",
11254 "(1 + vv8)[1] == 2",
11255 "(vv8 + 1)[1] == 2",
11256 "(vv8 + 1)[2 / 2] == 2",
11257 "(1 + vv8)[2 / 2] == 2",
11258 "var x:= 1; (x + vv8)[1] == 2",
11259 "var x:= 1; (vv8 + x)[1] == 2",
11260 "var x:= 1; var y:= 1; (x + vv8)[y] == 2",
11261 "var x:= 1; var y:= 1; (vv8 + x)[y] == 2",
11262 "var x:= 1; var y:= 1; (vv8 + x)[y / x] == 2",
11263 "var x:= 1; var y:= 1; (vv8 + x - y)[y / x] == 1",
11264 "var x:= 1; var y:= 1; (x + vv8)[y / x] == 2",
11265 "var x:= 1; var y:= 1; (x + vv8 - y)[y / x] == 1",
11266 "(abs(vv8 + 1))[1] == 2",
11267 "(abs(1 + vv8))[1] == 2",
11268 "(abs(vv8 + 1))[2 / 2] == 2",
11269 "(abs(1 + vv8))[2 / 2] == 2",
11270 "(abs(vv8 + 1)/2)[1] == 1",
11271 "(abs(1 + vv8)/2)[1] == 1",
11272 "(abs(vv8 + 1)/2)[2 / 2] == 1",
11273 "(abs(1 + vv8)/2)[2 / 2] == 1",
11274 "(abs(abs(vv8 + 1)) - 1)[1] == 1",
11275 "(abs(2 * abs(vv8 + 1)) - 1)[1] == 3",
11276 "(abs(abs(vv8 + 1) * 2) - 1)[1] == 3",
11277 "(abs(2abs(vv8 + 1)) - 1)[1] == 3",
11278 "(abs(abs(vv8 + 1)2) - 1)[1] == 3",
11279 "var x:= 1; (abs(x + vv8))[1] == 2",
11280 "var x:= 1; (abs(vv8 + x))[1] == 2",
11281 "var x:= 1; var y:= 1; (abs(x + vv8))[y] == 2",
11282 "var x:= 1; var y:= 1; (abs(vv8 + x))[y] == 2",
11283 "var x:= 1; var y:= 1; (abs(vv8 + x))[y / x] == 2",
11284 "var x:= 1; var y:= 1; (abs(vv8 + x - y))[y / x] == 1",
11285 "var x:= 1; var y:= 1; (abs(x + vv8))[y / x] == 2",
11286 "var x:= 1; var y:= 1; (abs(x + vv8 - y))[y / x] == 1",
11287 "var x:= 1; (abs(x + vv8)/2)[1] == 1",
11288 "var x:= 1; (abs(vv8 + x)/2)[1] == 1",
11289 "var x:= 1; var y:= 1; (abs(x + vv8)/2)[y] == 1",
11290 "var x:= 1; var y:= 1; (abs(vv8 + x)/2)[y] == 1",
11291 "var x:= 1; var y:= 1; (abs(vv8 + x)/2)[y / x] == 1",
11292 "var x:= 1; var y:= 1; (abs(x + vv8)/2)[y / x] == 1",
11293 "var x := 1; (abs(abs(vv8 + x)) - x)[1] == 1",
11294 "var x := 1; (abs(2 * abs(vv8 + x)) - x)[1] == 3",
11295 "var x := 1; (abs(abs(vv8 + x) * 2) - x)[1] == 3",
11296 "var x := 1; (abs(2abs(vv8 + x)) - x)[1] == 3",
11297 "var x := 1; (abs(abs(vv8 + x)2) - x)[1] == 3",
11298 "var x := 1; var y := 1; (abs(abs(vv8 + x)) - x)[y] == 1",
11299 "var x := 1; var y := 1; (abs(2 * abs(vv8 + x)) - x)[y] == 3",
11300 "var x := 1; var y := 1; (abs(abs(vv8 + x) * 2) - x)[y] == 3",
11301 "var x := 1; var y := 1; (abs(2abs(vv8 + x)) - x)[y] == 3",
11302 "var x := 1; var y := 1; (abs(abs(vv8 + x)2) - x)[y] == 3",
11303 "var x := 1; var y := 1; (abs(abs(vv8 + x)) - x)[x / y] == 1",
11304 "var x := 1; var y := 1; (abs(2 * abs(vv8 + x)) - x)[x / y] == 3",
11305 "var x := 1; var y := 1; (abs(abs(vv8 + x) * 2) - x)[x / y] == 3",
11306 "var x := 1; var y := 1; (abs(2abs(vv8 + x)) - x)[x / y] == 3",
11307 "var x := 1; var y := 1; (abs(abs(vv8 + x)2) - x)[x / y] == 3",
11308 "var successes := 0; for(var i:=0; i < vv8[]; i += 1) { successes += (vv8 + 1)[i] == i + 1; }; successes == vv8[]",
11309 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (vv8 + x)[i] == i + x; }; successes == vv8[]",
11310 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (x + vv8)[i] == i + x; }; successes == vv8[]",
11311 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (vv8 + x)[i / x] == i + x; }; successes == vv8[]",
11312 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (x + vv8)[i / x] == i + x; }; successes == vv8[]",
11313 "var successes := 0; for(var i:=0; i < vv8[]; i += 1) { successes += (abs(vv8 + 1))[i] == i + 1; }; successes == vv8[]",
11314 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (abs(vv8 + x))[i] == i + x; }; successes == vv8[]",
11315 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (abs(x + vv8))[i] == i + x; }; successes == vv8[]",
11316 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (abs(vv8 + x))[i / x] == i + x; }; successes == vv8[]",
11317 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (abs(x + vv8))[i / x] == i + x; }; successes == vv8[]",
11320 for (std::size_t e = 0; e <
sizeof(expressions)/
sizeof(std::string); ++e)
11322 T vs8[] = { 0, 1, 2, 3, 4, 5, 6, 7 };
11323 T vs7[] = { 0, 1, 2, 3, 4, 5, 6 };
11324 T vs6[] = { 0, 1, 2, 3, 4, 5 };
11325 T vs5[] = { 0, 1, 2, 3, 4 };
11326 T vs4[] = { 0, 1, 2, 3 };
11327 T vs3[] = { 0, 1, 2 };
11328 T vs2[] = { 0, 1 };
11340 symbol_table_t symbol_table;
11342 symbol_table.add_vector(
"vv1", vv1);
11343 symbol_table.add_vector(
"vv2", vv2);
11344 symbol_table.add_vector(
"vv3", vv3);
11345 symbol_table.add_vector(
"vv4", vv4);
11346 symbol_table.add_vector(
"vv5", vv5);
11347 symbol_table.add_vector(
"vv6", vv6);
11348 symbol_table.add_vector(
"vv7", vv7);
11349 symbol_table.add_vector(
"vv8", vv8);
11353 const std::string& expression_string = expressions[e];
11354 expression_t expression;
11355 expression.register_symbol_table(symbol_table);
11357 if (!parser.compile(expression_string,expression))
11359 printf(
"run_test21() - vector_veiw expression compilation error. Expression: %s\n",
11360 expression_string.c_str());
11362 for (std::size_t i = 0; i < parser.error_count(); ++i)
11364 error_type error = parser.get_error(i);
11367 printf(
"run_test21() - Exp[%02d] Error[%02d] Position: %02d line: %d column: %d Type: [%14s] Msg: %s\n",
11368 static_cast<unsigned int>(e),
11369 static_cast<unsigned int>(i),
11370 static_cast<unsigned int>(error.token.position),
11371 static_cast<unsigned int>(error.line_no),
11372 static_cast<unsigned int>(error.column_no),
11374 error.diagnostic.c_str());
11377 error_found =
true;
11382 const T result = expression.value();
11384 if (result != T(1.0))
11386 error_found =
true;
11388 printf(
"run_test21() - Error: Exp[%02d] Expression result: %5.3f expected: 1 expression: %s\n",
11389 static_cast<unsigned int>(e),
11391 expression_string.c_str());
11402 const std::string expressions[] =
11404 "vv0[] == vv0_size",
11405 "sum(vv0) == (vv0[] * (vv0[] + 1) / 2) and (vv0[] == vv0_size)",
11406 "(min(vv0) == 1) and (vv0[] == vv0_size)",
11407 "(max(vv0) == vv0[]) and (vv0[] == vv0_size)",
11408 "(avg(vv0) == (min(vv0) + max(vv0)) / 2) and (vv0[] == vv0_size)",
11409 "(sum(vv0 + 1) == (vv0[] * (vv0[] + 1) / 2 + (vv0[] * 1))) and (vv0[] == vv0_size)",
11410 "(sum(vv0 - 1) == (vv0[] * (vv0[] + 1) / 2 - (vv0[] * 1))) and (vv0[] == vv0_size)",
11411 "(sum(1 + vv0) == (vv0[] * (vv0[] + 1) / 2 + (vv0[] * 1))) and (vv0[] == vv0_size)",
11412 "(sum(-1 + vv0) == (vv0[] * (vv0[] + 1) / 2 - (vv0[] * 1))) and (vv0[] == vv0_size)",
11413 "var x:= 1; sum(vv0 + x) == (vv0[] * (vv0[] + 1) / 2 + (vv0[] * x)) and (vv0[] == vv0_size)",
11414 "var x:= 1; sum(vv0 - x) == (vv0[] * (vv0[] + 1) / 2 - (vv0[] * x)) and (vv0[] == vv0_size)",
11415 "sum(2vv0) == (vv0[] * (vv0[] + 1)) and (vv0[] == vv0_size)",
11416 "sum(vv0 * 2) == (vv0[] * (vv0[] + 1)) and (vv0[] == vv0_size)",
11417 "sum(2vv0 + 1) == (vv0[] * (vv0[] + 1) + vv0[]) and (vv0[] == vv0_size)",
11418 "sum(1 + 2vv0) == (vv0[] * (vv0[] + 1) + vv0[]) and (vv0[] == vv0_size)",
11419 "sum((2 * vv0) + 1) == (vv0[] * (vv0[] + 1) + vv0[]) and (vv0[] == vv0_size)",
11420 "sum(1 + (2 * vv0)) == (vv0[] * (vv0[] + 1) + vv0[]) and (vv0[] == vv0_size)",
11421 "sum((vv0 * 2) + 1) == (vv0[] * (vv0[] + 1) + vv0[]) and (vv0[] == vv0_size)",
11422 "sum(1 + (vv0 * 2)) == (vv0[] * (vv0[] + 1) + vv0[]) and (vv0[] == vv0_size)",
11423 "var x := 1; sum(2vv0 + x) == (vv0[] * (vv0[] + 1) + x * vv0[]) and (vv0[] == vv0_size)",
11424 "var x := 1; sum(x + 2vv0) == (vv0[] * (vv0[] + 1) + x * vv0[]) and (vv0[] == vv0_size)",
11425 "var x := 1; sum((2 * vv0) + x) == (vv0[] * (vv0[] + 1) + x * vv0[]) and (vv0[] == vv0_size)",
11426 "var x := 1; sum(x + (2 * vv0)) == (vv0[] * (vv0[] + 1) + x * vv0[]) and (vv0[] == vv0_size)",
11427 "var x := 1; sum((vv0 * 2) + x) == (vv0[] * (vv0[] + 1) + x * vv0[]) and (vv0[] == vv0_size)",
11428 "var x := 1; sum(x + (vv0 * 2)) == (vv0[] * (vv0[] + 1) + x * vv0[]) and (vv0[] == vv0_size)",
11429 "sum(vv0 += 1) == (vv0[] * (vv0[] + 1) / 2 + vv0[]) and (vv0[] == vv0_size)",
11430 "var x:= 1; sum(vv0 += x) == (vv0[] * (vv0[] + 1) / 2 + x * vv0[]) and (vv0[] == vv0_size)",
11431 "var x:= 1; sum(vv0 -= x) == (vv0[] * (vv0[] + 1 - 2x) / 2) and (vv0[] == vv0_size)",
11432 "(sum(2vv0) == 2 * sum(vv0)) and (vv0[] == vv0_size)",
11433 "(sum(2 * vv0) == 2 * sum(vv0)) and (vv0[] == vv0_size)",
11434 "(sum(vv0 * 2) == 2 * sum(vv0)) and (vv0[] == vv0_size)",
11435 "var x:= 1; sum(2vv0) == (vv0[] * (vv0[] + 1)) and (vv0[] == vv0_size)",
11436 "var x:= 1; sum(2 * vv0) == (vv0[] * (vv0[] + 1)) and (vv0[] == vv0_size)",
11437 "var x:= 1; sum(vv0 * 2) == (vv0[] * (vv0[] + 1)) and (vv0[] == vv0_size)",
11438 "var x := 2; sum(if (x > 1) { vv0 } else { vv1 }) == sum(vv0)",
11439 "dot(2 * vv0,vv1 - 1) + dot(2 * vv0,vv1 - 1) == 2sum(2vv0 * (vv1 - 1))",
11440 "(0 * dot(2 * vv0,vv1 - 1)) == 0"
11443 for (std::size_t e = 0; e <
sizeof(expressions) /
sizeof(std::string); ++e)
11445 const T vanilla[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
11446 const std::size_t vanilla_size =
sizeof(vanilla) /
sizeof(T);
11448 std::vector<T> v0(vanilla, vanilla + vanilla_size);
11451 std::vector<T> v1(vanilla, vanilla + vanilla_size);
11454 T vv0_size = T(0.0);
11456 symbol_table_t symbol_table;
11457 symbol_table.add_variable(
"vv0_size", vv0_size);
11458 symbol_table.add_vector (
"vv0" , vv0 );
11459 symbol_table.add_vector (
"vv1" , vv1 );
11464 symbol_table.add_package( vector_package );
11465 symbol_table.add_package( io_package );
11467 const std::string& expression_string = expressions[e];
11468 expression_t expression;
11469 expression.register_symbol_table(symbol_table);
11473 if (!parser.compile(expression_string, expression))
11475 printf(
"run_test21() - Error: %s\tExpression: %s\n",
11476 parser.error().c_str(),
11477 expression_string.c_str());
11479 for (std::size_t i = 0; i < parser.error_count(); ++i)
11481 error_type error = parser.get_error(i);
11484 printf(
"run_test21() - Exp[%02d] Error[%02d] Position: %02d line: %d column: %d Type: [%14s] Msg: %s\n",
11485 static_cast<unsigned int>(e),
11486 static_cast<unsigned int>(i),
11487 static_cast<unsigned int>(error.token.position),
11488 static_cast<unsigned int>(error.line_no),
11489 static_cast<unsigned int>(error.column_no),
11491 error.diagnostic.c_str());
11494 error_found =
true;
11499 for (std::size_t i = 1; i <= vv0.
base_size(); ++i)
11501 v0.assign(vanilla, vanilla + vanilla_size);
11502 v1.assign(vanilla, vanilla + vanilla_size);
11507 const T result = expression.value();
11511 printf(
"run_test21() - Exp[%02d] Error: size: %d expected 1 instead got: %f expr:%s\n",
11512 static_cast<unsigned int>(e),
11513 static_cast<unsigned int>(i),
11515 expression_string.c_str());
11517 error_found =
true;
11523 expression.value();
11527 expression.value();
11529 expression.release();
11539 const T vanilla[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
11540 const std::size_t vanilla_size =
sizeof(vanilla) /
sizeof(T);
11542 std::vector<T> v0(vanilla, vanilla + vanilla_size);
11543 std::vector<T> v1(vanilla, vanilla + vanilla_size);
11550 symbol_table_t symbol_table;
11551 symbol_table.add_vector(
"v", vv);
11556 symbol_table.add_package( vector_package );
11557 symbol_table.add_package( io_package );
11558 symbol_table.add_function(
"resize", vv_size_handler);
11560 expression_t expression;
11561 expression.register_symbol_table(symbol_table);
11565 const std::string resize_expression =
11566 " var vec_original_size := v[]; "
11567 " var success_count := 0; "
11569 " for (var i := 1; i <= vec_original_size; i += 1) "
11571 " if (resize(v,i) == true and v[] == i) "
11573 " success_count += 1; "
11577 " success_count == vec_original_size ";
11579 if (!parser.compile(resize_expression, expression))
11581 printf(
"run_test21() - Error: %s\tExpression: %s\n",
11582 parser.error().c_str(),
11583 resize_expression.c_str());
11585 for (std::size_t i = 0; i < parser.error_count(); ++i)
11587 error_type error = parser.get_error(i);
11590 printf(
"run_test21() - Error[%02d] Position: %02d line: %d column: %d Type: [%14s] Msg: %s\n",
11591 static_cast<unsigned int>(i),
11592 static_cast<unsigned int>(error.token.position),
11593 static_cast<unsigned int>(error.line_no),
11594 static_cast<unsigned int>(error.column_no),
11596 error.diagnostic.c_str());
11602 const T value0 = expression.value();
11604 if (expression.value() != T(1))
11606 printf(
"run_test21() - Error: Failed evaluation Expected 1 got: %f (1)\n", value0);
11607 error_found =
true;
11613 const T value1 = expression.value();
11615 if (expression.value() != T(1))
11617 printf(
"run_test21() - Error: Failed evaluation Expected 1 got: %f (1)\n", value1);
11618 error_found =
true;
11624 expression.release();
11628 const T vanilla[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
11629 const std::size_t vanilla_size =
sizeof(vanilla) /
sizeof(T);
11631 std::vector<T> v0(vanilla, vanilla + vanilla_size);
11632 std::vector<T> v1(vanilla, vanilla + vanilla_size);
11639 symbol_table_t symbol_table;
11640 symbol_table.add_vector(
"v", vv);
11645 symbol_table.add_package( vector_package );
11646 symbol_table.add_package( io_package );
11647 symbol_table.add_function(
"resize", vv_size_handler);
11649 expression_t expression;
11650 expression.register_symbol_table(symbol_table);
11654 const std::string resize_expression =
11655 " var vec_original_size := v[]; "
11656 " var failure_count := 0; "
11658 " for (var i := vec_original_size + 1; i <= 2 * vec_original_size; i += 1) "
11660 " if (resize(v,i) == false or v[] != i) "
11662 " failure_count += 1 "
11666 " failure_count == vec_original_size ";
11668 if (!parser.compile(resize_expression, expression))
11670 printf(
"run_test21() - Error: %s\tExpression: %s\n",
11671 parser.error().c_str(),
11672 resize_expression.c_str());
11674 for (std::size_t i = 0; i < parser.error_count(); ++i)
11676 error_type error = parser.get_error(i);
11679 printf(
"run_test21() - Error[%02d] Position: %02d line: %d column: %d Type: [%14s] Msg: %s\n",
11680 static_cast<unsigned int>(i),
11681 static_cast<unsigned int>(error.token.position),
11682 static_cast<unsigned int>(error.line_no),
11683 static_cast<unsigned int>(error.column_no),
11685 error.diagnostic.c_str());
11691 const T value0 = expression.value();
11693 if (expression.value() != T(1))
11695 printf(
"run_test21() - Error: Failed evaluation Expected 1 got: %f (2)\n", value0);
11696 error_found =
true;
11702 const T value1 = expression.value();
11704 if (expression.value() != T(1))
11706 printf(
"run_test21() - Error: Failed evaluation Expected 1 got: %f (2)\n", value1);
11707 error_found =
true;
11713 expression.release();
11717 const std::size_t max_vector_size = 10;
11719 std::vector<T> vec1(max_vector_size, 1);
11720 std::vector<T> vec2(max_vector_size, 2);
11721 std::vector<T> vec3(max_vector_size, 3);
11723 const std::string expressions[] =
11727 "return [2x + 10]",
11728 "return [10 + 2x]",
11729 "return [(x * 2) + 10]",
11730 "return [10 + (x * 2)]",
11731 "return [(2 * x) + 10]",
11732 "return [10 + (2 * x)]",
11737 "return [(x * 2) + k]",
11738 "return [k + (x * 2)]",
11739 "return [(2 * x) + k]",
11740 "return [k + (2 * x)]",
11745 "return [2x + 2y]",
11746 "return [2y + 2x]",
11747 "return [(2 * x) + y]",
11748 "return [y + (2 * x)]",
11749 "return [(x * 2) + y]",
11750 "return [y + (x * 2)]",
11751 "return [(2 * x) + (2 * y)]",
11752 "return [(2 * y) + (2 * x)]",
11753 "return [(x * 2) + (y * 2)]",
11754 "return [(y * 2) + (x * 2)]",
11757 const T expected_values[] =
11791 const std::size_t expressions_size =
sizeof(expressions) /
sizeof(std::string);
11793 for (std::size_t i = 0; i < expressions_size; ++i)
11795 const std::string& expression_string = expressions[i];
11799 for (std::size_t vector_size = 1; vector_size <= 10; ++vector_size)
11801 symbol_table_t symbol_table;
11802 expression_t expression;
11807 symbol_table.add_variable(
"k", k );
11808 symbol_table.add_vector (
"x", x_view);
11809 symbol_table.add_vector (
"y", vec3 );
11811 expression.register_symbol_table(symbol_table);
11813 if (!parser.compile(expression_string, expression))
11815 printf(
"run_test21() - Error: %s\tExpression: %s\n",
11816 parser.error().c_str(),
11817 expression_string.c_str());
11819 error_found =
true;
11824 x_view.
rebase(vec2.data());
11828 expression.value();
11830 if (!expression.return_invoked())
11832 printf(
"run_test21() - Error: expected return_invoked for expression: %s\n",
11833 expression_string.c_str());
11835 error_found =
true;
11842 if (results.
count() != 1)
11844 printf(
"run_test21() - Error: expected 1 return value, instead got: %d for expression: %s\n",
11845 static_cast<int>(results.
count()),
11846 expression_string.c_str());
11848 error_found =
true;
11855 printf(
"run_test21() - Error: expected vector type for return value for expression: %s\n",
11856 expression_string.c_str());
11858 error_found =
true;
11865 if (vector.
size() != vector_size)
11867 printf(
"run_test21() - Error: expected vector size %d instead got: %d for expression: %s\n",
11868 static_cast<int>(vector_size),
11869 static_cast<int>(vector.
size()),
11870 expression_string.c_str());
11872 error_found =
true;
11877 for (std::size_t j = 0; j < vector.
size(); ++j)
11879 if (vector[j] != expected_values[i])
11881 printf(
"run_test21() - Error: expected vector[%d] expected %f instead got: %f for expression: %s\n",
11882 static_cast<int>(j),
11883 expected_values[i],
11885 expression_string.c_str());
11887 error_found =
true;
11896 const std::size_t max_vector_size = 10;
11898 std::vector<T> vec1(max_vector_size, 1);
11899 std::vector<T> vec2(max_vector_size, 2);
11901 std::vector<T> vec3(max_vector_size / 2, 3);
11903 const std::string expressions[] =
11909 "return [2x + 2y]",
11910 "return [2y + 2x]",
11911 "return [(2 * x) + y]",
11912 "return [y + (2 * x)]",
11913 "return [(x * 2) + y]",
11914 "return [y + (x * 2)]",
11915 "return [(2 * x) + (2 * y)]",
11916 "return [(2 * y) + (2 * x)]",
11917 "return [(x * 2) + (y * 2)]",
11918 "return [(y * 2) + (x * 2)]",
11921 const T expected_values[] =
11939 const std::size_t expressions_size =
sizeof(expressions) /
sizeof(std::string);
11941 for (std::size_t i = 0; i < expressions_size; ++i)
11943 const std::string& expression_string = expressions[i];
11947 for (std::size_t vector_size = vec3.size() + 1; vector_size <= 10; ++vector_size)
11949 symbol_table_t symbol_table;
11950 expression_t expression;
11953 symbol_table.add_vector (
"x", x_view);
11954 symbol_table.add_vector (
"y", vec3 );
11956 expression.register_symbol_table(symbol_table);
11958 if (!parser.compile(expression_string, expression))
11960 printf(
"run_test21() - Error: %s\tExpression: %s\n",
11961 parser.error().c_str(),
11962 expression_string.c_str());
11964 error_found =
true;
11969 x_view.
rebase(vec2.data());
11973 expression.value();
11975 if (!expression.return_invoked())
11977 printf(
"run_test21() - Error: expected return_invoked for expression: %s\n",
11978 expression_string.c_str());
11980 error_found =
true;
11987 if (results.
count() != 1)
11989 printf(
"run_test21() - Error: expected 1 return value, instead got: %d for expression: %s\n",
11990 static_cast<int>(results.
count()),
11991 expression_string.c_str());
11993 error_found =
true;
12000 printf(
"run_test21() - Error: expected vector type for return value for expression: %s\n",
12001 expression_string.c_str());
12003 error_found =
true;
12010 if (vector.
size() != vec3.size())
12012 printf(
"run_test21() - Error: expected vector size %d instead got: %d for expression: %s\n",
12013 static_cast<int>(vec3.size()),
12014 static_cast<int>(vector.
size()),
12015 expression_string.c_str());
12017 error_found =
true;
12022 for (std::size_t j = 0; j < vector.
size(); ++j)
12024 if (vector[j] != expected_values[i])
12026 printf(
"run_test21() - Error: expected vector[%d] expected %f instead got: %f for expression: %s\n",
12027 static_cast<int>(j),
12028 expected_values[i],
12030 expression_string.c_str());
12032 error_found =
true;
12063 bool result =
true;
12066 const std::string expressions[] =
12068 " assert(1 > 1); ",
12069 " assert(1 > 2, 'assert statement 2'); ",
12070 " assert(1 > 3, 'assert ' + 'statement 3'); ",
12071 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); ",
12072 " assert(1 > 5, 'assert ' + 'statement 5'); ",
12073 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); "
12076 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12078 for (std::size_t i = 0; i < expression_count; ++i)
12080 expression_t expression;
12083 if (!parser.compile(expressions[i], expression))
12085 printf(
"run_test22() - Error: %s\tExpression: %s [1]\n",
12086 parser.error().c_str(),
12087 expressions[i].c_str());
12093 printf(
"run_test22() - Error: Expression is not null! expression: %s [1]\n",
12094 expressions[i].c_str());
12099 expression.value();
12104 const std::string expressions[] =
12106 " assert(1 > 1); 1 + 0 ",
12107 " assert(1 > 2, 'assert statement 2'); 2 + 0 ",
12108 " assert(1 > 3, 'assert ' + 'statement 3'); 3 + 0 ",
12109 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 4 + 0 ",
12110 " assert(1 > 5, 'assert ' + 'statement 5'); 5 + 0 ",
12111 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 6 + 0 "
12114 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12116 for (std::size_t i = 0; i < expression_count; ++i)
12118 expression_t expression;
12121 if (!parser.compile(expressions[i], expression))
12123 printf(
"run_test22() - Error: %s\tExpression: %s [2]\n",
12124 parser.error().c_str(),
12125 expressions[i].c_str());
12131 printf(
"run_test22() - Error: Expression is not constant! expression: %s [2]\n",
12132 expressions[i].c_str());
12136 expression.value();
12141 const std::string expressions[] =
12144 " assert(1 > 2, 'assert statement 2'); "
12145 " assert(1 > 3, 'assert ' + 'statement 3'); "
12146 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); "
12147 " assert(1 > 5, 'assert ' + 'statement 5'); "
12148 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); "
12151 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12153 for (std::size_t i = 0; i < expression_count; ++i)
12155 expression_t expression;
12161 parser.register_assert_check(handler);
12163 if (!parser.compile(expressions[i], expression))
12165 printf(
"run_test22() - Error: %s\tExpression: %s [3]\n",
12166 parser.error().c_str(),
12167 expressions[i].c_str());
12172 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12175 type_sequence.push_back(et_t::e_assert);
12176 type_sequence.push_back(et_t::e_assert);
12177 type_sequence.push_back(et_t::e_assert);
12178 type_sequence.push_back(et_t::e_assert);
12179 type_sequence.push_back(et_t::e_assert);
12180 type_sequence.push_back(et_t::e_assert);
12184 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [3]\n",
12185 expressions[i].c_str());
12190 expression.value();
12194 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [3]\n",
12196 expressions[i].c_str());
12204 const std::string expressions[] =
12206 " assert(1 > 1); 1 ",
12207 " assert(1 > 2, 'assert statement 2'); 2 ",
12208 " assert(1 > 3, 'assert ' + 'statement 3'); 3 ",
12209 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 4 ",
12210 " assert(1 > 5, 'assert ' + 'statement 5'); 5 ",
12211 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 6 "
12214 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12216 for (std::size_t i = 0; i < expression_count; ++i)
12218 expression_t expression;
12224 parser.register_assert_check(handler);
12226 if (!parser.compile(expressions[i], expression))
12228 printf(
"run_test22() - Error: %s\tExpression: %s [4]\n",
12229 parser.error().c_str(),
12230 expressions[i].c_str());
12235 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12238 type_sequence.push_back(et_t::e_assert );
12239 type_sequence.push_back(et_t::e_literal);
12243 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [4]\n",
12244 expressions[i].c_str());
12249 expression.value();
12253 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [4]\n",
12255 expressions[i].c_str());
12263 const std::string expressions[] =
12265 " assert(1 > 1); 1 + 0 ",
12266 " assert(1 > 2, 'assert statement 2'); 2 + 0 ",
12267 " assert(1 > 3, 'assert ' + 'statement 3'); 3 + 0 ",
12268 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 4 + 0 ",
12269 " assert(1 > 5, 'assert ' + 'statement 5'); 5 + 0 ",
12270 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 6 + 0 "
12273 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12275 for (std::size_t i = 0; i < expression_count; ++i)
12277 expression_t expression;
12283 parser.register_assert_check(handler);
12285 if (!parser.compile(expressions[i], expression))
12287 printf(
"run_test22() - Error: %s\tExpression: %s [5]\n",
12288 parser.error().c_str(),
12289 expressions[i].c_str());
12294 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12297 type_sequence.push_back(et_t::e_assert );
12298 type_sequence.push_back(et_t::e_literal);
12302 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [5]\n",
12303 expressions[i].c_str());
12308 expression.value();
12312 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [5]\n",
12314 expressions[i].c_str());
12322 const std::string expressions[] =
12324 " assert(1 > 1); 'assert statement 0001' ",
12325 " assert(1 > 2, 'assert statement 2'); 'assert statement 0002' ",
12326 " assert(1 > 3, 'assert ' + 'statement 3'); 'assert statement 0003' ",
12327 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 'assert statement 0004' ",
12328 " assert(1 > 5, 'assert ' + 'statement 5'); 'assert statement 0005' ",
12329 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 'assert statement 0006' "
12332 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12334 for (std::size_t i = 0; i < expression_count; ++i)
12336 expression_t expression;
12342 parser.register_assert_check(handler);
12344 if (!parser.compile(expressions[i], expression))
12346 printf(
"run_test22() - Error: %s\tExpression: %s [6]\n",
12347 parser.error().c_str(),
12348 expressions[i].c_str());
12353 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12356 type_sequence.push_back(et_t::e_assert);
12357 type_sequence.push_back(et_t::e_string);
12361 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [6]\n",
12362 expressions[i].c_str());
12367 expression.value();
12371 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [6]\n",
12373 expressions[i].c_str());
12381 const std::string expressions[] =
12383 " assert(1 > 1); 'assert statement' + '0001' ",
12384 " assert(1 > 2, 'assert statement 2'); 'assert statement' + '0002' ",
12385 " assert(1 > 3, 'assert ' + 'statement 3'); 'assert statement' + '0003' ",
12386 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 'assert statement' + '0004' ",
12387 " assert(1 > 5, 'assert ' + 'statement 5'); 'assert statement' + '0005' ",
12388 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 'assert statement' + '0006' "
12391 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12393 for (std::size_t i = 0; i < expression_count; ++i)
12395 expression_t expression;
12401 parser.register_assert_check(handler);
12403 if (!parser.compile(expressions[i], expression))
12405 printf(
"run_test22() - Error: %s\tExpression: %s [7]\n",
12406 parser.error().c_str(),
12407 expressions[i].c_str());
12412 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12415 type_sequence.push_back(et_t::e_assert);
12416 type_sequence.push_back(et_t::e_string);
12420 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [7]\n",
12421 expressions[i].c_str());
12426 expression.value();
12430 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [7]\n",
12432 expressions[i].c_str());
12440 const std::string expressions[] =
12442 " assert(x > y); ",
12443 " assert(x > y, 'assert statement 2'); ",
12444 " assert(x > y, 'assert ' + 'statement 3'); ",
12445 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); ",
12446 " assert(x > y, 'assert ' + 'statement 5'); ",
12447 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); "
12450 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12452 for (std::size_t i = 0; i < expression_count; ++i)
12457 symbol_table_t symbol_table;
12458 expression_t expression;
12461 symbol_table.add_variable(
"x", x);
12462 symbol_table.add_variable(
"y", y);
12463 expression.register_symbol_table(symbol_table);
12465 if (!parser.compile(expressions[i], expression))
12467 printf(
"run_test22() - Error: %s\tExpression: %s [8]\n",
12468 parser.error().c_str(),
12469 expressions[i].c_str());
12475 printf(
"run_test22() - Error: Expression is not null! expression: %s [8]\n",
12476 expressions[i].c_str());
12481 expression.value();
12486 const std::string expressions[] =
12488 " assert(x > y); 1 + 0 ",
12489 " assert(x > y, 'assert statement 2'); 2 + 0 ",
12490 " assert(x > y, 'assert ' + 'statement 3'); 3 + 0 ",
12491 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); 4 + 0 ",
12492 " assert(x > y, 'assert ' + 'statement 5'); 5 + 0 ",
12493 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); 6 + 0 "
12496 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12498 for (std::size_t i = 0; i < expression_count; ++i)
12503 symbol_table_t symbol_table;
12504 expression_t expression;
12507 symbol_table.add_variable(
"x", x);
12508 symbol_table.add_variable(
"y", y);
12509 expression.register_symbol_table(symbol_table);
12511 if (!parser.compile(expressions[i], expression))
12513 printf(
"run_test22() - Error: %s\tExpression: %s [9]\n",
12514 parser.error().c_str(),
12515 expressions[i].c_str());
12521 printf(
"run_test22() - Error: Expression is not constant! expression: %s [9]\n",
12522 expressions[i].c_str());
12526 expression.value();
12531 const std::string expressions[] =
12534 " assert(x > y, 'assert statement 2'); "
12535 " assert(x > y, 'assert ' + 'statement 3'); "
12536 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); "
12537 " assert(x > y, 'assert ' + 'statement 5'); "
12538 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); "
12541 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12543 for (std::size_t i = 0; i < expression_count; ++i)
12548 symbol_table_t symbol_table;
12549 expression_t expression;
12555 symbol_table.add_variable(
"x", x);
12556 symbol_table.add_variable(
"y", y);
12557 expression.register_symbol_table(symbol_table);
12559 parser.register_assert_check(handler);
12561 if (!parser.compile(expressions[i], expression))
12563 printf(
"run_test22() - Error: %s\tExpression: %s [10]\n",
12564 parser.error().c_str(),
12565 expressions[i].c_str());
12570 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12573 type_sequence.push_back(et_t::e_assert);
12574 type_sequence.push_back(et_t::e_assert);
12575 type_sequence.push_back(et_t::e_assert);
12576 type_sequence.push_back(et_t::e_assert);
12577 type_sequence.push_back(et_t::e_assert);
12578 type_sequence.push_back(et_t::e_assert);
12582 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [10]\n",
12583 expressions[i].c_str());
12588 expression.value();
12592 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [10]\n",
12594 expressions[i].c_str());
12602 const std::string expressions[] =
12604 " assert(x > y); 1 ",
12605 " assert(x > y, 'assert statement 2'); 2 ",
12606 " assert(x > y, 'assert ' + 'statement 3'); 3 ",
12607 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); 4 ",
12608 " assert(x > y, 'assert ' + 'statement 5'); 5 ",
12609 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); 6 "
12612 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12614 for (std::size_t i = 0; i < expression_count; ++i)
12619 symbol_table_t symbol_table;
12620 expression_t expression;
12626 symbol_table.add_variable(
"x", x);
12627 symbol_table.add_variable(
"y", y);
12628 expression.register_symbol_table(symbol_table);
12630 parser.register_assert_check(handler);
12632 if (!parser.compile(expressions[i], expression))
12634 printf(
"run_test22() - Error: %s\tExpression: %s [11]\n",
12635 parser.error().c_str(),
12636 expressions[i].c_str());
12641 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12644 type_sequence.push_back(et_t::e_assert );
12645 type_sequence.push_back(et_t::e_literal);
12649 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [11]\n",
12650 expressions[i].c_str());
12655 expression.value();
12659 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [11]\n",
12661 expressions[i].c_str());
12670 const std::string expressions[] =
12672 " assert(x > y); 1 + 0 ",
12673 " assert(x > y, 'assert statement 2'); 2 + 0 ",
12674 " assert(x > y, 'assert ' + 'statement 3'); 3 + 0 ",
12675 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); 4 + 0 ",
12676 " assert(x > y, 'assert ' + 'statement 5'); 5 + 0 ",
12677 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); 6 + 0 "
12680 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12682 for (std::size_t i = 0; i < expression_count; ++i)
12687 symbol_table_t symbol_table;
12688 expression_t expression;
12694 symbol_table.add_variable(
"x", x);
12695 symbol_table.add_variable(
"y", y);
12696 expression.register_symbol_table(symbol_table);
12698 parser.register_assert_check(handler);
12700 if (!parser.compile(expressions[i], expression))
12702 printf(
"run_test22() - Error: %s\tExpression: %s [12]\n",
12703 parser.error().c_str(),
12704 expressions[i].c_str());
12709 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12712 type_sequence.push_back(et_t::e_assert );
12713 type_sequence.push_back(et_t::e_literal);
12717 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [12]\n",
12718 expressions[i].c_str());
12723 expression.value();
12727 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [12]\n",
12729 expressions[i].c_str());
12737 const std::string expressions[] =
12739 " assert(x > y); 'assert statement 0001' ",
12740 " assert(x > y, 'assert statement 2'); 'assert statement 0002' ",
12741 " assert(x > y, 'assert ' + 'statement 3'); 'assert statement 0003' ",
12742 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); 'assert statement 0004' ",
12743 " assert(x > y, 'assert ' + 'statement 5'); 'assert statement 0005' ",
12744 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); 'assert statement 0006' "
12747 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12749 for (std::size_t i = 0; i < expression_count; ++i)
12754 symbol_table_t symbol_table;
12755 expression_t expression;
12761 symbol_table.add_variable(
"x", x);
12762 symbol_table.add_variable(
"y", y);
12763 expression.register_symbol_table(symbol_table);
12765 parser.register_assert_check(handler);
12767 if (!parser.compile(expressions[i], expression))
12769 printf(
"run_test22() - Error: %s\tExpression: %s [13]\n",
12770 parser.error().c_str(),
12771 expressions[i].c_str());
12776 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12779 type_sequence.push_back(et_t::e_assert);
12780 type_sequence.push_back(et_t::e_string);
12784 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [13]\n",
12785 expressions[i].c_str());
12790 expression.value();
12794 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [13]\n",
12796 expressions[i].c_str());
12804 const std::string expressions[] =
12806 " assert(x > y); 'assert statement' + '0001' ",
12807 " assert(x > y, 'assert statement 2'); 'assert statement' + '0002' ",
12808 " assert(x > y, 'assert ' + 'statement 3'); 'assert statement' + '0003' ",
12809 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); 'assert statement' + '0004' ",
12810 " assert(x > y, 'assert ' + 'statement 5'); 'assert statement' + '0005' ",
12811 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); 'assert statement' + '0006' "
12814 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12816 for (std::size_t i = 0; i < expression_count; ++i)
12821 symbol_table_t symbol_table;
12822 expression_t expression;
12828 symbol_table.add_variable(
"x", x);
12829 symbol_table.add_variable(
"y", y);
12830 expression.register_symbol_table(symbol_table);
12832 parser.register_assert_check(handler);
12834 if (!parser.compile(expressions[i], expression))
12836 printf(
"run_test22() - Error: %s\tExpression: %s [14]\n",
12837 parser.error().c_str(),
12838 expressions[i].c_str());
12843 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12846 type_sequence.push_back(et_t::e_assert);
12847 type_sequence.push_back(et_t::e_string);
12851 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [14]\n",
12852 expressions[i].c_str());
12857 expression.value();
12861 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [14]\n",
12863 expressions[i].c_str());
12871 const std::string expressions[] =
12873 " assert(1 > 1); 1 + 0; "
12874 " assert(1 > 2, 'assert statement 2'); 2 + 0; "
12875 " assert(1 > 3, 'assert ' + 'statement 3'); 3 + 0; "
12876 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 4 + 0; "
12877 " assert(1 > 5, 'assert ' + 'statement 5'); 5 + 0 "
12878 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 6 + 0; "
12881 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12883 for (std::size_t i = 0; i < expression_count; ++i)
12885 expression_t expression;
12891 parser.register_assert_check(handler);
12893 if (!parser.compile(expressions[i], expression))
12895 printf(
"run_test22() - Error: %s\tExpression: %s [15]\n",
12896 parser.error().c_str(),
12897 expressions[i].c_str());
12902 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12905 type_sequence.push_back(et_t::e_assert );
12906 type_sequence.push_back(et_t::e_assert );
12907 type_sequence.push_back(et_t::e_assert );
12908 type_sequence.push_back(et_t::e_assert );
12909 type_sequence.push_back(et_t::e_assert );
12910 type_sequence.push_back(et_t::e_assert );
12911 type_sequence.push_back(et_t::e_literal);
12915 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [15]\n",
12916 expressions[i].c_str());
12921 expression.value();
12925 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [15]\n",
12927 expressions[i].c_str());
12935 const std::string expressions[] =
12937 " assert(1 > 1); 'assert' + '01'; "
12938 " assert(1 > 2, 'assert statement 2'); 'assert' + '02'; "
12939 " assert(1 > 3, 'assert ' + 'statement 3'); 'assert' + '03'; "
12940 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 'assert' + '04'; "
12941 " assert(1 > 5, 'assert ' + 'statement 5'); 'assert' + '05'; "
12942 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 'assert' + '06'; "
12945 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12947 for (std::size_t i = 0; i < expression_count; ++i)
12949 expression_t expression;
12955 parser.register_assert_check(handler);
12957 if (!parser.compile(expressions[i], expression))
12959 printf(
"run_test22() - Error: %s\tExpression: %s [16]\n",
12960 parser.error().c_str(),
12961 expressions[i].c_str());
12966 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12969 type_sequence.push_back(et_t::e_assert);
12970 type_sequence.push_back(et_t::e_assert);
12971 type_sequence.push_back(et_t::e_assert);
12972 type_sequence.push_back(et_t::e_assert);
12973 type_sequence.push_back(et_t::e_assert);
12974 type_sequence.push_back(et_t::e_assert);
12975 type_sequence.push_back(et_t::e_string);
12979 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [16]\n",
12980 expressions[i].c_str());
12985 expression.value();
12989 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [16]\n",
12991 expressions[i].c_str());
12999 const std::string expressions[] =
13001 " assert(x > y); x + y + 1; "
13002 " assert(x > y, 'assert statement 2'); x + y + 1; "
13003 " assert(x > y, 'assert ' + 'statement 3'); x + y + 1; "
13004 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); x + y + 1; "
13005 " assert(x > y, 'assert ' + 'statement 5'); x + y + 1; "
13006 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); x + y + 1; "
13009 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
13011 for (std::size_t i = 0; i < expression_count; ++i)
13016 symbol_table_t symbol_table;
13017 expression_t expression;
13023 symbol_table.add_variable(
"x", x);
13024 symbol_table.add_variable(
"y", y);
13025 expression.register_symbol_table(symbol_table);
13027 parser.register_assert_check(handler);
13029 if (!parser.compile(expressions[i], expression))
13031 printf(
"run_test22() - Error: %s\tExpression: %s [17]\n",
13032 parser.error().c_str(),
13033 expressions[i].c_str());
13038 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
13041 type_sequence.push_back(et_t::e_assert);
13042 type_sequence.push_back(et_t::e_assert);
13043 type_sequence.push_back(et_t::e_assert);
13044 type_sequence.push_back(et_t::e_assert);
13045 type_sequence.push_back(et_t::e_assert);
13046 type_sequence.push_back(et_t::e_assert);
13047 type_sequence.push_back(et_t::e_sf3ext);
13051 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [17]\n",
13052 expressions[i].c_str());
13057 expression.value();
13061 printf(
"run_test22() - Error: Invalid assert count of %d expected 6. Expression: %s [17]\n",
13063 expressions[i].c_str());
13071 const std::string expressions[] =
13073 " assert(x > y); 'assert' + ((x < y) ? '01' : 'XYZ'); "
13074 " assert(x > y, 'assert statement 2'); 'assert' + ((x < y) ? '02' : 'XYZ'); "
13075 " assert(x > y, 'assert ' + 'statement 3'); 'assert' + ((x < y) ? '03' : 'XYZ'); "
13076 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); 'assert' + ((x < y) ? '04' : 'XYZ'); "
13077 " assert(x > y, 'assert ' + 'statement 5'); 'assert' + ((x < y) ? '05' : 'XYZ'); "
13078 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); 'assert' + ((x < y) ? '06' : 'XYZ'); "
13081 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
13083 for (std::size_t i = 0; i < expression_count; ++i)
13088 symbol_table_t symbol_table;
13089 expression_t expression;
13095 symbol_table.add_variable(
"x", x);
13096 symbol_table.add_variable(
"y", y);
13097 expression.register_symbol_table(symbol_table);
13099 parser.register_assert_check(handler);
13101 if (!parser.compile(expressions[i], expression))
13103 printf(
"run_test22() - Error: %s\tExpression: %s [18]\n",
13104 parser.error().c_str(),
13105 expressions[i].c_str());
13110 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
13113 type_sequence.push_back(et_t::e_assert);
13114 type_sequence.push_back(et_t::e_assert);
13115 type_sequence.push_back(et_t::e_assert);
13116 type_sequence.push_back(et_t::e_assert);
13117 type_sequence.push_back(et_t::e_assert);
13118 type_sequence.push_back(et_t::e_assert);
13119 type_sequence.push_back(et_t::e_string);
13123 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [18]\n",
13124 expressions[i].c_str());
13129 expression.value();
13133 printf(
"run_test22() - Error: Invalid assert count of %d expected 6. Expression: %s [18]\n",
13135 expressions[i].c_str());
13143 typedef std::pair<std::string,std::size_t> exprpack_t;
13147 exprpack_t(
"var x := 1;", 1 *
sizeof(T) ),
13148 exprpack_t(
"var x := 1; var y := 2;", 2 *
sizeof(T) ),
13149 exprpack_t(
"var x := 1; var y := 2; var z := 2;", 3 *
sizeof(T) ),
13151 exprpack_t(
"const var x := 1;", 1 *
sizeof(T) ),
13152 exprpack_t(
"const var x := 1; const var y := 2;", 2 *
sizeof(T) ),
13153 exprpack_t(
"const var x := 1; const var y := 2; const var z := 2;", 3 *
sizeof(T) ),
13155 exprpack_t(
"const var x := 1;", 1 *
sizeof(T) ),
13156 exprpack_t(
"const var x := 1; var y := 2;", 2 *
sizeof(T) ),
13157 exprpack_t(
"const var x := 1; var y := 2; const var z := 2;", 3 *
sizeof(T) ),
13159 exprpack_t(
"var x := 1;", 1 *
sizeof(T) ),
13160 exprpack_t(
"var x := 1; const var y := 2;", 2 *
sizeof(T) ),
13161 exprpack_t(
"var x := 1; const var y := 2; var z := 2;", 3 *
sizeof(T) ),
13163 exprpack_t(
"var x;", 1 *
sizeof(T) ),
13164 exprpack_t(
"var x; var y;", 2 *
sizeof(T) ),
13165 exprpack_t(
"var x; var y; var z;", 3 *
sizeof(T) ),
13167 exprpack_t(
"var v[10];", 10 *
sizeof(T) ),
13168 exprpack_t(
"var v[10]; var w[20];", 30 *
sizeof(T) ),
13169 exprpack_t(
"var v[10]; var w[20]; var u[20];", 50 *
sizeof(T) ),
13171 exprpack_t(
"var x := 1; var v[10];", 11 *
sizeof(T) ),
13172 exprpack_t(
"var x := 1; var y := 2; var v[10];", 12 *
sizeof(T) ),
13173 exprpack_t(
"var x := 1; var y := 2; var z := 2; var v[10];", 13 *
sizeof(T) ),
13175 exprpack_t(
"var x := 1; if (x > 2) { var a := x + 1; };", 2 *
sizeof(T) ),
13176 exprpack_t(
"var x := 1; var y := 2; if (x > 2) { var a := x + 1; };", 3 *
sizeof(T) ),
13177 exprpack_t(
"var x := 1; var y := 2; var z := 2; if (x > 2) { var a := x + 1; };", 4 *
sizeof(T) ),
13179 exprpack_t(
"var x := 1; if (x > 2) { var a[10] := [x + 1]; };", 11 *
sizeof(T) ),
13180 exprpack_t(
"var x := 1; var y := 2; if (x > 2) { var a[10] := [x + 1]; };", 12 *
sizeof(T) ),
13181 exprpack_t(
"var x := 1; var y := 2; var z := 2; if (x > 2) { var a[10] := [x + 1]; };", 13 *
sizeof(T) ),
13183 exprpack_t(
"var x := 1; if (x > 2) { var a := x + 1; } else { var a := x + 2; };", 2 *
sizeof(T) ),
13184 exprpack_t(
"var x := 1; var y := 2; if (x > 2) { var a := x + 1; } else { var a := x + 2; };", 3 *
sizeof(T) ),
13185 exprpack_t(
"var x := 1; var y := 2; var z := 2; if (x > 2) { var a := x + 1; } else { var a := x + 2; };", 4 *
sizeof(T) ),
13187 exprpack_t(
"var x := 1; if (x > 2) { var a := x + 1; } else { var a := x + 2; var b := a; };", 3 *
sizeof(T) ),
13188 exprpack_t(
"var x := 1; var y := 2; if (x > 2) { var a := x + 1; } else { var a := x + 2; var b := a; };", 4 *
sizeof(T) ),
13189 exprpack_t(
"var x := 1; var y := 2; var z := 2; if (x > 2) { var a := x + 1; } else { var a := x + 2; var b := a; };", 5 *
sizeof(T) ),
13191 exprpack_t(
"var v[10]; v[7] + 1;", 10 *
sizeof(T) ),
13200 expression_t expression;
13203 if (!parser.compile(exprpack.first, expression))
13205 printf(
"run_test22() - Error: Max expression/vector size check. Diag: %s Expression: %s [01]\n",
13206 parser.error().c_str(),
13207 exprpack.first.c_str());
13213 if (parser.total_local_symbol_size_bytes() != exprpack.second)
13215 printf(
"run_test22() - Error: Mismatch in expected expression size. Expected size: %d instead got: %d "
13216 "Expression: %s [02]\n",
13217 static_cast<int>(exprpack.second),
13218 static_cast<int>(parser.total_local_symbol_size_bytes()),
13219 exprpack.first.c_str());
13228 typedef std::pair<std::string,std::size_t> exprpack_t;
13232 exprpack_t(
"var x := 1;", 0 *
sizeof(T) ),
13233 exprpack_t(
"var x := 1; var y := 1;", 1 *
sizeof(T) ),
13234 exprpack_t(
"var x := 1; var y := 1; var z := 1;", 2 *
sizeof(T) ),
13236 exprpack_t(
"var x;", 0 *
sizeof(T) ),
13237 exprpack_t(
"var x; var y;", 1 *
sizeof(T) ),
13238 exprpack_t(
"var x; var y; var z;", 2 *
sizeof(T) ),
13240 exprpack_t(
"var x{};", 0 *
sizeof(T) ),
13241 exprpack_t(
"var x{}; var y{};", 1 *
sizeof(T) ),
13242 exprpack_t(
"var x{}; var y{}; var z{};", 2 *
sizeof(T) ),
13244 exprpack_t(
"const var x := 1;", 0 *
sizeof(T) ),
13245 exprpack_t(
"const var x := 1; const var y := 1;", 1 *
sizeof(T) ),
13246 exprpack_t(
"const var x := 1; const var y := 1; const var z := 1;", 2 *
sizeof(T) ),
13248 exprpack_t(
"const var x := 1;", 0 *
sizeof(T) ),
13249 exprpack_t(
"const var x := 1; var y := 1;", 1 *
sizeof(T) ),
13250 exprpack_t(
"const var x := 1; var y := 1; const var z := 1;", 2 *
sizeof(T) ),
13252 exprpack_t(
"var x := 1;", 0 *
sizeof(T) ),
13253 exprpack_t(
"var x := 1; const var y := 1;", 1 *
sizeof(T) ),
13254 exprpack_t(
"var x := 1; const var y := 1; var z := 1;", 2 *
sizeof(T) ),
13256 exprpack_t(
"var v[10];", 9 *
sizeof(T) ),
13257 exprpack_t(
"var x := 1; var v[10];", 10 *
sizeof(T) ),
13258 exprpack_t(
"var x := 1; var y := 2; var v[10];", 11 *
sizeof(T) ),
13259 exprpack_t(
"var x := 1; var y := 2; var z := 2; var v[10];", 12 *
sizeof(T) ),
13268 expression_t expression;
13271 parser.settings().set_max_total_local_symbol_size_bytes(exprpack.second);
13272 parser.settings().set_max_local_vector_size(exprpack.second /
sizeof(T));
13274 if (parser.compile(exprpack.first, expression))
13276 printf(
"run_test22() - Error: Expected the expression to fail compilation due to size check. Expression: %s [03]\n",
13277 exprpack.first.c_str());
13283 if (parser.total_local_symbol_size_bytes() != 0)
13285 printf(
"run_test22() - Error: Expected zero size expression, instead got: %d "
13286 "Expression: %s [02]\n",
13287 static_cast<int>(parser.total_local_symbol_size_bytes()),
13288 exprpack.first.c_str());
13297 expression_t expression;
13300 parser.settings().set_max_total_local_symbol_size_bytes(100);
13301 parser.settings().set_max_local_vector_size(200);
13303 const std::string expression_str =
"var x := 1;";
13305 if (parser.compile(expression_str, expression))
13307 printf(
"run_test22() - Error: Expected the expression to fail compilation due to size check. Expression: %s [04]\n",
13308 expression_str.c_str());