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",
6468 const bool result1 = symbol_table.
add_variable(
"x", x);
6472 if (!result1 || !result2 || result3)
6474 printf(
"run_test18() - Failed sym_tab add/remove [1]\n");
6484 if (!result1 || !result2 || result3)
6486 printf(
"run_test18() - Failed sym_tab add/remove [2]\n");
6491 std::vector<T> x(10,T(0));
6492 const bool result1 = symbol_table.
add_vector(
"x", x);
6496 if (!result1 || !result2 || result3)
6498 printf(
"run_test18() - Failed sym_tab add/remove [3]\n");
6504 const bool result1 = symbol_table.
add_function(
"x", x);
6508 if (!result1 || !result2 || result3)
6510 printf(
"run_test18() - Failed sym_tab add/remove [4]\n");
6516 const bool result1 = symbol_table.
add_function(
"x", x);
6520 if (!result1 || !result2 || result3)
6522 printf(
"run_test18() - Failed sym_tab add/remove [5]\n");
6567 static const std::string expr_str_list[] =
6569 "equal(va_func,(0))",
6570 "equal(va_func(),(0))",
6571 "equal(va_func(1,2,3,4,5,6,7,8,9),(1+2+3+4+5+6+7+8+9))",
6572 "equal(va_func(1,x,3,y,5,z,7,w,9),(1+x+3+y+5+z+7+w+9))",
6573 "equal(va_func(x,2,y,4,z,6,w,8,u),(x+2+y+4+z+6+w+8+u))",
6574 "equal(va_func(x,y,z,w,u,v,t,1,2,3),(x+y+z+w+u+v+t+1+2+3))",
6575 "equal(va_func(x,y,z,w,u,v,t),(x+y+z+w+u+v+t))",
6576 "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))",
6577 "equal(1+va_func(1,x,3,y,5,z,7,w,9),(1+x+3+y+5+z+7+w+9)+1)",
6578 "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))",
6579 "equal(va_func(va_func(x),va_func(y),va_func(z)),va_func(x,y,z))",
6580 "equal(va_func(va_func(va_func(va_func(va_func(va_func(va_func(va_func(x)))))))),x)",
6581 "equal(va_func(va_func(va_func(va_func(va_func(va_func(va_func(va_func(123.456)))))))),123.456)",
6582 "equal(va_func(va_func(va_func(va_func(va_func(va_func(va_func(va_func(x+1)))))))),x+1)",
6583 "equal(va_func(va_func(va_func(va_func(va_func(va_func(va_func(va_func(x+y)))))))),x+y)"
6585 static const std::size_t expr_str_list_size =
sizeof(expr_str_list) /
sizeof(std::string);
6589 for (std::size_t i = 0; i < expr_str_list_size; ++i)
6591 expression_t expression;
6592 expression.register_symbol_table(symbol_table);
6596 if (!parser.
compile(expr_str_list[i],expression))
6598 printf(
"run_test18() - [1] VarArg Error: %s Expression: %s\n",
6599 parser.
error().c_str(),
6600 expr_str_list[i].c_str());
6608 bool error_found =
false;
6614 printf(
"run_test18() - Error in evaluation! (1) Expression: %s\n",
6615 expr_str_list[i].c_str());
6635 T v0[] = { T(1), T(1), T(1), T(1) };
6636 T v1[] = { T(1), T(2), T(3), T(4) };
6645 std::string s0 =
"AbCdEfGhIj";
6649 symbol_table_t symbol_table;
6651 symbol_table.add_constants();
6653 symbol_table.add_variable (
"x" , x);
6654 symbol_table.add_variable (
"y" , y);
6655 symbol_table.add_vector (
"v0" ,v0);
6656 symbol_table.add_vector (
"v1" ,v1);
6657 symbol_table.add_vector (
"v2" ,v2);
6658 symbol_table.add_stringvar(
"s0", s0);
6659 symbol_table.add_function (
"gen_func", f);
6663 "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]);",
6664 "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]);",
6665 "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);",
6666 "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);",
6667 "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]);",
6668 "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);",
6669 "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);",
6670 "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);",
6671 "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);",
6672 "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');"
6677 bool error_found =
false;
6682 expression_t expression;
6684 expression.register_symbol_table(symbol_table);
6688 if (!parser.compile(expression_str,expression))
6690 printf(
"run_test18() - [2] GenFunc Error: %s Expression: %s [2]\n",
6691 parser.error().c_str(),
6692 expression_str.c_str());
6710 printf(
"run_test18() - Error in evaluation! (2) Expression: %s "
6722 expression.release();
6739 T v0[] = { T(1), T(1), T(1), T(1) };
6740 T v1[] = { T(1), T(2), T(3), T(4) };
6741 T v2[] = { T(5), T(6), T(7), T(8) };
6743 std::string s0 =
"AbCdEfGhIj";
6747 symbol_table_t symbol_table;
6749 symbol_table.add_constants();
6751 symbol_table.add_variable (
"x" , x);
6752 symbol_table.add_variable (
"y" , y);
6753 symbol_table.add_vector (
"v0" ,v0);
6754 symbol_table.add_vector (
"v1" ,v1);
6755 symbol_table.add_vector (
"v2" ,v2);
6756 symbol_table.add_stringvar(
"s0", s0);
6757 symbol_table.add_function (
"foo", f);
6761 "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]);",
6762 "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);",
6763 "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);",
6764 "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]);",
6765 "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);",
6766 "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);",
6767 "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);",
6768 "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);",
6769 "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');",
6770 "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');",
6771 "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]);",
6772 "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]);",
6773 "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]);",
6774 "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]);",
6775 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x);",
6776 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x);",
6777 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x,x);",
6778 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x,x,x);",
6779 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0);",
6780 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0);",
6781 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0,s0);",
6782 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0,s0,s0);",
6783 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0);",
6784 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0);",
6785 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0,v0);",
6786 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0,v0,v0);",
6787 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x);",
6788 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x);",
6789 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x,x);",
6790 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x,x,x);",
6791 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0);",
6792 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0);",
6793 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0,s0);",
6794 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0,s0,s0);",
6795 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0);",
6796 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0);",
6797 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0,v0);",
6798 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0,v0,v0);",
6799 "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]);",
6800 "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]);",
6801 "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]);",
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:5]);"
6807 const std::string parameter_type_list[] =
6847 "TTTTTTT|STSTSTS|V*T*VS*" ,
6848 "TTTTTTT|STSTSTS|V*TTTTVSS",
6849 "TTTTTTT|STSTSTS|VVT*VSS" ,
6850 "TTTTTTT|STSTSTS|VVTTTTVS*",
6853 bool error_found =
false;
6858 expression_t expression;
6860 expression.register_symbol_table(symbol_table);
6866 if (!parser.compile(expression_str,expression))
6868 printf(
"run_test18() - [3] GenFunc2 Error: %s Expression: %s Parameter Sequence: %s [3]\n",
6869 parser.error().c_str(),
6870 expression_str.c_str(),
6871 parameter_type_list[i].c_str());
6887 bool error_found =
false;
6891 "foo(v0,v1,v2,x,y,s0);",
6892 "foo(v1,v2,x,y,s0,v0);",
6893 "foo(v2,x,y,s0,v0,v1);",
6894 "foo(x,y,s0,v0,v1,v2);",
6895 "foo(y,s0,v0,v1,v2,x);",
6896 "foo(s0,v0,v1,v2,x,y);"
6901 const std::string parameter_type_list[] =
6920 T v0[] = { T(1), T(1), T(1), T(1) };
6921 T v1[] = { T(1), T(2), T(3), T(4) };
6922 T v2[] = { T(5), T(6), T(7), T(8) };
6924 std::string s0 =
"AbCdEfGhIj";
6929 T v0_inc[] = { T(2), T(2), T(2), T(2) };
6930 T v1_inc[] = { T(2), T(3), T(4), T(5) };
6931 T v2_inc[] = { T(6), T(7), T(8), T(9) };
6933 std::size_t sizeof_vec =
sizeof(v0) /
sizeof(T);
6935 std::string s0_inc =
"BcDeFgHiJk";
6939 symbol_table_t symbol_table;
6941 symbol_table.add_constants();
6943 symbol_table.add_variable (
"x" , x );
6944 symbol_table.add_variable (
"y" , y );
6945 symbol_table.add_vector (
"v0" , v0);
6946 symbol_table.add_vector (
"v1" , v1);
6947 symbol_table.add_vector (
"v2" , v2);
6948 symbol_table.add_stringvar(
"s0", s0);
6949 symbol_table.add_function (
"foo", f );
6951 expression_t expression;
6953 expression.register_symbol_table(symbol_table);
6961 printf(
"run_test18() - [4] IncFunc Error: %s Expression: %s Parameter Sequence: %s [4]\n",
6962 parser.error().c_str(),
6964 parameter_type_list[i].c_str());
6974 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: x\n",
6981 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: y\n",
6988 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: y\n",
6993 if (!std::equal(v0,v0 + sizeof_vec,v0_inc))
6995 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: v0\n",
7000 if (!std::equal(v1,v1 + sizeof_vec,v1_inc))
7002 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: v1\n",
7007 if (!std::equal(v2,v2 + sizeof_vec,v2_inc))
7009 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: v2\n",
7022 bool error_found =
false;
7026 std::string s0 =
"XXXXXXXXXXXXXXX";
7027 std::string s1 =
"XXXXXXXXXXXXXXX";
7028 std::string s2 =
"XXXXXXXXXXXXXXX";
7029 std::string s3 =
"XXXXXXXXXXXXXXX";
7030 std::string s4 =
"XXXXXXXXXXXXXXX";
7036 symbol_table_t symbol_table;
7038 symbol_table.add_constants();
7040 symbol_table.add_stringvar(
"s0", s0);
7041 symbol_table.add_stringvar(
"s1", s1);
7042 symbol_table.add_stringvar(
"s2", s2);
7043 symbol_table.add_stringvar(
"s3", s3);
7044 symbol_table.add_stringvar(
"s4", s4);
7046 symbol_table.add_function(
"remspc_uc", rsauc);
7048 const std::string program =
7049 " s0 := 'How now '; "
7050 " s1 := 'brown cow?'; "
7051 " s2 := remspc_uc(s0 + s1); "
7052 " s3 := remspc_uc(s0) + s1; "
7053 " s4 := s0 + remspc_uc(s1); "
7054 " remspc_uc(s0 + s1) == remspc_uc(s0) + remspc_uc(s1); ";
7056 const std::string parameter_type_list[] =
7066 std::size_t parameter_type_list_size =
sizeof(parameter_type_list) /
sizeof(std::string);
7068 for (std::size_t i = 0; i < parameter_type_list_size; ++i)
7070 expression_t expression;
7072 expression.register_symbol_table(symbol_table);
7078 if (!parser.compile(program,expression))
7080 printf(
"run_test18() - [5] Error: %s\tExpression: %s\n",
7081 parser.error().c_str(),
7087 const T result = expression.value();
7091 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Result <> 1\n",
7098 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s0\n",
7103 if (
"How now " != s0)
7105 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s0\n",
7110 if (
"brown cow?" != s1)
7112 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s1\n",
7117 if (
"HOWNOWBROWNCOW?" != s2)
7119 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s2\n",
7124 if (
"HOWNOWbrown cow?" != s3)
7126 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s3\n",
7131 if (
"How now BROWNCOW?" != s4)
7133 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s4\n",
7146 bool error_found =
false;
7152 symbol_table_t symbol_table;
7154 T v[4] = {T(5), T(6), T(7), T(8)};
7156 symbol_table.add_vector(
"v",v);
7159 symbol_table.add_function(
"vararg_func",vaf);
7161 expression_t expression;
7162 expression.register_symbol_table(symbol_table);
7166 const std::string programs[] =
7168 "equal(0,vararg_func())",
7169 "equal(1,vararg_func() + 1)",
7170 "equal(1,1 + vararg_func())",
7171 "equal(1,vararg_func + 1)",
7172 "equal(1,1 + vararg_func)",
7173 "equal(0,vararg_func() + vararg_func)",
7174 "equal(0,vararg_func + vararg_func())",
7175 "equal(1,vararg_func + vararg_func(1))",
7176 "equal(1,vararg_func + vararg_func(1,2))",
7177 "equal(2,vararg_func + vararg_func(v))",
7178 "equal(1,vararg_func() + vararg_func(1))",
7179 "equal(1,vararg_func() + vararg_func(1,2))",
7180 "equal(2,vararg_func() + vararg_func(v))",
7181 "equal(2,vararg_func(v))",
7182 "equal(1,vararg_func(1))",
7183 "equal(1,vararg_func(1,2,3))",
7184 "equal(1,vararg_func(5,6,7,8))",
7185 "equal(5,vararg_func(v) + 3)",
7186 "equal(5,vararg_func(1) + 4)",
7187 "equal(6,vararg_func(1,2,3) + 5)",
7188 "equal(7,vararg_func(5,6,7,8) + 6)"
7191 static const std::size_t programs_size =
sizeof(programs) /
sizeof(std::string);
7193 for (std::size_t i = 0; i < programs_size; ++i)
7195 if (!parser.compile(programs[i],expression))
7197 printf(
"run_test18() - [6] Error: %s\tExpression: %s\n",
7198 parser.error().c_str(),
7199 programs[i].c_str());
7203 else if (T(1) != expression.value())
7205 printf(
"run_test18() - Error in evaluation! (5) Expression: %s\n",
7206 programs[i].c_str());
7219 bool error_found =
false;
7231 v.push_back(T(N)); \
7239 const std::string expr_string =
"sum(v + 1)";
7243 symbol_table_t symbol_table;
7244 symbol_table.add_vector(
"v",v);
7246 expression_t expression;
7247 expression.register_symbol_table(symbol_table);
7251 if (!parser.compile(expr_string,expression))
7253 printf(
"run_test18() - [7] Error: %s\tExpression: %s\n",
7254 parser.error().c_str(),
7255 expr_string.c_str());
7262 sum = expression.value();
7266 printf(
"run_test18() - Error in evaluation! (6) Expression: %s\n",
7267 expr_string.c_str());
7273 sum = expression.value();
7277 printf(
"run_test18() - Error in evaluation! (7) Expression: %s\n",
7278 expr_string.c_str());
7283 sum = expression.value();
7287 printf(
"run_test18() - Error in evaluation! (8) Expression: %s\n",
7288 expr_string.c_str());
7293 sum = expression.value();
7297 printf(
"run_test18() - Error in evaluation! (9) Expression: %s\n",
7298 expr_string.c_str());
7309 bool error_found =
false;
7319 v.push_back(T(N)); \
7324 pb(s, 3)
pb(s, 6)
pb(s, 9)
pb(s,12)
7325 pb(s,15)
pb(s,18)
pb(s,21)
7328 const std::string expr_string =
"v[0] + v[1] + v[2]";
7332 symbol_table_t symbol_table;
7333 symbol_table.add_vector(
"v",v);
7335 expression_t expression;
7336 expression.register_symbol_table(symbol_table);
7340 if (!parser.compile(expr_string,expression))
7342 printf(
"run_test18() - [8] Error: %s\tExpression: %s\n",
7343 parser.error().c_str(),
7344 expr_string.c_str());
7349 for (std::size_t i = 0; i < v0.size() - 4; ++i)
7353 T sum = expression.value();
7357 printf(
"run_test18() - Error in evaluation! (7) Expression: %s Expected: %5.3f Computed: %5.3f\n",
7358 expr_string.c_str(),
7374 bool error_found =
false;
7384 v.push_back(T(N)); \
7389 pb(s, 3)
pb(s, 6)
pb(s, 9)
pb(s,12)
7390 pb(s,15)
pb(s,18)
pb(s,21)
7393 const std::string expr_string =
"var i := 0; var j := 1; var k := 2; v[i] + v[j] + v[k]";
7397 symbol_table_t symbol_table;
7398 symbol_table.add_vector(
"v",v);
7400 expression_t expression;
7401 expression.register_symbol_table(symbol_table);
7405 if (!parser.compile(expr_string,expression))
7407 printf(
"run_test18() - [9] Error: %s\tExpression: %s\n",
7408 parser.error().c_str(),
7409 expr_string.c_str());
7414 for (std::size_t i = 0; i < v0.size() - 4; ++i)
7418 T sum = expression.value();
7422 printf(
"run_test18() - Error in evaluation! (8) Expression: %s Expected: %5.3f Computed: %5.3f\n",
7423 expr_string.c_str(),
7443 const std::string const_folded_expression_list[] =
7445 "(0 * dot(2 * v0,v1 - 1))",
7446 "(0 * dot(2 * v0,v1 - 1)) + (dot(2 * v0,v1 - 1) * 0)",
7447 "(0 * dot(v0 - v1,v1 / v0))",
7448 "(0 * dot(v0 - v1,v1 / v0)) + (dot(v0 - v1,v1 / v0) * 0)",
7450 "(0 * dot(v0,v1)) + (dot(v0,v1) * 0)",
7451 "(0 / dot(2 * v0,v1 - 1))",
7452 "(0 / dot(2 * v0,v1 - 1)) + (dot(2 * v0,v1 - 1) * 0)",
7453 "(0 / dot(v0 - v1,v1 / v0))",
7454 "(0 / dot(v0 - v1,v1 / v0)) + (dot(v0 - v1,v1 / v0) * 0)",
7456 "(0 / dot(v0,v1)) + (dot(v0,v1) * 0)",
7457 "(dot(2 * v0,v1 - 1) * 0)",
7458 "(dot(2 * v0,v1 - 1) * 0) + (0 * dot(2 * v0,v1 - 1))",
7459 "(dot(2 * v0,v1 - 1) * 0) + (0 / dot(2 * v0,v1 - 1))",
7460 "(dot(v0 - v1,v1 / v0) * 0)",
7461 "(dot(v0 - v1,v1 / v0) * 0) + (0 * dot(v0 - v1,v1 / v0))",
7462 "(dot(v0 - v1,v1 / v0) * 0) + (0 / dot(v0 - v1,v1 / v0))",
7464 "(dot(v0,v1) * 0) + (0 * dot(v0,v1))",
7465 "(dot(v0,v1) * 0) + (0 / dot(v0,v1))"
7468 const std::size_t const_folded_expression_list_size =
sizeof(const_folded_expression_list) /
sizeof(std::string);
7470 const std::size_t vector_size = 5;
7471 T v0[vector_size] = { 0, 2, 4, 6, 8 };
7472 T v1[vector_size] = { 1, 3, 5, 7, 9 };
7480 symbol_table_t symbol_table;
7482 symbol_table.add_package( vector_package );
7483 symbol_table.add_package( io_package );
7484 symbol_table.add_vector (
"v0" , vv0 );
7485 symbol_table.add_vector (
"v1" , vv1 );
7487 expression_t expression;
7488 expression.register_symbol_table(symbol_table);
7492 for (std::size_t i = 0; i < const_folded_expression_list_size; ++i)
7494 const std::string& expression_string = const_folded_expression_list[i];
7496 if (!parser.compile(expression_string, expression))
7498 printf(
"run_test18() - [10] Error: %s Expression: %s\n",
7499 parser.error().c_str(),
7500 expression_string.c_str());
7507 printf(
"run_test18() - Error: Expression did not compile to a constant! [1] Expression: %s\n",
7508 expression_string.c_str());
7513 for (std::size_t j = 0; j < 100; ++j)
7526 const T result = expression.value();
7530 printf(
"run_test18() - Error: Expected result of zero, result: %8.4f for Expression: %s\n",
7532 expression_string.c_str());
7538 expression.release();
7547 const std::string rebase_expression_list[] =
7550 "dot(2 * v0,v1 - 1) + dot(2 * v0,v1 - 1)",
7551 "dot(2 * v0,v1 - 1)",
7552 "dot(v0 - v1,v1 / v0) + dot(v0 - v1,v1 / v0)",
7553 "dot(v0 - v1,v1 / v0)",
7554 "dot(v0,v1) + dot(v0,v1)",
7556 "dot(2 * v0,v1 - 1) * x + dot(2 * v0,v1 - 1) * y",
7557 "x / dot(2 * v0,v1 - 1)",
7558 "x / dot(v0 - v1,v1 / v0) + dot(v0 - v1,v1 / v0) / y",
7559 "x * dot(v0 - v1,v1 / v0) / y",
7560 "x - dot(v0,v1) + dot(v0,v1) + y",
7563 const std::size_t rebase_expression_list_size =
sizeof(rebase_expression_list) /
sizeof(std::string);
7568 const std::size_t vector_size = 5;
7569 T v0[vector_size] = { 0, 2, 4, 6, 8 };
7570 T v1[vector_size] = { 1, 3, 5, 7, 9 };
7578 symbol_table_t symbol_table;
7580 symbol_table.add_package ( vector_package );
7581 symbol_table.add_package ( io_package );
7582 symbol_table.add_variable(
"x" , x );
7583 symbol_table.add_variable(
"y" , y );
7584 symbol_table.add_vector (
"v0" , vv0 );
7585 symbol_table.add_vector (
"v1" , vv1 );
7587 expression_t expression;
7588 expression.register_symbol_table(symbol_table);
7592 for (std::size_t i = 0; i < rebase_expression_list_size; ++i)
7594 const std::string& expression_string = rebase_expression_list[i];
7596 if (!parser.compile(expression_string, expression))
7598 printf(
"run_test18() - [11] Error: %s Expression: %s\n",
7599 parser.error().c_str(),
7600 expression_string.c_str());
7605 for (std::size_t j = 0; j < 100; ++j)
7621 expression.release();
7626 bool error_found =
false;
7636 v.push_back(T(N)); \
7641 pb(s, 3)
pb(s, 6)
pb(s, 9)
pb(s,12)
7642 pb(s,15)
pb(s,18)
pb(s,21)
7645 const std::string expr_string =
"var i := 0; v[i + 0] + v[i + 1] + v[i + 2]";
7649 symbol_table_t symbol_table;
7650 symbol_table.add_vector(
"v",v);
7652 expression_t expression;
7653 expression.register_symbol_table(symbol_table);
7657 if (!parser.compile(expr_string,expression))
7659 printf(
"run_test18() - [12] Error: %s\tExpression: %s\n",
7660 parser.error().c_str(),
7661 expr_string.c_str());
7666 for (std::size_t i = 0; i < v0.size() - 4; ++i)
7670 const T sum = expression.value();
7674 printf(
"run_test18() - Error in evaluation! (9) Expression: %s Expected: %5.3f Computed: %5.3f\n",
7675 expr_string.c_str(),
7695 T v0[] = { T(0), T(1), T(2), T(3), T(4) };
7696 T v1[] = { T(5), T(6), T(7), T(8), T(9) };
7698 const std::size_t v0_size =
sizeof(v0) /
sizeof (T);
7699 const std::size_t v1_size =
sizeof(v1) /
sizeof (T);
7705 symbol_table_t symbol_table;
7706 symbol_table.add_vector(
"v",v);
7707 symbol_table.add_function(
"vec_sum",vec_sum);
7709 expression_t expression;
7710 expression.register_symbol_table(symbol_table);
7714 const std::string expr_string =
"vec_sum(v)";
7716 if (!parser.compile(expr_string,expression))
7718 printf(
"run_test18() - [13] Error: %s\tExpression: %s\n",
7719 parser.error().c_str(),
7720 expr_string.c_str());
7725 const T expected_result0 = std::accumulate(v0, v0 + v0_size, T(0));
7727 if (expression.value() != expected_result0)
7729 printf(
"run_test18() - Error in evaluation! (10.1) Expression: %s Expected: %5.3f Computed: %5.3f\n",
7730 expr_string.c_str(),
7732 expression.value());
7739 const T expected_result1 = std::accumulate(v1, v1 + v1_size, T(0));
7741 if (expression.value() != expected_result1)
7743 printf(
"run_test18() - Error in evaluation! (10.2) Expression: %s Expected: %5.3f Computed: %5.3f\n",
7744 expr_string.c_str(),
7746 expression.value());
7753 bool error_found =
false;
7761 symbol_table_t symbol_table;
7762 symbol_table.add_package(vecops_pkg);
7764 const std::string expr_str_list[] =
7766 "var v[9] := {1,2,3,4,5,6,7,8,9}; all_true(v) == true" ,
7767 "var v[6] := {-1,-2,-3,-4,-5,-6}; all_true(v) == true" ,
7768 "var v[8] := {1,2,3,0,0,0,0,0}; all_true(v) == false",
7769 "var v[8] := {-1,-2,-3,0,0,0,0,0}; all_true(v) == false",
7770 "var v[9] := {0,0,0,0,0,0,0,0,0}; all_true(v + 1) == true",
7772 "var v[9] := {0,0,0,0,0,0,0,0,0}; all_false(v) == true" ,
7773 "var v[9] := {0,0,0,0,0,1,2,3,4}; all_false(v) == false" ,
7774 "var v[8] := {0,0,0,0,0,-1,-2,-3}; all_false(v) == false" ,
7775 "var v[9] := {1,1,1,1,1,1,1,1,1}; any_false(v - 1) == true",
7777 "var v[9] := {0,0,0,0,0,0,0,0,1}; any_true(v) == true" ,
7778 "var v[9] := {0,0,0,0,1,0,0,0,0}; any_true(v) == true" ,
7779 "var v[9] := {0,0,0,0,0,0,0,0,0}; any_true(v) == false" ,
7780 "var v[9] := {0,0,0,0,0,0,0,0,0}; any_true(v + 1) == true",
7782 "var v[9] := {1,1,1,1,1,1,1,1,0}; any_false(v) == true" ,
7783 "var v[9] := {1,1,1,1,0,1,1,1,1}; any_false(v) == true" ,
7784 "var v[9] := {1,1,1,1,1,1,1,1,1}; any_false(v) == false" ,
7785 "var v[9] := {1,1,1,1,1,1,1,1,1}; any_false(v - 1) == true",
7787 "var v[9] := {0,0,0,0,0,0,0,0,0}; count(v) == 0" ,
7788 "var v[9] := {0,0,0,0,0,0,0,0,1}; count(v) == 1" ,
7789 "var v[9] := {0,0,0,0,0,0,0,2,1}; count(v) == 2" ,
7790 "var v[9] := {0,0,0,0,0,0,3,2,1}; count(v) == 3" ,
7791 "var v[9] := {0,0,0,0,0,0,0,0,0}; count(v + 1) == v[]",
7792 "var v[9] := {1,1,1,1,1,1,1,1,1}; count(v - 1) == 0",
7794 "var v[9] := {1,2,3,4,5,6,7,8,9}; var r[9] := [0]; copy(v,r); sum(v == r) == v[]",
7795 "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",
7796 "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",
7797 "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",
7799 "var v[5] := {1,2,3,4,5}; var r[5] := {4,5,1,2,3}; rol(v,3); sum(v == r) == v[]",
7800 "var v[5] := {1,2,3,4,5}; var r[5] := {3,4,5,1,2}; ror(v,3); sum(v == r) == v[]",
7802 "var v[5] := {1,2,3,4,5}; var r[5] := {3,4,5,1,2}; rol(v,2); sum(v == r) == v[]",
7803 "var v[5] := {1,2,3,4,5}; var r[5] := {4,5,1,2,3}; ror(v,2); sum(v == r) == v[]",
7805 "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[]",
7806 "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[]",
7808 "var v[5] := {1,2,3,4,5}; var r[5] := {3,4,5,0,0}; shftl(v,2); sum(v == r) == v[]",
7809 "var v[5] := {1,2,3,4,5}; var r[5] := {5,0,0,0,0}; shftl(v,4); sum(v == r) == v[]",
7810 "var v[5] := {1,2,3,4,5}; var r[5] := {0,0,0,0,0}; shftl(v,5); sum(v == r) == v[]",
7812 "var v[5] := {1,2,3,4,5}; var r[5] := {0,0,1,2,3}; shftr(v,2); sum(v == r) == v[]",
7813 "var v[5] := {1,2,3,4,5}; var r[5] := {0,0,0,0,1}; shftr(v,4); sum(v == r) == v[]",
7814 "var v[5] := {1,2,3,4,5}; var r[5] := {0,0,0,0,0}; shftr(v,5); sum(v == r) == v[]",
7816 "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[]",
7817 "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[]",
7819 "var v[5] := {1,3,5,2,4}; var r[5] := {1,2,3,4,5}; sort(v); sum(v == r) == v[]",
7820 "var v[5] := {5,4,3,2,1}; var r[5] := {1,2,3,4,5}; sort(v); sum(v == r) == v[]",
7821 "var v[5] := {1,4,2,3,5}; var r[5] := {1,2,3,4,5}; sort(v,1,3); sum(v == r) == v[]",
7822 "var v[5] := {5,4,2,3,1}; var r[5] := {5,2,3,4,1}; sort(v,1,3); sum(v == r) == v[]",
7823 "var v[5] := {3,1,2,4,5}; var r[5] := {1,2,3,4,5}; sort(v,0,2); sum(v == r) == v[]",
7824 "var v[5] := {1,2,5,3,4}; var r[5] := {1,2,3,4,5}; sort(v,2,4); sum(v == r) == v[]",
7826 "var v[5] := {1,3,5,2,4}; var r[5] := {1,2,3,4,5}; sort(v,'ascending'); sum(v == r) == v[]",
7827 "var v[5] := {1,3,5,2,4}; var r[5] := {1,2,3,4,5}; sort(v,'aScEnDiNg'); sum(v == r) == v[]",
7828 "var v[5] := {5,4,3,2,1}; var r[5] := {1,2,3,4,5}; sort(v,'ascending'); sum(v == r) == v[]",
7829 "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[]",
7830 "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[]",
7831 "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[]",
7833 "var v[5] := {1,3,5,2,4}; var r[5] := {5,4,3,2,1}; sort(v,'descending'); sum(v == r) == v[]",
7834 "var v[5] := {1,3,5,2,4}; var r[5] := {5,4,3,2,1}; sort(v,'DeScEnDiNg'); sum(v == r) == v[]",
7835 "var v[5] := {5,4,3,2,1}; var r[5] := {5,4,3,2,1}; sort(v,'descending'); sum(v == r) == v[]",
7836 "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[]",
7837 "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[]",
7838 "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[]",
7840 "var v[9] := {7,8,9,1,2,3,4,5,6}; nth_element(v,trunc(v[] / 2)); v[v[] / 2] == 5",
7841 "var v[9] := {7,8,9,1,2,3,4,5,6}; nth_element(v,trunc(v[] / 3)); v[v[] / 3] == 4",
7843 "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)",
7844 "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)",
7846 "var v[5]; iota(v, 0,1); var r[5] := { 0, 1, 2, 3, 4}; sum(v == r) == v[]",
7847 "var v[5]; iota(v, 0,2); var r[5] := { 0, 2, 4, 6, 8}; sum(v == r) == v[]",
7848 "var v[5]; iota(v, 1,1); var r[5] := { 1, 2, 3, 4, 5}; sum(v == r) == v[]",
7849 "var v[5]; iota(v, 1,2); var r[5] := { 1, 3, 5, 7, 9}; sum(v == r) == v[]",
7850 "var v[5]; iota(v,-1,1); var r[5] := {-1, 0, 1, 2, 3}; sum(v == r) == v[]",
7851 "var v[5]; iota(v,-1,2); var r[5] := {-1, 1, 3, 5, 7}; sum(v == r) == v[]",
7852 "var v[5]; iota(v,-2,1); var r[5] := {-2,-1, 0, 1, 2}; sum(v == r) == v[]",
7853 "var v[5]; iota(v,-2,2); var r[5] := {-2, 0, 2, 4, 6}; sum(v == r) == v[]",
7854 "var v[5]; iota(v, 0); var r[5] := { 0, 1, 2, 3, 4}; sum(v == r) == v[]",
7855 "var v[5]; iota(v, 1); var r[5] := { 1, 2, 3, 4, 5}; sum(v == r) == v[]",
7856 "var v[5]; iota(v,-1); var r[5] := {-1, 0, 1, 2, 3}; sum(v == r) == v[]",
7857 "var v[5]; iota(v,-2); var r[5] := {-2,-1, 0, 1, 2}; sum(v == r) == v[]",
7858 "var v[5]; iota(v, 0, 0); var r[5] := { 0, 0, 0, 0, 0}; sum(v == r) == v[]",
7859 "var v[5]; iota(v, 1, 0); var r[5] := { 1, 1, 1, 1, 1}; sum(v == r) == v[]",
7861 "var v[5]; iota(v, 0, v[] - 1, 0,1); var r[5] := { 0, 1, 2, 3, 4}; sum(v == r) == v[]",
7862 "var v[5]; iota(v, 0, v[] - 1, 0,2); var r[5] := { 0, 2, 4, 6, 8}; sum(v == r) == v[]",
7863 "var v[5]; iota(v, 0, v[] - 1, 1,1); var r[5] := { 1, 2, 3, 4, 5}; sum(v == r) == v[]",
7864 "var v[5]; iota(v, 0, v[] - 1, 1,2); var r[5] := { 1, 3, 5, 7, 9}; sum(v == r) == v[]",
7865 "var v[5]; iota(v, 0, v[] - 1,-1,1); var r[5] := {-1, 0, 1, 2, 3}; sum(v == r) == v[]",
7866 "var v[5]; iota(v, 0, v[] - 1,-1,2); var r[5] := {-1, 1, 3, 5, 7}; sum(v == r) == v[]",
7867 "var v[5]; iota(v, 0, v[] - 1,-2,1); var r[5] := {-2,-1, 0, 1, 2}; sum(v == r) == v[]",
7868 "var v[5]; iota(v, 0, v[] - 1,-2,2); var r[5] := {-2, 0, 2, 4, 6}; sum(v == r) == v[]",
7869 "var v[5]; iota(v, 0, v[] - 1, 0 ); var r[5] := { 0, 1, 2, 3, 4}; sum(v == r) == v[]",
7870 "var v[5]; iota(v, 0, v[] - 1, 1 ); var r[5] := { 1, 2, 3, 4, 5}; sum(v == r) == v[]",
7871 "var v[5]; iota(v, 0, v[] - 1,-1 ); var r[5] := {-1, 0, 1, 2, 3}; sum(v == r) == v[]",
7872 "var v[5]; iota(v, 0, v[] - 1,-2 ); var r[5] := {-2,-1, 0, 1, 2}; sum(v == r) == v[]",
7873 "var v[5]; iota(v, 0, v[] - 1, 0,0); var r[5] := { 0, 0, 0, 0, 0}; sum(v == r) == v[]",
7874 "var v[5]; iota(v, 0, v[] - 1, 1,0); var r[5] := { 1, 1, 1, 1, 1}; sum(v == r) == v[]",
7876 "var v[5]; iota(v, 1, v[] - 1, 0,1); var r[5] := { 0, 0, 1, 2, 3 }; sum(v == r) == v[]",
7877 "var v[5]; iota(v, 1, v[] - 1, 0,2); var r[5] := { 0, 0, 2, 4, 6 }; sum(v == r) == v[]",
7878 "var v[5]; iota(v, 1, v[] - 1, 1,1); var r[5] := { 0, 1, 2, 3, 4 }; sum(v == r) == v[]",
7879 "var v[5]; iota(v, 1, v[] - 1, 1,2); var r[5] := { 0, 1, 3, 5, 7 }; sum(v == r) == v[]",
7880 "var v[5]; iota(v, 1, v[] - 1,-1,1); var r[5] := { 0, -1, 0, 1, 2 }; sum(v == r) == v[]",
7881 "var v[5]; iota(v, 1, v[] - 1,-1,2); var r[5] := { 0, -1, 1, 3, 5 }; sum(v == r) == v[]",
7882 "var v[5]; iota(v, 1, v[] - 1,-2,1); var r[5] := { 0, -2,-1, 0, 1 }; sum(v == r) == v[]",
7883 "var v[5]; iota(v, 1, v[] - 1,-2,2); var r[5] := { 0, -2, 0, 2, 4 }; sum(v == r) == v[]",
7884 "var v[5]; iota(v, 1, v[] - 1, 0 ); var r[5] := { 0, 0, 1, 2, 3 }; sum(v == r) == v[]",
7885 "var v[5]; iota(v, 1, v[] - 1, 1 ); var r[5] := { 0, 1, 2, 3, 4 }; sum(v == r) == v[]",
7886 "var v[5]; iota(v, 1, v[] - 1,-1 ); var r[5] := { 0, -1, 0, 1, 2 }; sum(v == r) == v[]",
7887 "var v[5]; iota(v, 1, v[] - 1,-2 ); var r[5] := { 0, -2,-1, 0, 1 }; sum(v == r) == v[]",
7889 "var v[5]; iota(v, 1, v[] - 2, 0,1); var r[5] := { 0, 0, 1, 2, 0 }; sum(v == r) == v[]",
7890 "var v[5]; iota(v, 1, v[] - 2, 0,2); var r[5] := { 0, 0, 2, 4, 0 }; sum(v == r) == v[]",
7891 "var v[5]; iota(v, 1, v[] - 2, 1,1); var r[5] := { 0, 1, 2, 3, 0 }; sum(v == r) == v[]",
7892 "var v[5]; iota(v, 1, v[] - 2, 1,2); var r[5] := { 0, 1, 3, 5, 0 }; sum(v == r) == v[]",
7893 "var v[5]; iota(v, 1, v[] - 2,-1,1); var r[5] := { 0, -1, 0, 1, 0 }; sum(v == r) == v[]",
7894 "var v[5]; iota(v, 1, v[] - 2,-1,2); var r[5] := { 0, -1, 1, 3, 0 }; sum(v == r) == v[]",
7895 "var v[5]; iota(v, 1, v[] - 2,-2,1); var r[5] := { 0, -2,-1, 0, 0 }; sum(v == r) == v[]",
7896 "var v[5]; iota(v, 1, v[] - 2,-2,2); var r[5] := { 0, -2, 0, 2, 0 }; sum(v == r) == v[]",
7897 "var v[5]; iota(v, 1, v[] - 2, 0 ); var r[5] := { 0, 0, 1, 2, 0 }; sum(v == r) == v[]",
7898 "var v[5]; iota(v, 1, v[] - 2, 1 ); var r[5] := { 0, 1, 2, 3, 0 }; sum(v == r) == v[]",
7899 "var v[5]; iota(v, 1, v[] - 2,-1 ); var r[5] := { 0, -1, 0, 1, 0 }; sum(v == r) == v[]",
7900 "var v[5]; iota(v, 1, v[] - 2,-2 ); var r[5] := { 0, -2,-1, 0, 0 }; sum(v == r) == v[]",
7902 "var v[5]; iota(v, 0, v[] - 2, 0,1); var r[5] := { 0, 1, 2, 3, 0}; sum(v == r) == v[]",
7903 "var v[5]; iota(v, 0, v[] - 2, 0,2); var r[5] := { 0, 2, 4, 6, 0}; sum(v == r) == v[]",
7904 "var v[5]; iota(v, 0, v[] - 2, 1,1); var r[5] := { 1, 2, 3, 4, 0}; sum(v == r) == v[]",
7905 "var v[5]; iota(v, 0, v[] - 2, 1,2); var r[5] := { 1, 3, 5, 7, 0}; sum(v == r) == v[]",
7906 "var v[5]; iota(v, 0, v[] - 2,-1,1); var r[5] := {-1, 0, 1, 2, 0}; sum(v == r) == v[]",
7907 "var v[5]; iota(v, 0, v[] - 2,-1,2); var r[5] := {-1, 1, 3, 5, 0}; sum(v == r) == v[]",
7908 "var v[5]; iota(v, 0, v[] - 2,-2,1); var r[5] := {-2,-1, 0, 1, 0}; sum(v == r) == v[]",
7909 "var v[5]; iota(v, 0, v[] - 2,-2,2); var r[5] := {-2, 0, 2, 4, 0}; sum(v == r) == v[]",
7910 "var v[5]; iota(v, 0, v[] - 2, 0 ); var r[5] := { 0, 1, 2, 3, 0}; sum(v == r) == v[]",
7911 "var v[5]; iota(v, 0, v[] - 2, 1 ); var r[5] := { 1, 2, 3, 4, 0}; sum(v == r) == v[]",
7912 "var v[5]; iota(v, 0, v[] - 2,-1 ); var r[5] := {-1, 0, 1, 2, 0}; sum(v == r) == v[]",
7913 "var v[5]; iota(v, 0, v[] - 2,-2 ); var r[5] := {-2,-1, 0, 1, 0}; sum(v == r) == v[]",
7915 "var v[5]; iota(v, 0, -1); var r[5] := { 0, -1, -2, -3, -4}; sum(v == r) == v[]",
7916 "var v[5]; iota(v, 0, -2); var r[5] := { 0, -2, -4, -6, -8}; sum(v == r) == v[]",
7917 "var v[5]; iota(v, -1, -2); var r[5] := { -1, -3, -5, -7, -9}; sum(v == r) == v[]",
7919 "var v[5]; iota(v, 0, v[] -1, 0, -1); var r[5] := { 0, -1, -2, -3, -4}; sum(v == r) == v[]",
7920 "var v[5]; iota(v, 0, v[] -1, 0, -2); var r[5] := { 0, -2, -4, -6, -8}; sum(v == r) == v[]",
7921 "var v[5]; iota(v, 0, v[] -1, -1, -2); var r[5] := { -1, -3, -5, -7, -9}; sum(v == r) == v[]",
7923 "var v[5]; iota(v, 0,1); threshold_below(v,2, 0) var r[5] := { 0, 0, 2, 3, 4}; sum(v == r) == v[]",
7924 "var v[5]; iota(v, 0,1); threshold_above(v,2, 0) var r[5] := { 0, 1, 2, 0, 0}; sum(v == r) == v[]",
7926 "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[]",
7927 "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[]",
7929 "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[]",
7930 "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[]",
7932 "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[]",
7933 "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[]",
7935 " 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[]",
7936 " 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[]",
7938 " 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[]",
7939 " 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[]",
7940 " 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[]",
7943 const std::size_t expr_str_list_size =
sizeof(expr_str_list) /
sizeof(std::string);
7947 for (std::size_t i = 0; i < expr_str_list_size; ++i)
7949 expression_t expression;
7950 expression.register_symbol_table(symbol_table);
7952 if (!parser.compile(expr_str_list[i], expression))
7954 printf(
"run_test18() - [14] Error: %s Expression: %s\n",
7955 parser.error().c_str(),
7956 expr_str_list[i].c_str());
7963 const T result = expression.value();
7967 printf(
"run_test18() - Error in evaluation! (11) Expression: %s\n",
7968 expr_str_list[i].c_str());
7983 std::string a =
"a";
7984 std::string b =
"b";
7985 std::string c =
"c";
7986 std::string d =
"d";
7995 "T:T|T:TT|T:TTT|T:TTTT|"
7996 "T:S|T:SS|T:SSS|T:SSSS|"
7997 "T:ST|T:STS|T:STST|"
7998 "T:TS|T:TST|T:TSTS|"
7999 "T:TTSS|T:SSTT|T:STTS|T:TSST"
8018 typedef std::pair<std::string, typename overload_func<T>::test_result_t> test_pack_t;
8020 static const test_pack_t test_pack_list[] =
8022 test_pack_t(
"foo(x)" , test_result_t( 0,
"T" )),
8023 test_pack_t(
"foo(x, y)" , test_result_t( 1,
"TT" )),
8024 test_pack_t(
"foo(x, y, z)" , test_result_t( 2,
"TTT" )),
8025 test_pack_t(
"foo(x, y, z, w)" , test_result_t( 3,
"TTTT")),
8026 test_pack_t(
"foo(x + y)" , test_result_t( 0,
"T" )),
8027 test_pack_t(
"foo(x + y, y + z)" , test_result_t( 1,
"TT" )),
8028 test_pack_t(
"foo(x + y, y + z, z + w)" , test_result_t( 2,
"TTT" )),
8029 test_pack_t(
"foo(x + y, y + z, z + w, w)" , test_result_t( 3,
"TTTT")),
8030 test_pack_t(
"foo(a)" , test_result_t( 4,
"S" )),
8031 test_pack_t(
"foo(a, b)" , test_result_t( 5,
"SS" )),
8032 test_pack_t(
"foo(a, b, c)" , test_result_t( 6,
"SSS" )),
8033 test_pack_t(
"foo(a, b, c, d)" , test_result_t( 7,
"SSSS")),
8034 test_pack_t(
"foo(a + b)" , test_result_t( 4,
"S" )),
8035 test_pack_t(
"foo(a + b, b + c)" , test_result_t( 5,
"SS" )),
8036 test_pack_t(
"foo(a + b, b + c, c + d)" , test_result_t( 6,
"SSS" )),
8037 test_pack_t(
"foo(a + b, b + c, c + d, d)" , test_result_t( 7,
"SSSS")),
8038 test_pack_t(
"foo(a, x)" , test_result_t( 8,
"ST" )),
8039 test_pack_t(
"foo(a, x, b)" , test_result_t( 9,
"STS" )),
8040 test_pack_t(
"foo(a, x, b, y)" , test_result_t(10,
"STST")),
8041 test_pack_t(
"foo(a + b, x + y)" , test_result_t( 8,
"ST" )),
8042 test_pack_t(
"foo(a + b, x + y, b + c)" , test_result_t( 9,
"STS" )),
8043 test_pack_t(
"foo(a + b, x + y, b + c, y + z)" , test_result_t(10,
"STST")),
8044 test_pack_t(
"foo(x, a)" , test_result_t(11,
"TS" )),
8045 test_pack_t(
"foo(x, a, y)" , test_result_t(12,
"TST" )),
8046 test_pack_t(
"foo(x, a, y, b)" , test_result_t(13,
"TSTS")),
8047 test_pack_t(
"foo(x + y, a + b)" , test_result_t(11,
"TS" )),
8048 test_pack_t(
"foo(x + y, a + b, y + z)" , test_result_t(12,
"TST" )),
8049 test_pack_t(
"foo(x + y, a + b, y + z, b + c)" , test_result_t(13,
"TSTS")),
8050 test_pack_t(
"foo(x, y, a, b)" , test_result_t(14,
"TTSS")),
8051 test_pack_t(
"foo(a, b, x, y)" , test_result_t(15,
"SSTT")),
8052 test_pack_t(
"foo(a, x, y, b)" , test_result_t(16,
"STTS")),
8053 test_pack_t(
"foo(x, a, b, y)" , test_result_t(17,
"TSST")),
8054 test_pack_t(
"foo(x + y, y + z, a + b, b + c)" , test_result_t(14,
"TTSS")),
8055 test_pack_t(
"foo(a + b, b + c, x + y, y + z)" , test_result_t(15,
"SSTT")),
8056 test_pack_t(
"foo(a + b, x + y, y + z, b + c)" , test_result_t(16,
"STTS")),
8057 test_pack_t(
"foo(x + y, a + b, b + c, y + z)" , test_result_t(17,
"TSST"))
8060 static const std::size_t test_pack_list_size =
sizeof(test_pack_list) /
sizeof(test_pack_t);
8064 for (std::size_t i = 0; i < test_pack_list_size; ++i)
8066 expression_t expression;
8067 expression.register_symbol_table(symbol_table);
8071 if (!parser.
compile(test_pack_list[i].first, expression))
8073 printf(
"run_test18() - [15] Overload VarArg Error: %s Expression: %s\n",
8074 parser.
error().c_str(),
8075 test_pack_list[i].first.c_str());
8083 bool error_found =
false;
8091 printf(
"run_test18() - Error in evaluation! (12) Expression: %s\n",
8092 test_pack_list[i].first.c_str());
8099 printf(
"run_test18() - Error with ps_index (12) Expression: %s Expected: %d Got: %d\n",
8100 test_pack_list[i].first.c_str(),
8101 static_cast<int>(test_pack_list[i].second.ps_index),
8109 printf(
"run_test18() - Error with parameter seq (12) Expression: %s Expected: %s Got: %s\n",
8110 test_pack_list[i].first.c_str(),
8111 test_pack_list[i].second.param_seq.c_str(),
8128 std::string a =
"a";
8129 std::string b =
"b";
8130 std::string c =
"c";
8131 std::string d =
"d";
8132 std::string result =
"";
8141 "S:T|S:TT|S:TTT|S:TTTT|"
8142 "S:S|S:SS|S:SSS|S:SSSS|"
8143 "S:ST|S:STS|S:STST|"
8144 "S:TS|S:TST|S:TSTS|"
8145 "S:TTSS|S:SSTT|S:STTS|S:TSST"
8165 typedef std::pair<std::string, typename overload_func<T>::test_result_t> test_pack_t;
8167 static const test_pack_t test_pack_list[] =
8169 test_pack_t(
"result := foo(x)" , test_result_t( 0,
"T" )),
8170 test_pack_t(
"result := foo(x, y)" , test_result_t( 1,
"TT" )),
8171 test_pack_t(
"result := foo(x, y, z)" , test_result_t( 2,
"TTT" )),
8172 test_pack_t(
"result := foo(x, y, z, w)" , test_result_t( 3,
"TTTT")),
8173 test_pack_t(
"result := foo(x + y)" , test_result_t( 0,
"T" )),
8174 test_pack_t(
"result := foo(x + y, y + z)" , test_result_t( 1,
"TT" )),
8175 test_pack_t(
"result := foo(x + y, y + z, z + w)" , test_result_t( 2,
"TTT" )),
8176 test_pack_t(
"result := foo(x + y, y + z, z + w, w)" , test_result_t( 3,
"TTTT")),
8177 test_pack_t(
"result := foo(a)" , test_result_t( 4,
"S" )),
8178 test_pack_t(
"result := foo(a, b)" , test_result_t( 5,
"SS" )),
8179 test_pack_t(
"result := foo(a, b, c)" , test_result_t( 6,
"SSS" )),
8180 test_pack_t(
"result := foo(a, b, c, d)" , test_result_t( 7,
"SSSS")),
8181 test_pack_t(
"result := foo(a + b)" , test_result_t( 4,
"S" )),
8182 test_pack_t(
"result := foo(a + b, b + c)" , test_result_t( 5,
"SS" )),
8183 test_pack_t(
"result := foo(a + b, b + c, c + d)" , test_result_t( 6,
"SSS" )),
8184 test_pack_t(
"result := foo(a + b, b + c, c + d, d)" , test_result_t( 7,
"SSSS")),
8185 test_pack_t(
"result := foo(a, x)" , test_result_t( 8,
"ST" )),
8186 test_pack_t(
"result := foo(a, x, b)" , test_result_t( 9,
"STS" )),
8187 test_pack_t(
"result := foo(a, x, b, y)" , test_result_t(10,
"STST")),
8188 test_pack_t(
"result := foo(a + b, x + y)" , test_result_t( 8,
"ST" )),
8189 test_pack_t(
"result := foo(a + b, x + y, b + c)" , test_result_t( 9,
"STS" )),
8190 test_pack_t(
"result := foo(a + b, x + y, b + c, y + z)" , test_result_t(10,
"STST")),
8191 test_pack_t(
"result := foo(x, a)" , test_result_t(11,
"TS" )),
8192 test_pack_t(
"result := foo(x, a, y)" , test_result_t(12,
"TST" )),
8193 test_pack_t(
"result := foo(x, a, y, b)" , test_result_t(13,
"TSTS")),
8194 test_pack_t(
"result := foo(x + y, a + b)" , test_result_t(11,
"TS" )),
8195 test_pack_t(
"result := foo(x + y, a + b, y + z)" , test_result_t(12,
"TST" )),
8196 test_pack_t(
"result := foo(x + y, a + b, y + z, b + c)" , test_result_t(13,
"TSTS")),
8197 test_pack_t(
"result := foo(x, y, a, b)" , test_result_t(14,
"TTSS")),
8198 test_pack_t(
"result := foo(a, b, x, y)" , test_result_t(15,
"SSTT")),
8199 test_pack_t(
"result := foo(a, x, y, b)" , test_result_t(16,
"STTS")),
8200 test_pack_t(
"result := foo(x, a, b, y)" , test_result_t(17,
"TSST")),
8201 test_pack_t(
"result := foo(x + y, y + z, a + b, b + c)" , test_result_t(14,
"TTSS")),
8202 test_pack_t(
"result := foo(a + b, b + c, x + y, y + z)" , test_result_t(15,
"SSTT")),
8203 test_pack_t(
"result := foo(a + b, x + y, y + z, b + c)" , test_result_t(16,
"STTS")),
8204 test_pack_t(
"result := foo(x + y, a + b, b + c, y + z)" , test_result_t(17,
"TSST"))
8207 static const std::size_t test_pack_list_size =
sizeof(test_pack_list) /
sizeof(test_pack_t);
8211 for (std::size_t i = 0; i < test_pack_list_size; ++i)
8213 expression_t expression;
8214 expression.register_symbol_table(symbol_table);
8218 if (!parser.
compile(test_pack_list[i].first, expression))
8220 printf(
"run_test18() - [16] Overload VarArg Error: %s Expression: %s\n",
8221 parser.
error().c_str(),
8222 test_pack_list[i].first.c_str());
8230 bool error_found =
false;
8238 if (result !=
"string result")
8240 printf(
"run_test18() - Error in evaluation! (13) Expression: %s\n",
8241 test_pack_list[i].first.c_str());
8248 printf(
"run_test18() - Error with ps_index (13) Expression: %s Expected: %d Got: %d\n",
8249 test_pack_list[i].first.c_str(),
8250 static_cast<int>(test_pack_list[i].second.ps_index),
8258 printf(
"run_test18() - Error with parameter seq (13) Expression: %s Expected: %s Got: %s\n",
8259 test_pack_list[i].first.c_str(),
8260 test_pack_list[i].second.param_seq.c_str(),
8278 typedef std::pair<std::string,std::size_t> rtc_test_t;
8279 static const rtc_test_t rtc_tests[] =
8281 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i + v[]]; } ", 5 ),
8282 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i + 10]; } ", 5 ),
8283 std::make_pair(
" x:= 0; for (var i := 0; i < (2 * v[]); i += 1) { x += (v[i] == vv[i]); } ", 10),
8284 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i + v[]] := i; } ", 5 ),
8285 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i + v[]] <=> v[i]; } ", 5 ),
8286 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i] <=> v[i + v[]]; } ", 10),
8287 std::make_pair(
" var z[5] := [1]; for (var i := 0; i < z[]; i += 1) { z[i + z[]]; } ", 5 ),
8288 std::make_pair(
" var z[5] := [1]; for (var i := 0; i < z[]; i += 1) { z[i + 10]; } ", 5 ),
8289 std::make_pair(
" var z[5] := [1]; for (var i := 0; i < z[]; i += 1) { z[i + z[]] := i; } ", 5 ),
8290 std::make_pair(
" var z[5] := [1]; for (var i := 0; i < z[]; i += 1) { z[i + z[]] <=> z[i]; } ", 5 ),
8291 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v*w)[i + v[]]; } ", 10),
8292 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v*w)[i+w[]]; } ", 10),
8293 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v+w)[i + v[]]; } ", 10),
8294 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v+w)[i+w[]]; } ", 10),
8295 std::make_pair(
" var z[4] := [1]; for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v*z)[i+v[]]; } ", 10),
8296 std::make_pair(
" var z[4] := [1]; for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v*z)[i+w[]]; } ", 9 ),
8297 std::make_pair(
" var z[4] := [1]; for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v+z)[i+v[]]; } ", 10),
8298 std::make_pair(
" var z[4] := [1]; for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v+z)[i+z[]]; } ", 10),
8299 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 ),
8300 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 ),
8301 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 ),
8302 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 ),
8303 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 ),
8304 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 ),
8305 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 ),
8306 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 ),
8307 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 ),
8308 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 ),
8309 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 ),
8310 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 ),
8311 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 ),
8312 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 ),
8313 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 ),
8314 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 ),
8315 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 ),
8318 static const std::size_t rtc_tests_size =
sizeof(rtc_tests) /
sizeof(rtc_test_t);
8320 bool error_found =
false;
8322 for (std::size_t i = 0; i < rtc_tests_size; ++i)
8324 const std::string& expression_str = rtc_tests[i].first;
8328 T v[5] = { 0, 1, 2, 3, 4 };
8329 T w[3] = { 0, 1, 2 };
8333 symbol_table_t symbol_table;
8334 expression_t expression;
8337 symbol_table.add_variable(
"x" , x );
8338 symbol_table.add_vector (
"v" , v );
8339 symbol_table.add_vector (
"w" , w );
8340 symbol_table.add_vector (
"vv", vv);
8341 symbol_table.add_vector (
"ww", ww);
8345 expression.register_symbol_table(symbol_table);
8347 parser.register_vector_access_runtime_check(vartc);
8349 if (!parser.compile(expression_str, expression))
8351 printf(
"run_test18() - Error: %s\t [1] Expression: %s\n",
8352 parser.error().c_str(),
8353 expression_str.c_str());
8362 if (vartc.
rtc_count != rtc_tests[i].second)
8364 printf(
"run_test18() - Expected rtc_count: %d got rtc_count: %d [0] Expression: %s\n",
8365 static_cast<unsigned int>(rtc_tests[i].second),
8366 static_cast<unsigned int>(vartc.
rtc_count),
8367 expression_str.c_str());
8374 T v[5] = { 0, 1, 2, 3, 4 };
8375 T w[3] = { 0, 1, 2 };
8376 T v0[5] = { 0, 1, 2, 3, 4 };
8377 T v1[5] = { 0, 1, 2, 3, 4 };
8381 symbol_table_t symbol_table;
8382 expression_t expression;
8385 symbol_table.add_variable(
"x" , x );
8386 symbol_table.add_vector (
"v" , v );
8387 symbol_table.add_vector (
"w" , w );
8388 symbol_table.add_vector (
"vv", vv);
8389 symbol_table.add_vector (
"ww", ww);
8393 expression.register_symbol_table(symbol_table);
8395 parser.register_vector_access_runtime_check(vartc);
8397 if (!parser.compile(expression_str, expression))
8399 printf(
"run_test18() - Error: %s\t [2] Expression: %s\n",
8400 parser.error().c_str(),
8401 expression_str.c_str());
8411 if (vartc.
rtc_count != rtc_tests[i].second)
8413 printf(
"run_test18() - Expected rtc_count: %d got rtc_count: %d [1] Expression: %s\n",
8414 static_cast<unsigned int>(rtc_tests[i].second),
8415 static_cast<unsigned int>(vartc.
rtc_count),
8416 expression_str.c_str());
8424 if (vartc.
rtc_count != rtc_tests[i].second)
8426 printf(
"run_test18() - Expected rtc_count: %d got rtc_count: %d [2] Expression: %s\n",
8427 static_cast<unsigned int>(rtc_tests[i].second),
8428 static_cast<unsigned int>(vartc.
rtc_count),
8429 expression_str.c_str());
8474 typedef typename compositor_t::function function_t;
8479 compositor_t compositor;
8482 compositor.add(function_t(
"f",
"x + 2",
"x"));
8485 compositor.add(function_t(
"g",
"x^2 - 3",
"x"));
8488 compositor.add(function_t(
"fof",
"f(f(x))",
"x"));
8491 compositor.add(function_t(
"gog",
"g(g(x))",
"x"));
8494 compositor.add(function_t(
"fog",
"f(g(x))",
"x"));
8497 compositor.add(function_t(
"gof",
"g(f(x))",
"x"));
8500 compositor.add(function_t(
"fogof",
"f(g(f(x)))",
"x"));
8503 compositor.add(function_t(
"gofog",
"g(f(g(x)))",
"x"));
8505 symbol_table_t& symbol_table = compositor.symbol_table();
8506 symbol_table.add_constants();
8507 symbol_table.add_variable(
"x", x);
8509 static const std::string expr_str_list[] =
8511 "equal(f(x),(x + 2))",
8512 "equal(g(x),(x^2 - 3))",
8513 "equal(fof(x),(x + 4))",
8514 "equal(gog(x),(x^4 - 6x^2 + 6))",
8515 "equal(fog(x),(x^2 - 1))",
8516 "equal(gof(x),(x^2 + 4x + 1))",
8517 "equal(fogof(x),(x^2 + 4x + 3))",
8518 "equal(gofog(x),(x^4 - 2x^2 - 2))"
8520 static const std::size_t expr_str_list_size =
sizeof(expr_str_list) /
sizeof(std::string);
8524 for (std::size_t i = 0; i < expr_str_list_size; ++i)
8526 expression_t expression;
8527 expression.register_symbol_table(symbol_table);
8531 if (!parser.compile(expr_str_list[i], expression))
8533 printf(
"run_test19() - Error: %s Expression: %s\n",
8534 parser.error().c_str(),
8535 expr_str_list[i].c_str());
8543 bool error_found =
false;
8549 printf(
"run_test19() - Error in evaluation! (1) Expression: %s\n",
8550 expr_str_list[i].c_str());
8563 const std::size_t
rounds = 100;
8565 for (std::size_t r = 0; r <
rounds; ++r)
8574 compositor_t compositor;
8580 .expression(
"3 * 2"));
8587 .expression(
"5 * (f0 + x)"));
8594 .expression(
"7 * (f1(x) + f1(y))"));
8600 .var(
"x").var(
"y").var(
"z")
8601 .expression(
"9 * (f2(x,y) + f2(y,z) + f2(x,z))"));
8607 .var(
"x").var(
"y").var(
"z").var(
"w")
8608 .expression(
"11 * (f3(x,y,z) + f3(y,z,w) + f3(z,w,x))"));
8614 .var(
"x").var(
"y").var(
"z").var(
"w").var(
"u")
8615 .expression(
"13 * (f4(x,y,z,w) + f4(y,z,w,u) + f4(z,w,u,x) + f4(w,u,x,y))"));
8621 .var(
"x").var(
"y").var(
"z")
8622 .var(
"w").var(
"u").var(
"v")
8623 .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))"));
8625 symbol_table_t& symbol_table = compositor.symbol_table();
8626 symbol_table.add_constants();
8627 symbol_table.add_variable(
"x", x);
8628 symbol_table.add_variable(
"y", y);
8629 symbol_table.add_variable(
"z", z);
8630 symbol_table.add_variable(
"w", w);
8631 symbol_table.add_variable(
"u", u);
8632 symbol_table.add_variable(
"v", v);
8636 const std::string expr_str_list[] =
8652 const std::size_t expr_str_list_size =
sizeof(expr_str_list) /
sizeof(std::string);
8654 const T result_list[] =
8670 bool error_found =
false;
8672 for (std::size_t i = 0; i < expr_str_list_size; ++i)
8674 expression_t expression;
8675 expression.register_symbol_table(symbol_table);
8677 if (!parser.compile(expr_str_list[i], expression))
8679 printf(
"run_test19() - Error: %s Expression: %s\n",
8680 parser.error().c_str(),
8681 expr_str_list[i].c_str());
8687 const T result = expression.value();
8689 if (result_list[i] != result)
8691 printf(
"run_test19() - Error in evaluation! (2) Expression: %s Expected: %10.1f\tResult: %10.1f\n",
8692 expr_str_list[i].c_str(),
8711 compositor_t compositor;
8718 " if (0 == (x % y),false, "
8719 " is_prime_impl1(x,y - 1))) ",
8726 "if (frac(x) != 0, false, "
8727 " if (x <= 0, false, "
8728 " is_prime_impl1(x,min(x - 1,trunc(sqrt(x)) + 1)))) ",
8737 " case y == 1 : true; "
8738 " case (x % y) == 0 : false; "
8739 " default : is_prime_impl2(x,y - 1);"
8749 " case x <= 0 : false; "
8750 " case frac(x) != 0 : false; "
8751 " default : is_prime_impl2(x,min(x - 1,trunc(sqrt(x)) + 1));"
8763 " case y == 1 : ~(y := 0, true);"
8764 " case (x % y) == 0 : ~(y := 0,false);"
8765 " default : y := y - 1; "
8776 " case x <= 0 : false; "
8777 " case frac(x) != 0 : false; "
8778 " default : is_prime_impl3(x,min(x - 1,trunc(sqrt(x)) + 1));"
8788 " case 1 == x : false; "
8789 " case 2 == x : true; "
8790 " case 3 == x : true; "
8791 " case 5 == x : true; "
8792 " case 7 == x : true; "
8793 " case 0 == x % 2 : false; "
8796 " for (var i := 3; i < y; i += 2) "
8798 " if ((x % i) == 0) "
8813 " case x <= 0 : false; "
8814 " case frac(x) != 0 : false; "
8815 " default : is_prime_impl4(x,min(x - 1,trunc(sqrt(x)) + 1));"
8819 symbol_table_t& symbol_table = compositor.symbol_table();
8820 symbol_table.add_constants();
8821 symbol_table.add_variable(
"x",x);
8823 const std::string expression_str[] =
8831 const std::size_t expression_count =
sizeof(expression_str) /
sizeof(std::string);
8835 for (std::size_t i = 0; i < expression_count; ++i)
8839 expression_t expression;
8840 expression.register_symbol_table(symbol_table);
8842 if (!parser.compile(expression_str[i],expression))
8844 printf(
"run_test19() - Error: %s Expression%d: %s\n",
8845 parser.error().c_str(),
8846 static_cast<unsigned int>(i),
8847 expression_str[i].c_str());
8855 bool error_found =
false;
8857 const std::size_t prime_list[] =
8859 2, 3, 5, 7, 11, 13, 17, 19,
8860 877, 947, 1087, 1153, 1229, 1297, 1381, 1453,
8861 1523, 1597, 1663, 1741, 1823, 1901, 1993, 2063,
8862 2131, 2221, 2293, 2371, 2437, 2539, 2621, 2689,
8863 2749, 2833, 2909, 3001, 3083, 3187, 3259, 3343,
8864 3433, 3517, 3581, 3659, 3733, 3823, 3911, 4001,
8865 4073, 4153, 4241, 4327, 4421, 4507, 4591, 4663,
8866 4759, 4861, 4943, 5009, 5099, 5189, 5281, 5393,
8867 5449, 5527, 5641, 5701, 5801, 5861, 5953, 6067,
8868 6143, 6229, 6311, 6373, 6481, 6577, 6679, 6763,
8869 6841, 6947, 7001, 7109, 7211, 7307, 7417, 7507,
8870 104309, 104311, 104323, 104327, 104347, 104369, 104381, 104383,
8871 104393, 104399, 104417, 104459, 104471, 104473, 104479, 104491,
8872 104513, 104527, 104537, 104543, 104549, 104551, 104561, 104579,
8873 104593, 104597, 104623, 104639, 104651, 104659, 104677, 104681,
8874 104683, 104693, 104701, 104707, 104711, 104717, 104723, 104729,
8875 1000621, 1000639, 1000651, 1000667, 1000669, 1001023, 1001027, 1001041
8878 const std::size_t prime_list_size =
sizeof(prime_list) /
sizeof(std::size_t);
8880 for (std::size_t i = 0; (i < prime_list_size) && (!error_found); ++i)
8882 x =
static_cast<T
>(prime_list[i]);
8884 std::vector<T> result(expression_count,T(0));
8893 if (result[j] != result[0])
8902 printf(
"run_test19() - Error in evaluation! (3) Results don't match! Prime: %d\n",
8903 static_cast<unsigned int>(prime_list[i]));
8907 printf(
"Expression[%02d]: %s = %d\n",
8908 static_cast<unsigned int>(j),
8909 expression_str[j].c_str(),
8910 static_cast<unsigned int>(result[j]));
8915 printf(
"run_test19() - Error in evaluation! (4) Results don't match! Prime: %d\n",
8916 static_cast<unsigned int>(prime_list[i]));
8920 printf(
"Expression[%02d]: %s = %d\n",
8921 static_cast<unsigned int>(j),
8922 expression_str[j].c_str(),
8923 static_cast<unsigned int>(result[j]));
8937 compositor_t compositor;
8945 " fibonacci1(x - 1) + fibonacci1(x - 2)))",
8954 " case x == 0 : 0; "
8955 " case x == 1 : 1; "
8956 " default : fibonacci2(x - 1) + fibonacci2(x - 2);"
8966 " case x == 0 : 0; "
8967 " case x == 1 : 1; "
8969 " while ((x := (x - 1)) > 0) "
8983 "fibonacci_impl3(x,0,1,0)",
8992 " case x == 0 : 0; "
8993 " case x == 1 : 1; "
9009 "fibonacci_impl4(x,0,1,0)",
9016 "if ((x == 0) or (x == 1)) "
9019 " fibonacci5(x - 1) + fibonacci5(x - 2); ",
9022 symbol_table_t& symbol_table = compositor.symbol_table();
9024 symbol_table.add_constants();
9025 symbol_table.add_variable(
"x",x);
9027 const std::string expression_str[] =
9036 const std::size_t expression_count =
sizeof(expression_str) /
sizeof(std::string);
9040 for (std::size_t i = 0; i < expression_count; ++i)
9044 expression_t expression;
9045 expression.register_symbol_table(symbol_table);
9047 if (!parser.compile(expression_str[i],expression))
9049 printf(
"run_test19() - Error: %s Expression[%02d]: %s\n",
9050 parser.error().c_str(),
9051 static_cast<unsigned int>(i),
9052 expression_str[i].c_str());
9060 bool error_found =
false;
9062 const std::size_t fibonacci_list[] =
9068 987, 1597, 2584, 4181,
9069 6765, 10946, 17711, 28657,
9070 46368, 75025, 121393, 196418,
9071 317811, 514229, 832040, 1346269
9074 const std::size_t fibonacci_list_size =
sizeof(fibonacci_list) /
sizeof(std::size_t);
9076 for (std::size_t i = 0; (i < fibonacci_list_size) && (!error_found); ++i)
9078 x =
static_cast<T
>(i);
9080 std::vector<T> result(expression_count,T(0));
9089 if (result[j] != result[0])
9098 printf(
"run_test19() - Error in evaluation! (5) Results don't match! fibonacci(%d) = %d\n",
9099 static_cast<unsigned int>(i),
9100 static_cast<unsigned int>(fibonacci_list[i]));
9104 printf(
"Expression[%02d]: %s = %d\n",
9105 static_cast<unsigned int>(j),
9106 expression_str[j].c_str(),
9107 static_cast<unsigned int>(result[j]));
9112 printf(
"run_test19() - Error in evaluation! (6) Results don't match! fibonacci(%d) = %d\n",
9113 static_cast<unsigned int>(i),
9114 static_cast<unsigned int>(fibonacci_list[i]));
9118 printf(
"Expression[%02d]: %s = %d\n",
9119 static_cast<unsigned int>(j),
9120 expression_str[j].c_str(),
9121 static_cast<unsigned int>(result[j]));
9135 symbol_table_t symbol_table;
9137 symbol_table.add_constants();
9138 symbol_table.add_variable(
"x",x);
9140 compositor_t compositor(symbol_table);
9148 " case x < 0 : -inf; "
9149 " case x == 0 : 0; "
9150 " case x == 1 : 1; "
9156 " y := (1 / 2) * (y + (x / y)); "
9157 " if (equal(y * y,x)) "
9159 " until ((z -= 1) <= 0); "
9168 "newton_sqrt_impl(x,0,0)",
"x"));
9170 std::string expression_str =
"newton_sqrt(x)";
9172 expression_t expression;
9174 expression.register_symbol_table(symbol_table);
9178 if (!parser.compile(expression_str,expression))
9180 printf(
"run_test19() - Error: %s Expression: %s\n",
9181 parser.error().c_str(),
9182 expression_str.c_str());
9187 bool error_found =
false;
9189 for (std::size_t i = 0; i < 100; ++i)
9191 x =
static_cast<T
>(i);
9193 const T result = expression.value();
9195 if (
not_equal(result, std::sqrt(x), T(0.0000001)))
9197 printf(
"run_test19() - Computation Error "
9198 "Expression: [%s]\tExpected: %12.8f\tResult: %12.8f\n",
9199 expression_str.c_str(),
9200 static_cast<double>(std::sqrt(x)),
9201 static_cast<double>(result));
9214 symbol_table_t symbol_table;
9216 symbol_table.add_constants();
9218 compositor_t compositor(symbol_table);
9224 " var width := 118; "
9225 " var height := 41; "
9226 " var imag_max := +1; "
9227 " var imag_min := -1; "
9228 " var real_max := +1; "
9229 " var real_min := -2.5; "
9230 " var x_step := (real_max - real_min) / width; "
9231 " var y_step := (imag_max - imag_min) / height; "
9232 " for (var y := 0; y < height; y += 1) "
9234 " var imag := imag_min + (y_step * y); "
9235 " for (var x := 0; x < width; x += 1) "
9237 " var real := real_min + x_step * x; "
9238 " var z_real := real; "
9239 " var z_imag := imag; "
9241 " for (var n := 0; n < 30; n += 1) "
9243 " var a := z_real^2; "
9244 " var b := z_imag^2; "
9245 " plot_value := n; "
9246 " if ((a + b) < 4) "
9248 " z_imag := 2 * z_real * z_imag + imag; "
9249 " z_real := a - b + real; "
9257 std::string expression_str =
"mandelbrot()";
9259 expression_t expression;
9261 expression.register_symbol_table(symbol_table);
9265 if (!parser.compile(expression_str,expression))
9267 printf(
"run_test19() - Error: %s Expression: %s\n",
9268 parser.error().c_str(),
9269 expression_str.c_str());
9274 for (std::size_t i = 0; i < 100; ++i)
9283 symbol_table_t symbol_table;
9285 symbol_table.add_variable(
"x",x);
9287 compositor_t compositor(symbol_table);
9295 " fooboo(x - 1) + x; "
9300 std::string expression_str =
"fOoBoO(x)";
9302 expression_t expression;
9304 expression.register_symbol_table(symbol_table);
9308 if (!parser.compile(expression_str,expression))
9310 printf(
"run_test19() - Error: %s Expression: %s\n",
9311 parser.error().c_str(),
9312 expression_str.c_str());
9319 for (std::size_t i = 0; i < 100; ++i)
9325 const T result = expression.value();
9329 printf(
"run_test19() - FooBoo(%5.2f) Expected: %5.2f\tResult: %5.2f\n",
9340 const std::pair<std::string,std::string> test_funcprog[] =
9344 " var s := depth_to_str(depth); "
9348 " if (recursive(depth - 1) == false) "
9354 " s == depth_to_str(depth); ",
9361 " var v[7] := [ depth ]; "
9365 " if (recursive(depth - 1) == false) "
9371 " return [sum(v == depth) == v[]]; ",
9378 " var v1[ 7] := [ depth ]; "
9379 " var v2[21] := [ depth ]; "
9383 " if (recursive(depth - 1) == false) "
9389 " (sum(v1 == depth) == v1[]) and "
9390 " (sum(v2 == depth) == v2[]) ; "
9398 " var s := depth_to_str(depth); "
9400 " for (var i := 0; i < 2; i += 1) "
9404 " if (recursive(depth - 1) == false) "
9411 " s == depth_to_str(depth); ",
9418 " var s := depth_to_str(depth); "
9420 " for (var i := 0; i < 2; i += 1) "
9422 " for (var j := 0; j < 2; j += 1) "
9426 " if (recursive(depth - 1) == false) "
9434 " s == depth_to_str(depth); ",
9441 " var v[7] := [ depth ]; "
9443 " for (var i := 0; i < 2; i += 1) "
9445 " var w[21] := [ depth + 1 ]; "
9449 " if (recursive(depth - 1) == false) "
9455 " if (sum(w == (depth + 1)) != w[]) "
9461 " return [sum(v == depth) == v[]]; ",
9468 " var v[7] := [ depth ]; "
9470 " for (var i := 0; i < 2; i += 1) "
9472 " var u[21] := [ depth + 1 ]; "
9474 " for (var j := 0; j < 2; j += 1) "
9476 " var w[35] := [ depth + 2 ]; "
9480 " if (recursive(depth - 1) == false) "
9486 " if (sum(w == (depth + 2)) != w[]) "
9492 " if (sum(u == (depth + 1)) != u[]) "
9498 " return [sum(v == depth) == v[]]; ",
9505 " var s := depth_to_str(depth); "
9506 " var v[7] := [ depth ]; "
9510 " if (recursive(depth - 1) == false) "
9518 " (s == depth_to_str(depth)) and "
9519 " (sum(v == depth) == v[]) "
9527 " var s0 := depth_to_str(depth); "
9528 " var v0[7] := [ depth ]; "
9529 " var s1 := depth_to_str(depth); "
9530 " var v1[42] := [ depth ]; "
9534 " if (recursive(depth - 1) == false) "
9542 " (s0 == depth_to_str(depth)) and "
9543 " (sum(v0 == depth) == v0[]) and "
9544 " (s1 == depth_to_str(depth)) and "
9545 " (sum(v1 == depth) == v1[]) "
9553 " var s := depth_to_str(depth); "
9554 " var v[7] := [ depth ]; "
9556 " for (var i := 0; i < 2; i += 1) "
9560 " if (recursive(depth - 1) == false) "
9569 " (s == depth_to_str(depth)) and "
9570 " (sum(v == depth) == v[]) "
9578 " var s0 := depth_to_str(depth); "
9579 " var v0[7] := [ depth ]; "
9580 " var s1 := depth_to_str(depth); "
9581 " var v1[42] := [ depth ]; "
9583 " for (var i := 0; i < 2; i += 1) "
9587 " if (recursive(depth - 1) == false) "
9596 " (s0 == depth_to_str(depth)) and "
9597 " (sum(v0 == depth) == v0[]) and "
9598 " (s1 == depth_to_str(depth)) and "
9599 " (sum(v1 == depth) == v1[]) "
9607 " var s0 := depth_to_str(depth); "
9608 " var v0[7] := [ depth ]; "
9610 " for (var i := 0; i < 2; i += 1) "
9612 " var s1 := depth_to_str(depth); "
9613 " var v1[21] := [ depth + 1 ]; "
9617 " if (recursive(depth - 1) == false) "
9623 " if (s1 != depth_to_str(depth)) "
9628 " if (sum(v1 == (depth + 1)) != v1[]) "
9636 " (s0 == depth_to_str(depth)) and "
9637 " (sum(v0 == depth) == v0[]) "
9648 " recursive(depth - 1) + "
9649 " recursive(depth - 2) ; ",
9654 " for (var i := 0; i < n; i += 1) "
9656 " total += recursive(i); "
9663 const std::size_t test_funcprog_size =
sizeof(test_funcprog) /
sizeof(std::pair<std::string,std::string>);
9664 const std::size_t
rounds = 5;
9668 for (std::size_t r = 0; r <
rounds; ++r)
9670 for (std::size_t i = 0; i < test_funcprog_size; ++i)
9674 symbol_table_t symbol_table;
9675 symbol_table.add_function(
"depth_to_str",dts);
9677 compositor_t compositor(symbol_table);
9679 const bool comp_result = compositor.add(
9680 function_t(
"recursive")
9683 ( test_funcprog[i].first ));
9687 printf(
"run_test19() - Compositor Error: %s\nfunction: %s\n",
9688 compositor.error().c_str(),
9689 test_funcprog[i].first.c_str());
9695 expression_t expression;
9696 expression.register_symbol_table(symbol_table);
9700 if (!parser.compile(test_funcprog[i].second, expression))
9702 printf(
"run_test19() - Error: %s Expression: %s\n",
9703 parser.error().c_str(),
9704 test_funcprog[i].second.c_str());
9710 if (T(1) != expression.value())
9712 printf(
"run_test19() - Evaluation Error: test_funcprog %d function: %s\n",
9713 static_cast<int>(i),
9714 test_funcprog[i].second.c_str());
9729 symbol_table_t symbol_table;
9731 symbol_table.add_constants();
9733 const std::string expression_string =
9734 " var sieve[10^7] := [false]; "
9735 " var m := trunc(sqrt(sieve[])); "
9737 " sieve[0] := true; "
9738 " sieve[1] := true; "
9740 " for (var i := 0; i <= m; i += 1) "
9742 " if (false == sieve[i]) "
9744 " for (var j := (i * i); j < sieve[]; j += i) "
9746 " sieve[j] := true; "
9751 " var prime_count := 0; "
9752 " for (var i := 0; i < sieve[]; i += 1) "
9754 " if (false == sieve[i]) "
9756 " prime_count += 1; "
9760 " prime_count == 664579; ";
9762 expression_t expression;
9764 expression.register_symbol_table(symbol_table);
9768 if (!parser.compile(expression_string,expression))
9770 printf(
"run_test19() - Error: %s Expression: %s\n",
9771 parser.error().c_str(),
9772 expression_string.c_str());
9777 if (T(1) != expression.value())
9779 printf(
"run_test19() - Prime Sieve Computation Error");
9786 symbol_table_t symbol_table;
9788 symbol_table.add_constants();
9790 const std::string expression_str[] =
9792 "var delta := 10^-7; var total := 0; for (var i := 0; i <= 3; i += delta) { total += "
9793 "erf(i) }; abs((delta * total) - (3 * erf(3) + (1 / exp(9) - 1) / sqrt(pi))) < 0.000001",
9795 "var delta := 10^-7; var total := 0; for (var i := 0; i <= 3; i += delta) { total += "
9796 "erfc(i) }; abs((delta * total) - (3 * erfc(3) + ((1 - 1 / exp(9)) / sqrt(pi)))) < 0.000001"
9803 for (std::size_t i = 0; i < 2; ++i)
9805 e[i].register_symbol_table(symbol_table);
9807 if (!parser.compile(expression_str[i],e[i]))
9809 printf(
"run_test19() - Error: %s Expression: %s\n",
9810 parser.error().c_str(),
9811 expression_str[i].c_str());
9816 if (T(1) != e[i].value())
9818 printf(
"run_test19() - erf/erfc computation error %d",
9819 static_cast<unsigned int>(i));
10362 symbol_table_t symbol_table;
10363 symbol_table.add_constants();
10364 symbol_table.add_variable(
"x",x);
10365 symbol_table.add_variable(
"y",y);
10366 symbol_table.add_variable(
"z",z);
10373 "return[x + y,y - x]; x;",
10374 "return[x + y,y - x,'abc']; x;",
10375 "if (x < y) return [1,'abc1']; else return [2,'abc2',x];" ,
10376 "if (x > y) return [1,'abc1']; else return [2,'abc2',x];" ,
10377 "if (x < y) { return [1,'abc1'];} else { return [2,'abc2',x];}",
10378 "if (x > y) { return [1,'abc1'];} else { return [2,'abc2',x];}",
10379 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [1]; } ",
10380 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [1,'abc']; } ",
10381 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [1,'abc',x]; }",
10382 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [1,'abc',x,y]; }",
10383 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [1,'abc',x,y,z]; }",
10384 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [2,'abc2',x]; else x += 1; }",
10385 "for(var i := 0; i < 10; i += 1) { if (i == 5) { return [1,'abc1'];} else x += 1; }"
10388 static const std::string result_list[] =
10410 bool error_found =
false;
10414 expression_t expression;
10415 expression.register_symbol_table(symbol_table);
10421 printf(
"run_test21() - Error: %s Expression: %s [1]\n",
10422 parser.error().c_str(),
10425 error_found =
true;
10428 else if (!parser.dec().return_present())
10430 printf(
"run_test21() - Expected a return statement Expression: %s [1]\n",
10433 error_found =
true;
10437 expression.value();
10439 std::string pattern = results_to_string<T>(expression.results());
10441 if (!expression.return_invoked())
10443 printf(
"run_test21() - Invalid return invoke state [1] Expression: %s\n",
10446 error_found =
true;
10449 else if (result_list[i] != pattern)
10451 printf(
"run_test21() - Invalid return results [1] Expected %s Got: %s Expression: %s\n",
10452 result_list[i].c_str(),
10456 error_found =
true;
10472 symbol_table_t symbol_table;
10473 symbol_table.add_constants();
10474 symbol_table.add_variable(
"x",x);
10475 symbol_table.add_variable(
"y",y);
10476 symbol_table.add_variable(
"z",z);
10480 "x := 1; x + 1; x + 2; x + 3; x + 5; x + 7; return [x + 1]; ",
10481 "x := 1; x + 1; x + 2; x + 3; x + 5; return [x + 1]; x := 7; ",
10482 "x := 1; x + 1; x + 2; x + 3; return [x + 1]; x + 5; x := 7; ",
10483 "x := 1; x + 1; x + 2; return [x + 1]; x + 3; x + 5; x := 7; ",
10484 "x := 1; x + 1; return [x + 1]; x + 2; x + 3; x + 5; x := 7; ",
10485 "x := 1; return [x + 1]; x + 1; x + 2; x + 3; x + 5; x := 7; ",
10486 "return [x + 1]; x := 1; x + 1; x + 2; x + 3; x + 5; x := 7; ",
10487 "~{x := 1; x + 1; x + 2; x + 3; x + 5; x + 7; return [x + 1]}",
10488 "~{x := 1; x + 1; x + 2; x + 3; x + 5; return [x + 1]; x := 7}",
10489 "~{x := 1; x + 1; x + 2; x + 3; return [x + 1]; x + 5; x := 7}",
10490 "~{x := 1; x + 1; x + 2; return [x + 1]; x + 3; x + 5; x := 7}",
10491 "~{x := 1; x + 1; return [x + 1]; x + 2; x + 3; x + 5; x := 7}",
10492 "~{x := 1; return [x + 1]; x + 1; x + 2; x + 3; x + 5; x := 7}",
10493 "~{return [x + 1]; x := 1; x + 1; x + 2; x + 3; x + 5; x := 7}"
10496 static const std::string result_list[] =
10498 "T",
"T",
"T",
"T",
"T",
"T",
"T",
10499 "T",
"T",
"T",
"T",
"T",
"T",
"T",
10504 bool error_found =
false;
10508 expression_t expression;
10509 expression.register_symbol_table(symbol_table);
10515 printf(
"run_test21() - Error: %s Expression: %s [2]\n",
10516 parser.error().c_str(),
10519 error_found =
true;
10522 else if (!parser.dec().return_present())
10524 printf(
"run_test21() - Expected a return statement Expression: %s [2]\n",
10527 error_found =
true;
10531 expression.value();
10533 std::string pattern = results_to_string<T>(expression.results());
10535 if (!expression.return_invoked())
10537 printf(
"run_test21() - Invalid return invoke state [2] Expression: %s\n",
10540 error_found =
true;
10543 else if (result_list[i] != pattern)
10545 printf(
"run_test21() - Invalid return results [2] Expected %s Got: %s Expression: %s\n",
10546 result_list[i].c_str(),
10550 error_found =
true;
10553 else if (!
result_equal(expression.results(), x + T(1)))
10555 printf(
"run_test21() - Invalid return results [2] Expected %s Got: %s Expression: %s\n",
10556 result_list[i].c_str(),
10560 error_found =
true;
10576 T v[] = {0 , 1, 2, 3 };
10577 std::string s =
"Hello ";
10581 symbol_table_t symbol_table;
10582 expression_t expression;
10585 symbol_table.add_variable (
"x", x);
10586 symbol_table.add_variable (
"y", y);
10587 symbol_table.add_variable (
"z", z);
10588 symbol_table.add_vector (
"v", v);
10589 symbol_table.add_stringvar(
"s", s);
10591 expression.register_symbol_table(symbol_table);
10593 const std::string expression_str =
10597 " return [ x, x + y, 2 * v, s + 'world' ]; ";
10599 if (!parser.compile(expression_str, expression))
10601 printf(
"run_test21() - ERROR: %s\tExpression: %s\n",
10602 parser.error().c_str(),
10603 expression_str.c_str());
10607 expression.value();
10610 const results_context_t& results = expression.results();
10612 if (results.count() != 4)
10614 printf(
"run_test21() - ERROR Expected 4 return results, instead got: %d\n",
10615 static_cast<unsigned int>(results.count()));
10621 std::string result_s;
10622 std::vector<T> result_v;
10624 const T expected_result_v[] = {0 , 2, 4, 6 };
10625 const std::string expected_result_s =
"Hello world";
10627 if (!results.get_scalar(0,result_x0))
10629 printf(
"run_test21() - ERROR Failed to get scalar index0 from return result!\n");
10632 else if (result_x0 != T(1))
10634 printf(
"run_test21() - ERROR result_x0 is not expected value!\n");
10637 else if (!results.get_scalar(1,result_x1))
10639 printf(
"run_test21() - ERROR Failed to get scalar index1 from return result!\n");
10642 else if (result_x1 != T(3))
10644 printf(
"run_test21() - ERROR result_x1 is not expected value!\n");
10647 else if (!results.get_vector(2,result_v))
10649 printf(
"run_test21() - ERROR Failed to get vector from return result!\n");
10653 (result_v.size() != (
sizeof(expected_result_v) /
sizeof(T))) ||
10654 !std::equal(result_v.begin(),result_v.end(),expected_result_v)
10657 printf(
"run_test21() - ERROR result_v is not expected value!\n");
10660 else if (!results.get_string(3,result_s))
10662 printf(
"run_test21() - ERROR Failed to get string from return result!\n");
10665 else if (result_s != expected_result_s)
10667 printf(
"run_test21() - ERROR result_s is not expected value!\n");
10673 const std::string invalid_expressions[] =
10686 "var i := 2; v[i] := x",
10687 "var i := 2; v[i] += x",
10693 "var i := 2; aa[i:3] := bb",
10694 "var i := 2; aa[i+1:3] := bb",
10695 "var i := 2; aa[0:i] := bb",
10696 "var i := 2; aa[0:i+1] := bb",
10697 "var i := 1; var j := 3; aa[i:j] := bb",
10698 "var i := 1; var j := 3; aa[i+1:j] := bb",
10699 "var i := 1; var j := 3; aa[i:j+1] := bb",
10700 "var i := 1; var j := 3; aa[i+1:j+1] := bb",
10703 const std::size_t invalid_expressions_size =
sizeof(invalid_expressions) /
sizeof(std::string);
10705 for (std::size_t i = 0; i < invalid_expressions_size; ++i)
10707 symbol_table_t mutable_symbol_table;
10708 symbol_table_t immutable_symbol_table(symbol_table_t::e_immutable);
10712 std::string s =
"xyz";
10713 std::string aa =
"0123456789";
10714 std::string bb =
"A";
10718 std::string s_ =
"xyz";
10720 std::string a_ =
"0123456789";
10721 std::string b_ =
"A";
10723 immutable_symbol_table.add_variable (
"x" , x );
10724 immutable_symbol_table.add_vector (
"v" , v );
10725 immutable_symbol_table.add_stringvar(
"s" , s );
10726 immutable_symbol_table.add_stringvar(
"aa", aa);
10727 immutable_symbol_table.add_stringvar(
"bb", bb);
10729 mutable_symbol_table.add_variable (
"x_", x_);
10730 mutable_symbol_table.add_vector (
"v_", v_);
10731 mutable_symbol_table.add_stringvar (
"s_", s_);
10732 mutable_symbol_table.add_stringvar (
"a_", a_);
10733 mutable_symbol_table.add_stringvar (
"b_", b_);
10735 const std::string& expression_str = invalid_expressions[i];
10736 expression_t expression;
10737 expression.register_symbol_table(immutable_symbol_table);
10738 expression.register_symbol_table(mutable_symbol_table );
10741 const bool compile_result = parser.compile(expression_str, expression);
10743 if (compile_result)
10745 expression.value();
10746 printf(
"run_test21() - Invalid expression due to immutability was successfully compiled. Expression: %s\n",
10747 expression_str.c_str());
10758 symbol_table_t mutable_symbol_table;
10759 symbol_table_t immutable_symbol_table(symbol_table_t::e_immutable);
10761 mutable_symbol_table.add_variable(
"x", x);
10762 mutable_symbol_table.add_variable(
"y", y);
10764 immutable_symbol_table.add_variable(
"w", w);
10765 immutable_symbol_table.add_variable(
"z", z);
10767 expression_t expression;
10768 expression.register_symbol_table(mutable_symbol_table );
10769 expression.register_symbol_table(immutable_symbol_table);
10773 typedef std::pair<std::string,bool> local_test_t;
10775 const local_test_t expressions[] =
10777 std::make_pair<std::string,bool>(
"x := y + (z / w)" ,
true ),
10778 std::make_pair<std::string,bool>(
"y := y / x + (z / w)" ,
true ),
10779 std::make_pair<std::string,bool>(
"z := y + x - w" ,
false),
10780 std::make_pair<std::string,bool>(
"z == (w += y / x)" ,
false)
10783 const std::size_t expressions_size =
sizeof(expressions) /
sizeof(local_test_t);
10785 bool error_found =
false;
10787 for (std::size_t i = 0; i < expressions_size; ++i)
10789 const std::string expression_str = expressions[i].first;
10790 const bool expected_compile_result = expressions[i].second;
10792 if (expected_compile_result != parser.compile(expression_str, expression))
10794 printf(
"run_test21() - Invalid compilation of expression. Expected compile result: %c Expression: %s\n",
10795 expected_compile_result ?
'T' :
'F',
10796 expression_str.c_str());
10798 error_found =
true;
10806 expression.value();
10816 typedef typename parser_t::settings_store settings_t;
10818 const std::string expressions[] =
10820 "var result := 0; if (true) { result := 2 } if (true) { result := 3 }; result",
10821 "var result := 0; if (true) { result := 2 }; if (true) { result := 3 } result",
10822 "var result := 0; if (true) { result := 2 } if (true) { result := 3 } result",
10823 "var result := 0; var x:=1; if (x > 0) { result := 2 } else if (x > 0) { result := 3 } result",
10824 "var result := 0; var x := 1; if (x > 0) { result := 2 } if (x > 0) { result := 3 }; result",
10825 "var result := 0; var x := 1; if (x > 0) { result := 2 }; if (x > 0) { result := 3 } result",
10826 "var result := 0; var x := 1; if (x > 0) { result := 2 } if (x > 0) { result := 3 } result",
10827 "var result := 0; var x := 1; if (x > 0) { result := 2 } else if (x > 0) { result := 3 } result",
10828 "var result := 0; var x := 1; if (x > 0) result := 2 else if (x > 0) { result := 3 } result",
10829 "var result := 0; var x := 1; if (x > 0) {result := 2 } else if (x > 0) result := 3 result"
10832 const std::size_t expressions_size =
sizeof(expressions) /
sizeof(std::string);
10834 static const std::size_t compile_options =
10835 settings_t::e_replacer +
10836 settings_t::e_joiner +
10837 settings_t::e_numeric_check +
10838 settings_t::e_bracket_check +
10839 settings_t::e_sequence_check +
10840 settings_t::e_strength_reduction;
10842 const settings_t settings(compile_options);
10843 parser_t parser(settings);
10845 bool error_found =
false;
10847 for (std::size_t e = 0; e < expressions_size; ++e)
10849 const std::string& expression_string = expressions[e];
10850 expression_t expression;
10852 if (parser.compile(expression_string,expression))
10854 printf(
"run_test21() - Expected compilation error for expression: %s\n",
10855 expression_string.c_str());
10856 error_found =
true;
10860 expression.value();
10870 const std::string expressions[] =
10873 "var x := 2; sum(if (x > 1) { vv8 } else { vv7 }) == sum(vv8)",
10874 "var x := 2; sum(if (x > 1) { vv8 + 1 } else { vv8 + 2 }) == sum(vv8 + 1)",
10877 "var v[8] := {1,1,1,1,1,1,1,1}; vv8 += 1; sgn(vv8) == v",
10878 "abs(-1 * vv8) == vv8",
10879 "abs(vv8 * -1) == vv8",
10880 "var x := -1; abs(x * vv8) == vv8",
10881 "var x := -1; abs(vv8 * x) == vv8",
10882 "var x := 1; abs(-x * vv8) == vv8",
10883 "var x := 1; abs(vv8 * -x) == vv8",
10884 "var x := -2; abs(x * vv8) == 2vv8",
10885 "var x := -2; abs(vv8 * x) == 2vv8",
10886 "var x := 2; abs(-x * vv8) == 2vv8",
10887 "var x := 2; abs(vv8 * -x) == 2vv8",
10888 "var x := -2; abs(x * vv8) == -x * vv8",
10889 "var x := -2; abs(vv8 * x) == -x * vv8",
10890 "var x := 2; abs(-x * vv8) == x * vv8",
10891 "var x := 2; abs(vv8 * -x) == x * vv8",
10892 "var x := -2; abs(x * vv8) == vv8 * -x",
10893 "var x := -2; abs(vv8 * x) == vv8 * -x",
10894 "var x := 2; abs(-x * vv8) == vv8 * x",
10895 "var x := 2; abs(vv8 * -x) == vv8 * x",
10896 "var x := -2; abs(x * vv8) == abs(x) * vv8",
10897 "var x := -2; abs(vv8 * x) == abs(x) * vv8",
10898 "var x := -2; abs(x * vv8) == vv8 * abs(x)",
10899 "var x := -2; abs(vv8 * x) == vv8 * abs(x)",
10902 "var v[8] := {1,2,3,4,5,6,7,8}; var x := 1; (vv8 + x) == v",
10903 "var v[7] := {1,2,3,4,5,6,7}; var x := 1; (vv8 + x) == v",
10904 "var v[6] := {1,2,3,4,5,6}; var x := 1; (vv8 + x) == v",
10905 "var v[5] := {1,2,3,4,5}; var x := 1; (vv8 + x) == v",
10906 "var v[4] := {1,2,3,4}; var x := 1; (vv8 + x) == v",
10907 "var v[3] := {1,2,3}; var x := 1; (vv8 + x) == v",
10908 "var v[2] := {1,2}; var x := 1; (vv8 + x) == v",
10909 "var v[1] := {1}; var x := 1; (vv8 + x) == v",
10910 "var v[8] := {1,2,3,4,5,6,7,8}; var x := 1; (x + vv8) == v",
10911 "var v[7] := {1,2,3,4,5,6,7}; var x := 1; (x + vv8) == v",
10912 "var v[6] := {1,2,3,4,5,6}; var x := 1; (x + vv8) == v",
10913 "var v[5] := {1,2,3,4,5}; var x := 1; (x + vv8) == v",
10914 "var v[4] := {1,2,3,4}; var x := 1; (x + vv8) == v",
10915 "var v[3] := {1,2,3}; var x := 1; (x + vv8) == v",
10916 "var v[2] := {1,2}; var x := 1; (x + vv8) == v",
10917 "var v[1] := {1}; var x := 1; (x + vv8) == v",
10920 "var v[8] := [-1]; v < vv8",
10921 "var v[7] := [-1]; v < vv8",
10922 "var v[3] := [-1]; v < vv8",
10923 "var v[2] := [-1]; v < vv8",
10924 "var v[1] := [-1]; v < vv8",
10927 "var vv8sum := sum(vv8); vv8 += (vv8 + 1); sum(vv8) == (2 * sum(vv8sum) + vv8[] * 1)",
10928 "var vv8sum := sum(vv8); vv8 += (vv8 - 1); sum(vv8) == (2 * sum(vv8sum) - vv8[] * 1)",
10929 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 + x); sum(vv8) == (2 * sum(vv8sum) + vv8[] * 1)",
10930 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 - x); sum(vv8) == (2 * sum(vv8sum) - vv8[] * 1)",
10931 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 + (vv8 + x)); sum(vv8) == (3 * sum(vv8sum) + vv8[] * 1)",
10932 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 + (vv8 - x)); sum(vv8) == (3 * sum(vv8sum) - vv8[] * 1)",
10933 "var vv8sum := sum(vv8); vv8 += (vv8 += 1); sum(vv8) == (2 * vv8sum + 2 * (vv8[] * 1))",
10934 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 += x); sum(vv8) == (2 * vv8sum + 2 * (vv8[] * x))",
10935 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 -= x); sum(vv8) == (2 * vv8sum - 2 * (vv8[] * x))",
10936 "var vv8sum := sum(vv8); vv8 += (vv8 + 1); sum(vv8) == (2 * sum(vv8sum) + vv8[] * 1);",
10937 "var vv8sum := sum(vv8); vv8 += (vv8 - 1); sum(vv8) == (2 * sum(vv8sum) - vv8[] * 1);",
10938 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 + x); sum(vv8) == (2 * sum(vv8sum) + vv8[] * 1);",
10939 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 - x); sum(vv8) == (2 * sum(vv8sum) - vv8[] * 1);",
10940 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 + (vv8 + x)); sum(vv8) == (3 * sum(vv8sum) + vv8[] * 1);",
10941 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 + (vv8 - x)); sum(vv8) == (3 * sum(vv8sum) - vv8[] * 1);",
10942 "var vv8sum := sum(vv8); vv8 += (vv8 += 1); sum(vv8) == (2 * vv8sum + 2 * (vv8[] * 1));",
10943 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 += x); sum(vv8) == (2 * vv8sum + 2 * (vv8[] * x));",
10944 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 -= x); sum(vv8) == (2 * vv8sum - 2 * (vv8[] * x));",
10945 "var vv3sum := sum(vv3); vv3 += (vv3 + 1); sum(vv3) == (2 * sum(vv3sum) + vv3[] * 1)",
10946 "var vv3sum := sum(vv3); vv3 += (vv3 - 1); sum(vv3) == (2 * sum(vv3sum) - vv3[] * 1)",
10947 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 + x); sum(vv3) == (2 * sum(vv3sum) + vv3[] * 1)",
10948 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 - x); sum(vv3) == (2 * sum(vv3sum) - vv3[] * 1)",
10949 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 + (vv3 + x)); sum(vv3) == (3 * sum(vv3sum) + vv3[] * 1)",
10950 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 + (vv3 - x)); sum(vv3) == (3 * sum(vv3sum) - vv3[] * 1)",
10951 "var vv3sum := sum(vv3); vv3 += (vv3 += 1); sum(vv3) == (2 * vv3sum + 2 * (vv3[] * 1))",
10952 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 += x); sum(vv3) == (2 * vv3sum + 2 * (vv3[] * x))",
10953 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 -= x); sum(vv3) == (2 * vv3sum - 2 * (vv3[] * x))",
10954 "var vv3sum := sum(vv3); vv3 += (vv3 + 1); sum(vv3) == (2 * sum(vv3sum) + vv3[] * 1);",
10955 "var vv3sum := sum(vv3); vv3 += (vv3 - 1); sum(vv3) == (2 * sum(vv3sum) - vv3[] * 1);",
10956 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 + x); sum(vv3) == (2 * sum(vv3sum) + vv3[] * 1);",
10957 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 - x); sum(vv3) == (2 * sum(vv3sum) - vv3[] * 1);",
10958 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 + (vv3 + x)); sum(vv3) == (3 * sum(vv3sum) + vv3[] * 1);",
10959 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 + (vv3 - x)); sum(vv3) == (3 * sum(vv3sum) - vv3[] * 1);",
10960 "var vv3sum := sum(vv3); vv3 += (vv3 += 1); sum(vv3) == (2 * vv3sum + 2 * (vv3[] * 1));",
10961 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 += x); sum(vv3) == (2 * vv3sum + 2 * (vv3[] * x));",
10962 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 -= x); sum(vv3) == (2 * vv3sum - 2 * (vv3[] * x));",
10965 "var vv8sum := sum(vv8); vv8 += 1; sum(vv8) == (vv8sum + vv8[] * 1)",
10966 "var vv7sum := sum(vv7); vv7 += 1; sum(vv7) == (vv7sum + vv7[] * 1)",
10967 "var vv6sum := sum(vv6); vv6 += 1; sum(vv6) == (vv6sum + vv6[] * 1)",
10968 "var vv5sum := sum(vv5); vv5 += 1; sum(vv5) == (vv5sum + vv5[] * 1)",
10969 "var vv4sum := sum(vv4); vv4 += 1; sum(vv4) == (vv4sum + vv4[] * 1)",
10970 "var vv3sum := sum(vv3); vv3 += 1; sum(vv3) == (vv3sum + vv3[] * 1)",
10971 "var vv2sum := sum(vv2); vv2 += 1; sum(vv2) == (vv2sum + vv2[] * 1)",
10972 "var vv1sum := sum(vv1); vv1 += 1; sum(vv1) == (vv1sum + vv1[] * 1)",
10973 "var vv8sum := sum(vv8); var x := 7; vv8 += (x - 1) / 2; sum(vv8) == (vv8sum + vv8[] * 3)",
10974 "var vv7sum := sum(vv7); var x := 7; vv7 += (x - 1) / 2; sum(vv7) == (vv7sum + vv7[] * 3)",
10975 "var vv6sum := sum(vv6); var x := 7; vv6 += (x - 1) / 2; sum(vv6) == (vv6sum + vv6[] * 3)",
10976 "var vv5sum := sum(vv5); var x := 7; vv5 += (x - 1) / 2; sum(vv5) == (vv5sum + vv5[] * 3)",
10977 "var vv4sum := sum(vv4); var x := 7; vv4 += (x - 1) / 2; sum(vv4) == (vv4sum + vv4[] * 3)",
10978 "var vv3sum := sum(vv3); var x := 7; vv3 += (x - 1) / 2; sum(vv3) == (vv3sum + vv3[] * 3)",
10979 "var vv2sum := sum(vv2); var x := 7; vv2 += (x - 1) / 2; sum(vv2) == (vv2sum + vv2[] * 3)",
10980 "var vv1sum := sum(vv1); var x := 7; vv1 += (x - 1) / 2; sum(vv1) == (vv1sum + vv1[] * 3)",
10983 "var v[8] := [-1]; vv8 := v; sum(vv8) == (-1 * 8 + 0)",
10984 "var v[7] := [-1]; vv8 := v; sum(vv8) == (-1 * 7 + (7))",
10985 "var v[6] := [-1]; vv8 := v; sum(vv8) == (-1 * 6 + (6+7))",
10986 "var v[5] := [-1]; vv8 := v; sum(vv8) == (-1 * 5 + (5+6+7))",
10987 "var v[4] := [-1]; vv8 := v; sum(vv8) == (-1 * 4 + (4+5+6+7))",
10988 "var v[3] := [-1]; vv8 := v; sum(vv8) == (-1 * 3 + (3+4+5+6+7))",
10989 "var v[2] := [-1]; vv8 := v; sum(vv8) == (-1 * 2 + (2+3+4+5+6+7))",
10990 "var v[1] := [-1]; vv8 := v; sum(vv8) == (-1 * 1 + (1+2+3+4+5+6+7))",
10991 "var v[8] := [-1]; vv8 := v; var x[8] := { -1, -1, -1, -1, -1, -1, -1, -1 }; x == vv8",
10992 "var v[7] := [-1]; vv8 := v; var x[8] := { -1, -1, -1, -1, -1, -1, -1, 7 }; x == vv8",
10993 "var v[6] := [-1]; vv8 := v; var x[8] := { -1, -1, -1, -1, -1, -1, 6, 7 }; x == vv8",
10994 "var v[5] := [-1]; vv8 := v; var x[8] := { -1, -1, -1, -1, -1, 5, 6, 7 }; x == vv8",
10995 "var v[4] := [-1]; vv8 := v; var x[8] := { -1, -1, -1, -1, 4, 5, 6, 7 }; x == vv8",
10996 "var v[3] := [-1]; vv8 := v; var x[8] := { -1, -1, -1, 3, 4, 5, 6, 7 }; x == vv8",
10997 "var v[2] := [-1]; vv8 := v; var x[8] := { -1, -1, 2, 3, 4, 5, 6, 7 }; x == vv8",
10998 "var v[1] := [-1]; vv8 := v; var x[8] := { -1, 1, 2, 3, 4, 5, 6, 7 }; x == vv8",
10999 "var v[3] := [-1]; vv3 := v; sum(vv3) == (-1 * 3 + (0))",
11000 "var v[2] := [-1]; vv3 := v; sum(vv3) == (-1 * 2 + (2))",
11001 "var v[1] := [-1]; vv3 := v; sum(vv3) == (-1 * 1 + (1+2))",
11002 "var v[3] := [-1]; vv3 := v; var x[3] := { -1, -1, -1}; x == vv3",
11003 "var v[2] := [-1]; vv3 := v; var x[3] := { -1, -1, 2}; x == vv3",
11004 "var v[1] := [-1]; vv3 := v; var x[3] := { -1, 1, 2}; x == vv3",
11005 "vv8 := vv7; sum(vv8) == (sum(vv7) + 7)",
11006 "vv8 := vv6; sum(vv8) == (sum(vv6) + 6+ 7)",
11007 "vv8 := vv5; sum(vv8) == (sum(vv5) + 5 + 6 + 7)",
11008 "vv8 := vv4; sum(vv8) == (sum(vv4) + 4 + 5 + 6 + 7)",
11009 "vv8 := vv3; sum(vv8) == (sum(vv3) + 3 + 4 + 5 + 6 + 7)",
11010 "vv8 := vv2; sum(vv8) == (sum(vv2) + 2 + 3 + 4 + 5 + 6 + 7)",
11011 "vv8 := vv1; sum(vv8) == (sum(vv1) + 1 + 2 + 3 + 4 + 5 + 6 + 7)",
11012 "vv8 := vv7 + vv7; sum(vv8) == (2 * sum(vv7) + 7)",
11013 "vv8 := vv6 + vv6; sum(vv8) == (2 * sum(vv6) + 6+ 7)",
11014 "vv8 := vv5 + vv5; sum(vv8) == (2 * sum(vv5) + 5 + 6 + 7)",
11015 "vv8 := vv4 + vv4; sum(vv8) == (2 * sum(vv4) + 4 + 5 + 6 + 7)",
11016 "vv8 := vv3 + vv3; sum(vv8) == (2 * sum(vv3) + 3 + 4 + 5 + 6 + 7)",
11017 "vv8 := vv2 + vv2; sum(vv8) == (2 * sum(vv2) + 2 + 3 + 4 + 5 + 6 + 7)",
11018 "vv8 := vv1 + vv1; sum(vv8) == (2 * sum(vv1) + 1 + 2 + 3 + 4 + 5 + 6 + 7)",
11021 "var x := 3; vv8 := 2*x+1; sum(vv8) == (vv8[] * 7)",
11022 "var x := 3; vv7 := 2*x+1; sum(vv7) == (vv7[] * 7)",
11023 "var x := 3; vv6 := 2*x+1; sum(vv6) == (vv6[] * 7)",
11024 "var x := 3; vv5 := 2*x+1; sum(vv5) == (vv5[] * 7)",
11025 "var x := 3; vv4 := 2*x+1; sum(vv4) == (vv4[] * 7)",
11026 "var x := 3; vv3 := 2*x+1; sum(vv3) == (vv3[] * 7)",
11027 "var x := 3; vv2 := 2*x+1; sum(vv2) == (vv2[] * 7)",
11028 "var x := 3; vv1 := 2*x+1; sum(vv1) == (vv1[] * 7)",
11029 "var x[3] := [3]; vv8 := 2x[0]+1; sum(vv8) == (vv8[] * 7)",
11030 "var x[3] := [3]; vv7 := 2x[1]+1; sum(vv7) == (vv7[] * 7)",
11031 "var x[3] := [3]; vv6 := 2x[2]+1; sum(vv6) == (vv6[] * 7)",
11032 "var x[3] := [3]; vv5 := 2x[0]+1; sum(vv5) == (vv5[] * 7)",
11033 "var x[3] := [3]; vv4 := 2x[1]+1; sum(vv4) == (vv4[] * 7)",
11034 "var x[3] := [3]; vv3 := 2x[2]+1; sum(vv3) == (vv3[] * 7)",
11035 "var x[3] := [3]; vv2 := 2x[0]+1; sum(vv2) == (vv2[] * 7)",
11036 "var x[3] := [3]; vv1 := 2x[1]+1; sum(vv1) == (vv1[] * 7)",
11037 "var x[3] := [3]; var y[3] := [1]; vv8 := 2x[0]+y[0]; sum(vv8) == (vv8[] * 7)",
11038 "var x[3] := [3]; var y[3] := [1]; vv7 := 2x[1]+y[1]; sum(vv7) == (vv7[] * 7)",
11039 "var x[3] := [3]; var y[3] := [1]; vv6 := 2x[2]+y[2]; sum(vv6) == (vv6[] * 7)",
11040 "var x[3] := [3]; var y[3] := [1]; vv5 := 2x[0]+y[0]; sum(vv5) == (vv5[] * 7)",
11041 "var x[3] := [3]; var y[3] := [1]; vv4 := 2x[1]+y[1]; sum(vv4) == (vv4[] * 7)",
11042 "var x[3] := [3]; var y[3] := [1]; vv3 := 2x[2]+y[2]; sum(vv3) == (vv3[] * 7)",
11043 "var x[3] := [3]; var y[3] := [1]; vv2 := 2x[0]+y[0]; sum(vv2) == (vv2[] * 7)",
11044 "var x[3] := [3]; var y[3] := [1]; vv1 := 2x[1]+y[1]; sum(vv1) == (vv1[] * 7)",
11047 "var v[8] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 8 + 0)",
11048 "var v[7] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 7 + (7))",
11049 "var v[6] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 6 + (6+7))",
11050 "var v[5] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 5 + (5+6+7))",
11051 "var v[4] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 4 + (4+5+6+7))",
11052 "var v[3] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 3 + (3+4+5+6+7))",
11053 "var v[2] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 2 + (2+3+4+5+6+7))",
11054 "var v[1] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 1 + (1+2+3+4+5+6+7))",
11055 "var v[8] := [-1]; vv8 <=> v; var x[8] := { -1, -1, -1, -1, -1, -1, -1, -1 }; x == vv8",
11056 "var v[7] := [-1]; vv8 <=> v; var x[8] := { -1, -1, -1, -1, -1, -1, -1, 7 }; x == vv8",
11057 "var v[6] := [-1]; vv8 <=> v; var x[8] := { -1, -1, -1, -1, -1, -1, 6, 7 }; x == vv8",
11058 "var v[5] := [-1]; vv8 <=> v; var x[8] := { -1, -1, -1, -1, -1, 5, 6, 7 }; x == vv8",
11059 "var v[4] := [-1]; vv8 <=> v; var x[8] := { -1, -1, -1, -1, 4, 5, 6, 7 }; x == vv8",
11060 "var v[3] := [-1]; vv8 <=> v; var x[8] := { -1, -1, -1, 3, 4, 5, 6, 7 }; x == vv8",
11061 "var v[2] := [-1]; vv8 <=> v; var x[8] := { -1, -1, 2, 3, 4, 5, 6, 7 }; x == vv8",
11062 "var v[1] := [-1]; vv8 <=> v; var x[8] := { -1, 1, 2, 3, 4, 5, 6, 7 }; x == vv8",
11063 "var v[3] := [-1]; vv3 <=> v; sum(vv3) == (-1 * 3 + (0))",
11064 "var v[2] := [-1]; vv3 <=> v; sum(vv3) == (-1 * 2 + (2))",
11065 "var v[1] := [-1]; vv3 <=> v; sum(vv3) == (-1 * 1 + (1+2))",
11066 "var v[3] := [-1]; vv3 <=> v; var x[3] := { -1, -1, -1}; x == vv3",
11067 "var v[2] := [-1]; vv3 <=> v; var x[3] := { -1, -1, 2}; x == vv3",
11068 "var v[1] := [-1]; vv3 <=> v; var x[3] := { -1, 1, 2}; x == vv3",
11073 "vv8[vv8[] - 1] == vv8[] - 1",
11074 "var vec_sum := 0; for (var i := 0; i < vv8[]; i +=1) { vec_sum += vv8[i]; }; vec_sum == (vv8[] - 1) * vv8[] / 2",
11075 "var vec_sum := 0; for (var i := 0; i < vv8[]; i +=1) { vec_sum += vv8[2i / 2]; }; vec_sum == (vv8[] - 1) * vv8[] / 2",
11076 "var x:= 1; var y:= 1; (vv8 + x)[y / x] == 2",
11077 "var x:= 1; var y:= 1; (vv8 + x - y)[y / x] == 1",
11078 "var x:= 1; (x + vv8)[1] == 2",
11079 "var x:= 1; var y:= 1; (x + vv8)[y / x] == 2",
11080 "var x:= 1; var y:= 1; (x + vv8 - y)[y / x] == 1",
11081 "var successes := 0; for(var i:=0; i < vv8[]; i += 1) { successes += (vv8 + 1)[i] == i + 1; }; successes == vv8[]",
11082 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (vv8 + x)[i] == i + x; }; successes == vv8[]",
11083 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (x + vv8)[i] == i + x; }; successes == vv8[]",
11084 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (vv8 + x)[i / x] == i + x; }; successes == vv8[]",
11085 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (x + vv8)[i / x] == i + x; }; successes == vv8[]",
11086 "(1 + vv8)[1] == 2",
11087 "(vv8 + 1)[1] == 2",
11088 "(vv8 + 1)[2 / 2] == 2",
11089 "(1 + vv8)[2 / 2] == 2",
11090 "var x:= 1; (x + vv8)[1] == 2",
11091 "var x:= 1; (vv8 + x)[1] == 2",
11092 "var x:= 1; var y:= 1; (x + vv8)[y] == 2",
11093 "var x:= 1; var y:= 1; (vv8 + x)[y] == 2",
11094 "var x:= 1; var y:= 1; (vv8 + x)[y / x] == 2",
11095 "var x:= 1; var y:= 1; (vv8 + x - y)[y / x] == 1",
11096 "var x:= 1; var y:= 1; (x + vv8)[y / x] == 2",
11097 "var x:= 1; var y:= 1; (x + vv8 - y)[y / x] == 1",
11098 "(abs(vv8 + 1))[1] == 2",
11099 "(abs(1 + vv8))[1] == 2",
11100 "(abs(vv8 + 1))[2 / 2] == 2",
11101 "(abs(1 + vv8))[2 / 2] == 2",
11102 "(abs(vv8 + 1)/2)[1] == 1",
11103 "(abs(1 + vv8)/2)[1] == 1",
11104 "(abs(vv8 + 1)/2)[2 / 2] == 1",
11105 "(abs(1 + vv8)/2)[2 / 2] == 1",
11106 "(abs(abs(vv8 + 1)) - 1)[1] == 1",
11107 "(abs(2 * abs(vv8 + 1)) - 1)[1] == 3",
11108 "(abs(abs(vv8 + 1) * 2) - 1)[1] == 3",
11109 "(abs(2abs(vv8 + 1)) - 1)[1] == 3",
11110 "(abs(abs(vv8 + 1)2) - 1)[1] == 3",
11111 "var x:= 1; (abs(x + vv8))[1] == 2",
11112 "var x:= 1; (abs(vv8 + x))[1] == 2",
11113 "var x:= 1; var y:= 1; (abs(x + vv8))[y] == 2",
11114 "var x:= 1; var y:= 1; (abs(vv8 + x))[y] == 2",
11115 "var x:= 1; var y:= 1; (abs(vv8 + x))[y / x] == 2",
11116 "var x:= 1; var y:= 1; (abs(vv8 + x - y))[y / x] == 1",
11117 "var x:= 1; var y:= 1; (abs(x + vv8))[y / x] == 2",
11118 "var x:= 1; var y:= 1; (abs(x + vv8 - y))[y / x] == 1",
11119 "var x:= 1; (abs(x + vv8)/2)[1] == 1",
11120 "var x:= 1; (abs(vv8 + x)/2)[1] == 1",
11121 "var x:= 1; var y:= 1; (abs(x + vv8)/2)[y] == 1",
11122 "var x:= 1; var y:= 1; (abs(vv8 + x)/2)[y] == 1",
11123 "var x:= 1; var y:= 1; (abs(vv8 + x)/2)[y / x] == 1",
11124 "var x:= 1; var y:= 1; (abs(x + vv8)/2)[y / x] == 1",
11125 "var x := 1; (abs(abs(vv8 + x)) - x)[1] == 1",
11126 "var x := 1; (abs(2 * abs(vv8 + x)) - x)[1] == 3",
11127 "var x := 1; (abs(abs(vv8 + x) * 2) - x)[1] == 3",
11128 "var x := 1; (abs(2abs(vv8 + x)) - x)[1] == 3",
11129 "var x := 1; (abs(abs(vv8 + x)2) - x)[1] == 3",
11130 "var x := 1; var y := 1; (abs(abs(vv8 + x)) - x)[y] == 1",
11131 "var x := 1; var y := 1; (abs(2 * abs(vv8 + x)) - x)[y] == 3",
11132 "var x := 1; var y := 1; (abs(abs(vv8 + x) * 2) - x)[y] == 3",
11133 "var x := 1; var y := 1; (abs(2abs(vv8 + x)) - x)[y] == 3",
11134 "var x := 1; var y := 1; (abs(abs(vv8 + x)2) - x)[y] == 3",
11135 "var x := 1; var y := 1; (abs(abs(vv8 + x)) - x)[x / y] == 1",
11136 "var x := 1; var y := 1; (abs(2 * abs(vv8 + x)) - x)[x / y] == 3",
11137 "var x := 1; var y := 1; (abs(abs(vv8 + x) * 2) - x)[x / y] == 3",
11138 "var x := 1; var y := 1; (abs(2abs(vv8 + x)) - x)[x / y] == 3",
11139 "var x := 1; var y := 1; (abs(abs(vv8 + x)2) - x)[x / y] == 3",
11140 "var successes := 0; for(var i:=0; i < vv8[]; i += 1) { successes += (vv8 + 1)[i] == i + 1; }; successes == vv8[]",
11141 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (vv8 + x)[i] == i + x; }; successes == vv8[]",
11142 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (x + vv8)[i] == i + x; }; successes == vv8[]",
11143 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (vv8 + x)[i / x] == i + x; }; successes == vv8[]",
11144 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (x + vv8)[i / x] == i + x; }; successes == vv8[]",
11145 "var successes := 0; for(var i:=0; i < vv8[]; i += 1) { successes += (abs(vv8 + 1))[i] == i + 1; }; successes == vv8[]",
11146 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (abs(vv8 + x))[i] == i + x; }; successes == vv8[]",
11147 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (abs(x + vv8))[i] == i + x; }; successes == vv8[]",
11148 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (abs(vv8 + x))[i / x] == i + x; }; successes == vv8[]",
11149 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (abs(x + vv8))[i / x] == i + x; }; successes == vv8[]",
11152 bool error_found =
false;
11154 for (std::size_t e = 0; e <
sizeof(expressions)/
sizeof(std::string); ++e)
11156 T vs8[] = { 0, 1, 2, 3, 4, 5, 6, 7 };
11157 T vs7[] = { 0, 1, 2, 3, 4, 5, 6 };
11158 T vs6[] = { 0, 1, 2, 3, 4, 5 };
11159 T vs5[] = { 0, 1, 2, 3, 4 };
11160 T vs4[] = { 0, 1, 2, 3 };
11161 T vs3[] = { 0, 1, 2 };
11162 T vs2[] = { 0, 1 };
11174 symbol_table_t symbol_table;
11176 symbol_table.add_vector(
"vv1", vv1);
11177 symbol_table.add_vector(
"vv2", vv2);
11178 symbol_table.add_vector(
"vv3", vv3);
11179 symbol_table.add_vector(
"vv4", vv4);
11180 symbol_table.add_vector(
"vv5", vv5);
11181 symbol_table.add_vector(
"vv6", vv6);
11182 symbol_table.add_vector(
"vv7", vv7);
11183 symbol_table.add_vector(
"vv8", vv8);
11187 const std::string& expression_string = expressions[e];
11188 expression_t expression;
11189 expression.register_symbol_table(symbol_table);
11191 if (!parser.compile(expression_string,expression))
11193 printf(
"run_test21() - vector_veiw expression compilation error. Expression: %s\n",
11194 expression_string.c_str());
11196 for (std::size_t i = 0; i < parser.error_count(); ++i)
11198 error_type error = parser.get_error(i);
11201 printf(
"run_test21() - Exp[%02d] Error[%02d] Position: %02d line: %d column: %d Type: [%14s] Msg: %s\n",
11202 static_cast<unsigned int>(e),
11203 static_cast<unsigned int>(i),
11204 static_cast<unsigned int>(error.token.position),
11205 static_cast<unsigned int>(error.line_no),
11206 static_cast<unsigned int>(error.column_no),
11208 error.diagnostic.c_str());
11211 error_found =
true;
11216 const T result = expression.value();
11218 if (result != T(1.0))
11220 error_found =
true;
11222 printf(
"run_test21() - Error: Exp[%02d] Expression result: %5.3f expected: 1 expression: %s\n",
11223 static_cast<unsigned int>(e),
11225 expression_string.c_str());
11236 const std::string expressions[] =
11238 "vv0[] == vv0_size",
11239 "sum(vv0) == (vv0[] * (vv0[] + 1) / 2) and (vv0[] == vv0_size)",
11240 "(min(vv0) == 1) and (vv0[] == vv0_size)",
11241 "(max(vv0) == vv0[]) and (vv0[] == vv0_size)",
11242 "(avg(vv0) == (min(vv0) + max(vv0)) / 2) and (vv0[] == vv0_size)",
11243 "(sum(vv0 + 1) == (vv0[] * (vv0[] + 1) / 2 + (vv0[] * 1))) and (vv0[] == vv0_size)",
11244 "(sum(vv0 - 1) == (vv0[] * (vv0[] + 1) / 2 - (vv0[] * 1))) and (vv0[] == vv0_size)",
11245 "(sum(1 + vv0) == (vv0[] * (vv0[] + 1) / 2 + (vv0[] * 1))) and (vv0[] == vv0_size)",
11246 "(sum(-1 + vv0) == (vv0[] * (vv0[] + 1) / 2 - (vv0[] * 1))) and (vv0[] == vv0_size)",
11247 "var x:= 1; sum(vv0 + x) == (vv0[] * (vv0[] + 1) / 2 + (vv0[] * x)) and (vv0[] == vv0_size)",
11248 "var x:= 1; sum(vv0 - x) == (vv0[] * (vv0[] + 1) / 2 - (vv0[] * x)) and (vv0[] == vv0_size)",
11249 "sum(2vv0) == (vv0[] * (vv0[] + 1)) and (vv0[] == vv0_size)",
11250 "sum(vv0 * 2) == (vv0[] * (vv0[] + 1)) and (vv0[] == vv0_size)",
11251 "sum(2vv0 + 1) == (vv0[] * (vv0[] + 1) + vv0[]) and (vv0[] == vv0_size)",
11252 "sum(1 + 2vv0) == (vv0[] * (vv0[] + 1) + vv0[]) and (vv0[] == vv0_size)",
11253 "var x := 1; sum(2vv0 + x) == (vv0[] * (vv0[] + 1) + x * vv0[]) and (vv0[] == vv0_size)",
11254 "var x := 1; sum(x + 2vv0) == (vv0[] * (vv0[] + 1) + x * vv0[]) and (vv0[] == vv0_size)",
11255 "sum(vv0 += 1) == (vv0[] * (vv0[] + 1) / 2 + vv0[]) and (vv0[] == vv0_size)",
11256 "var x:= 1; sum(vv0 += x) == (vv0[] * (vv0[] + 1) / 2 + x * vv0[]) and (vv0[] == vv0_size)",
11257 "var x:= 1; sum(vv0 -= x) == (vv0[] * (vv0[] + 1 - 2x) / 2) and (vv0[] == vv0_size)",
11258 "(sum(2vv0) == 2 * sum(vv0)) and (vv0[] == vv0_size)",
11259 "(sum(vv0 * 2) == 2 * sum(vv0)) and (vv0[] == vv0_size)",
11260 "var x:= 1; sum(2vv0) == (vv0[] * (vv0[] + 1)) and (vv0[] == vv0_size)",
11261 "var x := 2; sum(if (x > 1) { vv0 } else { vv1 }) == sum(vv0)",
11262 "dot(2 * vv0,vv1 - 1) + dot(2 * vv0,vv1 - 1) == 2sum(2vv0 * (vv1 - 1))",
11263 "(0 * dot(2 * vv0,vv1 - 1)) == 0"
11266 bool error_found =
false;
11268 for (std::size_t e = 0; e <
sizeof(expressions) /
sizeof(std::string); ++e)
11270 const T vanilla[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
11271 const std::size_t vanilla_size =
sizeof(vanilla) /
sizeof(T);
11273 std::vector<T> v0(vanilla, vanilla + vanilla_size);
11276 std::vector<T> v1(vanilla, vanilla + vanilla_size);
11279 T vv0_size = T(0.0);
11281 symbol_table_t symbol_table;
11282 symbol_table.add_variable(
"vv0_size", vv0_size);
11283 symbol_table.add_vector (
"vv0" , vv0 );
11284 symbol_table.add_vector (
"vv1" , vv1 );
11289 symbol_table.add_package( vector_package );
11290 symbol_table.add_package( io_package );
11292 const std::string& expression_string = expressions[e];
11293 expression_t expression;
11294 expression.register_symbol_table(symbol_table);
11298 if (!parser.compile(expression_string, expression))
11300 printf(
"run_test21() - Error: %s\tExpression: %s\n",
11301 parser.error().c_str(),
11302 expression_string.c_str());
11304 for (std::size_t i = 0; i < parser.error_count(); ++i)
11306 error_type error = parser.get_error(i);
11309 printf(
"run_test21() - Exp[%02d] Error[%02d] Position: %02d line: %d column: %d Type: [%14s] Msg: %s\n",
11310 static_cast<unsigned int>(e),
11311 static_cast<unsigned int>(i),
11312 static_cast<unsigned int>(error.token.position),
11313 static_cast<unsigned int>(error.line_no),
11314 static_cast<unsigned int>(error.column_no),
11316 error.diagnostic.c_str());
11322 for (std::size_t i = 1; i <= vv0.
base_size(); ++i)
11324 v0.assign(vanilla, vanilla + vanilla_size);
11325 v1.assign(vanilla, vanilla + vanilla_size);
11330 const T result = expression.value();
11334 printf(
"run_test21() - Exp[%02d] Error: size: %d expected 1 instead got: %f expr:%s\n",
11335 static_cast<unsigned int>(e),
11336 static_cast<unsigned int>(i),
11338 expression_string.c_str());
11344 expression.value();
11348 expression.value();
11350 expression.release();
11360 const T vanilla[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
11361 const std::size_t vanilla_size =
sizeof(vanilla) /
sizeof(T);
11363 std::vector<T> v0(vanilla, vanilla + vanilla_size);
11364 std::vector<T> v1(vanilla, vanilla + vanilla_size);
11371 symbol_table_t symbol_table;
11372 symbol_table.add_vector(
"v", vv);
11377 symbol_table.add_package( vector_package );
11378 symbol_table.add_package( io_package );
11379 symbol_table.add_function(
"resize", vv_size_handler);
11381 expression_t expression;
11382 expression.register_symbol_table(symbol_table);
11386 const std::string resize_expression =
11387 " var vec_original_size := v[]; "
11388 " var success_count := 0; "
11390 " for (var i := 1; i <= vec_original_size; i += 1) "
11392 " if (resize(v,i) == true and v[] == i) "
11394 " success_count += 1; "
11398 " success_count == vec_original_size ";
11400 if (!parser.compile(resize_expression, expression))
11402 printf(
"run_test21() - Error: %s\tExpression: %s\n",
11403 parser.error().c_str(),
11404 resize_expression.c_str());
11406 for (std::size_t i = 0; i < parser.error_count(); ++i)
11408 error_type error = parser.get_error(i);
11411 printf(
"run_test21() - Error[%02d] Position: %02d line: %d column: %d Type: [%14s] Msg: %s\n",
11412 static_cast<unsigned int>(i),
11413 static_cast<unsigned int>(error.token.position),
11414 static_cast<unsigned int>(error.line_no),
11415 static_cast<unsigned int>(error.column_no),
11417 error.diagnostic.c_str());
11423 const T value0 = expression.value();
11425 if (expression.value() != T(1))
11427 printf(
"run_test21() - Error: Failed evaluation Expected 1 got: %f (1)\n", value0);
11433 const T value1 = expression.value();
11435 if (expression.value() != T(1))
11437 printf(
"run_test21() - Error: Failed evaluation Expected 1 got: %f (1)\n", value1);
11443 expression.release();
11447 const T vanilla[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
11448 const std::size_t vanilla_size =
sizeof(vanilla) /
sizeof(T);
11450 std::vector<T> v0(vanilla, vanilla + vanilla_size);
11451 std::vector<T> v1(vanilla, vanilla + vanilla_size);
11458 symbol_table_t symbol_table;
11459 symbol_table.add_vector(
"v", vv);
11464 symbol_table.add_package( vector_package );
11465 symbol_table.add_package( io_package );
11466 symbol_table.add_function(
"resize", vv_size_handler);
11468 expression_t expression;
11469 expression.register_symbol_table(symbol_table);
11473 const std::string resize_expression =
11474 " var vec_original_size := v[]; "
11475 " var failure_count := 0; "
11477 " for (var i := vec_original_size + 1; i <= 2 * vec_original_size; i += 1) "
11479 " if (resize(v,i) == false or v[] != i) "
11481 " failure_count += 1 "
11485 " failure_count == vec_original_size ";
11487 if (!parser.compile(resize_expression, expression))
11489 printf(
"run_test21() - Error: %s\tExpression: %s\n",
11490 parser.error().c_str(),
11491 resize_expression.c_str());
11493 for (std::size_t i = 0; i < parser.error_count(); ++i)
11495 error_type error = parser.get_error(i);
11498 printf(
"run_test21() - Error[%02d] Position: %02d line: %d column: %d Type: [%14s] Msg: %s\n",
11499 static_cast<unsigned int>(i),
11500 static_cast<unsigned int>(error.token.position),
11501 static_cast<unsigned int>(error.line_no),
11502 static_cast<unsigned int>(error.column_no),
11504 error.diagnostic.c_str());
11510 const T value0 = expression.value();
11512 if (expression.value() != T(1))
11514 printf(
"run_test21() - Error: Failed evaluation Expected 1 got: %f (2)\n", value0);
11520 const T value1 = expression.value();
11522 if (expression.value() != T(1))
11524 printf(
"run_test21() - Error: Failed evaluation Expected 1 got: %f (2)\n", value1);
11530 expression.release();
11552 bool result =
true;
11555 const std::string expressions[] =
11557 " assert(1 > 1); ",
11558 " assert(1 > 2, 'assert statement 2'); ",
11559 " assert(1 > 3, 'assert ' + 'statement 3'); ",
11560 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); ",
11561 " assert(1 > 5, 'assert ' + 'statement 5'); ",
11562 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); "
11565 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
11567 for (std::size_t i = 0; i < expression_count; ++i)
11569 expression_t expression;
11572 if (!parser.compile(expressions[i], expression))
11574 printf(
"run_test22() - Error: %s\tExpression: %s [1]\n",
11575 parser.error().c_str(),
11576 expressions[i].c_str());
11582 printf(
"run_test22() - Error: Expression is not null! expression: %s [1]\n",
11583 expressions[i].c_str());
11588 expression.value();
11593 const std::string expressions[] =
11595 " assert(1 > 1); 1 + 0 ",
11596 " assert(1 > 2, 'assert statement 2'); 2 + 0 ",
11597 " assert(1 > 3, 'assert ' + 'statement 3'); 3 + 0 ",
11598 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 4 + 0 ",
11599 " assert(1 > 5, 'assert ' + 'statement 5'); 5 + 0 ",
11600 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 6 + 0 "
11603 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
11605 for (std::size_t i = 0; i < expression_count; ++i)
11607 expression_t expression;
11610 if (!parser.compile(expressions[i], expression))
11612 printf(
"run_test22() - Error: %s\tExpression: %s [2]\n",
11613 parser.error().c_str(),
11614 expressions[i].c_str());
11620 printf(
"run_test22() - Error: Expression is not constant! expression: %s [2]\n",
11621 expressions[i].c_str());
11625 expression.value();
11630 const std::string expressions[] =
11633 " assert(1 > 2, 'assert statement 2'); "
11634 " assert(1 > 3, 'assert ' + 'statement 3'); "
11635 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); "
11636 " assert(1 > 5, 'assert ' + 'statement 5'); "
11637 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); "
11640 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
11642 for (std::size_t i = 0; i < expression_count; ++i)
11644 expression_t expression;
11650 parser.register_assert_check(handler);
11652 if (!parser.compile(expressions[i], expression))
11654 printf(
"run_test22() - Error: %s\tExpression: %s [3]\n",
11655 parser.error().c_str(),
11656 expressions[i].c_str());
11661 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
11664 type_sequence.push_back(et_t::e_assert);
11665 type_sequence.push_back(et_t::e_assert);
11666 type_sequence.push_back(et_t::e_assert);
11667 type_sequence.push_back(et_t::e_assert);
11668 type_sequence.push_back(et_t::e_assert);
11669 type_sequence.push_back(et_t::e_assert);
11673 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [3]\n",
11674 expressions[i].c_str());
11679 expression.value();
11683 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [3]\n",
11685 expressions[i].c_str());
11693 const std::string expressions[] =
11695 " assert(1 > 1); 1 ",
11696 " assert(1 > 2, 'assert statement 2'); 2 ",
11697 " assert(1 > 3, 'assert ' + 'statement 3'); 3 ",
11698 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 4 ",
11699 " assert(1 > 5, 'assert ' + 'statement 5'); 5 ",
11700 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 6 "
11703 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
11705 for (std::size_t i = 0; i < expression_count; ++i)
11707 expression_t expression;
11713 parser.register_assert_check(handler);
11715 if (!parser.compile(expressions[i], expression))
11717 printf(
"run_test22() - Error: %s\tExpression: %s [4]\n",
11718 parser.error().c_str(),
11719 expressions[i].c_str());
11724 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
11727 type_sequence.push_back(et_t::e_assert );
11728 type_sequence.push_back(et_t::e_literal);
11732 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [4]\n",
11733 expressions[i].c_str());
11738 expression.value();
11742 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [4]\n",
11744 expressions[i].c_str());
11752 const std::string expressions[] =
11754 " assert(1 > 1); 1 + 0 ",
11755 " assert(1 > 2, 'assert statement 2'); 2 + 0 ",
11756 " assert(1 > 3, 'assert ' + 'statement 3'); 3 + 0 ",
11757 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 4 + 0 ",
11758 " assert(1 > 5, 'assert ' + 'statement 5'); 5 + 0 ",
11759 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 6 + 0 "
11762 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
11764 for (std::size_t i = 0; i < expression_count; ++i)
11766 expression_t expression;
11772 parser.register_assert_check(handler);
11774 if (!parser.compile(expressions[i], expression))
11776 printf(
"run_test22() - Error: %s\tExpression: %s [5]\n",
11777 parser.error().c_str(),
11778 expressions[i].c_str());
11783 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
11786 type_sequence.push_back(et_t::e_assert );
11787 type_sequence.push_back(et_t::e_literal);
11791 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [5]\n",
11792 expressions[i].c_str());
11797 expression.value();
11801 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [5]\n",
11803 expressions[i].c_str());
11811 const std::string expressions[] =
11813 " assert(1 > 1); 'assert statement 0001' ",
11814 " assert(1 > 2, 'assert statement 2'); 'assert statement 0002' ",
11815 " assert(1 > 3, 'assert ' + 'statement 3'); 'assert statement 0003' ",
11816 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 'assert statement 0004' ",
11817 " assert(1 > 5, 'assert ' + 'statement 5'); 'assert statement 0005' ",
11818 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 'assert statement 0006' "
11821 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
11823 for (std::size_t i = 0; i < expression_count; ++i)
11825 expression_t expression;
11831 parser.register_assert_check(handler);
11833 if (!parser.compile(expressions[i], expression))
11835 printf(
"run_test22() - Error: %s\tExpression: %s [6]\n",
11836 parser.error().c_str(),
11837 expressions[i].c_str());
11842 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
11845 type_sequence.push_back(et_t::e_assert);
11846 type_sequence.push_back(et_t::e_string);
11850 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [6]\n",
11851 expressions[i].c_str());
11856 expression.value();
11860 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [6]\n",
11862 expressions[i].c_str());
11870 const std::string expressions[] =
11872 " assert(1 > 1); 'assert statement' + '0001' ",
11873 " assert(1 > 2, 'assert statement 2'); 'assert statement' + '0002' ",
11874 " assert(1 > 3, 'assert ' + 'statement 3'); 'assert statement' + '0003' ",
11875 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 'assert statement' + '0004' ",
11876 " assert(1 > 5, 'assert ' + 'statement 5'); 'assert statement' + '0005' ",
11877 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 'assert statement' + '0006' "
11880 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
11882 for (std::size_t i = 0; i < expression_count; ++i)
11884 expression_t expression;
11890 parser.register_assert_check(handler);
11892 if (!parser.compile(expressions[i], expression))
11894 printf(
"run_test22() - Error: %s\tExpression: %s [7]\n",
11895 parser.error().c_str(),
11896 expressions[i].c_str());
11901 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
11904 type_sequence.push_back(et_t::e_assert);
11905 type_sequence.push_back(et_t::e_string);
11909 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [7]\n",
11910 expressions[i].c_str());
11915 expression.value();
11919 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [7]\n",
11921 expressions[i].c_str());
11929 const std::string expressions[] =
11931 " assert(x > y); ",
11932 " assert(x > y, 'assert statement 2'); ",
11933 " assert(x > y, 'assert ' + 'statement 3'); ",
11934 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); ",
11935 " assert(x > y, 'assert ' + 'statement 5'); ",
11936 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); "
11939 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
11941 for (std::size_t i = 0; i < expression_count; ++i)
11946 symbol_table_t symbol_table;
11947 expression_t expression;
11950 symbol_table.add_variable(
"x", x);
11951 symbol_table.add_variable(
"y", y);
11952 expression.register_symbol_table(symbol_table);
11954 if (!parser.compile(expressions[i], expression))
11956 printf(
"run_test22() - Error: %s\tExpression: %s [8]\n",
11957 parser.error().c_str(),
11958 expressions[i].c_str());
11964 printf(
"run_test22() - Error: Expression is not null! expression: %s [8]\n",
11965 expressions[i].c_str());
11970 expression.value();
11975 const std::string expressions[] =
11977 " assert(x > y); 1 + 0 ",
11978 " assert(x > y, 'assert statement 2'); 2 + 0 ",
11979 " assert(x > y, 'assert ' + 'statement 3'); 3 + 0 ",
11980 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); 4 + 0 ",
11981 " assert(x > y, 'assert ' + 'statement 5'); 5 + 0 ",
11982 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); 6 + 0 "
11985 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
11987 for (std::size_t i = 0; i < expression_count; ++i)
11992 symbol_table_t symbol_table;
11993 expression_t expression;
11996 symbol_table.add_variable(
"x", x);
11997 symbol_table.add_variable(
"y", y);
11998 expression.register_symbol_table(symbol_table);
12000 if (!parser.compile(expressions[i], expression))
12002 printf(
"run_test22() - Error: %s\tExpression: %s [9]\n",
12003 parser.error().c_str(),
12004 expressions[i].c_str());
12010 printf(
"run_test22() - Error: Expression is not constant! expression: %s [9]\n",
12011 expressions[i].c_str());
12015 expression.value();
12020 const std::string expressions[] =
12023 " assert(x > y, 'assert statement 2'); "
12024 " assert(x > y, 'assert ' + 'statement 3'); "
12025 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); "
12026 " assert(x > y, 'assert ' + 'statement 5'); "
12027 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); "
12030 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12032 for (std::size_t i = 0; i < expression_count; ++i)
12037 symbol_table_t symbol_table;
12038 expression_t expression;
12044 symbol_table.add_variable(
"x", x);
12045 symbol_table.add_variable(
"y", y);
12046 expression.register_symbol_table(symbol_table);
12048 parser.register_assert_check(handler);
12050 if (!parser.compile(expressions[i], expression))
12052 printf(
"run_test22() - Error: %s\tExpression: %s [10]\n",
12053 parser.error().c_str(),
12054 expressions[i].c_str());
12059 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12062 type_sequence.push_back(et_t::e_assert);
12063 type_sequence.push_back(et_t::e_assert);
12064 type_sequence.push_back(et_t::e_assert);
12065 type_sequence.push_back(et_t::e_assert);
12066 type_sequence.push_back(et_t::e_assert);
12067 type_sequence.push_back(et_t::e_assert);
12071 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [10]\n",
12072 expressions[i].c_str());
12077 expression.value();
12081 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [10]\n",
12083 expressions[i].c_str());
12091 const std::string expressions[] =
12093 " assert(x > y); 1 ",
12094 " assert(x > y, 'assert statement 2'); 2 ",
12095 " assert(x > y, 'assert ' + 'statement 3'); 3 ",
12096 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); 4 ",
12097 " assert(x > y, 'assert ' + 'statement 5'); 5 ",
12098 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); 6 "
12101 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12103 for (std::size_t i = 0; i < expression_count; ++i)
12108 symbol_table_t symbol_table;
12109 expression_t expression;
12115 symbol_table.add_variable(
"x", x);
12116 symbol_table.add_variable(
"y", y);
12117 expression.register_symbol_table(symbol_table);
12119 parser.register_assert_check(handler);
12121 if (!parser.compile(expressions[i], expression))
12123 printf(
"run_test22() - Error: %s\tExpression: %s [11]\n",
12124 parser.error().c_str(),
12125 expressions[i].c_str());
12130 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12133 type_sequence.push_back(et_t::e_assert );
12134 type_sequence.push_back(et_t::e_literal);
12138 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [11]\n",
12139 expressions[i].c_str());
12144 expression.value();
12148 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [11]\n",
12150 expressions[i].c_str());
12159 const std::string expressions[] =
12161 " assert(x > y); 1 + 0 ",
12162 " assert(x > y, 'assert statement 2'); 2 + 0 ",
12163 " assert(x > y, 'assert ' + 'statement 3'); 3 + 0 ",
12164 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); 4 + 0 ",
12165 " assert(x > y, 'assert ' + 'statement 5'); 5 + 0 ",
12166 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); 6 + 0 "
12169 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12171 for (std::size_t i = 0; i < expression_count; ++i)
12176 symbol_table_t symbol_table;
12177 expression_t expression;
12183 symbol_table.add_variable(
"x", x);
12184 symbol_table.add_variable(
"y", y);
12185 expression.register_symbol_table(symbol_table);
12187 parser.register_assert_check(handler);
12189 if (!parser.compile(expressions[i], expression))
12191 printf(
"run_test22() - Error: %s\tExpression: %s [12]\n",
12192 parser.error().c_str(),
12193 expressions[i].c_str());
12198 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12201 type_sequence.push_back(et_t::e_assert );
12202 type_sequence.push_back(et_t::e_literal);
12206 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [12]\n",
12207 expressions[i].c_str());
12212 expression.value();
12216 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [12]\n",
12218 expressions[i].c_str());
12226 const std::string expressions[] =
12228 " assert(x > y); 'assert statement 0001' ",
12229 " assert(x > y, 'assert statement 2'); 'assert statement 0002' ",
12230 " assert(x > y, 'assert ' + 'statement 3'); 'assert statement 0003' ",
12231 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); 'assert statement 0004' ",
12232 " assert(x > y, 'assert ' + 'statement 5'); 'assert statement 0005' ",
12233 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); 'assert statement 0006' "
12236 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12238 for (std::size_t i = 0; i < expression_count; ++i)
12243 symbol_table_t symbol_table;
12244 expression_t expression;
12250 symbol_table.add_variable(
"x", x);
12251 symbol_table.add_variable(
"y", y);
12252 expression.register_symbol_table(symbol_table);
12254 parser.register_assert_check(handler);
12256 if (!parser.compile(expressions[i], expression))
12258 printf(
"run_test22() - Error: %s\tExpression: %s [13]\n",
12259 parser.error().c_str(),
12260 expressions[i].c_str());
12265 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12268 type_sequence.push_back(et_t::e_assert);
12269 type_sequence.push_back(et_t::e_string);
12273 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [13]\n",
12274 expressions[i].c_str());
12279 expression.value();
12283 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [13]\n",
12285 expressions[i].c_str());
12293 const std::string expressions[] =
12295 " assert(x > y); 'assert statement' + '0001' ",
12296 " assert(x > y, 'assert statement 2'); 'assert statement' + '0002' ",
12297 " assert(x > y, 'assert ' + 'statement 3'); 'assert statement' + '0003' ",
12298 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); 'assert statement' + '0004' ",
12299 " assert(x > y, 'assert ' + 'statement 5'); 'assert statement' + '0005' ",
12300 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); 'assert statement' + '0006' "
12303 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12305 for (std::size_t i = 0; i < expression_count; ++i)
12310 symbol_table_t symbol_table;
12311 expression_t expression;
12317 symbol_table.add_variable(
"x", x);
12318 symbol_table.add_variable(
"y", y);
12319 expression.register_symbol_table(symbol_table);
12321 parser.register_assert_check(handler);
12323 if (!parser.compile(expressions[i], expression))
12325 printf(
"run_test22() - Error: %s\tExpression: %s [14]\n",
12326 parser.error().c_str(),
12327 expressions[i].c_str());
12332 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12335 type_sequence.push_back(et_t::e_assert);
12336 type_sequence.push_back(et_t::e_string);
12340 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [14]\n",
12341 expressions[i].c_str());
12346 expression.value();
12350 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [14]\n",
12352 expressions[i].c_str());
12360 const std::string expressions[] =
12362 " assert(1 > 1); 1 + 0; "
12363 " assert(1 > 2, 'assert statement 2'); 2 + 0; "
12364 " assert(1 > 3, 'assert ' + 'statement 3'); 3 + 0; "
12365 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 4 + 0; "
12366 " assert(1 > 5, 'assert ' + 'statement 5'); 5 + 0 "
12367 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 6 + 0; "
12370 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12372 for (std::size_t i = 0; i < expression_count; ++i)
12374 expression_t expression;
12380 parser.register_assert_check(handler);
12382 if (!parser.compile(expressions[i], expression))
12384 printf(
"run_test22() - Error: %s\tExpression: %s [15]\n",
12385 parser.error().c_str(),
12386 expressions[i].c_str());
12391 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12394 type_sequence.push_back(et_t::e_assert );
12395 type_sequence.push_back(et_t::e_assert );
12396 type_sequence.push_back(et_t::e_assert );
12397 type_sequence.push_back(et_t::e_assert );
12398 type_sequence.push_back(et_t::e_assert );
12399 type_sequence.push_back(et_t::e_assert );
12400 type_sequence.push_back(et_t::e_literal);
12404 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [15]\n",
12405 expressions[i].c_str());
12410 expression.value();
12414 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [15]\n",
12416 expressions[i].c_str());
12424 const std::string expressions[] =
12426 " assert(1 > 1); 'assert' + '01'; "
12427 " assert(1 > 2, 'assert statement 2'); 'assert' + '02'; "
12428 " assert(1 > 3, 'assert ' + 'statement 3'); 'assert' + '03'; "
12429 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 'assert' + '04'; "
12430 " assert(1 > 5, 'assert ' + 'statement 5'); 'assert' + '05'; "
12431 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 'assert' + '06'; "
12434 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12436 for (std::size_t i = 0; i < expression_count; ++i)
12438 expression_t expression;
12444 parser.register_assert_check(handler);
12446 if (!parser.compile(expressions[i], expression))
12448 printf(
"run_test22() - Error: %s\tExpression: %s [16]\n",
12449 parser.error().c_str(),
12450 expressions[i].c_str());
12455 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12458 type_sequence.push_back(et_t::e_assert);
12459 type_sequence.push_back(et_t::e_assert);
12460 type_sequence.push_back(et_t::e_assert);
12461 type_sequence.push_back(et_t::e_assert);
12462 type_sequence.push_back(et_t::e_assert);
12463 type_sequence.push_back(et_t::e_assert);
12464 type_sequence.push_back(et_t::e_string);
12468 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [16]\n",
12469 expressions[i].c_str());
12474 expression.value();
12478 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [16]\n",
12480 expressions[i].c_str());
12488 const std::string expressions[] =
12490 " assert(x > y); x + y + 1; "
12491 " assert(x > y, 'assert statement 2'); x + y + 1; "
12492 " assert(x > y, 'assert ' + 'statement 3'); x + y + 1; "
12493 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); x + y + 1; "
12494 " assert(x > y, 'assert ' + 'statement 5'); x + y + 1; "
12495 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); x + y + 1; "
12498 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12500 for (std::size_t i = 0; i < expression_count; ++i)
12505 symbol_table_t symbol_table;
12506 expression_t expression;
12512 symbol_table.add_variable(
"x", x);
12513 symbol_table.add_variable(
"y", y);
12514 expression.register_symbol_table(symbol_table);
12516 parser.register_assert_check(handler);
12518 if (!parser.compile(expressions[i], expression))
12520 printf(
"run_test22() - Error: %s\tExpression: %s [17]\n",
12521 parser.error().c_str(),
12522 expressions[i].c_str());
12527 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12530 type_sequence.push_back(et_t::e_assert);
12531 type_sequence.push_back(et_t::e_assert);
12532 type_sequence.push_back(et_t::e_assert);
12533 type_sequence.push_back(et_t::e_assert);
12534 type_sequence.push_back(et_t::e_assert);
12535 type_sequence.push_back(et_t::e_assert);
12536 type_sequence.push_back(et_t::e_sf3ext);
12540 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [17]\n",
12541 expressions[i].c_str());
12546 expression.value();
12550 printf(
"run_test22() - Error: Invalid assert count of %d expected 6. Expression: %s [17]\n",
12552 expressions[i].c_str());
12560 const std::string expressions[] =
12562 " assert(x > y); 'assert' + ((x < y) ? '01' : 'XYZ'); "
12563 " assert(x > y, 'assert statement 2'); 'assert' + ((x < y) ? '02' : 'XYZ'); "
12564 " assert(x > y, 'assert ' + 'statement 3'); 'assert' + ((x < y) ? '03' : 'XYZ'); "
12565 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); 'assert' + ((x < y) ? '04' : 'XYZ'); "
12566 " assert(x > y, 'assert ' + 'statement 5'); 'assert' + ((x < y) ? '05' : 'XYZ'); "
12567 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); 'assert' + ((x < y) ? '06' : 'XYZ'); "
12570 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12572 for (std::size_t i = 0; i < expression_count; ++i)
12577 symbol_table_t symbol_table;
12578 expression_t expression;
12584 symbol_table.add_variable(
"x", x);
12585 symbol_table.add_variable(
"y", y);
12586 expression.register_symbol_table(symbol_table);
12588 parser.register_assert_check(handler);
12590 if (!parser.compile(expressions[i], expression))
12592 printf(
"run_test22() - Error: %s\tExpression: %s [18]\n",
12593 parser.error().c_str(),
12594 expressions[i].c_str());
12599 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12602 type_sequence.push_back(et_t::e_assert);
12603 type_sequence.push_back(et_t::e_assert);
12604 type_sequence.push_back(et_t::e_assert);
12605 type_sequence.push_back(et_t::e_assert);
12606 type_sequence.push_back(et_t::e_assert);
12607 type_sequence.push_back(et_t::e_assert);
12608 type_sequence.push_back(et_t::e_string);
12612 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [18]\n",
12613 expressions[i].c_str());
12618 expression.value();
12622 printf(
"run_test22() - Error: Invalid assert count of %d expected 6. Expression: %s [18]\n",
12624 expressions[i].c_str());