1332 test_xy<T>(
"(x + y) * (x + y)" ,T(2.2),T(3.3),T(30.25)),
1333 test_xy<T>(
"(x + y) / (x + y)" ,T(2.2),T(3.3),T(1.0 )),
1334 test_xy<T>(
"x + y > x and x + y > y" ,T(2.2),T(3.3),T(1.0)),
1335 test_xy<T>(
"1 + (x + y)" ,T(2.2),T(3.3),T(6.5 )),
1336 test_xy<T>(
"(x + y) - 1" ,T(2.2),T(3.3),T(4.5 )),
1337 test_xy<T>(
"1 + (x + y) * 2" ,T(2.2),T(3.3),T(12.0 )),
1338 test_xy<T>(
"2 * (x + y) - 1" ,T(2.2),T(3.3),T(10.0 )),
1339 test_xy<T>(
"y + (x + 1)" ,T(2.2),T(3.3),T(6.5 )),
1340 test_xy<T>(
"(x + 1) + y" ,T(2.2),T(3.3),T(6.5 )),
1369 test_xy<T>(
"(x - -1 + 1)" ,T(1.0),T(0.0),T(3)),
1370 test_xy<T>(
"(x --1 + 1)" ,T(1.0),T(0.0),T(3)),
1371 test_xy<T>(
"(x-- 1 + 1)" ,T(1.0),T(0.0),T(3)),
1372 test_xy<T>(
"(x--1 + 1)" ,T(1.0),T(0.0),T(3)),
1373 test_xy<T>(
"(x -- -1 + 1)" ,T(1.0),T(0.0),T(1)),
1374 test_xy<T>(
"(x + -1 + 1)" ,T(1.0),T(0.0),T(1)),
1375 test_xy<T>(
"(x +-1 + 1)" ,T(1.0),T(0.0),T(1)),
1376 test_xy<T>(
"(x+- 1 + 1)" ,T(1.0),T(0.0),T(1)),
1377 test_xy<T>(
"(x+-1 + 1)" ,T(1.0),T(0.0),T(1)),
1378 test_xy<T>(
"(x +- -1 + 1)" ,T(1.0),T(0.0),T(3)),
1379 test_xy<T>(
"(x + +1 + 1)" ,T(1.0),T(0.0),T(3)),
1380 test_xy<T>(
"(x ++1 + 1)" ,T(1.0),T(0.0),T(3)),
1381 test_xy<T>(
"(1 - -x + 1)" ,T(1.0),T(0.0),T(3)),
1382 test_xy<T>(
"(1 --x + 1)" ,T(1.0),T(0.0),T(3)),
1383 test_xy<T>(
"(1-- x + 1)" ,T(1.0),T(0.0),T(3)),
1384 test_xy<T>(
"(1--x + 1)" ,T(1.0),T(0.0),T(3)),
1385 test_xy<T>(
"(1 -- -x + 1)" ,T(1.0),T(0.0),T(1)),
1386 test_xy<T>(
"(1 + -x + 1)" ,T(1.0),T(0.0),T(1)),
1387 test_xy<T>(
"(1 +-x + 1)" ,T(1.0),T(0.0),T(1)),
1388 test_xy<T>(
"(1+- x + 1)" ,T(1.0),T(0.0),T(1)),
1389 test_xy<T>(
"(1+-x + 1)" ,T(1.0),T(0.0),T(1)),
1390 test_xy<T>(
"(1 +- -x + 1)" ,T(1.0),T(0.0),T(3)),
1391 test_xy<T>(
"(1 + +x + 1)" ,T(1.0),T(0.0),T(3)),
1392 test_xy<T>(
"(1 ++x + 1)" ,T(1.0),T(0.0),T(3)),
1393 test_xy<T>(
"(x - -1 - 1)" ,T(1.0),T(0.0),T(1)),
1394 test_xy<T>(
"(x --1 - 1)" ,T(1.0),T(0.0),T(1)),
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(-1)),
1401 test_xy<T>(
"(x+-1 - 1)" ,T(1.0),T(0.0),T(-1)),
1402 test_xy<T>(
"(x +- -1 - 1)" ,T(1.0),T(0.0),T(1)),
1403 test_xy<T>(
"(x + +1 - 1)" ,T(1.0),T(0.0),T(1)),
1404 test_xy<T>(
"(x ++1 - 1)" ,T(1.0),T(0.0),T(1)),
1405 test_xy<T>(
"(1 - -x - 1)" ,T(1.0),T(0.0),T(1)),
1406 test_xy<T>(
"(1 --x - 1)" ,T(1.0),T(0.0),T(1)),
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(-1)),
1413 test_xy<T>(
"(1+-x - 1)" ,T(1.0),T(0.0),T(-1)),
1414 test_xy<T>(
"(1 +- -x - 1)" ,T(1.0),T(0.0),T(1)),
1415 test_xy<T>(
"(1 + +x - 1)" ,T(1.0),T(0.0),T(1)),
1416 test_xy<T>(
"(1 ++x - 1)" ,T(1.0),T(0.0),T(1)),
1417 test_xy<T>(
"x * 1 == x" ,T(2.0),T(3.0),T(1.0)),
1418 test_xy<T>(
"1 * x == x" ,T(2.0),T(3.0),T(1.0)),
1419 test_xy<T>(
"y * 1 == y" ,T(2.0),T(3.0),T(1.0)),
1420 test_xy<T>(
"1 * y == y" ,T(2.0),T(3.0),T(1.0)),
1421 test_xy<T>(
"x * 0 == 0" ,T(2.0),T(3.0),T(1.0)),
1422 test_xy<T>(
"0 * x == 0" ,T(2.0),T(3.0),T(1.0)),
1423 test_xy<T>(
"y * 0 == 0" ,T(2.0),T(3.0),T(1.0)),
1424 test_xy<T>(
"0 * y == 0" ,T(2.0),T(3.0),T(1.0)),
1425 test_xy<T>(
"x + 1 == 1 + x" ,T(2.0),T(3.0),T(1.0)),
1426 test_xy<T>(
"y + 1 == 1 + y" ,T(2.0),T(3.0),T(1.0)),
1427 test_xy<T>(
"x + y == y + x" ,T(2.0),T(3.0),T(1.0)),
1428 test_xy<T>(
"x * y == y * x" ,T(2.0),T(3.0),T(1.0)),
1433 test_xy<T>(
"x + y > y" ,T(2.0),T(3.0),T(1.0)),
1434 test_xy<T>(
"x + y > x" ,T(2.0),T(3.0),T(1.0)),
1435 test_xy<T>(
"x * y > y" ,T(2.0),T(3.0),T(1.0)),
1436 test_xy<T>(
"x * y > x" ,T(2.0),T(3.0),T(1.0)),
1437 test_xy<T>(
"(x + y) > y" ,T(2.0),T(3.0),T(1.0)),
1438 test_xy<T>(
"(x + y) > x" ,T(2.0),T(3.0),T(1.0)),
1439 test_xy<T>(
"(x * y) > y" ,T(2.0),T(3.0),T(1.0)),
1440 test_xy<T>(
"(x * y) > x" ,T(2.0),T(3.0),T(1.0)),
1441 test_xy<T>(
"(2x + 3y) == (2*x + 3*y)" ,T(2.0),T(3.0),T(1.0)),
1442 test_xy<T>(
"2(x + y) == (2*x + 2*y)" ,T(2.0),T(3.0),T(1.0)),
1443 test_xy<T>(
" (x + y)3 == (3*x + 3*y)" ,T(2.0),T(3.0),T(1.0)),
1444 test_xy<T>(
"2x + 3y == 2*x + 3*y" ,T(2.0),T(3.0),T(1.0)),
1445 test_xy<T>(
"2(x + y) == 2*x + 2*y" ,T(2.0),T(3.0),T(1.0)),
1446 test_xy<T>(
" (x + y)3 == 3*x + 3*y" ,T(2.0),T(3.0),T(1.0)),
1447 test_xy<T>(
" (x)y == (x*y)" ,T(2.0),T(3.0),T(1.0)),
1448 test_xy<T>(
" x(y) == (x*y)" ,T(2.0),T(3.0),T(1.0)),
1449 test_xy<T>(
" (x) y == (x*y)" ,T(2.0),T(3.0),T(1.0)),
1450 test_xy<T>(
" x (y) == (x*y)" ,T(2.0),T(3.0),T(1.0)),
1451 test_xy<T>(
" ((x) y) == (x*y)" ,T(2.0),T(3.0),T(1.0)),
1452 test_xy<T>(
" (x (y)) == (x*y)" ,T(2.0),T(3.0),T(1.0)),
1453 test_xy<T>(
" (x)3 == (x*3)" ,T(2.0),T(3.0),T(1.0)),
1454 test_xy<T>(
" x(3) == (x*3)" ,T(2.0),T(3.0),T(1.0)),
1455 test_xy<T>(
" (x) 3 == (x*3)" ,T(2.0),T(3.0),T(1.0)),
1456 test_xy<T>(
" x (3) == (x*3)" ,T(2.0),T(3.0),T(1.0)),
1457 test_xy<T>(
" ((x) 3) == (x*3)" ,T(2.0),T(3.0),T(1.0)),
1458 test_xy<T>(
" (x (3)) == (x*3)" ,T(2.0),T(3.0),T(1.0)),
1459 test_xy<T>(
" (2)y == (2*y)" ,T(2.0),T(3.0),T(1.0)),
1460 test_xy<T>(
" 2(y) == (2*y)" ,T(2.0),T(3.0),T(1.0)),
1461 test_xy<T>(
" (2) y == (2*y)" ,T(2.0),T(3.0),T(1.0)),
1462 test_xy<T>(
" 2 (y) == (2*y)" ,T(2.0),T(3.0),T(1.0)),
1463 test_xy<T>(
" ((2) y) == (2*y)" ,T(2.0),T(3.0),T(1.0)),
1464 test_xy<T>(
" (2 (y)) == (2*y)" ,T(2.0),T(3.0),T(1.0)),
1465 test_xy<T>(
"var a := 2; (a)(3) == 6" ,T(2.0),T(3.0),T(1.0)),
1466 test_xy<T>(
"var a := 2; (A){3} == 6" ,T(2.0),T(3.0),T(1.0)),
1467 test_xy<T>(
"var a := 2; (a)[3] == 6" ,T(2.0),T(3.0),T(1.0)),
1468 test_xy<T>(
"var a := 2; {a}(3) == 6" ,T(2.0),T(3.0),T(1.0)),
1469 test_xy<T>(
"var a := 2; {a}{3} == 6" ,T(2.0),T(3.0),T(1.0)),
1470 test_xy<T>(
"var a := 2; {a}[3] == 6" ,T(2.0),T(3.0),T(1.0)),
1471 test_xy<T>(
"var a := 2; var b := 3; (a)(b) == 6" ,T(2.0),T(3.0),T(1.0)),
1472 test_xy<T>(
"var a := 2; var b := 3; (a){B} == 6" ,T(2.0),T(3.0),T(1.0)),
1473 test_xy<T>(
"var a := 2; var b := 3; (a)[b] == 6" ,T(2.0),T(3.0),T(1.0)),
1474 test_xy<T>(
"var a := 2; var b := 3; {a}(b) == 6" ,T(2.0),T(3.0),T(1.0)),
1475 test_xy<T>(
"var a := 2; var b := 3; {a}{b} == 6" ,T(2.0),T(3.0),T(1.0)),
1476 test_xy<T>(
"var a := 2; var b := 3; {a}[b] == 6" ,T(2.0),T(3.0),T(1.0)),
1477 test_xy<T>(
"var a := 2; (a)(a+1) == 6" ,T(2.0),T(3.0),T(1.0)),
1478 test_xy<T>(
"var a := 2; (a){a+1} == 6" ,T(2.0),T(3.0),T(1.0)),
1479 test_xy<T>(
"var a := 2; (a)[a+1] == 6" ,T(2.0),T(3.0),T(1.0)),
1480 test_xy<T>(
"var a := 2; {a}(a+1) == 6" ,T(2.0),T(3.0),T(1.0)),
1481 test_xy<T>(
"var a := 2; {a}{a+1} == 6" ,T(2.0),T(3.0),T(1.0)),
1482 test_xy<T>(
"var a := 2; {a}[a+1] == 6" ,T(2.0),T(3.0),T(1.0)),
1483 test_xy<T>(
"var a := 2; var b := 3; (b-1)(b) == 6" ,T(2.0),T(3.0),T(1.0)),
1484 test_xy<T>(
"var a := 2; var b := 3; (b-1){b} == 6" ,T(2.0),T(3.0),T(1.0)),
1485 test_xy<T>(
"var a := 2; var b := 3; (b-1)[b] == 6" ,T(2.0),T(3.0),T(1.0)),
1486 test_xy<T>(
"var a := 2; var b := 3; {b-1}(b) == 6" ,T(2.0),T(3.0),T(1.0)),
1487 test_xy<T>(
"var a := 2; var b := 3; {b-1}{b} == 6" ,T(2.0),T(3.0),T(1.0)),
1488 test_xy<T>(
"var a := 2; var b := 3; {b-1}[b] == 6" ,T(2.0),T(3.0),T(1.0)),
1489 test_xy<T>(
"equal(x^2.2^1.1,17.15193942371376191362)" ,T(3.3),T(0.0),T(1.0)),
1490 test_xy<T>(
"equal(3.3^x^1.1,17.15193942371376191362)" ,T(2.2),T(0.0),T(1.0)),
1491 test_xy<T>(
"equal(3.3^2.2^x,17.15193942371376191362)" ,T(1.1),T(0.0),T(1.0)),
1492 test_xy<T>(
"equal(x^2.2^y,17.15193942371376191362)" ,T(3.3),T(1.1),T(1.0)),
1493 test_xy<T>(
"equal(x^y^1.1,17.15193942371376191362)" ,T(3.3),T(2.2),T(1.0)),
1494 test_xy<T>(
"equal(3.3^x^y,17.15193942371376191362)" ,T(2.2),T(1.1),T(1.0)),
1495 test_xy<T>(
"equal(x+y^3/7,x+(y*y*y)/7)",T(2.0),T(3.0),T(1.0)),
1496 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)),
1497 test_xy<T>(
"equal( x^0,1)",T(12.34),T(0.0),T(1.0)),
1498 test_xy<T>(
"equal( x^1,x)",T(12.34),T(0.0),T(1.0)),
1499 test_xy<T>(
"equal( x^2,x*x)",T(12.34),T(0.0),T(1.0)),
1500 test_xy<T>(
"equal( x^3,x*x*x)",T(12.34),T(0.0),T(1.0)),
1501 test_xy<T>(
"equal( x^4,x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1502 test_xy<T>(
"equal( x^5,x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1503 test_xy<T>(
"equal( x^6,x*x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1504 test_xy<T>(
"equal( x^7,x*x*x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1505 test_xy<T>(
"equal( x^8,x*x*x*x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1506 test_xy<T>(
"equal( x^9,x*x*x*x*x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1507 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)),
1508 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)),
1509 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)),
1510 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)),
1511 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)),
1512 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)),
1513 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)),
1514 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)),
1515 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)),
1516 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)),
1517 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)),
1518 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)),
1519 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)),
1520 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)),
1521 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)),
1522 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)),
1523 test_xy<T>(
"equal( y^0,1)",T(0.0),T(12.34),T(1.0)),
1524 test_xy<T>(
"equal( y^1,y)",T(0.0),T(12.34),T(1.0)),
1525 test_xy<T>(
"equal( y^2,y*y)",T(0.0),T(12.34),T(1.0)),
1526 test_xy<T>(
"equal( y^3,y*y*y)",T(0.0),T(12.34),T(1.0)),
1527 test_xy<T>(
"equal( y^4,y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1528 test_xy<T>(
"equal( y^5,y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1529 test_xy<T>(
"equal( y^6,y*y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1530 test_xy<T>(
"equal( y^7,y*y*y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1531 test_xy<T>(
"equal( y^8,y*y*y*y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1532 test_xy<T>(
"equal( y^9,y*y*y*y*y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1533 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)),
1534 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)),
1535 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)),
1536 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)),
1537 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)),
1538 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)),
1539 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)),
1540 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)),
1541 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)),
1542 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)),
1543 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)),
1544 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)),
1545 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)),
1546 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)),
1547 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)),
1548 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)),
1549 test_xy<T>(
"equal( x^-0,1/1)",T(12.34),T(0.0),T(1.0)),
1550 test_xy<T>(
"equal( x^-1,1/(x))",T(12.34),T(0.0),T(1.0)),
1551 test_xy<T>(
"equal( x^-2,1/(x*x))",T(12.34),T(0.0),T(1.0)),
1552 test_xy<T>(
"equal( x^-3,1/(x*x*x))",T(12.34),T(0.0),T(1.0)),
1553 test_xy<T>(
"equal( x^-4,1/(x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1554 test_xy<T>(
"equal( x^-5,1/(x*x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1555 test_xy<T>(
"equal( x^-6,1/(x*x*x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1556 test_xy<T>(
"equal( x^-7,1/(x*x*x*x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1557 test_xy<T>(
"equal( x^-8,1/(x*x*x*x*x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1558 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)),
1559 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)),
1560 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)),
1561 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)),
1562 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)),
1563 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)),
1564 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)),
1565 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)),
1566 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)),
1567 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)),
1568 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)),
1569 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)),
1570 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)),
1571 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)),
1572 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)),
1573 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)),
1574 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)),
1575 test_xy<T>(
"equal( y^-0,1/1)",T(0.0),T(12.34),T(1.0)),
1576 test_xy<T>(
"equal( y^-1,1/(y))",T(0.0),T(12.34),T(1.0)),
1577 test_xy<T>(
"equal( y^-2,1/(y*y))",T(0.0),T(12.34),T(1.0)),
1578 test_xy<T>(
"equal( y^-3,1/(y*y*y))",T(0.0),T(12.34),T(1.0)),
1579 test_xy<T>(
"equal( y^-4,1/(y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1580 test_xy<T>(
"equal( y^-5,1/(y*y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1581 test_xy<T>(
"equal( y^-6,1/(y*y*y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1582 test_xy<T>(
"equal( y^-7,1/(y*y*y*y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1583 test_xy<T>(
"equal( y^-8,1/(y*y*y*y*y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1584 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)),
1585 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)),
1586 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)),
1587 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)),
1588 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)),
1589 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)),
1590 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)),
1591 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)),
1592 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)),
1593 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)),
1594 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)),
1595 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)),
1596 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)),
1597 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)),
1598 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)),
1599 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)),
1600 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)),
1601 test_xy<T>(
"(2 + x) + 7",T(3.0),T(0.0),T((2.0 + 3.0) + 7.0)),
1602 test_xy<T>(
"(2 + x) - 7",T(3.0),T(0.0),T((2.0 + 3.0) - 7.0)),
1603 test_xy<T>(
"(2 - x) + 7",T(3.0),T(0.0),T((2.0 - 3.0) + 7.0)),
1604 test_xy<T>(
"(2 - x) - 7",T(3.0),T(0.0),T((2.0 - 3.0) - 7.0)),
1605 test_xy<T>(
"(2 * x) * 7",T(3.0),T(0.0),T((2.0 * 3.0) * 7.0)),
1606 test_xy<T>(
"(2 * x) / 7",T(3.0),T(0.0),T((2.0 * 3.0) / 7.0)),
1607 test_xy<T>(
"(2 / x) * 7",T(3.0),T(0.0),T((2.0 / 3.0) * 7.0)),
1608 test_xy<T>(
"(2 / x) / 7",T(3.0),T(0.0),T((2.0 / 3.0) / 7.0)),
1609 test_xy<T>(
"2 + (x + 7)",T(3.0),T(0.0),T(2.0 + (3.0 + 7.0))),
1610 test_xy<T>(
"2 + (x - 7)",T(3.0),T(0.0),T(2.0 + (3.0 - 7.0))),
1611 test_xy<T>(
"2 - (x + 7)",T(3.0),T(0.0),T(2.0 - (3.0 + 7.0))),
1612 test_xy<T>(
"2 - (x - 7)",T(3.0),T(0.0),T(2.0 - (3.0 - 7.0))),
1613 test_xy<T>(
"2 * (x * 7)",T(3.0),T(0.0),T(2.0 * (3.0 * 7.0))),
1614 test_xy<T>(
"2 * (x / 7)",T(3.0),T(0.0),T(2.0 * (3.0 / 7.0))),
1615 test_xy<T>(
"2 / (x * 7)",T(3.0),T(0.0),T(2.0 / (3.0 * 7.0))),
1616 test_xy<T>(
"2 / (x / 7)",T(3.0),T(0.0),T(2.0 / (3.0 / 7.0))),
1617 test_xy<T>(
"2 + (7 + x)",T(3.0),T(0.0),T(2.0 + (7.0 + 3.0))),
1618 test_xy<T>(
"2 + (7 - x)",T(3.0),T(0.0),T(2.0 + (7.0 - 3.0))),
1619 test_xy<T>(
"2 - (7 + x)",T(3.0),T(0.0),T(2.0 - (7.0 + 3.0))),
1620 test_xy<T>(
"2 - (7 - x)",T(3.0),T(0.0),T(2.0 - (7.0 - 3.0))),
1621 test_xy<T>(
"2 * (7 * x)",T(3.0),T(0.0),T(2.0 * (7.0 * 3.0))),
1622 test_xy<T>(
"2 * (7 / x)",T(3.0),T(0.0),T(2.0 * (7.0 / 3.0))),
1623 test_xy<T>(
"2 / (7 * x)",T(3.0),T(0.0),T(2.0 / (7.0 * 3.0))),
1624 test_xy<T>(
"2 / (7 / x)",T(3.0),T(0.0),T(2.0 / (7.0 / 3.0))),
1625 test_xy<T>(
"(x + 2) + 7",T(3.0),T(0.0),T((3.0 + 2.0) + 7.0)),
1626 test_xy<T>(
"(x + 2) - 7",T(3.0),T(0.0),T((3.0 + 2.0) - 7.0)),
1627 test_xy<T>(
"(x - 2) + 7",T(3.0),T(0.0),T((3.0 - 2.0) + 7.0)),
1628 test_xy<T>(
"(x - 2) - 7",T(3.0),T(0.0),T((3.0 - 2.0) - 7.0)),
1629 test_xy<T>(
"(x * 2) * 7",T(3.0),T(0.0),T((3.0 * 2.0) * 7.0)),
1630 test_xy<T>(
"(x * 2) / 7",T(3.0),T(0.0),T((3.0 * 2.0) / 7.0)),
1631 test_xy<T>(
"(x / 2) * 7",T(3.0),T(0.0),T((3.0 / 2.0) * 7.0)),
1632 test_xy<T>(
"(x / 2) / 7",T(3.0),T(0.0),T((3.0 / 2.0) / 7.0)),
1633 test_xy<T>(
"((2 + x) + (3 + y))",T(7.0),T(9.0),T(((2.0 + 7.0) + (3.0 + 9.0)))),
1634 test_xy<T>(
"((2 + x) - (3 + y))",T(7.0),T(9.0),T(((2.0 + 7.0) - (3.0 + 9.0)))),
1635 test_xy<T>(
"((2 - x) - (3 - y))",T(7.0),T(9.0),T(((2.0 - 7.0) - (3.0 - 9.0)))),
1636 test_xy<T>(
"((2 * x) * (3 * y))",T(7.0),T(9.0),T(((2.0 * 7.0) * (3.0 * 9.0)))),
1637 test_xy<T>(
"((x + 2) + (y + 3))",T(7.0),T(9.0),T(((7.0 + 2.0) + (9.0 + 3.0)))),
1638 test_xy<T>(
"((x + 2) - (y + 3))",T(7.0),T(9.0),T(((7.0 + 2.0) - (9.0 + 3.0)))),
1639 test_xy<T>(
"((x - 2) - (y - 3))",T(7.0),T(9.0),T(((7.0 - 2.0) - (9.0 - 3.0)))),
1640 test_xy<T>(
"((2 * x) * (3 * y))",T(7.0),T(9.0),T(((2.0 * 7.0) * (3.0 * 9.0)))),
1641 test_xy<T>(
"((2 + x) + (y + 3))",T(7.0),T(9.0),T(((2.0 + 7.0) + (9.0 + 3.0)))),
1642 test_xy<T>(
"((2 + x) - (y + 3))",T(7.0),T(9.0),T(((2.0 + 7.0) - (9.0 + 3.0)))),
1643 test_xy<T>(
"((2 - x) - (y - 3))",T(7.0),T(9.0),T(((2.0 - 7.0) - (9.0 - 3.0)))),
1644 test_xy<T>(
"((2 * x) * (3 * y))",T(7.0),T(9.0),T(((2.0 * 7.0) * (3.0 * 9.0)))),
1645 test_xy<T>(
"((x + 2) + (3 + y))",T(7.0),T(9.0),T(((7.0 + 2.0) + (3.0 + 9.0)))),
1646 test_xy<T>(
"((x + 2) - (3 + y))",T(7.0),T(9.0),T(((7.0 + 2.0) - (3.0 + 9.0)))),
1647 test_xy<T>(
"((x - 2) - (3 - y))",T(7.0),T(9.0),T(((7.0 - 2.0) - (3.0 - 9.0)))),
1648 test_xy<T>(
"((2 * x) * (3 * y))",T(7.0),T(9.0),T(((2.0 * 7.0) * (3.0 * 9.0)))),
1649 test_xy<T>(
"((2 * x) / (3 * y))",T(7.0),T(9.0),T(((2.0 * 7.0) / (3.0 * 9.0)))),
1650 test_xy<T>(
"((2 / x) * (3 / y))",T(7.0),T(9.0),T(((2.0 / 7.0) * (3.0 / 9.0)))),
1651 test_xy<T>(
"((2 * x) / (3 / y))",T(7.0),T(9.0),T(((2.0 * 7.0) / (3.0 / 9.0)))),
1652 test_xy<T>(
"((2 / x) / (3 * y))",T(7.0),T(9.0),T(((2.0 / 7.0) / (3.0 * 9.0)))),
1653 test_xy<T>(
"((x * 2) / (y * 3))",T(7.0),T(9.0),T(((7.0 * 2.0) / (9.0 * 3.0)))),
1654 test_xy<T>(
"((x / 2) * (y / 3))",T(7.0),T(9.0),T(((7.0 / 2.0) * (9.0 / 3.0)))),
1655 test_xy<T>(
"((x * 2) / (y / 3))",T(7.0),T(9.0),T(((7.0 * 2.0) / (9.0 / 3.0)))),
1656 test_xy<T>(
"((x / 2) / (y * 3))",T(7.0),T(9.0),T(((7.0 / 2.0) / (9.0 * 3.0)))),
1657 test_xy<T>(
"((2 * x) / (y * 3))",T(7.0),T(9.0),T(((2.0 * 7.0) / (9.0 * 3.0)))),
1658 test_xy<T>(
"((2 / x) * (y / 3))",T(7.0),T(9.0),T(((2.0 / 7.0) * (9.0 / 3.0)))),
1659 test_xy<T>(
"((2 * x) / (y / 3))",T(7.0),T(9.0),T(((2.0 * 7.0) / (9.0 / 3.0)))),
1660 test_xy<T>(
"((2 / x) / (y * 3))",T(7.0),T(9.0),T(((2.0 / 7.0) / (9.0 * 3.0)))),
1661 test_xy<T>(
"((x * 2) / (3 * y))",T(7.0),T(9.0),T(((7.0 * 2.0) / (3.0 * 9.0)))),
1662 test_xy<T>(
"((x / 2) * (3 / y))",T(7.0),T(9.0),T(((7.0 / 2.0) * (3.0 / 9.0)))),
1663 test_xy<T>(
"((x * 2) / (3 / y))",T(7.0),T(9.0),T(((7.0 * 2.0) / (3.0 / 9.0)))),
1664 test_xy<T>(
"((x / 2) / (3 * y))",T(7.0),T(9.0),T(((7.0 / 2.0) / (3.0 * 9.0)))),
1665 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))),
1666 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))),
1667 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))),
1668 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))),
1669 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))),
1670 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))),
1671 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))),
1672 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))),
1673 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))),
1674 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))),
1675 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))),
1676 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))),
1677 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))),
1678 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))),
1679 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))),
1680 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))),
1681 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))))),
1682 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))))),
1683 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))))),
1684 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))))),
1685 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))))),
1686 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))))),
1687 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))))),
1688 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))))),
1689 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))))),
1690 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))))),
1691 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))))),
1692 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))))),
1693 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))))),
1694 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))))),
1695 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))))),
1696 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))))),
1697 test_xy<T>(
"((2 * x) + (2 * y))",T(7.0),T(9.0),T(((2.0 * 7.0) + (2.0 * 9.0)))),
1698 test_xy<T>(
"((2 * x) - (2 * y))",T(7.0),T(9.0),T(((2.0 * 7.0) - (2.0 * 9.0)))),
1699 test_xy<T>(
"((2 * x) + (y * 2))",T(7.0),T(9.0),T(((2.0 * 7.0) + (9.0 * 2.0)))),
1700 test_xy<T>(
"((x * 2) - (y * 2))",T(7.0),T(9.0),T(((7.0 * 2.0) - (9.0 * 2.0)))),
1701 test_xy<T>(
"0 * (abs (x) + acos (y) + asin (x) + atan (y))",T(1.0),T(1.0),T(0.0)),
1702 test_xy<T>(
"0 * (ceil (x) + cos (y) + cosh (x) + exp (y))",T(1.0),T(1.0),T(0.0)),
1703 test_xy<T>(
"0 * (floor(x) + log (y) + log10(x) + round(y))",T(1.0),T(1.0),T(0.0)),
1704 test_xy<T>(
"0 * (sin (x) + sinh (y) + sqrt (x) + tan (y))",T(1.0),T(1.0),T(0.0)),
1705 test_xy<T>(
"0 * (sec (x) + csc (y) + tanh (x) + cot (y))",T(1.0),T(1.0),T(0.0)),
1706 test_xy<T>(
"0 * (erf (x) + erfc (y) + sgn (y) + frac (y))",T(1.0),T(1.0),T(0.0)),
1707 test_xy<T>(
"0 * (log1p(x) + expm1(y) + acosh(x) + asinh(y))",T(1.0),T(1.0),T(0.0)),
1708 test_xy<T>(
"0 * (deg2grad(x) + grad2deg(y) + rad2deg(x) + deg2rad(y))",T(1.0),T(1.0),T(0.0)),
1709 test_xy<T>(
"switch { case (x <= y) : (y - x); default: 1.12345; }",T(1.0),T(2.0),T(1.0)),
1710 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)),
1711 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)),
1712 test_xy<T>(
"switch { case [x <= y] : [y - x]; default: 1.12345; }",T(1.0),T(2.0),T(1.0)),
1713 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)),
1714 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)),
1715 test_xy<T>(
"switch { case {x <= y} : x; default: 1.12345; }",T(1.0),T(2.0),T(1.0)),
1716 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)),
1717 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)),
1718 test_xy<T>(
"switch { case [(x <= y)] : {y - x}; default: 1.12345; }",T(1.0),T(2.0),T(1.0)),
1719 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)),
1720 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)),
1721 test_xy<T>(
"[*]{ case x < y : x + y; case y < x : y - x; }",T(2.0),T(3.0),T(5.0)),
1722 test_xy<T>(
"[*]{ case x > y : x + y; case y > x : y - x; }",T(2.0),T(3.0),T(1.0)),
1723 test_xy<T>(
"[*]{ case x > y : x - y; case y < x : y + x; }",T(2.0),T(3.0),T(0.0)),
1724 test_xy<T>(
"0 ? x : y" ,T(1.0),T(2.0),T( 2.0)),
1725 test_xy<T>(
"1 ? x : y" ,T(1.0),T(2.0),T( 1.0)),
1726 test_xy<T>(
"x ? x : y" ,T(1.0),T(2.0),T( 1.0)),
1727 test_xy<T>(
"x ? x : y" ,T(0.0),T(2.0),T( 2.0)),
1728 test_xy<T>(
"(x + y < 4) ? 1 : 2" ,T(1.0),T(2.0),T( 1.0)),
1729 test_xy<T>(
"(x + y > 4) ? 1 : 2" ,T(1.0),T(2.0),T( 2.0)),
1730 test_xy<T>(
"x < y ? x + y : x - y" ,T(1.0),T(2.0),T( 3.0)),
1731 test_xy<T>(
"x > y ? x + y : x - y" ,T(1.0),T(2.0),T(-1.0)),
1732 test_xy<T>(
"(x + x < y ? 7 : 9) == 7" ,T(1.0),T(3.0),T( 1.0)),
1733 test_xy<T>(
"(x + x < y + y ? 7 : 9) == 7" ,T(1.0),T(3.0),T( 1.0)),
1734 test_xy<T>(
"(x > y + y ? 7 : 9) == 9" ,T(1.0),T(3.0),T( 1.0)),
1735 test_xy<T>(
"(x + x > y ? 7 : 9) == 9" ,T(1.0),T(3.0),T( 1.0)),
1736 test_xy<T>(
"(x + x > y + 3 ? 7 : 9) == 9" ,T(1.0),T(3.0),T( 1.0)),
1737 test_xy<T>(
"(x < (y + y) ? 7 : 9) == 7" ,T(1.0),T(3.0),T( 1.0)),
1738 test_xy<T>(
"((x + x) < y ? 7 : 9) == 7" ,T(1.0),T(3.0),T( 1.0)),
1739 test_xy<T>(
"((x + x) < (y + y) ? 7 : 9) == 7",T(1.0),T(3.0),T( 1.0)),
1740 test_xy<T>(
"(x += 2 ) == 3 " ,T(1),T(3),T(1)),
1741 test_xy<T>(
"(x += 2y) == 7 " ,T(1),T(3),T(1)),
1742 test_xy<T>(
"(x -= 2 ) == -1 " ,T(1),T(3),T(1)),
1743 test_xy<T>(
"(x -= 2y) == -5 " ,T(1),T(3),T(1)),
1744 test_xy<T>(
"(x *= 2 ) == 2 " ,T(1),T(3),T(1)),
1745 test_xy<T>(
"(x *= 2y) == 6 " ,T(1),T(3),T(1)),
1746 test_xy<T>(
"(x /= 2 ) == (1/2)" ,T(1),T(3),T(1)),
1747 test_xy<T>(
"(x /= 2y) == (1/6)" ,T(1),T(3),T(1)),
1748 test_xy<T>(
"for(var i := 0; (i < 10);) { i += 1; }; x;" ,T(1),T(20),T( 1)),
1749 test_xy<T>(
"for(var i := 0; (i < 10) and (i != y); i+=2) { x += i; }; x;" ,T(1),T(20),T(21)),
1750 test_xy<T>(
"for(var i := 0; (i < 10) and (i != y);) { x += i; i+=2; }; x;",T(1),T(20),T(21)),
1751 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)),
1752 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)),
1753 test_xy<T>(
"var a := 2; (0 * a) == 0",T(0),T(0),T(1)),
1754 test_xy<T>(
"var a := 2; (0 / a) == 0",T(0),T(0),T(1)),
1755 test_xy<T>(
"var a := 2; (a * 0) == 0",T(0),T(0),T(1)),
1756 test_xy<T>(
"var a := 2; (a / 1) == a",T(0),T(0),T(1)),
1757 test_xy<T>(
"var a := 2; (0 + a) == a",T(0),T(0),T(1)),
1758 test_xy<T>(
"var a := 2; (a + 0) == a",T(0),T(0),T(1)),
1759 test_xy<T>(
"var a := 2; (1 * a) == a",T(0),T(0),T(1)),
1760 test_xy<T>(
"var a.b := 3; (2 * a.b ) == 6",T(0),T(0),T(1)),
1761 test_xy<T>(
"var aa.bb := 3; (2 * aa.bb ) == 6",T(0),T(0),T(1)),
1762 test_xy<T>(
"var aaa.bbb := 3; (2 * aAa.BbB) == 6",T(0),T(0),T(1)),
1763 test_xy<T>(
"var a1.b2 := 3; (2 * a1.b2 ) == 6",T(0),T(0),T(1))
1766 static const std::size_t test_list_size =
sizeof(test_list) /
sizeof(
test_xy<T>);
1768 const std::size_t
rounds = 60;
1770 for (std::size_t r = 0; r <
rounds; ++r)
1772 bool loop_result =
true;
1774 for (std::size_t i = 0; i < test_list_size; ++i)
1793 printf(
"run_test01() - Error: %s Expression: %s\n",
1794 parser.
error().c_str(),
1797 loop_result =
false;
1803 const T result = expression.
value();
1807 printf(
"run_test01() - Computation Error: Expression: [%s]\tExpected: %19.15f\tResult: %19.15f\n",
1809 static_cast<double>(test.
result),
1810 static_cast<double>(result));
1812 loop_result =
false;
1826 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 ))),
1827 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 ))),
1828 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 ))),
1829 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 ))),
1830 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)))),
1831 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)))),
1832 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)))),
1833 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)))),
1834 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))),
1835 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))),
1836 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))),
1837 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))),
1838 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))),
1839 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))),
1840 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))),
1841 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))),
1842 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))),
1843 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))),
1844 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))),
1845 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))),
1846 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))),
1847 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))),
1848 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))),
1849 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))),
1850 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))))),
1851 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))))),
1852 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))))),
1853 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))))),
1854 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))))),
1855 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))))),
1856 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))))),
1857 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))))),
1858 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))))),
1859 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))))),
1860 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))))),
1861 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))))),
1862 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))))),
1863 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))))),
1864 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))))),
1865 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))))),
1866 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)),
1867 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)),
1868 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)),
1869 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)),
1870 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)),
1871 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)),
1872 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)),
1873 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)),
1874 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)),
1875 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)),
1876 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)),
1877 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))
1880 static const std::size_t test_list_size =
sizeof(test_list) /
sizeof(
test_xyzw<T>);
1882 const std::size_t
rounds = 60;
1884 for (std::size_t r = 0; r <
rounds; ++r)
1886 bool loop_result =
true;
1887 for (std::size_t i = 0; i < test_list_size; ++i)
1892 symbol_table.add_variable(
"x",test.
x);
1893 symbol_table.add_variable(
"y",test.
y);
1894 symbol_table.add_variable(
"z",test.
z);
1895 symbol_table.add_variable(
"w",test.
w);
1905 printf(
"run_test01() - Error: %s Expression: %s\n",
1906 parser.
error().c_str(),
1909 loop_result =
false;
1915 const T result = expression.
value();
1919 printf(
"run_test01() - Computation Error: Expression: [%s]\tExpected: %19.15f\tResult: %19.15f\n",
1921 static_cast<double>(test.
result),
1922 static_cast<double>(result));
1924 loop_result =
false;
1936 const std::string expr_list[] =
1938 "((v[1] + x) == (x + v[1]))",
1939 "((v[0] += x) == x)",
1940 "((v[0] += x + y) == (x + y))",
1941 "((v[0] -= x) == -x)",
1942 "((v[0] -= (x + y)) == -(x + y))",
1943 "((v[1] + v[2]) == (v[3 - 1] + v[2 * 1/2]))",
1944 "(v[v[1]] == v[1])",
1945 "(v[1] += v[1]) == v[1 + 1]",
1946 "((v[i[1]] + x) == (x + v[i[1]]))",
1947 "((v[i[0]] += x) == x)",
1948 "((v[i[0]] += x + y) == (x + y))",
1949 "((v[i[0]] -= x) == -x)",
1950 "((v[i[0]] -= (x + y)) == -(x + y))",
1951 "((v[i[1]] + v[2]) == (v[i[3] - i[1]] + v[i[2] * 1/2]))",
1952 "(v[v[i[1]]] == v[i[1]])",
1953 "(v[i[1]] += v[i[1]]) == v[i[1] + 1]"
1956 const std::size_t expr_list_size =
sizeof(expr_list) /
sizeof(std::string);
1958 const std::size_t
rounds = 60;
1960 for (std::size_t r = 0; r <
rounds; ++r)
1962 bool loop_result =
true;
1964 for (std::size_t i = 0; i < expr_list_size; ++i)
1966 T v[] = { T(0.0), T(1.1), T(2.2), T(3.3), T(4.4), T(5.5) };
1967 T index[] = { T(0) , T(1) , T(2) , T(3) , T(4) , T(5) };
1986 if (!parser.
compile(expr_list[i],expression))
1988 printf(
"run_test01() - Error: %s Expression: %s\n",
1989 parser.
error().c_str(),
1990 expr_list[i].c_str());
1992 loop_result =
false;
1998 const T result = expression.
value();
2002 printf(
"run_test01() - Computation Error: Expression: [%s]\tExpected: %19.15f\tResult: %19.15f\n",
2003 expr_list[i].c_str(),
2004 static_cast<double>(1.0),
2005 static_cast<double>(result));
2007 loop_result =
false;
2017 for (std::size_t r = 0; r <
rounds; ++r)
2019 bool loop_result =
true;
2021 for (std::size_t i = 0; i < expr_list_size; ++i)
2023 T v_[] = { T(0.0), T(1.1), T(2.2), T(3.3), T(4.4), T(5.5) };
2024 T index_[] = { T(0) , T(1) , T(2) , T(3) , T(4) , T(5) };
2046 if (!parser.
compile(expr_list[i],expression))
2048 printf(
"run_test01() - Error: %s Expression: %s\n",
2049 parser.
error().c_str(),
2050 expr_list[i].c_str());
2052 loop_result =
false;
2058 const T result = expression.
value();
2062 printf(
"run_test01() - Computation Error: Expression: [%s]\tExpected: %19.15f\tResult: %19.15f\n",
2063 expr_list[i].c_str(),
2064 static_cast<double>(1.0),
2065 static_cast<double>(result));
2066 loop_result =
false;
3889 std::string i_s =
"A String";
3890 std::string j_s =
"Another String";
3891 std::string ii_s =
"A String";
3892 std::string jj_s =
"Another String";
3896 static inline bool variable(
exprtk::symbol_table<T>& symbol_table,
const std::string& variable_name,
const T& value)
3906 static inline bool string(
exprtk::symbol_table<T>& symbol_table,
const std::string& string_name,
const std::string& str)
3911 return (str_node->
ref() == str);
3918 static const std::size_t
rounds = 10;
3922 for (std::size_t r = 0; r <
rounds; ++r)
3931 printf(
"run_test10() - Symbol 'x' does not exist!\n");
3936 printf(
"run_test10() - Symbol 'y' does not exist!\n");
3941 printf(
"run_test10() - Symbol 'xx' does not exist!\n");
3946 printf(
"run_test10() - Symbol 'yy' does not exist!\n");
3949 else if (!test::variable(symbol_table,
"x", x))
3951 printf(
"run_test10() - Symbol 'x' value failure!\n");
3954 else if (!test::variable(symbol_table,
"y", y))
3956 printf(
"run_test10() - Symbol 'y' value failure!\n");
3959 else if (!test::variable(symbol_table,
"xx", xx))
3961 printf(
"run_test10() - Symbol 'xx' value failure!\n");
3964 else if (!test::variable(symbol_table,
"yy", yy))
3966 printf(
"run_test10() - Symbol 'yy' value failure!\n");
3972 printf(
"run_test10() - Failed to remove symbol 'x'!\n");
3977 printf(
"run_test10() - Failed to remove symbol 'y'!\n");
3982 printf(
"run_test10() - Failed to remove symbol 'xx'!\n");
3987 printf(
"run_test10() - Failed to remove symbol 'yy'!\n");
3992 for (std::size_t r = 0; r <
rounds; ++r)
4001 printf(
"run_test10() - function 'f' does not exist!\n");
4006 printf(
"run_test10() - function 'f1' does not exist!\n");
4012 printf(
"run_test10() - Failed to remove function 'f'!\n");
4017 printf(
"run_test10() - Failed to remove function 'f1'!\n");
4022 for (std::size_t r = 0; r <
rounds; ++r)
4032 printf(
"run_test10() - String 'i' does not exist!\n");
4037 printf(
"run_test10() - String 'j' does not exist!\n");
4042 printf(
"run_test10() - String 'ii' does not exist!\n");
4047 printf(
"run_test10() - String 'jj' does not exist!\n");
4050 else if (!test::string(symbol_table,
"i", i_s))
4052 printf(
"run_test10() - String 'i' value failure!\n");
4055 else if (!test::string(symbol_table,
"j", j_s))
4057 printf(
"run_test10() - String 'j' value failure!\n");
4060 else if (!test::string(symbol_table,
"ii", ii_s))
4062 printf(
"run_test10() - String 'ii' value failure!\n");
4065 else if (!test::string(symbol_table,
"jj", jj_s))
4067 printf(
"run_test10() - String 'jj' value failure!\n");
4072 printf(
"run_test10() - Failed to remove String 'i'!\n");
4077 printf(
"run_test10() - Failed to remove String 'j'!\n");
4082 printf(
"run_test10() - Failed to remove String 'ii'!\n");
4087 printf(
"run_test10() - Failed to remove String 'jj'!\n");
4092 for (std::size_t r = 0; r <
rounds; ++r)
4099 std::vector<std::string> expected_var_list;
4101 expected_var_list.push_back(
"x" );
4102 expected_var_list.push_back(
"y" );
4103 expected_var_list.push_back(
"xx");
4104 expected_var_list.push_back(
"yy");
4106 std::deque<std::pair<std::string, T> > variable_list;
4110 if (variable_list.size() != expected_var_list.size())
4112 printf(
"run_test10() - Failed to get variable list (1)\n");
4116 std::size_t found_count = 0;
4118 for (std::size_t i = 0; i < variable_list.size(); ++i)
4120 for (std::size_t j = 0; j < expected_var_list.size(); ++j)
4122 if (variable_list[i].first == expected_var_list[j])
4130 if (found_count != expected_var_list.size())
4132 printf(
"run_test10() - Failed to get variable list (2)\n");
4137 for (std::size_t r = 0; r <
rounds; ++r)
4144 std::vector<std::string> expected_var_list;
4146 expected_var_list.push_back(
"x" );
4147 expected_var_list.push_back(
"y" );
4148 expected_var_list.push_back(
"xx");
4149 expected_var_list.push_back(
"yy");
4151 std::deque<std::string> variable_list;
4155 if (variable_list.size() != expected_var_list.size())
4157 printf(
"run_test10() - Failed to get variable list (3)\n");
4161 std::size_t found_count = 0;
4163 for (std::size_t i = 0; i < variable_list.size(); ++i)
4165 for (std::size_t j = 0; j < expected_var_list.size(); ++j)
4167 if (variable_list[i] == expected_var_list[j])
4175 if (found_count != expected_var_list.size())
4177 printf(
"run_test10() - Failed to get variable list (4)\n");
4182 for (std::size_t r = 0; r <
rounds; ++r)
4189 std::vector<std::string> expected_var_list;
4191 expected_var_list.push_back(
"i" );
4192 expected_var_list.push_back(
"j" );
4193 expected_var_list.push_back(
"ii");
4194 expected_var_list.push_back(
"jj");
4196 std::deque<std::pair<std::string, std::string> > stringvar_list;
4200 if (stringvar_list.size() != expected_var_list.size())
4202 printf(
"run_test10() - Failed to get stringvar list (1)\n");
4206 std::size_t found_count = 0;
4208 for (std::size_t i = 0; i < stringvar_list.size(); ++i)
4210 for (std::size_t j = 0; j < expected_var_list.size(); ++j)
4212 if (stringvar_list[i].first == expected_var_list[j])
4220 if (found_count != expected_var_list.size())
4222 printf(
"run_test10() - Failed to get stringvar list (2)\n");
4227 for (std::size_t r = 0; r <
rounds; ++r)
4234 std::vector<std::string> expected_var_list;
4236 expected_var_list.push_back(
"i" );
4237 expected_var_list.push_back(
"j" );
4238 expected_var_list.push_back(
"ii");
4239 expected_var_list.push_back(
"jj");
4241 std::deque<std::string> stringvar_list;
4245 if (stringvar_list.size() != expected_var_list.size())
4247 printf(
"run_test10() - Failed to get stringvar list (3.0)\n");
4253 printf(
"run_test10() - Failed to get stringvar list (3.1)\n");
4257 std::size_t found_count = 0;
4259 for (std::size_t i = 0; i < stringvar_list.size(); ++i)
4261 for (std::size_t j = 0; j < expected_var_list.size(); ++j)
4263 if (stringvar_list[i] == expected_var_list[j])
4271 if (found_count != expected_var_list.size())
4273 printf(
"run_test10() - Failed to get stringvar list (4)\n");
4284 std::string expression_string =
"(x0 + y0) / z0";
4286 static const std::size_t
rounds = 100;
4288 for (std::size_t i = 0; i <
rounds; ++i)
4290 expression_t expression0;
4302 expression0.register_symbol_table(st0);
4307 if (!parser.
compile(expression_string,expression0))
4309 printf(
"run_test10() - Error: %s Expression: %s\n",
4310 parser.
error().c_str(),
4311 expression_string.c_str());
4318 expression_t expression1;
4320 expression1.register_symbol_table(st1);
4325 if (!parser.
compile(expression_string,expression1))
4327 printf(
"run_test10() - Error: %s Expression: %s\n",
4328 parser.
error().c_str(),
4329 expression_string.c_str());
4348 std::string e =
"string";
4358 expression_t expression;
4359 expression.register_symbol_table(symbol_table);
4361 std::string expression_string =
"(E == '1234') and (sin(a) + C) / b";
4364 typedef typename parser_t::dependent_entity_collector::symbol_t symbol_t;
4366 std::deque<symbol_t> symbol_list;
4372 parser.dec().collect_functions() =
true;
4374 if (!parser.compile(expression_string,expression))
4376 printf(
"run_test10() - Error: %s Expression: %s\n",
4377 parser.error().c_str(),
4378 expression_string.c_str());
4383 parser.dec().symbols(symbol_list);
4386 std::deque<symbol_t> expected_symbol_list;
4388 expected_symbol_list.push_back(symbol_t(
"a" ,parser_t::e_st_variable));
4389 expected_symbol_list.push_back(symbol_t(
"b" ,parser_t::e_st_variable));
4390 expected_symbol_list.push_back(symbol_t(
"c" ,parser_t::e_st_variable));
4391 expected_symbol_list.push_back(symbol_t(
"e" ,parser_t::e_st_string ));
4392 expected_symbol_list.push_back(symbol_t(
"sin",parser_t::e_st_function));
4394 bool result = (symbol_list.size() == expected_symbol_list.size()) &&
4395 std::equal(symbol_list.begin(),
4397 expected_symbol_list.begin());
4400 printf(
"run_test10() - Failed variable list comparison.(5)\n");
4411 std::string e =
"string";
4421 expression_t expression;
4422 expression.register_symbol_table(symbol_table);
4424 const std::string expression_string =
4431 typedef typename parser_t::dependent_entity_collector::symbol_t symbol_t;
4433 std::deque<symbol_t> variable_list;
4440 if (!parser.compile(expression_string,expression))
4442 printf(
"run_test10() - Error: %s Expression: %s\n",
4443 parser.error().c_str(),
4444 expression_string.c_str());
4449 parser.dec().assignment_symbols(variable_list);
4452 std::deque<symbol_t> expected_assignment_list;
4454 expected_assignment_list.push_back(symbol_t(
"a",parser_t::e_st_variable));
4455 expected_assignment_list.push_back(symbol_t(
"b",parser_t::e_st_variable));
4456 expected_assignment_list.push_back(symbol_t(
"c",parser_t::e_st_variable));
4457 expected_assignment_list.push_back(symbol_t(
"e",parser_t::e_st_string ));
4459 bool result = (variable_list.size() == expected_assignment_list.size()) &&
4460 std::equal(variable_list.begin(),
4461 variable_list.end(),
4462 expected_assignment_list.begin());
4465 printf(
"run_test10() - Failed variable list comparison.(6)\n");
4474 if (symbol_table0 == symbol_table1)
4476 printf(
"run_test10() - Error symbol_table0 and symbol_table1 are equal\n");
4480 symbol_table0 = symbol_table1;
4481 symbol_table1 = symbol_table0;
4483 if (!(symbol_table0 == symbol_table1))
4485 printf(
"run_test10() - Error symbol_table0 and symbol_table1 are not equal\n");
4496 std::string e =
"a string";
4500 expression_t expression;
4502 for (std::size_t i = 0; i < 10000; ++i)
4504 symbol_table0.
clear();
4505 symbol_table1.
clear();
4521 expression.register_symbol_table(symbol_table0);
4522 expression.register_symbol_table(symbol_table1);
4527 const std::string expression =
4528 "for (var i := 0; i < min(x[],y[],z[]); i += 1)"
4529 "{ z[i] := 3sin(x[i]) + 2log(y[i]); }";
4531 std::vector<std::string> var_symbol_list;
4532 std::vector<std::string> func_symbol_list;
4536 printf(
"run_test10() - Failed to collect variables.\n");
4542 printf(
"run_test10() - Failed to collect functions.\n");
4546 std::sort(var_symbol_list .begin(), var_symbol_list .end());
4547 std::sort(func_symbol_list.begin(), func_symbol_list.end());
4549 std::vector<std::string> expected_var_symbol_list;
4550 std::vector<std::string> expected_func_symbol_list;
4552 expected_var_symbol_list.push_back(
"i");
4553 expected_var_symbol_list.push_back(
"x");
4554 expected_var_symbol_list.push_back(
"y");
4555 expected_var_symbol_list.push_back(
"z");
4557 expected_func_symbol_list.push_back(
"log");
4558 expected_func_symbol_list.push_back(
"min");
4559 expected_func_symbol_list.push_back(
"sin");
4561 const bool var_result = (var_symbol_list.size() == expected_var_symbol_list.size()) &&
4562 std::equal(var_symbol_list.begin(),
4563 var_symbol_list.end(),
4564 expected_var_symbol_list.begin());
4567 printf(
"run_test10() - Failed collected variable comparison between received and expected variables\n");
4571 const bool func_result = (func_symbol_list.size() == expected_func_symbol_list.size()) &&
4572 std::equal(func_symbol_list.begin(),
4573 func_symbol_list.end(),
4574 expected_func_symbol_list.begin());
4577 printf(
"run_test10() - Failed collected functions comparison between received and expected functions\n");
4587 "var x:= 1; x - -1 == 2",
4588 "var x:= 1; x --1 == 2",
4589 "var x:= 1; x-- 1 == 2",
4590 "var x:= 1; x--1 == 2",
4591 "var x:= 1; x -- -1== 0",
4592 "var x:= 1; x + -1 == 0",
4593 "var x:= 1; x +-1 == 0",
4594 "var x:= 1; x+- 1 == 0",
4595 "var x:= 1; x+-1 == 0",
4596 "var x:= 1; x +- -1== 2",
4597 "var x:= 1; x + +1 == 2",
4598 "var x:= 1; x ++1 == 2",
4599 "var x:= 1; 1 - -x == 2",
4600 "var x:= 1; 1 --x == 2",
4601 "var x:= 1; 1-- x == 2",
4602 "var x:= 1; 1--x == 2",
4603 "var x:= 1; 1 -- -x== 0",
4604 "var x:= 1; 1 + -x == 0",
4605 "var x:= 1; 1 +-x == 0",
4606 "var x:= 1; 1+- x == 0",
4607 "var x:= 1; 1+-x == 0",
4608 "var x:= 1; 1 +- -x== 2",
4609 "var x:= 1; 1 + +x == 2",
4610 "var x:= 1; 1 ++x == 2",
4611 "var x:= 1; (x - -1 + 1) == 3",
4612 "var x:= 1; (x --1 + 1) == 3",
4613 "var x:= 1; (x-- 1 + 1) == 3",
4614 "var x:= 1; (x--1 + 1) == 3",
4615 "var x:= 1; (x -- -1 + 1) == 1",
4616 "var x:= 1; (x + -1 + 1) == 1",
4617 "var x:= 1; (x +-1 + 1) == 1",
4618 "var x:= 1; (x+- 1 + 1) == 1",
4619 "var x:= 1; (x+-1 + 1) == 1",
4620 "var x:= 1; (x +- -1 + 1) == 3",
4621 "var x:= 1; (x + +1 + 1) == 3",
4622 "var x:= 1; (x ++1 + 1) == 3",
4623 "var x:= 1; (1 - -x + 1) == 3",
4624 "var x:= 1; (1 --x + 1) == 3",
4625 "var x:= 1; (1-- x + 1) == 3",
4626 "var x:= 1; (1--x + 1) == 3",
4627 "var x:= 1; (1 -- -x + 1) == 1",
4628 "var x:= 1; (1 + -x + 1) == 1",
4629 "var x:= 1; (1 +-x + 1) == 1",
4630 "var x:= 1; (1+- x + 1) == 1",
4631 "var x:= 1; (1+-x + 1) == 1",
4632 "var x:= 1; (1 +- -x + 1) == 3",
4633 "var x:= 1; (1 + +x + 1) == 3",
4634 "var x:= 1; (1 ++x + 1) == 3",
4635 "var x:= 1; (x - -1 - 1) == 1",
4636 "var x:= 1; (x --1 - 1) == 1",
4637 "var x:= 1; (x-- 1 - 1) == 1",
4638 "var x:= 1; (x--1 - 1) == 1",
4639 "var x:= 1; (x -- -1 - 1) == -1",
4640 "var x:= 1; (x + -1 - 1) == -1",
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) == 1",
4647 "var x:= 1; (1 - -x - 1) == 1",
4648 "var x:= 1; (1 --x - 1) == 1",
4649 "var x:= 1; (1-- x - 1) == 1",
4650 "var x:= 1; (1--x - 1) == 1",
4651 "var x:= 1; (1 -- -x - 1) == -1",
4652 "var x:= 1; (1 + -x - 1) == -1",
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) == 1",
4659 "var x := 1; var y := 2; 1",
4660 "var x := 1; var y := 2; x",
4661 "var x:=6; var y:=4; x + -3 == 3",
4662 "var x:=6; var y:=4; x - -3 == 9",
4663 "var x:=6; var y:=4; x * -3 == -18",
4664 "var x:=6; var y:=4; x / -3 == -2",
4665 "var x:=6; var y:=4; -x + -3 == -9",
4666 "var x:=6; var y:=4; -x - -3 == -3",
4667 "var x:=6; var y:=4; -x * -3 == 18",
4668 "var x:=6; var y:=4; -x / -3 == 2",
4669 "var x:=6; var y:=4; -3 + -x == -9",
4670 "var x:=6; var y:=4; -3 - -x == 3",
4671 "var x:=6; var y:=4; -3 * -x == 18",
4672 "var x:=6; var y:=4; -3 / -x == 0.5",
4673 "var x:=6; var y:=4; 3 + -x == -3",
4674 "var x:=6; var y:=4; 3 - -x == 9",
4675 "var x:=6; var y:=4; 3 * -x == -18",
4676 "var x:=6; var y:=4; 3 / -x == -0.5",
4677 "var x := 3; var y := 6; x + -y == -3",
4678 "var x := 3; var y := 6; x - -y == 9",
4679 "var x := 3; var y := 6; -x + -y == -9",
4680 "var x := 3; var y := 6; -x - -y == 3",
4681 "var x := 3; var y := 6; -x * -y == 18",
4682 "var x := 6; var y := 3; -x / -y == 2",
4683 "var x := 3; var y := 6; -(-x * -y) == -18",
4684 "var x := 6; var y := 3; -(-x / -y) == -2",
4685 "var x:=1; 2+(3+abs(x)) == 6 ",
4686 "var x:=1; (3+abs(x))+2 == 6 ",
4687 "var x:=1; 2+(abs(x)+3) == 6 ",
4688 "var x:=1; (abs(x)+3)+2 == 6 ",
4689 "var x:=1; 2+(3-abs(x)) == 4 ",
4690 "var x:=1; (3-abs(x))+2 == 4 ",
4691 "var x:=1; 2+(abs(x)-3) == 0 ",
4692 "var x:=1; (abs(x)-3)+2 == 0 ",
4693 "var x:=1; 2-(3+abs(x)) == -2 ",
4694 "var x:=1; (3+abs(x))-2 == 2 ",
4695 "var x:=1; 2-(abs(x)+3) == -2 ",
4696 "var x:=1; (abs(x)+3)-2 == 2 ",
4697 "var x:=1; 2*(3*abs(x)) == 6 ",
4698 "var x:=1; (3*abs(x))*2 == 6 ",
4699 "var x:=1; 2*(abs(x)*3) == 6 ",
4700 "var x:=1; (abs(x)*3)*2 == 6 ",
4701 "var x:=1; 2*(3/abs(x)) == 6 ",
4702 "var x:=1; (3/abs(x))*2 == 6 ",
4703 "var x:=1; 2*(abs(x)/3) == (2/3)",
4704 "var x:=1; (abs(x)/3)*2 == (2/3)",
4705 "var x:=1; 2/(3*abs(x)) == (2/3)",
4706 "var x:=1; (3*abs(x))/2 == (3/2)",
4707 "var x:=1; 2/(abs(x)*3) == (2/3)",
4708 "var x:=1; (abs(x)*3)/2 == (3/2)",
4709 "var x:=1; 2/(3/abs(x)) == (2/3)",
4710 "var x:=1; (3/abs(x))/2 == (3/2)",
4711 "var x:=1; 2/(abs(x)/3) == 6 ",
4712 "var x:=1; (abs(x)/3)/2 == (1/6)",
4713 "var x:=3; var y:=6; -(-x)*-(-y) == 18",
4714 "var x:=3; var y:=6; -(-x)*-(-(-y)) == -18",
4715 "var x:=3; var y:=6; -(-(-x))*-(-y) == -18",
4716 "var x:=3; var y:=6; -(-(-x))*-(-(-y)) == 18",
4717 "var x:=3; var y:=6; -(-(x+y))*-(-(y+x)) == 81",
4718 "var x:=3; var y:=6; -(-(-(x+y)))*-(-(y+x)) == -81",
4719 "var x:=3; var y:=6; -(-(x+y))*-(-(-(y+x))) == -81",
4720 "var x:=3; var y:=6; -(-(-(x+y)))*-(-(-(y+x))) == 81",
4721 "var x:= 2; var y := 3; (-abs(x)+-abs(y)) == -5 ",
4722 "var x:= 2; var y := 3; (-abs(x)--abs(y)) == 1 ",
4723 "var x:= 2; var y := 3; (-abs(x)*-abs(y)) == 6 ",
4724 "var x:= 2; var y := 3; (-abs(x)/-abs(y)) == (2/3) ",
4725 "var x:= 2; var y := 3; (-abs(x)+abs(y)) == 1 ",
4726 "var x:= 2; var y := 3; (-abs(x)-abs(y)) == -5 ",
4727 "var x:= 2; var y := 3; (-abs(x)*abs(y)) == -6 ",
4728 "var x:= 2; var y := 3; (-abs(x)/abs(y)) == -(2/3) ",
4729 "var x:= 2; var y := 3; (abs(x)+-abs(y)) == -1 ",
4730 "var x:= 2; var y := 3; (abs(x)--abs(y)) == 5 ",
4731 "var x:= 2; var y := 3; (abs(x)*-abs(y)) == -6 ",
4732 "var x:= 2; var y := 3; (abs(x)/-abs(y)) == -(2/3) ",
4733 "var x:= 2; var y := 3; (-abs(x + 0)+-abs(y - 0)) == -5 ",
4734 "var x:= 2; var y := 3; (-abs(x + 0)--abs(y - 0)) == 1 ",
4735 "var x:= 2; var y := 3; (-abs(x + 0)*-abs(y - 0)) == 6 ",
4736 "var x:= 2; var y := 3; (-abs(x + 0)/-abs(y - 0)) == (2/3) ",
4737 "var x:= 2; var y := 3; (-abs(x + 0)+abs(y - 0)) == 1 ",
4738 "var x:= 2; var y := 3; (-abs(x + 0)-abs(y - 0)) == -5 ",
4739 "var x:= 2; var y := 3; (-abs(x + 0)*abs(y - 0)) == -6 ",
4740 "var x:= 2; var y := 3; (-abs(x + 0)/abs(y - 0)) == -(2/3) ",
4741 "var x:= 2; var y := 3; (abs(x + 0)+-abs(y - 0)) == -1 ",
4742 "var x:= 2; var y := 3; (abs(x + 0)--abs(y - 0)) == 5 ",
4743 "var x:= 2; var y := 3; (abs(x + 0)*-abs(y - 0)) == -6 ",
4744 "var x:= 2; var y := 3; (abs(x + 0)/-abs(y - 0)) == -(2/3) ",
4745 "var x := 1; var y := 2; swap(x,y); (x == 2) and (y == 1)",
4746 "var x := 1; var y := 2; x <=> y ; (x == 2) and (y == 1)",
4747 "var x := 'abc'; x == 'abc' ",
4748 "var x := 'abc'; var y := '123'; x != y ",
4749 "var x := 'abc'; var y := x + '123'; y == 'abc123' ",
4750 "var x := 'abc'; var y := '123' + x; y == '123abc' ",
4751 "~{var x := '123'; x[]} + ~{var x := '1234'; x[]} == 7",
4752 "~{var x := '123'; x[]} + ~{~{var x := '1234'; x[]}} == 7",
4753 "~{~{var x := '123'; x[]}} + ~{var x := '1234'; x[]} == 7",
4754 "~{var x := '123'; x[]} + ~{var x := 4} == 7",
4755 "~{var x := 3} + ~{var x := '1234'; x[]} == 7",
4756 "~{var x := '123'; x[]} + ~{~{var x := 4}} == 7",
4757 "~{~{var x := 3}} + ~{var x := '1234'; x[]} == 7",
4758 "var v[2] := {1,2}; swap(v[0],v[1]); (v[0] == 2) and (v[1] == 1)",
4759 "var v[2] := {1,2}; v[0] <=> v[1] ; (v[0] == 2) and (v[1] == 1)",
4760 "var x := 1; var y := 2; ~(swap(x,y),(x == 2) and (y == 1))",
4761 "var x := 1; var y := 2; ~(x <=> y , (x == 2) and (y == 1))",
4762 "var v[2] := {1,2}; ~(swap(v[0],v[1]), (v[0] == 2) and (v[1] == 1))",
4763 "var v[2] := {1,2}; ~(v[0] <=> v[1] , (v[0] == 2) and (v[1] == 1))",
4764 "var v[2] := {1,2}; swap(v[zero],v[one]); (v[zero] == 2) and (v[one] == 1)",
4765 "var v[2] := {1,2}; v[zero] <=> v[one] ; (v[zero] == 2) and (v[one] == 1)",
4766 "var v[2] := {1,2}; ~(swap(v[zero],v[one]), (v[zero] == 2) and (v[one] == 1))",
4767 "var v[2] := {1,2}; ~(v[zero] <=> v[one] , (v[zero] == 2) and (v[one] == 1))",
4768 "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)",
4769 "var v[2] := {1,2}; v[2 * zero] <=> v[(2*one)/(1+1)] ; (v[2 * zero] == 2) and (v[(2 * one) / (1 + 1)] == 1)",
4770 "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))",
4771 "var v[2] := {1,2}; ~(v[2 * zero] <=> v[(2 * one) / (1 + 1)] , (v[2 * zero] == 2) and (v[(2 * one) / (1 + 1)] == 1))",
4772 "var x := 1; var y := 2; var v[2] := {3,4}; swap(x,v[0]); swap(v[1],y); (x == 3) and (y == 4)",
4773 "var x := 1; var y := 2; var v[2] := {3,4}; x <=> v[0]; v[1] <=> y; (x == 3) and (y == 4)",
4774 "var x := 1; var y := 2; var v[2] := {3,4}; swap(x,v[zero]); swap(v[one],y); (x == 3) and (y == 4)",
4775 "var x := 1; var y := 2; var v[2] := {3,4}; x <=> v[zero]; v[one] <=> y; (x == 3) and (y == 4)",
4776 "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)",
4777 "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)",
4778 "~{ var x := 1 } + ~{ var x := 2 } == 3",
4779 "(~{ var x := 1 } + ~{ var x := 2 }) == (~{ var x := 2 } + ~{ var x := 1 })",
4780 "(~{ var x := 1 } + ~{ var x := 2 } + ~{~{ var x := 1 } + ~{ var x := 2 }}) == 6",
4781 "(~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{~{ var x[1] := [1] } + ~{ var x[1] := [2] }}) == 6",
4782 "(~{ var x := [1] } + ~{ var x[1] := [2] } + ~{~{ var x[1] := [1] } + ~{ var x[1] := [2] }}) == 6",
4783 "(~{ var x[1] := [1] } + ~{ var x := [2] } + ~{~{ var x[1] := [1] } + ~{ var x[1] := [2] }}) == 6",
4784 "(~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{~{ var x := [1] } + ~{ var x[1] := [2] }}) == 6",
4785 "(~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{~{ var x[1] := [1] } + ~{ var x := [2] }}) == 6",
4786 "(~{~{ var x[1] := [1] } + ~{ var x[1] := [2] }} + ~{ var x[1] := [1] } + ~{ var x[1] := [2] }) == 6",
4787 "(~{~{ var x := [1] } + ~{ var x[1] := [2] }} + ~{ var x[1] := [1] } + ~{ var x[1] := [2] }) == 6",
4788 "(~{~{ var x[1] := [1] } + ~{ var x := [2] }} + ~{ var x[1] := [1] } + ~{ var x[1] := [2] }) == 6",
4789 "(~{~{ var x[1] := [1] } + ~{ var x[1] := [2] }} + ~{ var x := [1] } + ~{ var x[1] := [2] }) == 6",
4790 "(~{~{ var x[1] := [1] } + ~{ var x[1] := [2] }} + ~{ var x[1] := [1] } + ~{ var x := [2] }) == 6",
4791 "(~{~{ var x[1] := [1] }} + ~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{{ var x[1] := [2] }}) == 6",
4792 "(~{~{ var x := [1] }} + ~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{{ var x[1] := [2] }}) == 6",
4793 "(~{~{ var x[1] := [1] }} + ~{ var x := [1] } + ~{ var x[1] := [2] } + ~{{ var x[1] := [2] }}) == 6",
4794 "(~{~{ var x[1] := [1] }} + ~{ var x[1] := [1] } + ~{ var x := [2] } + ~{{ var x[1] := [2] }}) == 6",
4795 "(~{~{ var x[1] := [1] }} + ~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{{ var x := [2] }}) == 6",
4796 "(~{~{~{var x[1] := [1]}}} + ~{~{var x[1] := [2]}} + ~{var x[1] := [3]}) == 6",
4797 "(~{var x[1] := [1]} + ~{~{var x[1] := [2]}} + ~{~{~{var x[1] := [3]}}}) == 6",
4798 "(~{ var x[3] := [1] } + ~{ var x[6] := {6,5,4,3,2,1}}) == 7",
4799 "(~{ var x[6] := {6,5,4,3,2,1} } + ~{ var x := 1 }) == 7",
4800 "(~{ var x := 1 } + ~{ var x[6] := {6,5,4,3,2,1} }) == 7",
4801 "var x[3] := {}; (x[0] == 0) and (x[1] == 0) and (x[2] == 0)",
4802 "var x[3] := {1,2}; (x[0] == 1) and (x[1] == 2) and (x[2] == 0)",
4803 "var x[3] := {1,2,3}; (x[0] == 1) and (x[1] == 2) and (x[2] == 3)",
4804 "var x[3] := [1]; (x[0] == 1) and (x[1] == 1) and (x[2] == 1)",
4805 "var v[3] := [1]; v += 1; (v[0] == v[1]) and (v[0] == v[2]) and (v[0] == 2)",
4806 "var v[3] := [1]; v -= 1; (v[0] == v[1]) and (v[0] == v[2]) and (v[0] == 0)",
4807 "var v[3] := [1]; v *= 2; (v[0] == v[1]) and (v[0] == v[2]) and (v[0] == 2)",
4808 "var v[3] := [3]; v /= 3; (v[0] == v[1]) and (v[0] == v[2]) and (v[0] == 1)",
4809 "var v[3] := {1,2, 3}; v += 1; (v[0] == 2) and (v[1] == 3) and (v[2] == 4)",
4810 "var v[3] := {1,2, 3}; v -= 1; (v[0] == 0) and (v[1] == 1) and (v[2] == 2)",
4811 "var v[3] := {1,2, 3}; v *= 2; (v[0] == 2) and (v[1] == 4) and (v[2] == 6)",
4812 "var v[3] := {3,9,15}; v /= 3; (v[0] == 1) and (v[1] == 3) and (v[2] == 5)",
4813 "var v0[3] := [1]; var v1[3] := [1]; v0 += v1; (v0[0] == v0[1]) and (v0[0] == v0[2]) and (v0[0] == 2)",
4814 "var v0[3] := [1]; var v1[3] := [1]; v0 -= v1; (v0[0] == v0[1]) and (v0[0] == v0[2]) and (v0[0] == 0)",
4815 "var v0[3] := [1]; var v1[3] := [2]; v0 *= v1; (v0[0] == v0[1]) and (v0[0] == v0[2]) and (v0[0] == 2)",
4816 "var v0[3] := [3]; var v1[3] := [3]; v0 /= v1; (v0[0] == v0[1]) and (v0[0] == v0[2]) and (v0[0] == 1)",
4817 "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)",
4818 "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)",
4819 "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)",
4820 "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)",
4821 "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])",
4822 "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])",
4823 "var x[3] := {}; var y[2] := {1,2}; x := y; (x[0] == y[0]) and (x[1] == y[1]) and (x[2] == 0)",
4824 "var x[3] := {}; var y[1] := {1}; x := y; (x[0] == y[0]) and (x[1] == 0) and (x[2] == 0)",
4825 "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])",
4826 "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])",
4827 "var x[3] := {}; var y[2] := {1,2}; x := (y+=1); (x[0] == y[0]) and (x[1] == y[1]) and (x[2] == 0)",
4828 "var x[3] := {}; var y[1] := {1}; x := (y+=1); (x[0] == y[0]) and (x[1] == 0) and (x[2] == 0)",
4829 "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])",
4830 "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])",
4831 "var x[3] := {}; var y[2] := {1,2}; x += (y+=1); (x[0] == y[0]) ",
4832 "var x[3] := {}; var y[2] := {1,2}; x += (y+=1); (x[0] == y[0]) and (x[1] == y[1]) ",
4833 "var x[3] := {}; var y[2] := {1,2}; x += (y+=1); (x[0] == y[0]) and (x[1] == y[1]) and (x[2] == 0)",
4834 "var x[3] := {}; var y[1] := {1}; x += (y+=1); (x[0] == y[0]) ",
4835 "var x[3] := {}; var y[1] := {1}; x += (y+=1); (x[0] == y[0]) and (x[1] == 0) ",
4836 "var x[3] := {}; var y[1] := {1}; x += (y+=1); (x[0] == y[0]) and (x[1] == 0) and (x[2] == 0)",
4837 "var x[3] := [9]; var y[4] := {1,2,3,4}; x <=> y; (x[0] == 1) and (x[1] == 2) and (x[2] == 3)",
4838 "var x[3] := [9]; var y[3] := {1,2,3}; x <=> y; (x[0] == 1) and (x[1] == 2) and (x[2] == 3)",
4839 "var x[3] := [9]; var y[2] := {1,2}; x <=> y; (x[0] == 1) and (x[1] == 2) and (x[2] == 9)",
4840 "var x[3] := [9]; var y[1] := {1}; x <=> y; (x[0] == 1) and (x[1] == 9) and (x[2] == 9)",
4841 "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)",
4842 "var x[3] := [9]; var y[3] := {1,2,3}; x <=> (y += 1); (x[0] == 2) and (x[1] == 3) and (x[2] == 4)",
4843 "var x[3] := [9]; var y[2] := {1,2}; x <=> (y += 1); (x[0] == 2) and (x[1] == 3) and (x[2] == 9)",
4844 "var x[3] := [9]; var y[1] := {1}; x <=> (y += 1); (x[0] == 2) and (x[1] == 9) and (x[2] == 9)",
4845 "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)",
4846 "var x[3] := [8]; var y[3] := {1,2,3}; (x += 1) <=> y; (x[0] == 1) and (x[1] == 2) and (x[2] == 3)",
4847 "var x[3] := [8]; var y[2] := {1,2}; (x += 1) <=> y; (x[0] == 1) and (x[1] == 2) and (x[2] == 9)",
4848 "var x[3] := [8]; var y[1] := {1}; (x += 1) <=> y; (x[0] == 1) and (x[1] == 9) and (x[2] == 9)",
4849 "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)",
4850 "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)",
4851 "var x[3] := [8]; var y[2] := {1,2}; (x += 1) <=> (y += 1); (x[0] == 2) and (x[1] == 3) and (x[2] == 9)",
4852 "var x[3] := [8]; var y[1] := {1}; (x += 1) <=> (y += 1); (x[0] == 2) and (x[1] == 9) and (x[2] == 9)",
4853 "var x[3] := [0]; var y[4] := {1,2,3,4}; X < y",
4854 "var x[3] := [0]; var y[3] := {1,2,3}; x < Y",
4855 "var x[3] := [0]; var y[2] := {1,2}; X < y",
4856 "var x[3] := [0]; var y[1] := {1}; x < Y",
4857 "var x[3] := [0]; var y[4] := {1,2,3,4}; x <= y",
4858 "var x[3] := [0]; var y[3] := {1,2,3}; x <= y",
4859 "var x[3] := [0]; var y[2] := {1,2}; x <= y",
4860 "var x[3] := [0]; var y[1] := {1}; x <= y",
4861 "var x[3] := [5]; var y[4] := {1,2,3,4}; x > y",
4862 "var x[3] := [5]; var y[3] := {1,2,3}; x > y",
4863 "var x[3] := [5]; var y[2] := {1,2}; x > y",
4864 "var x[3] := [5]; var y[1] := {1}; x > y",
4865 "var x[3] := [5]; var y[4] := {1,2,3,4}; x >= y",
4866 "var x[3] := [5]; var y[3] := {1,2,3}; x >= y",
4867 "var x[3] := [5]; var y[2] := {1,2}; x >= y",
4868 "var x[3] := [5]; var y[1] := {1}; x >= y",
4869 "var x[3] := [1]; var y[4] := [1]; x == y",
4870 "var x[3] := [1]; var y[3] := [1]; x == y",
4871 "var x[3] := [1]; var y[2] := [1]; x == y",
4872 "var x[3] := [1]; var y[1] := [1]; x == y",
4873 "var x[3] := [1]; var y[4] := [2]; x != y",
4874 "var x[3] := [1]; var y[3] := [2]; x != y",
4875 "var x[3] := [1]; var y[2] := [2]; x != y",
4876 "var x[3] := [1]; var y[1] := [2]; x != y",
4877 "var x[3] := [0]; var y[4] := {5,6,7,8}; (x += 1) < y",
4878 "var x[3] := [0]; var y[3] := {5,6,7}; (x += 1) < y",
4879 "var x[3] := [0]; var y[2] := {5,6}; (x += 1) < y",
4880 "var x[3] := [0]; var y[1] := {5}; (x += 1) < y",
4881 "var x[3] := [0]; var y[4] := {1,2,3,4}; x < (y += 1)",
4882 "var x[3] := [0]; var y[3] := {1,2,3}; x < (y += 1)",
4883 "var x[3] := [0]; var y[2] := {1,2}; x < (y += 1)",
4884 "var x[3] := [0]; var y[1] := {1}; x < (y += 1)",
4885 "var x[3] := [0]; var y[4] := {5,6,7,8}; (x += 1) < (y += 1)",
4886 "var x[3] := [0]; var y[3] := {5,6,7}; (x += 1) < (y += 1)",
4887 "var x[3] := [0]; var y[2] := {5,6}; (x += 1) < (y += 1)",
4888 "var x[3] := [0]; var y[1] := {5}; (x += 1) < (y += 1)",
4889 "var x[3] := {1,2,3}; var y := 5; x < y ",
4890 "var x[3] := {1,2,3}; var y := 3; x < y + 1 ",
4891 "var x[3] := {1,2,3}; var y := 5; x <= y ",
4892 "var x[3] := {1,2,3}; var y := 3; x <= y + 1",
4893 "var x[3] := {1,1,1}; var y := 1; x == y ",
4894 "var x[3] := {1,1,1}; var y := 2; x == y - 1",
4895 "var x[3] := {1,2,3}; var y := 5; y > x ",
4896 "var x[3] := {1,2,3}; var y := 3; y >= x ",
4897 "var x[3] := {1,2,3}; var y := 5; y + 1 > x ",
4898 "var x[3] := {1,1,1}; var y := 1; y == x ",
4899 "var x[3] := {1,1,1}; var y := 2; y - 1 == x",
4900 "var x[3] := {1,2,3}; var y := 5; equal(true,(x += 1) < y) ",
4901 "var x[3] := {1,2,3}; var y := 3; equal(true,(x -= 1) < y + 1)",
4902 "var x[3] := {1,2,3}; var y := 5; equal(true,(x -= 1) <= y) ",
4903 "var x[3] := {2,2,2}; var y := 1; (x -= 1) == y ",
4904 "var x[3] := {1,2,3}; var y := 5; y > (x += 1) ",
4905 "var x[3] := {1,2,3}; var y := 5; y + 1 > (x += 1) ",
4906 "var x[3] := {2,2,2}; var y := 1; y == (x -= 1) ",
4907 "var x[3] := {2,2,2}; var y := 0; y + 1 == (x -= 1)",
4908 "var x[3] := [1]; var y[4] := {1,2,3,4}; var z[3] := [1]; z := (x + y); z == (x + y)",
4909 "var x[3] := [1]; var y[3] := {1,2,3}; var z[3] := [1]; z := (x - y); z == (x - y)",
4910 "var x[3] := [1]; var y[2] := {1,2}; var z[3] := [1]; z := (x / y); z == (x / y)",
4911 "var x[3] := [1]; var y[1] := {1}; var z[3] := [1]; z := (x * y); z == (x * y)",
4912 "var x[3] := [1]; var y[4] := {1,2,3,4}; var z[3] := [1]; z := 2(x + y); z == (x + y)2",
4913 "var x[3] := [1]; var y[3] := {1,2,3}; var z[3] := [1]; z := 2(x - y); z == (x - y)2",
4914 "var x[3] := [1]; var y[2] := {1,2}; var z[3] := [1]; z := 2(x / y); z == (x / y)2",
4915 "var x[3] := [1]; var y[1] := {1}; var z[3] := [1]; z := 2(x * y); z == (x * y)2",
4916 "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",
4917 "var x[3] := [1]; var y[3] := {1,2,3}; var z[3] := [1]; z := 2(x - y)/3; z == 2(x - y)/3",
4918 "var x[3] := [1]; var y[2] := {1,2}; var z[3] := [1]; z := 2(x / y)/3; z == 2(x / y)/3",
4919 "var x[3] := [1]; var y[1] := {1}; var z[3] := [1]; z := 2(x * y)/3; z == 2(x * y)/3",
4920 "var x[6] := {1,2,3,4,5,6}; equal(sqrt(sum([x - avg(x)]^2) / x[]),1.70782512765993300)",
4921 "var x[3] := {-1,-2,-3}; sum(abs(x) ) == 6",
4922 "var x[3] := {0.1,0.2,0.3}; sum(trunc(x)) == 0",
4924 "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)",
4926 "var x := 2; (~{ for (var i := 0; i < 10; i += 1) { for (var j := 0; j <= i; "
4927 "j += 1) { var y := 3; if ((i + j + y + x) < 6) { y += x; continue; } else "
4928 "break[i + j]; } } } + ~{ for (var i := 0; i < 10; i += 1) { for (var j := 0; "
4929 "j <= i; j += 1) { var y := 3; if ((i + j + y + x) < 6) { y += x; continue; } "
4930 " else break[i + j]; } } }) == 18 ",
4932 "var x := 2; var v0[3] := {1,2,3}; ( ~{ for (var i := 0; i < 10; i += 1) { "
4933 "for (var j := 0; j <= i; j += 1) { var y := 3; var v2[3] := {1,2,3}; if ( "
4934 "(i + j + y + x + abs(v0[i % v0[]] - v2[j % v2[]])) < 6) { var v3[3] := "
4935 "{1,2,3}; y += x / v3[j % v3[]]; continue; } else break[i + j]; } } } "
4936 "+ ~{ for (var i := 0; i < 10; i += 1) { for (var j := 0; j <= i; j += 1) "
4937 " { var y := 3; var v2[3] := {1,2,3}; if ((i + j + y + x + abs(v0[i % v0[]] - "
4938 "v2[j % v2[]])) < 6) { var v3[3] := {1,2,3}; y += x / v3[j % v3[]]; "
4939 "continue; } else break[i + j]; } } } ) == 18 ",
4941 "12 == (if (1 > 2) { var x:= 2; } else { var x[3] := {7,2,3}; sum(x); })",
4942 "12 == (if (1 < 2) { var x[3] := {7,2,3}; sum(x); } else { var x:= 2; })",
4943 "12 == (if (1 > 2) { var x:= 2; } else { var x[3] := {7,2,3}; sum(x); })",
4944 "12 == (if (1 < 2) { var x[3] := {7,2,3}; sum(x); } else { var x:= 2; })",
4946 "21 == (for (var i := 0; i < 10; i += 1) { if (i > 2) { break [i * 7]; i += 1;"
4947 "i += 2; i += 3; }; })",
4949 "21 == (for (var i := 0; i < 10; i += 1) { if (i > 2) { break [i * 7]; return "
4950 "[i * 8]; i += 1; i += 2; i += 3; }; })",
4952 "2 == for (var i := 0; i < 10; i += 1) { if (i > 2) { continue; i += 1; i += 2;"
4953 "i += 3; } else i; }",
4955 "2 == for (var i := 0; i < 10; i += 1) { if (i > 2) { continue; return [i * 8];"
4956 "i += 1; i += 2; i += 3; } else i; }",
4958 "var x[10] := [-1]; var y[10] := [-1]; for (var i := 0; i < 10; i += 1) { x[i] := i; "
4959 "y[i] := 2 * x[i]; }; (sum(x) == 45) and (sum(y) == (2 * sum(x)));"
4961 "7 == (for (var i := 0; i < 10; i += 1) { ~{break[7]; continue; i += i} })",
4962 "0 == (for (var i := 0; i < 10; i += 1) { ~{break[i]; continue; i += i} })",
4963 "0 == (for (var i := 0; i < 10; i += 1) { ~{continue; break[7]; i += i} })",
4964 "1 == (for (var i := 0; i < 10; i += 1) { ~{break[i += 1]; continue; i += i} })",
4966 "var s := 'abc'; s == ~{'abc' } ",
4967 "var s := 'abc'; s == ~{s } ",
4968 "var s := 'abc'; s == ~{'ab' + 'c'} ",
4969 "var s := 'abc'; ~{'abc' } == s ",
4970 "var s := 'abc'; ~{s } == s ",
4971 "var s := 'abc'; ~{'ab' + 'c'} == s ",
4972 "var s := 'abc'; ~{1 + 2; 'abc' + s; s} == s ",
4973 "var s := 'abc'; ~{1 + 2; var x := 'ab'; x + 'c'} == s ",
4975 "var x[10^6] := null; var y[10^7] := null; 0 * (min(x) + min(y)) + x[] + y[] == 10^7 + 10^6",
4977 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; if (1 < 2, v0, v1) == v0",
4978 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; if (1 > 2, v0, v1) == v1",
4979 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; if (1 < 2, v0 - v1, v1 - v0) == (v0 - v1)",
4980 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; if (1 > 2, v0 - v1, v1 - v0) == (v1 - v0)",
4981 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; var x := 1; var y := 2; if (x < y, v0, v1) == v0",
4982 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; var x := 1; var y := 2; if (x > y, v0, v1) == v1",
4983 "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)",
4984 "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)",
4986 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; if (1 < 2, v0, v1) == v0",
4987 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; if (1 > 2, v0, v1) == v1",
4988 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; if (1 < 2, v0 - v1, v1 - v0) == (v0 - v1)",
4989 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; if (1 > 2, v0 - v1, v1 - v0) == (v1 - v0)",
4990 "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",
4991 "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",
4992 "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)",
4993 "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)",
4995 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; (if (1 < 2) v0; else v1;) == v0",
4996 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; (if (1 > 2) v0; else v1;) == v1",
4997 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; (if (1 < 2) v0 - v1; else v1 - v0;) == (v0 - v1)",
4998 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; (if (1 > 2) v0 - v1; else v1 - v0;) == (v1 - v0)",
4999 "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",
5000 "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",
5001 "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)",
5002 "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)",
5004 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; (if (1 < 2) v0; else v1;) == v0",
5005 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; (if (1 > 2) v0; else v1;) == v1",
5006 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; (if (1 < 2) v0 - v1; else v1 - v0;) == (v0 - v1)",
5007 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; (if (1 > 2) v0 - v1; else v1 - v0;) == (v1 - v0)",
5008 "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",
5009 "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",
5010 "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)",
5011 "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)",
5013 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((-x * -y)); true;",
5014 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((-x + -y)); true;",
5015 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((-x - -y)); true;",
5016 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((-x / -y)); true;",
5017 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) + (1.123 * y)); true;",
5018 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) - (1.123 * y)); true;",
5019 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) + (y * 1.123)); true;",
5020 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) - (y * 1.123)); true;",
5021 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) * (y / z)); true;",
5022 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) / (y / z)); true;",
5023 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) / y); true;",
5024 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) * 2.123); true;",
5025 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) / 2.123); true;",
5026 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) * (2.123 * y)); true;",
5027 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) * (y * 2.123)); true;",
5028 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) / (2.123 * y)); true;",
5029 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) / (2.123 / y)); true;",
5030 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) / (y * 2.123)); true;",
5031 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) / (y / 2.123)); true;",
5032 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 + x) + 2.123); true;",
5033 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 + x) - 2.123); true;",
5034 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 + x) + (2.123 + y)); true;",
5035 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 + x) + (y + 2.123)); true;",
5036 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 + x) - (2.123 + y)); true;",
5037 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 + x) - (y + 2.123)); true;",
5038 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 - x) + 2.123); true;",
5039 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 - x) - 2.123); true;",
5040 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 - x) - (2.123 - y)); true;",
5041 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 - x) - (y - 2.123)); true;",
5042 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) * 2.123); true;",
5043 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) / 2.123); true;",
5044 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) * (2.123 / y)); true;",
5045 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) * (y / 2.123)); true;",
5046 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) / (2.123 * y)); true;",
5047 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) / (2.123 / y)); true;",
5048 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) / (y * 2.123)); true;",
5049 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) / (y / 2.123)); true;",
5050 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) * (2.123 * x)); true;",
5051 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) * (2.123 / x)); true;",
5052 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) * (x * 2.123)); true;",
5053 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) * (x / 2.123)); true;",
5054 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) + (2.123 + x)); true;",
5055 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) + (2.123 - x)); true;",
5056 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) + (x + 2.123)); true;",
5057 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) + (x - 2.123)); true;",
5058 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) - (2.123 + x)); true;",
5059 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) - (2.123 - x)); true;",
5060 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) - (x + 2.123)); true;",
5061 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) - (x - 2.123)); true;",
5062 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) / (2.123 * x)); true;",
5063 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) / (2.123 / x)); 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; ((x * 1.123) * 2.123); true;",
5067 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) / 2.123); true;",
5068 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x + 1.123) + 2.123); true;",
5069 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x + 1.123) - 2.123); true;",
5070 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x - 1.123) + 2.123); true;",
5071 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x - 1.123) - 2.123); true;",
5072 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) * 2.123); true;",
5073 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) / 2.123); true;",
5074 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x ^ 1.123) ^ 2.123); true;",
5075 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) + (1.123 * y)); true;",
5076 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) - (1.123 * y)); true;",
5077 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) + (y * 1.123)); true;",
5078 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) - (y * 1.123)); true;",
5079 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) * (2.123 * y)); true;",
5080 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) * (y * 2.123)); true;",
5081 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) / (2.123 * y)); true;",
5082 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) / (2.123 / y)); true;",
5083 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) / (y * 2.123)); true;",
5084 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) / (y / 2.123)); true;",
5085 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * y) / (z / w)); true;",
5086 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x + 1.123) + (2.123 + y)); true;",
5087 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x + 1.123) + (y + 2.123)); true;",
5088 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x + 1.123) - (2.123 + y)); true;",
5089 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x + 1.123) - (y + 2.123)); true;",
5090 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x + y) / (z / w)); true;",
5091 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x - 1.123) - (2.123 - y)); true;",
5092 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x - 1.123) - (y - 2.123)); true;",
5093 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x - y) / (z / w)); true;",
5094 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) * (y / z)); true;",
5095 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) + (y / 1.123)); true;",
5096 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) - (y / 1.123)); true;",
5097 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) / (y / z)); true;",
5098 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) / y); true;",
5099 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) * (2.123 / y)); true;",
5100 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) * (y + 2.123)); true;",
5101 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) * (y - 2.123)); true;",
5102 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) * (y / 2.123)); true;",
5103 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) / (2.123 * y)); true;",
5104 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) / (2.123 / y)); true;",
5105 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) / (y * 2.123)); 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 / y) * (1.123 / z)); true;",
5108 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / y) * (z / 1.123)); true;",
5109 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / y) * (z / w)); true;",
5110 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / y) / (1.123 / z)); true;",
5111 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / y) / (z / 1.123)); true;",
5112 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / y) / (z / w)); true;",
5113 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / y) / 1.123); true;",
5114 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / y) / z); true;",
5119 static const std::size_t
rounds = 20;
5130 bool failed =
false;
5132 for (std::size_t r = 0; r <
rounds; ++r)
5136 expression_t expression;
5137 expression.register_symbol_table(symbol_table);
5144 printf(
"run_test10() - swaps[1] Error: %s Expression: %s\n",
5145 parser.
error().c_str(),
5153 const T result = expression.value();
5157 printf(
"run_test10() - swaps[1] evaluation error Expression: %s\n",
5163 expression.release();
5173 for (std::size_t r = 0; r <
rounds; ++r)
5179 expression_t expression;
5180 expression.register_symbol_table(symbol_table);
5184 printf(
"run_test10() - swaps[2] Error: %s Expression: %s\n",
5185 parser.
error().c_str(),
5192 const T result = expression.value();
5196 printf(
"run_test10() - swaps[2] evaluation error Expression: %s\n",
6440 const bool result1 = symbol_table.
add_variable(
"x", x);
6444 if (!result1 || !result2 || result3)
6446 printf(
"run_test18() - Failed sym_tab add/remove [1]\n");
6456 if (!result1 || !result2 || result3)
6458 printf(
"run_test18() - Failed sym_tab add/remove [2]\n");
6463 std::vector<T> x(10,T(0));
6464 const bool result1 = symbol_table.
add_vector(
"x", x);
6468 if (!result1 || !result2 || result3)
6470 printf(
"run_test18() - Failed sym_tab add/remove [3]\n");
6476 const bool result1 = symbol_table.
add_function(
"x", x);
6480 if (!result1 || !result2 || result3)
6482 printf(
"run_test18() - Failed sym_tab add/remove [4]\n");
6488 const bool result1 = symbol_table.
add_function(
"x", x);
6492 if (!result1 || !result2 || result3)
6494 printf(
"run_test18() - Failed sym_tab add/remove [5]\n");
6539 static const std::string expr_str_list[] =
6541 "equal(va_func,(0))",
6542 "equal(va_func(),(0))",
6543 "equal(va_func(1,2,3,4,5,6,7,8,9),(1+2+3+4+5+6+7+8+9))",
6544 "equal(va_func(1,x,3,y,5,z,7,w,9),(1+x+3+y+5+z+7+w+9))",
6545 "equal(va_func(x,2,y,4,z,6,w,8,u),(x+2+y+4+z+6+w+8+u))",
6546 "equal(va_func(x,y,z,w,u,v,t,1,2,3),(x+y+z+w+u+v+t+1+2+3))",
6547 "equal(va_func(x,y,z,w,u,v,t),(x+y+z+w+u+v+t))",
6548 "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))",
6549 "equal(1+va_func(1,x,3,y,5,z,7,w,9),(1+x+3+y+5+z+7+w+9)+1)",
6550 "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))",
6551 "equal(va_func(va_func(x),va_func(y),va_func(z)),va_func(x,y,z))",
6552 "equal(va_func(va_func(va_func(va_func(va_func(va_func(va_func(va_func(x)))))))),x)",
6553 "equal(va_func(va_func(va_func(va_func(va_func(va_func(va_func(va_func(123.456)))))))),123.456)",
6554 "equal(va_func(va_func(va_func(va_func(va_func(va_func(va_func(va_func(x+1)))))))),x+1)",
6555 "equal(va_func(va_func(va_func(va_func(va_func(va_func(va_func(va_func(x+y)))))))),x+y)"
6557 static const std::size_t expr_str_list_size =
sizeof(expr_str_list) /
sizeof(std::string);
6561 for (std::size_t i = 0; i < expr_str_list_size; ++i)
6563 expression_t expression;
6564 expression.register_symbol_table(symbol_table);
6568 if (!parser.
compile(expr_str_list[i],expression))
6570 printf(
"run_test18() - [1] VarArg Error: %s Expression: %s\n",
6571 parser.
error().c_str(),
6572 expr_str_list[i].c_str());
6580 bool error_found =
false;
6586 printf(
"run_test18() - Error in evaluation! (1) Expression: %s\n",
6587 expr_str_list[i].c_str());
6607 T v0[] = { T(1), T(1), T(1), T(1) };
6608 T v1[] = { T(1), T(2), T(3), T(4) };
6617 std::string s0 =
"AbCdEfGhIj";
6621 symbol_table_t symbol_table;
6623 symbol_table.add_constants();
6625 symbol_table.add_variable (
"x" , x);
6626 symbol_table.add_variable (
"y" , y);
6627 symbol_table.add_vector (
"v0" ,v0);
6628 symbol_table.add_vector (
"v1" ,v1);
6629 symbol_table.add_vector (
"v2" ,v2);
6630 symbol_table.add_stringvar(
"s0", s0);
6631 symbol_table.add_function (
"gen_func", f);
6635 "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]);",
6636 "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]);",
6637 "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);",
6638 "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);",
6639 "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]);",
6640 "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);",
6641 "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);",
6642 "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);",
6643 "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);",
6644 "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');"
6649 bool error_found =
false;
6654 expression_t expression;
6656 expression.register_symbol_table(symbol_table);
6660 if (!parser.compile(expression_str,expression))
6662 printf(
"run_test18() - [2] GenFunc Error: %s Expression: %s [2]\n",
6663 parser.error().c_str(),
6664 expression_str.c_str());
6682 printf(
"run_test18() - Error in evaluation! (2) Expression: %s "
6694 expression.release();
6711 T v0[] = { T(1), T(1), T(1), T(1) };
6712 T v1[] = { T(1), T(2), T(3), T(4) };
6713 T v2[] = { T(5), T(6), T(7), T(8) };
6715 std::string s0 =
"AbCdEfGhIj";
6719 symbol_table_t symbol_table;
6721 symbol_table.add_constants();
6723 symbol_table.add_variable (
"x" , x);
6724 symbol_table.add_variable (
"y" , y);
6725 symbol_table.add_vector (
"v0" ,v0);
6726 symbol_table.add_vector (
"v1" ,v1);
6727 symbol_table.add_vector (
"v2" ,v2);
6728 symbol_table.add_stringvar(
"s0", s0);
6729 symbol_table.add_function (
"foo", f);
6733 "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]);",
6734 "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);",
6735 "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);",
6736 "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]);",
6737 "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);",
6738 "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);",
6739 "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);",
6740 "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);",
6741 "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');",
6742 "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');",
6743 "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]);",
6744 "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]);",
6745 "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]);",
6746 "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]);",
6747 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x);",
6748 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x);",
6749 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x,x);",
6750 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x,x,x);",
6751 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0);",
6752 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0);",
6753 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0,s0);",
6754 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0,s0,s0);",
6755 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0);",
6756 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0);",
6757 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0,v0);",
6758 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0,v0,v0);",
6759 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x);",
6760 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x);",
6761 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x,x);",
6762 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x,x,x);",
6763 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0);",
6764 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0);",
6765 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0,s0);",
6766 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0,s0,s0);",
6767 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0);",
6768 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0);",
6769 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0,v0);",
6770 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0,v0,v0);",
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]);"
6779 const std::string parameter_type_list[] =
6819 "TTTTTTT|STSTSTS|V*T*VS*" ,
6820 "TTTTTTT|STSTSTS|V*TTTTVSS",
6821 "TTTTTTT|STSTSTS|VVT*VSS" ,
6822 "TTTTTTT|STSTSTS|VVTTTTVS*",
6825 bool error_found =
false;
6830 expression_t expression;
6832 expression.register_symbol_table(symbol_table);
6838 if (!parser.compile(expression_str,expression))
6840 printf(
"run_test18() - [3] GenFunc2 Error: %s Expression: %s Parameter Sequence: %s [3]\n",
6841 parser.error().c_str(),
6842 expression_str.c_str(),
6843 parameter_type_list[i].c_str());
6859 bool error_found =
false;
6863 "foo(v0,v1,v2,x,y,s0);",
6864 "foo(v1,v2,x,y,s0,v0);",
6865 "foo(v2,x,y,s0,v0,v1);",
6866 "foo(x,y,s0,v0,v1,v2);",
6867 "foo(y,s0,v0,v1,v2,x);",
6868 "foo(s0,v0,v1,v2,x,y);"
6873 const std::string parameter_type_list[] =
6892 T v0[] = { T(1), T(1), T(1), T(1) };
6893 T v1[] = { T(1), T(2), T(3), T(4) };
6894 T v2[] = { T(5), T(6), T(7), T(8) };
6896 std::string s0 =
"AbCdEfGhIj";
6901 T v0_inc[] = { T(2), T(2), T(2), T(2) };
6902 T v1_inc[] = { T(2), T(3), T(4), T(5) };
6903 T v2_inc[] = { T(6), T(7), T(8), T(9) };
6905 std::size_t sizeof_vec =
sizeof(v0) /
sizeof(T);
6907 std::string s0_inc =
"BcDeFgHiJk";
6911 symbol_table_t symbol_table;
6913 symbol_table.add_constants();
6915 symbol_table.add_variable (
"x" , x );
6916 symbol_table.add_variable (
"y" , y );
6917 symbol_table.add_vector (
"v0" , v0);
6918 symbol_table.add_vector (
"v1" , v1);
6919 symbol_table.add_vector (
"v2" , v2);
6920 symbol_table.add_stringvar(
"s0", s0);
6921 symbol_table.add_function (
"foo", f );
6923 expression_t expression;
6925 expression.register_symbol_table(symbol_table);
6933 printf(
"run_test18() - [4] IncFunc Error: %s Expression: %s Parameter Sequence: %s [4]\n",
6934 parser.error().c_str(),
6936 parameter_type_list[i].c_str());
6946 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: x\n",
6953 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: y\n",
6960 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: y\n",
6965 if (!std::equal(v0,v0 + sizeof_vec,v0_inc))
6967 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: v0\n",
6972 if (!std::equal(v1,v1 + sizeof_vec,v1_inc))
6974 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: v1\n",
6979 if (!std::equal(v2,v2 + sizeof_vec,v2_inc))
6981 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: v2\n",
6994 bool error_found =
false;
6998 std::string s0 =
"XXXXXXXXXXXXXXX";
6999 std::string s1 =
"XXXXXXXXXXXXXXX";
7000 std::string s2 =
"XXXXXXXXXXXXXXX";
7001 std::string s3 =
"XXXXXXXXXXXXXXX";
7002 std::string s4 =
"XXXXXXXXXXXXXXX";
7008 symbol_table_t symbol_table;
7010 symbol_table.add_constants();
7012 symbol_table.add_stringvar(
"s0", s0);
7013 symbol_table.add_stringvar(
"s1", s1);
7014 symbol_table.add_stringvar(
"s2", s2);
7015 symbol_table.add_stringvar(
"s3", s3);
7016 symbol_table.add_stringvar(
"s4", s4);
7018 symbol_table.add_function(
"remspc_uc", rsauc);
7020 const std::string program =
7021 " s0 := 'How now '; "
7022 " s1 := 'brown cow?'; "
7023 " s2 := remspc_uc(s0 + s1); "
7024 " s3 := remspc_uc(s0) + s1; "
7025 " s4 := s0 + remspc_uc(s1); "
7026 " remspc_uc(s0 + s1) == remspc_uc(s0) + remspc_uc(s1); ";
7028 const std::string parameter_type_list[] =
7038 std::size_t parameter_type_list_size =
sizeof(parameter_type_list) /
sizeof(std::string);
7040 for (std::size_t i = 0; i < parameter_type_list_size; ++i)
7042 expression_t expression;
7044 expression.register_symbol_table(symbol_table);
7050 if (!parser.compile(program,expression))
7052 printf(
"run_test18() - [5] Error: %s\tExpression: %s\n",
7053 parser.error().c_str(),
7059 const T result = expression.value();
7063 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Result <> 1\n",
7070 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s0\n",
7075 if (
"How now " != s0)
7077 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s0\n",
7082 if (
"brown cow?" != s1)
7084 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s1\n",
7089 if (
"HOWNOWBROWNCOW?" != s2)
7091 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s2\n",
7096 if (
"HOWNOWbrown cow?" != s3)
7098 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s3\n",
7103 if (
"How now BROWNCOW?" != s4)
7105 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s4\n",
7118 bool error_found =
false;
7124 symbol_table_t symbol_table;
7126 T v[4] = {T(5), T(6), T(7), T(8)};
7128 symbol_table.add_vector(
"v",v);
7131 symbol_table.add_function(
"vararg_func",vaf);
7133 expression_t expression;
7134 expression.register_symbol_table(symbol_table);
7138 const std::string programs[] =
7140 "equal(0,vararg_func())",
7141 "equal(1,vararg_func() + 1)",
7142 "equal(1,1 + vararg_func())",
7143 "equal(1,vararg_func + 1)",
7144 "equal(1,1 + vararg_func)",
7145 "equal(0,vararg_func() + vararg_func)",
7146 "equal(0,vararg_func + vararg_func())",
7147 "equal(1,vararg_func + vararg_func(1))",
7148 "equal(1,vararg_func + vararg_func(1,2))",
7149 "equal(2,vararg_func + vararg_func(v))",
7150 "equal(1,vararg_func() + vararg_func(1))",
7151 "equal(1,vararg_func() + vararg_func(1,2))",
7152 "equal(2,vararg_func() + vararg_func(v))",
7153 "equal(2,vararg_func(v))",
7154 "equal(1,vararg_func(1))",
7155 "equal(1,vararg_func(1,2,3))",
7156 "equal(1,vararg_func(5,6,7,8))",
7157 "equal(5,vararg_func(v) + 3)",
7158 "equal(5,vararg_func(1) + 4)",
7159 "equal(6,vararg_func(1,2,3) + 5)",
7160 "equal(7,vararg_func(5,6,7,8) + 6)"
7163 static const std::size_t programs_size =
sizeof(programs) /
sizeof(std::string);
7165 for (std::size_t i = 0; i < programs_size; ++i)
7167 if (!parser.compile(programs[i],expression))
7169 printf(
"run_test18() - [6] Error: %s\tExpression: %s\n",
7170 parser.error().c_str(),
7171 programs[i].c_str());
7175 else if (T(1) != expression.value())
7177 printf(
"run_test18() - Error in evaluation! (5) Expression: %s\n",
7178 programs[i].c_str());
7191 bool error_found =
false;
7203 v.push_back(T(N)); \
7211 const std::string expr_string =
"sum(v + 1)";
7215 symbol_table_t symbol_table;
7216 symbol_table.add_vector(
"v",v);
7218 expression_t expression;
7219 expression.register_symbol_table(symbol_table);
7223 if (!parser.compile(expr_string,expression))
7225 printf(
"run_test18() - [7] Error: %s\tExpression: %s\n",
7226 parser.error().c_str(),
7227 expr_string.c_str());
7234 sum = expression.value();
7238 printf(
"run_test18() - Error in evaluation! (6) Expression: %s\n",
7239 expr_string.c_str());
7245 sum = expression.value();
7249 printf(
"run_test18() - Error in evaluation! (7) Expression: %s\n",
7250 expr_string.c_str());
7255 sum = expression.value();
7259 printf(
"run_test18() - Error in evaluation! (8) Expression: %s\n",
7260 expr_string.c_str());
7265 sum = expression.value();
7269 printf(
"run_test18() - Error in evaluation! (9) Expression: %s\n",
7270 expr_string.c_str());
7281 bool error_found =
false;
7291 v.push_back(T(N)); \
7296 pb(s, 3)
pb(s, 6)
pb(s, 9)
pb(s,12)
7297 pb(s,15)
pb(s,18)
pb(s,21)
7300 const std::string expr_string =
"v[0] + v[1] + v[2]";
7304 symbol_table_t symbol_table;
7305 symbol_table.add_vector(
"v",v);
7307 expression_t expression;
7308 expression.register_symbol_table(symbol_table);
7312 if (!parser.compile(expr_string,expression))
7314 printf(
"run_test18() - [8] Error: %s\tExpression: %s\n",
7315 parser.error().c_str(),
7316 expr_string.c_str());
7321 for (std::size_t i = 0; i < v0.size() - 4; ++i)
7325 T sum = expression.value();
7329 printf(
"run_test18() - Error in evaluation! (7) Expression: %s Expected: %5.3f Computed: %5.3f\n",
7330 expr_string.c_str(),
7331 static_cast<double>(s[i]),
7332 static_cast<double>(sum));
7346 bool error_found =
false;
7356 v.push_back(T(N)); \
7361 pb(s, 3)
pb(s, 6)
pb(s, 9)
pb(s,12)
7362 pb(s,15)
pb(s,18)
pb(s,21)
7365 const std::string expr_string =
"var i := 0; var j := 1; var k := 2; v[i] + v[j] + v[k]";
7369 symbol_table_t symbol_table;
7370 symbol_table.add_vector(
"v",v);
7372 expression_t expression;
7373 expression.register_symbol_table(symbol_table);
7377 if (!parser.compile(expr_string,expression))
7379 printf(
"run_test18() - [9] Error: %s\tExpression: %s\n",
7380 parser.error().c_str(),
7381 expr_string.c_str());
7386 for (std::size_t i = 0; i < v0.size() - 4; ++i)
7390 T sum = expression.value();
7394 printf(
"run_test18() - Error in evaluation! (8) Expression: %s Expected: %5.3f Computed: %5.3f\n",
7395 expr_string.c_str(),
7396 static_cast<double>(s[i]),
7397 static_cast<double>(sum));
7415 const std::string const_folded_expression_list[] =
7417 "(0 * dot(2 * v0,v1 - 1))",
7418 "(0 * dot(2 * v0,v1 - 1)) + (dot(2 * v0,v1 - 1) * 0)",
7419 "(0 * dot(v0 - v1,v1 / v0))",
7420 "(0 * dot(v0 - v1,v1 / v0)) + (dot(v0 - v1,v1 / v0) * 0)",
7422 "(0 * dot(v0,v1)) + (dot(v0,v1) * 0)",
7423 "(0 / dot(2 * v0,v1 - 1))",
7424 "(0 / dot(2 * v0,v1 - 1)) + (dot(2 * v0,v1 - 1) * 0)",
7425 "(0 / dot(v0 - v1,v1 / v0))",
7426 "(0 / dot(v0 - v1,v1 / v0)) + (dot(v0 - v1,v1 / v0) * 0)",
7428 "(0 / dot(v0,v1)) + (dot(v0,v1) * 0)",
7429 "(dot(2 * v0,v1 - 1) * 0)",
7430 "(dot(2 * v0,v1 - 1) * 0) + (0 * dot(2 * v0,v1 - 1))",
7431 "(dot(2 * v0,v1 - 1) * 0) + (0 / dot(2 * v0,v1 - 1))",
7432 "(dot(v0 - v1,v1 / v0) * 0)",
7433 "(dot(v0 - v1,v1 / v0) * 0) + (0 * dot(v0 - v1,v1 / v0))",
7434 "(dot(v0 - v1,v1 / v0) * 0) + (0 / dot(v0 - v1,v1 / v0))",
7436 "(dot(v0,v1) * 0) + (0 * dot(v0,v1))",
7437 "(dot(v0,v1) * 0) + (0 / dot(v0,v1))"
7440 const std::size_t const_folded_expression_list_size =
sizeof(const_folded_expression_list) /
sizeof(std::string);
7442 const std::size_t vector_size = 5;
7443 T v0[vector_size] = { 0, 2, 4, 6, 8 };
7444 T v1[vector_size] = { 1, 3, 5, 7, 9 };
7452 symbol_table_t symbol_table;
7454 symbol_table.add_package( vector_package );
7455 symbol_table.add_package( io_package );
7456 symbol_table.add_vector (
"v0" , vv0 );
7457 symbol_table.add_vector (
"v1" , vv1 );
7459 expression_t expression;
7460 expression.register_symbol_table(symbol_table);
7464 for (std::size_t i = 0; i < const_folded_expression_list_size; ++i)
7466 const std::string& expression_string = const_folded_expression_list[i];
7468 if (!parser.compile(expression_string, expression))
7470 printf(
"run_test18() - [10] Error: %s Expression: %s\n",
7471 parser.error().c_str(),
7472 expression_string.c_str());
7479 printf(
"run_test18() - Error: Expression did not compile to a constant! [1] Expression: %s\n",
7480 expression_string.c_str());
7485 for (std::size_t j = 0; j < 100; ++j)
7498 const T result = expression.value();
7502 printf(
"run_test18() - Error: Expected result of zero, result: %8.4f for Expression: %s\n",
7503 static_cast<double>(result),
7504 expression_string.c_str());
7510 expression.release();
7519 const std::string rebase_expression_list[] =
7522 "dot(2 * v0,v1 - 1) + dot(2 * v0,v1 - 1)",
7523 "dot(2 * v0,v1 - 1)",
7524 "dot(v0 - v1,v1 / v0) + dot(v0 - v1,v1 / v0)",
7525 "dot(v0 - v1,v1 / v0)",
7526 "dot(v0,v1) + dot(v0,v1)",
7528 "dot(2 * v0,v1 - 1) * x + dot(2 * v0,v1 - 1) * y",
7529 "x / dot(2 * v0,v1 - 1)",
7530 "x / dot(v0 - v1,v1 / v0) + dot(v0 - v1,v1 / v0) / y",
7531 "x * dot(v0 - v1,v1 / v0) / y",
7532 "x - dot(v0,v1) + dot(v0,v1) + y",
7535 const std::size_t rebase_expression_list_size =
sizeof(rebase_expression_list) /
sizeof(std::string);
7540 const std::size_t vector_size = 5;
7541 T v0[vector_size] = { 0, 2, 4, 6, 8 };
7542 T v1[vector_size] = { 1, 3, 5, 7, 9 };
7550 symbol_table_t symbol_table;
7552 symbol_table.add_package ( vector_package );
7553 symbol_table.add_package ( io_package );
7554 symbol_table.add_variable(
"x" , x );
7555 symbol_table.add_variable(
"y" , y );
7556 symbol_table.add_vector (
"v0" , vv0 );
7557 symbol_table.add_vector (
"v1" , vv1 );
7559 expression_t expression;
7560 expression.register_symbol_table(symbol_table);
7564 for (std::size_t i = 0; i < rebase_expression_list_size; ++i)
7566 const std::string& expression_string = rebase_expression_list[i];
7568 if (!parser.compile(expression_string, expression))
7570 printf(
"run_test18() - [11] Error: %s Expression: %s\n",
7571 parser.error().c_str(),
7572 expression_string.c_str());
7577 for (std::size_t j = 0; j < 100; ++j)
7593 expression.release();
7598 bool error_found =
false;
7608 v.push_back(T(N)); \
7613 pb(s, 3)
pb(s, 6)
pb(s, 9)
pb(s,12)
7614 pb(s,15)
pb(s,18)
pb(s,21)
7617 const std::string expr_string =
"var i := 0; v[i + 0] + v[i + 1] + v[i + 2]";
7621 symbol_table_t symbol_table;
7622 symbol_table.add_vector(
"v",v);
7624 expression_t expression;
7625 expression.register_symbol_table(symbol_table);
7629 if (!parser.compile(expr_string,expression))
7631 printf(
"run_test18() - [12] Error: %s\tExpression: %s\n",
7632 parser.error().c_str(),
7633 expr_string.c_str());
7638 for (std::size_t i = 0; i < v0.size() - 4; ++i)
7642 const T sum = expression.value();
7646 printf(
"run_test18() - Error in evaluation! (9) Expression: %s Expected: %5.3f Computed: %5.3f\n",
7647 expr_string.c_str(),
7648 static_cast<double>(s[i]),
7649 static_cast<double>(sum));
7667 T v0[] = { T(0), T(1), T(2), T(3), T(4) };
7668 T v1[] = { T(5), T(6), T(7), T(8), T(9) };
7670 const std::size_t v0_size =
sizeof(v0) /
sizeof (T);
7671 const std::size_t v1_size =
sizeof(v1) /
sizeof (T);
7677 symbol_table_t symbol_table;
7678 symbol_table.add_vector(
"v",v);
7679 symbol_table.add_function(
"vec_sum",vec_sum);
7681 expression_t expression;
7682 expression.register_symbol_table(symbol_table);
7686 const std::string expr_string =
"vec_sum(v)";
7688 if (!parser.compile(expr_string,expression))
7690 printf(
"run_test18() - [13] Error: %s\tExpression: %s\n",
7691 parser.error().c_str(),
7692 expr_string.c_str());
7697 const T expected_result0 = std::accumulate(v0, v0 + v0_size, T(0));
7699 if (expression.value() != expected_result0)
7701 printf(
"run_test18() - Error in evaluation! (10.1) Expression: %s Expected: %5.3f Computed: %5.3f\n",
7702 expr_string.c_str(),
7703 static_cast<double>(expected_result0),
7704 static_cast<double>(expression.value()));
7711 const T expected_result1 = std::accumulate(v1, v1 + v1_size, T(0));
7713 if (expression.value() != expected_result1)
7715 printf(
"run_test18() - Error in evaluation! (10.2) Expression: %s Expected: %5.3f Computed: %5.3f\n",
7716 expr_string.c_str(),
7717 static_cast<double>(expected_result1),
7718 static_cast<double>(expression.value()));
7725 bool error_found =
false;
7733 symbol_table_t symbol_table;
7734 symbol_table.add_package(vecops_pkg);
7736 const std::string expr_str_list[] =
7738 "var v[9] := {1,2,3,4,5,6,7,8,9}; all_true(v) == true" ,
7739 "var v[6] := {-1,-2,-3,-4,-5,-6}; all_true(v) == true" ,
7740 "var v[8] := {1,2,3,0,0,0,0,0}; all_true(v) == false",
7741 "var v[8] := {-1,-2,-3,0,0,0,0,0}; all_true(v) == false",
7742 "var v[9] := {0,0,0,0,0,0,0,0,0}; all_true(v + 1) == true",
7744 "var v[9] := {0,0,0,0,0,0,0,0,0}; all_false(v) == true" ,
7745 "var v[9] := {0,0,0,0,0,1,2,3,4}; all_false(v) == false" ,
7746 "var v[8] := {0,0,0,0,0,-1,-2,-3}; all_false(v) == false" ,
7747 "var v[9] := {1,1,1,1,1,1,1,1,1}; any_false(v - 1) == true",
7749 "var v[9] := {0,0,0,0,0,0,0,0,1}; any_true(v) == true" ,
7750 "var v[9] := {0,0,0,0,1,0,0,0,0}; any_true(v) == true" ,
7751 "var v[9] := {0,0,0,0,0,0,0,0,0}; any_true(v) == false" ,
7752 "var v[9] := {0,0,0,0,0,0,0,0,0}; any_true(v + 1) == true",
7754 "var v[9] := {1,1,1,1,1,1,1,1,0}; any_false(v) == true" ,
7755 "var v[9] := {1,1,1,1,0,1,1,1,1}; any_false(v) == true" ,
7756 "var v[9] := {1,1,1,1,1,1,1,1,1}; any_false(v) == false" ,
7757 "var v[9] := {1,1,1,1,1,1,1,1,1}; any_false(v - 1) == true",
7759 "var v[9] := {0,0,0,0,0,0,0,0,0}; count(v) == 0" ,
7760 "var v[9] := {0,0,0,0,0,0,0,0,1}; count(v) == 1" ,
7761 "var v[9] := {0,0,0,0,0,0,0,2,1}; count(v) == 2" ,
7762 "var v[9] := {0,0,0,0,0,0,3,2,1}; count(v) == 3" ,
7763 "var v[9] := {0,0,0,0,0,0,0,0,0}; count(v + 1) == v[]",
7764 "var v[9] := {1,1,1,1,1,1,1,1,1}; count(v - 1) == 0",
7766 "var v[9] := {1,2,3,4,5,6,7,8,9}; var r[9] := [0]; copy(v,r); sum(v == r) == v[]",
7767 "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",
7768 "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",
7769 "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",
7771 "var v[5] := {1,2,3,4,5}; var r[5] := {4,5,1,2,3}; rol(v,3); sum(v == r) == v[]",
7772 "var v[5] := {1,2,3,4,5}; var r[5] := {3,4,5,1,2}; ror(v,3); sum(v == r) == v[]",
7774 "var v[5] := {1,2,3,4,5}; var r[5] := {3,4,5,1,2}; rol(v,2); sum(v == r) == v[]",
7775 "var v[5] := {1,2,3,4,5}; var r[5] := {4,5,1,2,3}; ror(v,2); sum(v == r) == v[]",
7777 "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[]",
7778 "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[]",
7780 "var v[5] := {1,2,3,4,5}; var r[5] := {3,4,5,0,0}; shftl(v,2); sum(v == r) == v[]",
7781 "var v[5] := {1,2,3,4,5}; var r[5] := {5,0,0,0,0}; shftl(v,4); sum(v == r) == v[]",
7782 "var v[5] := {1,2,3,4,5}; var r[5] := {0,0,0,0,0}; shftl(v,5); sum(v == r) == v[]",
7784 "var v[5] := {1,2,3,4,5}; var r[5] := {0,0,1,2,3}; shftr(v,2); sum(v == r) == v[]",
7785 "var v[5] := {1,2,3,4,5}; var r[5] := {0,0,0,0,1}; shftr(v,4); sum(v == r) == v[]",
7786 "var v[5] := {1,2,3,4,5}; var r[5] := {0,0,0,0,0}; shftr(v,5); sum(v == r) == v[]",
7788 "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[]",
7789 "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[]",
7791 "var v[5] := {1,3,5,2,4}; var r[5] := {1,2,3,4,5}; sort(v); sum(v == r) == v[]",
7792 "var v[5] := {5,4,3,2,1}; var r[5] := {1,2,3,4,5}; sort(v); sum(v == r) == v[]",
7793 "var v[5] := {1,4,2,3,5}; var r[5] := {1,2,3,4,5}; sort(v,1,3); sum(v == r) == v[]",
7794 "var v[5] := {5,4,2,3,1}; var r[5] := {5,2,3,4,1}; sort(v,1,3); sum(v == r) == v[]",
7795 "var v[5] := {3,1,2,4,5}; var r[5] := {1,2,3,4,5}; sort(v,0,2); sum(v == r) == v[]",
7796 "var v[5] := {1,2,5,3,4}; var r[5] := {1,2,3,4,5}; sort(v,2,4); sum(v == r) == v[]",
7798 "var v[5] := {1,3,5,2,4}; var r[5] := {1,2,3,4,5}; sort(v,'ascending'); sum(v == r) == v[]",
7799 "var v[5] := {1,3,5,2,4}; var r[5] := {1,2,3,4,5}; sort(v,'aScEnDiNg'); sum(v == r) == v[]",
7800 "var v[5] := {5,4,3,2,1}; var r[5] := {1,2,3,4,5}; sort(v,'ascending'); sum(v == r) == v[]",
7801 "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[]",
7802 "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[]",
7803 "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[]",
7805 "var v[5] := {1,3,5,2,4}; var r[5] := {5,4,3,2,1}; sort(v,'descending'); sum(v == r) == v[]",
7806 "var v[5] := {1,3,5,2,4}; var r[5] := {5,4,3,2,1}; sort(v,'DeScEnDiNg'); sum(v == r) == v[]",
7807 "var v[5] := {5,4,3,2,1}; var r[5] := {5,4,3,2,1}; sort(v,'descending'); sum(v == r) == v[]",
7808 "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[]",
7809 "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[]",
7810 "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[]",
7812 "var v[9] := {7,8,9,1,2,3,4,5,6}; nth_element(v,trunc(v[] / 2)); v[v[] / 2] == 5",
7813 "var v[9] := {7,8,9,1,2,3,4,5,6}; nth_element(v,trunc(v[] / 3)); v[v[] / 3] == 4",
7815 "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)",
7816 "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)",
7818 "var v[5]; iota(v, 0,1); var r[5] := { 0, 1, 2, 3, 4}; sum(v == r) == v[]",
7819 "var v[5]; iota(v, 0,2); var r[5] := { 0, 2, 4, 6, 8}; sum(v == r) == v[]",
7820 "var v[5]; iota(v, 1,1); var r[5] := { 1, 2, 3, 4, 5}; sum(v == r) == v[]",
7821 "var v[5]; iota(v, 1,2); var r[5] := { 1, 3, 5, 7, 9}; sum(v == r) == v[]",
7822 "var v[5]; iota(v,-1,1); var r[5] := {-1, 0, 1, 2, 3}; sum(v == r) == v[]",
7823 "var v[5]; iota(v,-1,2); var r[5] := {-1, 1, 3, 5, 7}; sum(v == r) == v[]",
7824 "var v[5]; iota(v,-2,1); var r[5] := {-2,-1, 0, 1, 2}; sum(v == r) == v[]",
7825 "var v[5]; iota(v,-2,2); var r[5] := {-2, 0, 2, 4, 6}; sum(v == r) == v[]",
7826 "var v[5]; iota(v, 0); var r[5] := { 0, 1, 2, 3, 4}; sum(v == r) == v[]",
7827 "var v[5]; iota(v, 1); var r[5] := { 1, 2, 3, 4, 5}; sum(v == r) == v[]",
7828 "var v[5]; iota(v,-1); var r[5] := {-1, 0, 1, 2, 3}; sum(v == r) == v[]",
7829 "var v[5]; iota(v,-2); var r[5] := {-2,-1, 0, 1, 2}; sum(v == r) == v[]",
7830 "var v[5]; iota(v, 0, 0); var r[5] := { 0, 0, 0, 0, 0}; sum(v == r) == v[]",
7831 "var v[5]; iota(v, 1, 0); var r[5] := { 1, 1, 1, 1, 1}; sum(v == r) == v[]",
7833 "var v[5]; iota(v, 0, v[] - 1, 0,1); var r[5] := { 0, 1, 2, 3, 4}; sum(v == r) == v[]",
7834 "var v[5]; iota(v, 0, v[] - 1, 0,2); var r[5] := { 0, 2, 4, 6, 8}; sum(v == r) == v[]",
7835 "var v[5]; iota(v, 0, v[] - 1, 1,1); var r[5] := { 1, 2, 3, 4, 5}; sum(v == r) == v[]",
7836 "var v[5]; iota(v, 0, v[] - 1, 1,2); var r[5] := { 1, 3, 5, 7, 9}; sum(v == r) == v[]",
7837 "var v[5]; iota(v, 0, v[] - 1,-1,1); var r[5] := {-1, 0, 1, 2, 3}; sum(v == r) == v[]",
7838 "var v[5]; iota(v, 0, v[] - 1,-1,2); var r[5] := {-1, 1, 3, 5, 7}; sum(v == r) == v[]",
7839 "var v[5]; iota(v, 0, v[] - 1,-2,1); var r[5] := {-2,-1, 0, 1, 2}; sum(v == r) == v[]",
7840 "var v[5]; iota(v, 0, v[] - 1,-2,2); var r[5] := {-2, 0, 2, 4, 6}; sum(v == r) == v[]",
7841 "var v[5]; iota(v, 0, v[] - 1, 0 ); var r[5] := { 0, 1, 2, 3, 4}; sum(v == r) == v[]",
7842 "var v[5]; iota(v, 0, v[] - 1, 1 ); var r[5] := { 1, 2, 3, 4, 5}; sum(v == r) == v[]",
7843 "var v[5]; iota(v, 0, v[] - 1,-1 ); var r[5] := {-1, 0, 1, 2, 3}; sum(v == r) == v[]",
7844 "var v[5]; iota(v, 0, v[] - 1,-2 ); var r[5] := {-2,-1, 0, 1, 2}; sum(v == r) == v[]",
7845 "var v[5]; iota(v, 0, v[] - 1, 0,0); var r[5] := { 0, 0, 0, 0, 0}; sum(v == r) == v[]",
7846 "var v[5]; iota(v, 0, v[] - 1, 1,0); var r[5] := { 1, 1, 1, 1, 1}; sum(v == r) == v[]",
7848 "var v[5]; iota(v, 1, v[] - 1, 0,1); var r[5] := { 0, 0, 1, 2, 3 }; sum(v == r) == v[]",
7849 "var v[5]; iota(v, 1, v[] - 1, 0,2); var r[5] := { 0, 0, 2, 4, 6 }; sum(v == r) == v[]",
7850 "var v[5]; iota(v, 1, v[] - 1, 1,1); var r[5] := { 0, 1, 2, 3, 4 }; sum(v == r) == v[]",
7851 "var v[5]; iota(v, 1, v[] - 1, 1,2); var r[5] := { 0, 1, 3, 5, 7 }; sum(v == r) == v[]",
7852 "var v[5]; iota(v, 1, v[] - 1,-1,1); var r[5] := { 0, -1, 0, 1, 2 }; sum(v == r) == v[]",
7853 "var v[5]; iota(v, 1, v[] - 1,-1,2); var r[5] := { 0, -1, 1, 3, 5 }; sum(v == r) == v[]",
7854 "var v[5]; iota(v, 1, v[] - 1,-2,1); var r[5] := { 0, -2,-1, 0, 1 }; sum(v == r) == v[]",
7855 "var v[5]; iota(v, 1, v[] - 1,-2,2); var r[5] := { 0, -2, 0, 2, 4 }; sum(v == r) == v[]",
7856 "var v[5]; iota(v, 1, v[] - 1, 0 ); var r[5] := { 0, 0, 1, 2, 3 }; sum(v == r) == v[]",
7857 "var v[5]; iota(v, 1, v[] - 1, 1 ); var r[5] := { 0, 1, 2, 3, 4 }; sum(v == r) == v[]",
7858 "var v[5]; iota(v, 1, v[] - 1,-1 ); var r[5] := { 0, -1, 0, 1, 2 }; sum(v == r) == v[]",
7859 "var v[5]; iota(v, 1, v[] - 1,-2 ); var r[5] := { 0, -2,-1, 0, 1 }; sum(v == r) == v[]",
7861 "var v[5]; iota(v, 1, v[] - 2, 0,1); var r[5] := { 0, 0, 1, 2, 0 }; sum(v == r) == v[]",
7862 "var v[5]; iota(v, 1, v[] - 2, 0,2); var r[5] := { 0, 0, 2, 4, 0 }; sum(v == r) == v[]",
7863 "var v[5]; iota(v, 1, v[] - 2, 1,1); var r[5] := { 0, 1, 2, 3, 0 }; sum(v == r) == v[]",
7864 "var v[5]; iota(v, 1, v[] - 2, 1,2); var r[5] := { 0, 1, 3, 5, 0 }; sum(v == r) == v[]",
7865 "var v[5]; iota(v, 1, v[] - 2,-1,1); var r[5] := { 0, -1, 0, 1, 0 }; sum(v == r) == v[]",
7866 "var v[5]; iota(v, 1, v[] - 2,-1,2); var r[5] := { 0, -1, 1, 3, 0 }; sum(v == r) == v[]",
7867 "var v[5]; iota(v, 1, v[] - 2,-2,1); var r[5] := { 0, -2,-1, 0, 0 }; sum(v == r) == v[]",
7868 "var v[5]; iota(v, 1, v[] - 2,-2,2); var r[5] := { 0, -2, 0, 2, 0 }; sum(v == r) == v[]",
7869 "var v[5]; iota(v, 1, v[] - 2, 0 ); var r[5] := { 0, 0, 1, 2, 0 }; sum(v == r) == v[]",
7870 "var v[5]; iota(v, 1, v[] - 2, 1 ); var r[5] := { 0, 1, 2, 3, 0 }; sum(v == r) == v[]",
7871 "var v[5]; iota(v, 1, v[] - 2,-1 ); var r[5] := { 0, -1, 0, 1, 0 }; sum(v == r) == v[]",
7872 "var v[5]; iota(v, 1, v[] - 2,-2 ); var r[5] := { 0, -2,-1, 0, 0 }; sum(v == r) == v[]",
7874 "var v[5]; iota(v, 0, v[] - 2, 0,1); var r[5] := { 0, 1, 2, 3, 0}; sum(v == r) == v[]",
7875 "var v[5]; iota(v, 0, v[] - 2, 0,2); var r[5] := { 0, 2, 4, 6, 0}; sum(v == r) == v[]",
7876 "var v[5]; iota(v, 0, v[] - 2, 1,1); var r[5] := { 1, 2, 3, 4, 0}; sum(v == r) == v[]",
7877 "var v[5]; iota(v, 0, v[] - 2, 1,2); var r[5] := { 1, 3, 5, 7, 0}; sum(v == r) == v[]",
7878 "var v[5]; iota(v, 0, v[] - 2,-1,1); var r[5] := {-1, 0, 1, 2, 0}; sum(v == r) == v[]",
7879 "var v[5]; iota(v, 0, v[] - 2,-1,2); var r[5] := {-1, 1, 3, 5, 0}; sum(v == r) == v[]",
7880 "var v[5]; iota(v, 0, v[] - 2,-2,1); var r[5] := {-2,-1, 0, 1, 0}; sum(v == r) == v[]",
7881 "var v[5]; iota(v, 0, v[] - 2,-2,2); var r[5] := {-2, 0, 2, 4, 0}; sum(v == r) == v[]",
7882 "var v[5]; iota(v, 0, v[] - 2, 0 ); var r[5] := { 0, 1, 2, 3, 0}; sum(v == r) == v[]",
7883 "var v[5]; iota(v, 0, v[] - 2, 1 ); var r[5] := { 1, 2, 3, 4, 0}; sum(v == r) == v[]",
7884 "var v[5]; iota(v, 0, v[] - 2,-1 ); var r[5] := {-1, 0, 1, 2, 0}; sum(v == r) == v[]",
7885 "var v[5]; iota(v, 0, v[] - 2,-2 ); var r[5] := {-2,-1, 0, 1, 0}; sum(v == r) == v[]",
7887 "var v[5]; iota(v, 0, -1); var r[5] := { 0, -1, -2, -3, -4}; sum(v == r) == v[]",
7888 "var v[5]; iota(v, 0, -2); var r[5] := { 0, -2, -4, -6, -8}; sum(v == r) == v[]",
7889 "var v[5]; iota(v, -1, -2); var r[5] := { -1, -3, -5, -7, -9}; sum(v == r) == v[]",
7891 "var v[5]; iota(v, 0, v[] -1, 0, -1); var r[5] := { 0, -1, -2, -3, -4}; sum(v == r) == v[]",
7892 "var v[5]; iota(v, 0, v[] -1, 0, -2); var r[5] := { 0, -2, -4, -6, -8}; sum(v == r) == v[]",
7893 "var v[5]; iota(v, 0, v[] -1, -1, -2); var r[5] := { -1, -3, -5, -7, -9}; sum(v == r) == v[]",
7895 "var v[5]; iota(v, 0,1); threshold_below(v,2, 0) var r[5] := { 0, 0, 2, 3, 4}; sum(v == r) == v[]",
7896 "var v[5]; iota(v, 0,1); threshold_above(v,2, 0) var r[5] := { 0, 1, 2, 0, 0}; sum(v == r) == v[]",
7898 "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[]",
7899 "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[]",
7901 "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[]",
7902 "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[]",
7904 "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[]",
7905 "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[]",
7907 " 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[]",
7908 " 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[]",
7910 " 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[]",
7911 " 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[]",
7912 " 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[]",
7915 const std::size_t expr_str_list_size =
sizeof(expr_str_list) /
sizeof(std::string);
7919 for (std::size_t i = 0; i < expr_str_list_size; ++i)
7921 expression_t expression;
7922 expression.register_symbol_table(symbol_table);
7924 if (!parser.compile(expr_str_list[i], expression))
7926 printf(
"run_test18() - [14] Error: %s Expression: %s\n",
7927 parser.error().c_str(),
7928 expr_str_list[i].c_str());
7935 const T result = expression.value();
7939 printf(
"run_test18() - Error in evaluation! (11) Expression: %s\n",
7940 expr_str_list[i].c_str());
7955 std::string a =
"a";
7956 std::string b =
"b";
7957 std::string c =
"c";
7958 std::string d =
"d";
7967 "T:T|T:TT|T:TTT|T:TTTT|"
7968 "T:S|T:SS|T:SSS|T:SSSS|"
7969 "T:ST|T:STS|T:STST|"
7970 "T:TS|T:TST|T:TSTS|"
7971 "T:TTSS|T:SSTT|T:STTS|T:TSST"
7990 typedef std::pair<std::string, typename overload_func<T>::test_result_t> test_pack_t;
7992 static const test_pack_t test_pack_list[] =
7994 test_pack_t(
"foo(x)" , test_result_t( 0,
"T" )),
7995 test_pack_t(
"foo(x, y)" , test_result_t( 1,
"TT" )),
7996 test_pack_t(
"foo(x, y, z)" , test_result_t( 2,
"TTT" )),
7997 test_pack_t(
"foo(x, y, z, w)" , test_result_t( 3,
"TTTT")),
7998 test_pack_t(
"foo(x + y)" , test_result_t( 0,
"T" )),
7999 test_pack_t(
"foo(x + y, y + z)" , test_result_t( 1,
"TT" )),
8000 test_pack_t(
"foo(x + y, y + z, z + w)" , test_result_t( 2,
"TTT" )),
8001 test_pack_t(
"foo(x + y, y + z, z + w, w)" , test_result_t( 3,
"TTTT")),
8002 test_pack_t(
"foo(a)" , test_result_t( 4,
"S" )),
8003 test_pack_t(
"foo(a, b)" , test_result_t( 5,
"SS" )),
8004 test_pack_t(
"foo(a, b, c)" , test_result_t( 6,
"SSS" )),
8005 test_pack_t(
"foo(a, b, c, d)" , test_result_t( 7,
"SSSS")),
8006 test_pack_t(
"foo(a + b)" , test_result_t( 4,
"S" )),
8007 test_pack_t(
"foo(a + b, b + c)" , test_result_t( 5,
"SS" )),
8008 test_pack_t(
"foo(a + b, b + c, c + d)" , test_result_t( 6,
"SSS" )),
8009 test_pack_t(
"foo(a + b, b + c, c + d, d)" , test_result_t( 7,
"SSSS")),
8010 test_pack_t(
"foo(a, x)" , test_result_t( 8,
"ST" )),
8011 test_pack_t(
"foo(a, x, b)" , test_result_t( 9,
"STS" )),
8012 test_pack_t(
"foo(a, x, b, y)" , test_result_t(10,
"STST")),
8013 test_pack_t(
"foo(a + b, x + y)" , test_result_t( 8,
"ST" )),
8014 test_pack_t(
"foo(a + b, x + y, b + c)" , test_result_t( 9,
"STS" )),
8015 test_pack_t(
"foo(a + b, x + y, b + c, y + z)" , test_result_t(10,
"STST")),
8016 test_pack_t(
"foo(x, a)" , test_result_t(11,
"TS" )),
8017 test_pack_t(
"foo(x, a, y)" , test_result_t(12,
"TST" )),
8018 test_pack_t(
"foo(x, a, y, b)" , test_result_t(13,
"TSTS")),
8019 test_pack_t(
"foo(x + y, a + b)" , test_result_t(11,
"TS" )),
8020 test_pack_t(
"foo(x + y, a + b, y + z)" , test_result_t(12,
"TST" )),
8021 test_pack_t(
"foo(x + y, a + b, y + z, b + c)" , test_result_t(13,
"TSTS")),
8022 test_pack_t(
"foo(x, y, a, b)" , test_result_t(14,
"TTSS")),
8023 test_pack_t(
"foo(a, b, x, y)" , test_result_t(15,
"SSTT")),
8024 test_pack_t(
"foo(a, x, y, b)" , test_result_t(16,
"STTS")),
8025 test_pack_t(
"foo(x, a, b, y)" , test_result_t(17,
"TSST")),
8026 test_pack_t(
"foo(x + y, y + z, a + b, b + c)" , test_result_t(14,
"TTSS")),
8027 test_pack_t(
"foo(a + b, b + c, x + y, y + z)" , test_result_t(15,
"SSTT")),
8028 test_pack_t(
"foo(a + b, x + y, y + z, b + c)" , test_result_t(16,
"STTS")),
8029 test_pack_t(
"foo(x + y, a + b, b + c, y + z)" , test_result_t(17,
"TSST"))
8032 static const std::size_t test_pack_list_size =
sizeof(test_pack_list) /
sizeof(test_pack_t);
8036 for (std::size_t i = 0; i < test_pack_list_size; ++i)
8038 expression_t expression;
8039 expression.register_symbol_table(symbol_table);
8043 if (!parser.
compile(test_pack_list[i].first, expression))
8045 printf(
"run_test18() - [15] Overload VarArg Error: %s Expression: %s\n",
8046 parser.
error().c_str(),
8047 test_pack_list[i].first.c_str());
8055 bool error_found =
false;
8063 printf(
"run_test18() - Error in evaluation! (12) Expression: %s\n",
8064 test_pack_list[i].first.c_str());
8071 printf(
"run_test18() - Error with ps_index (12) Expression: %s Expected: %d Got: %d\n",
8072 test_pack_list[i].first.c_str(),
8073 static_cast<int>(test_pack_list[i].second.ps_index),
8081 printf(
"run_test18() - Error with parameter seq (12) Expression: %s Expected: %s Got: %s\n",
8082 test_pack_list[i].first.c_str(),
8083 test_pack_list[i].second.param_seq.c_str(),
8100 std::string a =
"a";
8101 std::string b =
"b";
8102 std::string c =
"c";
8103 std::string d =
"d";
8104 std::string result =
"";
8113 "S:T|S:TT|S:TTT|S:TTTT|"
8114 "S:S|S:SS|S:SSS|S:SSSS|"
8115 "S:ST|S:STS|S:STST|"
8116 "S:TS|S:TST|S:TSTS|"
8117 "S:TTSS|S:SSTT|S:STTS|S:TSST"
8137 typedef std::pair<std::string, typename overload_func<T>::test_result_t> test_pack_t;
8139 static const test_pack_t test_pack_list[] =
8141 test_pack_t(
"result := foo(x)" , test_result_t( 0,
"T" )),
8142 test_pack_t(
"result := foo(x, y)" , test_result_t( 1,
"TT" )),
8143 test_pack_t(
"result := foo(x, y, z)" , test_result_t( 2,
"TTT" )),
8144 test_pack_t(
"result := foo(x, y, z, w)" , test_result_t( 3,
"TTTT")),
8145 test_pack_t(
"result := foo(x + y)" , test_result_t( 0,
"T" )),
8146 test_pack_t(
"result := foo(x + y, y + z)" , test_result_t( 1,
"TT" )),
8147 test_pack_t(
"result := foo(x + y, y + z, z + w)" , test_result_t( 2,
"TTT" )),
8148 test_pack_t(
"result := foo(x + y, y + z, z + w, w)" , test_result_t( 3,
"TTTT")),
8149 test_pack_t(
"result := foo(a)" , test_result_t( 4,
"S" )),
8150 test_pack_t(
"result := foo(a, b)" , test_result_t( 5,
"SS" )),
8151 test_pack_t(
"result := foo(a, b, c)" , test_result_t( 6,
"SSS" )),
8152 test_pack_t(
"result := foo(a, b, c, d)" , test_result_t( 7,
"SSSS")),
8153 test_pack_t(
"result := foo(a + b)" , test_result_t( 4,
"S" )),
8154 test_pack_t(
"result := foo(a + b, b + c)" , test_result_t( 5,
"SS" )),
8155 test_pack_t(
"result := foo(a + b, b + c, c + d)" , test_result_t( 6,
"SSS" )),
8156 test_pack_t(
"result := foo(a + b, b + c, c + d, d)" , test_result_t( 7,
"SSSS")),
8157 test_pack_t(
"result := foo(a, x)" , test_result_t( 8,
"ST" )),
8158 test_pack_t(
"result := foo(a, x, b)" , test_result_t( 9,
"STS" )),
8159 test_pack_t(
"result := foo(a, x, b, y)" , test_result_t(10,
"STST")),
8160 test_pack_t(
"result := foo(a + b, x + y)" , test_result_t( 8,
"ST" )),
8161 test_pack_t(
"result := foo(a + b, x + y, b + c)" , test_result_t( 9,
"STS" )),
8162 test_pack_t(
"result := foo(a + b, x + y, b + c, y + z)" , test_result_t(10,
"STST")),
8163 test_pack_t(
"result := foo(x, a)" , test_result_t(11,
"TS" )),
8164 test_pack_t(
"result := foo(x, a, y)" , test_result_t(12,
"TST" )),
8165 test_pack_t(
"result := foo(x, a, y, b)" , test_result_t(13,
"TSTS")),
8166 test_pack_t(
"result := foo(x + y, a + b)" , test_result_t(11,
"TS" )),
8167 test_pack_t(
"result := foo(x + y, a + b, y + z)" , test_result_t(12,
"TST" )),
8168 test_pack_t(
"result := foo(x + y, a + b, y + z, b + c)" , test_result_t(13,
"TSTS")),
8169 test_pack_t(
"result := foo(x, y, a, b)" , test_result_t(14,
"TTSS")),
8170 test_pack_t(
"result := foo(a, b, x, y)" , test_result_t(15,
"SSTT")),
8171 test_pack_t(
"result := foo(a, x, y, b)" , test_result_t(16,
"STTS")),
8172 test_pack_t(
"result := foo(x, a, b, y)" , test_result_t(17,
"TSST")),
8173 test_pack_t(
"result := foo(x + y, y + z, a + b, b + c)" , test_result_t(14,
"TTSS")),
8174 test_pack_t(
"result := foo(a + b, b + c, x + y, y + z)" , test_result_t(15,
"SSTT")),
8175 test_pack_t(
"result := foo(a + b, x + y, y + z, b + c)" , test_result_t(16,
"STTS")),
8176 test_pack_t(
"result := foo(x + y, a + b, b + c, y + z)" , test_result_t(17,
"TSST"))
8179 static const std::size_t test_pack_list_size =
sizeof(test_pack_list) /
sizeof(test_pack_t);
8183 for (std::size_t i = 0; i < test_pack_list_size; ++i)
8185 expression_t expression;
8186 expression.register_symbol_table(symbol_table);
8190 if (!parser.
compile(test_pack_list[i].first, expression))
8192 printf(
"run_test18() - [16] Overload VarArg Error: %s Expression: %s\n",
8193 parser.
error().c_str(),
8194 test_pack_list[i].first.c_str());
8202 bool error_found =
false;
8210 if (result !=
"string result")
8212 printf(
"run_test18() - Error in evaluation! (13) Expression: %s\n",
8213 test_pack_list[i].first.c_str());
8220 printf(
"run_test18() - Error with ps_index (13) Expression: %s Expected: %d Got: %d\n",
8221 test_pack_list[i].first.c_str(),
8222 static_cast<int>(test_pack_list[i].second.ps_index),
8230 printf(
"run_test18() - Error with parameter seq (13) Expression: %s Expected: %s Got: %s\n",
8231 test_pack_list[i].first.c_str(),
8232 test_pack_list[i].second.param_seq.c_str(),
8250 typedef std::pair<std::string,std::size_t> rtc_test_t;
8251 static const rtc_test_t rtc_tests[] =
8253 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i + v[]]; } ", 5 ),
8254 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i + 10]; } ", 5 ),
8255 std::make_pair(
" x:= 0; for (var i := 0; i < (2 * v[]); i += 1) { x += (v[i] == vv[i]); } ", 10),
8256 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i + v[]] := i; } ", 5 ),
8257 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i + v[]] <=> v[i]; } ", 5 ),
8258 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i] <=> v[i + v[]]; } ", 10),
8259 std::make_pair(
" var z[5] := [1]; for (var i := 0; i < z[]; i += 1) { z[i + z[]]; } ", 5 ),
8260 std::make_pair(
" var z[5] := [1]; for (var i := 0; i < z[]; i += 1) { z[i + 10]; } ", 5 ),
8261 std::make_pair(
" var z[5] := [1]; for (var i := 0; i < z[]; i += 1) { z[i + z[]] := i; } ", 5 ),
8262 std::make_pair(
" var z[5] := [1]; for (var i := 0; i < z[]; i += 1) { z[i + z[]] <=> z[i]; } ", 5 ),
8263 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v*w)[i + v[]]; } ", 10),
8264 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v*w)[i+w[]]; } ", 10),
8265 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v+w)[i + v[]]; } ", 10),
8266 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v+w)[i+w[]]; } ", 10),
8267 std::make_pair(
" var z[4] := [1]; for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v*z)[i+v[]]; } ", 10),
8268 std::make_pair(
" var z[4] := [1]; for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v*z)[i+w[]]; } ", 9 ),
8269 std::make_pair(
" var z[4] := [1]; for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v+z)[i+v[]]; } ", 10),
8270 std::make_pair(
" var z[4] := [1]; for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v+z)[i+z[]]; } ", 10),
8271 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 ),
8272 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 ),
8273 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 ),
8274 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 ),
8275 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 ),
8276 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 ),
8277 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 ),
8278 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 ),
8279 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 ),
8280 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 ),
8281 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 ),
8282 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 ),
8283 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 ),
8284 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 ),
8285 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 ),
8286 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 ),
8287 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 ),
8290 static const std::size_t rtc_tests_size =
sizeof(rtc_tests) /
sizeof(rtc_test_t);
8292 bool error_found =
false;
8294 for (std::size_t i = 0; i < rtc_tests_size; ++i)
8296 const std::string& expression_str = rtc_tests[i].first;
8300 T v[5] = { 0, 1, 2, 3, 4 };
8301 T w[3] = { 0, 1, 2 };
8305 symbol_table_t symbol_table;
8306 expression_t expression;
8309 symbol_table.add_variable(
"x" , x );
8310 symbol_table.add_vector (
"v" , v );
8311 symbol_table.add_vector (
"w" , w );
8312 symbol_table.add_vector (
"vv", vv);
8313 symbol_table.add_vector (
"ww", ww);
8317 expression.register_symbol_table(symbol_table);
8319 parser.register_vector_access_runtime_check(vartc);
8321 if (!parser.compile(expression_str, expression))
8323 printf(
"run_test18() - Error: %s\t [1] Expression: %s\n",
8324 parser.error().c_str(),
8325 expression_str.c_str());
8334 if (vartc.
rtc_count != rtc_tests[i].second)
8336 printf(
"run_test18() - Expected rtc_count: %d got rtc_count: %d [0] Expression: %s\n",
8337 static_cast<unsigned int>(rtc_tests[i].second),
8338 static_cast<unsigned int>(vartc.
rtc_count),
8339 expression_str.c_str());
8346 T v[5] = { 0, 1, 2, 3, 4 };
8347 T w[3] = { 0, 1, 2 };
8348 T v0[5] = { 0, 1, 2, 3, 4 };
8349 T v1[5] = { 0, 1, 2, 3, 4 };
8353 symbol_table_t symbol_table;
8354 expression_t expression;
8357 symbol_table.add_variable(
"x" , x );
8358 symbol_table.add_vector (
"v" , v );
8359 symbol_table.add_vector (
"w" , w );
8360 symbol_table.add_vector (
"vv", vv);
8361 symbol_table.add_vector (
"ww", ww);
8365 expression.register_symbol_table(symbol_table);
8367 parser.register_vector_access_runtime_check(vartc);
8369 if (!parser.compile(expression_str, expression))
8371 printf(
"run_test18() - Error: %s\t [2] Expression: %s\n",
8372 parser.error().c_str(),
8373 expression_str.c_str());
8383 if (vartc.
rtc_count != rtc_tests[i].second)
8385 printf(
"run_test18() - Expected rtc_count: %d got rtc_count: %d [1] Expression: %s\n",
8386 static_cast<unsigned int>(rtc_tests[i].second),
8387 static_cast<unsigned int>(vartc.
rtc_count),
8388 expression_str.c_str());
8396 if (vartc.
rtc_count != rtc_tests[i].second)
8398 printf(
"run_test18() - Expected rtc_count: %d got rtc_count: %d [2] Expression: %s\n",
8399 static_cast<unsigned int>(rtc_tests[i].second),
8400 static_cast<unsigned int>(vartc.
rtc_count),
8401 expression_str.c_str());
8446 typedef typename compositor_t::function function_t;
8451 compositor_t compositor;
8454 compositor.add(function_t(
"f",
"x + 2",
"x"));
8457 compositor.add(function_t(
"g",
"x^2 - 3",
"x"));
8460 compositor.add(function_t(
"fof",
"f(f(x))",
"x"));
8463 compositor.add(function_t(
"gog",
"g(g(x))",
"x"));
8466 compositor.add(function_t(
"fog",
"f(g(x))",
"x"));
8469 compositor.add(function_t(
"gof",
"g(f(x))",
"x"));
8472 compositor.add(function_t(
"fogof",
"f(g(f(x)))",
"x"));
8475 compositor.add(function_t(
"gofog",
"g(f(g(x)))",
"x"));
8477 symbol_table_t& symbol_table = compositor.symbol_table();
8478 symbol_table.add_constants();
8479 symbol_table.add_variable(
"x", x);
8481 static const std::string expr_str_list[] =
8483 "equal(f(x),(x + 2))",
8484 "equal(g(x),(x^2 - 3))",
8485 "equal(fof(x),(x + 4))",
8486 "equal(gog(x),(x^4 - 6x^2 + 6))",
8487 "equal(fog(x),(x^2 - 1))",
8488 "equal(gof(x),(x^2 + 4x + 1))",
8489 "equal(fogof(x),(x^2 + 4x + 3))",
8490 "equal(gofog(x),(x^4 - 2x^2 - 2))"
8492 static const std::size_t expr_str_list_size =
sizeof(expr_str_list) /
sizeof(std::string);
8496 for (std::size_t i = 0; i < expr_str_list_size; ++i)
8498 expression_t expression;
8499 expression.register_symbol_table(symbol_table);
8503 if (!parser.compile(expr_str_list[i], expression))
8505 printf(
"run_test19() - Error: %s Expression: %s\n",
8506 parser.error().c_str(),
8507 expr_str_list[i].c_str());
8515 bool error_found =
false;
8521 printf(
"run_test19() - Error in evaluation! (1) Expression: %s\n",
8522 expr_str_list[i].c_str());
8535 const std::size_t
rounds = 100;
8537 for (std::size_t r = 0; r <
rounds; ++r)
8546 compositor_t compositor;
8552 .expression(
"3 * 2"));
8559 .expression(
"5 * (f0 + x)"));
8566 .expression(
"7 * (f1(x) + f1(y))"));
8572 .var(
"x").var(
"y").var(
"z")
8573 .expression(
"9 * (f2(x,y) + f2(y,z) + f2(x,z))"));
8579 .var(
"x").var(
"y").var(
"z").var(
"w")
8580 .expression(
"11 * (f3(x,y,z) + f3(y,z,w) + f3(z,w,x))"));
8586 .var(
"x").var(
"y").var(
"z").var(
"w").var(
"u")
8587 .expression(
"13 * (f4(x,y,z,w) + f4(y,z,w,u) + f4(z,w,u,x) + f4(w,u,x,y))"));
8593 .var(
"x").var(
"y").var(
"z")
8594 .var(
"w").var(
"u").var(
"v")
8595 .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))"));
8597 symbol_table_t& symbol_table = compositor.symbol_table();
8598 symbol_table.add_constants();
8599 symbol_table.add_variable(
"x", x);
8600 symbol_table.add_variable(
"y", y);
8601 symbol_table.add_variable(
"z", z);
8602 symbol_table.add_variable(
"w", w);
8603 symbol_table.add_variable(
"u", u);
8604 symbol_table.add_variable(
"v", v);
8608 const std::string expr_str_list[] =
8624 const std::size_t expr_str_list_size =
sizeof(expr_str_list) /
sizeof(std::string);
8626 const T result_list[] =
8642 bool error_found =
false;
8644 for (std::size_t i = 0; i < expr_str_list_size; ++i)
8646 expression_t expression;
8647 expression.register_symbol_table(symbol_table);
8649 if (!parser.compile(expr_str_list[i], expression))
8651 printf(
"run_test19() - Error: %s Expression: %s\n",
8652 parser.error().c_str(),
8653 expr_str_list[i].c_str());
8659 const T result = expression.value();
8661 if (result_list[i] != result)
8663 printf(
"run_test19() - Error in evaluation! (2) Expression: %s Expected: %10.1f\tResult: %10.1f\n",
8664 expr_str_list[i].c_str(),
8665 static_cast<double>(result_list[i]),
8666 static_cast<double>(result));
8683 compositor_t compositor;
8690 " if (0 == (x % y),false, "
8691 " is_prime_impl1(x,y - 1))) ",
8698 "if (frac(x) != 0, false, "
8699 " if (x <= 0, false, "
8700 " is_prime_impl1(x,min(x - 1,trunc(sqrt(x)) + 1)))) ",
8709 " case y == 1 : true; "
8710 " case (x % y) == 0 : false; "
8711 " default : is_prime_impl2(x,y - 1);"
8721 " case x <= 0 : false; "
8722 " case frac(x) != 0 : false; "
8723 " default : is_prime_impl2(x,min(x - 1,trunc(sqrt(x)) + 1));"
8735 " case y == 1 : ~(y := 0, true);"
8736 " case (x % y) == 0 : ~(y := 0,false);"
8737 " default : y := y - 1; "
8748 " case x <= 0 : false; "
8749 " case frac(x) != 0 : false; "
8750 " default : is_prime_impl3(x,min(x - 1,trunc(sqrt(x)) + 1));"
8760 " case 1 == x : false; "
8761 " case 2 == x : true; "
8762 " case 3 == x : true; "
8763 " case 5 == x : true; "
8764 " case 7 == x : true; "
8765 " case 0 == x % 2 : false; "
8768 " for (var i := 3; i < y; i += 2) "
8770 " if ((x % i) == 0) "
8785 " case x <= 0 : false; "
8786 " case frac(x) != 0 : false; "
8787 " default : is_prime_impl4(x,min(x - 1,trunc(sqrt(x)) + 1));"
8791 symbol_table_t& symbol_table = compositor.symbol_table();
8792 symbol_table.add_constants();
8793 symbol_table.add_variable(
"x",x);
8795 const std::string expression_str[] =
8803 const std::size_t expression_count =
sizeof(expression_str) /
sizeof(std::string);
8807 for (std::size_t i = 0; i < expression_count; ++i)
8811 expression_t expression;
8812 expression.register_symbol_table(symbol_table);
8814 if (!parser.compile(expression_str[i],expression))
8816 printf(
"run_test19() - Error: %s Expression%d: %s\n",
8817 parser.error().c_str(),
8818 static_cast<unsigned int>(i),
8819 expression_str[i].c_str());
8827 bool error_found =
false;
8829 const std::size_t prime_list[] =
8831 2, 3, 5, 7, 11, 13, 17, 19,
8832 877, 947, 1087, 1153, 1229, 1297, 1381, 1453,
8833 1523, 1597, 1663, 1741, 1823, 1901, 1993, 2063,
8834 2131, 2221, 2293, 2371, 2437, 2539, 2621, 2689,
8835 2749, 2833, 2909, 3001, 3083, 3187, 3259, 3343,
8836 3433, 3517, 3581, 3659, 3733, 3823, 3911, 4001,
8837 4073, 4153, 4241, 4327, 4421, 4507, 4591, 4663,
8838 4759, 4861, 4943, 5009, 5099, 5189, 5281, 5393,
8839 5449, 5527, 5641, 5701, 5801, 5861, 5953, 6067,
8840 6143, 6229, 6311, 6373, 6481, 6577, 6679, 6763,
8841 6841, 6947, 7001, 7109, 7211, 7307, 7417, 7507,
8842 104309, 104311, 104323, 104327, 104347, 104369, 104381, 104383,
8843 104393, 104399, 104417, 104459, 104471, 104473, 104479, 104491,
8844 104513, 104527, 104537, 104543, 104549, 104551, 104561, 104579,
8845 104593, 104597, 104623, 104639, 104651, 104659, 104677, 104681,
8846 104683, 104693, 104701, 104707, 104711, 104717, 104723, 104729,
8847 1000621, 1000639, 1000651, 1000667, 1000669, 1001023, 1001027, 1001041
8850 const std::size_t prime_list_size =
sizeof(prime_list) /
sizeof(std::size_t);
8852 for (std::size_t i = 0; (i < prime_list_size) && (!error_found); ++i)
8854 x =
static_cast<T
>(prime_list[i]);
8856 std::vector<T> result(expression_count,T(0));
8865 if (result[j] != result[0])
8874 printf(
"run_test19() - Error in evaluation! (3) Results don't match! Prime: %d\n",
8875 static_cast<unsigned int>(prime_list[i]));
8879 printf(
"Expression[%02d]: %s = %d\n",
8880 static_cast<unsigned int>(j),
8881 expression_str[j].c_str(),
8882 static_cast<unsigned int>(result[j]));
8887 printf(
"run_test19() - Error in evaluation! (4) Results don't match! Prime: %d\n",
8888 static_cast<unsigned int>(prime_list[i]));
8892 printf(
"Expression[%02d]: %s = %d\n",
8893 static_cast<unsigned int>(j),
8894 expression_str[j].c_str(),
8895 static_cast<unsigned int>(result[j]));
8909 compositor_t compositor;
8917 " fibonacci1(x - 1) + fibonacci1(x - 2)))",
8926 " case x == 0 : 0; "
8927 " case x == 1 : 1; "
8928 " default : fibonacci2(x - 1) + fibonacci2(x - 2);"
8938 " case x == 0 : 0; "
8939 " case x == 1 : 1; "
8941 " while ((x := (x - 1)) > 0) "
8955 "fibonacci_impl3(x,0,1,0)",
8964 " case x == 0 : 0; "
8965 " case x == 1 : 1; "
8981 "fibonacci_impl4(x,0,1,0)",
8988 "if ((x == 0) or (x == 1)) "
8991 " fibonacci5(x - 1) + fibonacci5(x - 2); ",
8994 symbol_table_t& symbol_table = compositor.symbol_table();
8996 symbol_table.add_constants();
8997 symbol_table.add_variable(
"x",x);
8999 const std::string expression_str[] =
9008 const std::size_t expression_count =
sizeof(expression_str) /
sizeof(std::string);
9012 for (std::size_t i = 0; i < expression_count; ++i)
9016 expression_t expression;
9017 expression.register_symbol_table(symbol_table);
9019 if (!parser.compile(expression_str[i],expression))
9021 printf(
"run_test19() - Error: %s Expression[%02d]: %s\n",
9022 parser.error().c_str(),
9023 static_cast<unsigned int>(i),
9024 expression_str[i].c_str());
9032 bool error_found =
false;
9034 const std::size_t fibonacci_list[] =
9040 987, 1597, 2584, 4181,
9041 6765, 10946, 17711, 28657,
9042 46368, 75025, 121393, 196418,
9043 317811, 514229, 832040, 1346269
9046 const std::size_t fibonacci_list_size =
sizeof(fibonacci_list) /
sizeof(std::size_t);
9048 for (std::size_t i = 0; (i < fibonacci_list_size) && (!error_found); ++i)
9050 x =
static_cast<T
>(i);
9052 std::vector<T> result(expression_count,T(0));
9061 if (result[j] != result[0])
9070 printf(
"run_test19() - Error in evaluation! (5) Results don't match! fibonacci(%d) = %d\n",
9071 static_cast<unsigned int>(i),
9072 static_cast<unsigned int>(fibonacci_list[i]));
9076 printf(
"Expression[%02d]: %s = %d\n",
9077 static_cast<unsigned int>(j),
9078 expression_str[j].c_str(),
9079 static_cast<unsigned int>(result[j]));
9084 printf(
"run_test19() - Error in evaluation! (6) Results don't match! fibonacci(%d) = %d\n",
9085 static_cast<unsigned int>(i),
9086 static_cast<unsigned int>(fibonacci_list[i]));
9090 printf(
"Expression[%02d]: %s = %d\n",
9091 static_cast<unsigned int>(j),
9092 expression_str[j].c_str(),
9093 static_cast<unsigned int>(result[j]));
9107 symbol_table_t symbol_table;
9109 symbol_table.add_constants();
9110 symbol_table.add_variable(
"x",x);
9112 compositor_t compositor(symbol_table);
9120 " case x < 0 : -inf; "
9121 " case x == 0 : 0; "
9122 " case x == 1 : 1; "
9128 " y := (1 / 2) * (y + (x / y)); "
9129 " if (equal(y * y,x)) "
9131 " until ((z -= 1) <= 0); "
9140 "newton_sqrt_impl(x,0,0)",
"x"));
9142 std::string expression_str =
"newton_sqrt(x)";
9144 expression_t expression;
9146 expression.register_symbol_table(symbol_table);
9150 if (!parser.compile(expression_str,expression))
9152 printf(
"run_test19() - Error: %s Expression: %s\n",
9153 parser.error().c_str(),
9154 expression_str.c_str());
9159 bool error_found =
false;
9161 for (std::size_t i = 0; i < 100; ++i)
9163 x =
static_cast<T
>(i);
9165 const T result = expression.value();
9169 printf(
"run_test19() - Computation Error "
9170 "Expression: [%s]\tExpected: %12.8f\tResult: %12.8f\n",
9171 expression_str.c_str(),
9173 static_cast<double>(result));
9186 symbol_table_t symbol_table;
9188 symbol_table.add_constants();
9190 compositor_t compositor(symbol_table);
9196 " var width := 118; "
9197 " var height := 41; "
9198 " var imag_max := +1; "
9199 " var imag_min := -1; "
9200 " var real_max := +1; "
9201 " var real_min := -2.5; "
9202 " var x_step := (real_max - real_min) / width; "
9203 " var y_step := (imag_max - imag_min) / height; "
9204 " for (var y := 0; y < height; y += 1) "
9206 " var imag := imag_min + (y_step * y); "
9207 " for (var x := 0; x < width; x += 1) "
9209 " var real := real_min + x_step * x; "
9210 " var z_real := real; "
9211 " var z_imag := imag; "
9213 " for (var n := 0; n < 30; n += 1) "
9215 " var a := z_real^2; "
9216 " var b := z_imag^2; "
9217 " plot_value := n; "
9218 " if ((a + b) < 4) "
9220 " z_imag := 2 * z_real * z_imag + imag; "
9221 " z_real := a - b + real; "
9229 std::string expression_str =
"mandelbrot()";
9231 expression_t expression;
9233 expression.register_symbol_table(symbol_table);
9237 if (!parser.compile(expression_str,expression))
9239 printf(
"run_test19() - Error: %s Expression: %s\n",
9240 parser.error().c_str(),
9241 expression_str.c_str());
9246 for (std::size_t i = 0; i < 100; ++i)
9255 symbol_table_t symbol_table;
9257 symbol_table.add_variable(
"x",x);
9259 compositor_t compositor(symbol_table);
9267 " fooboo(x - 1) + x; "
9272 std::string expression_str =
"fOoBoO(x)";
9274 expression_t expression;
9276 expression.register_symbol_table(symbol_table);
9280 if (!parser.compile(expression_str,expression))
9282 printf(
"run_test19() - Error: %s Expression: %s\n",
9283 parser.error().c_str(),
9284 expression_str.c_str());
9291 for (std::size_t i = 0; i < 100; ++i)
9297 const T result = expression.value();
9301 printf(
"run_test19() - FooBoo(%5.2f) Expected: %5.2f\tResult: %5.2f\n",
9302 static_cast<double>(x),
9303 static_cast<double>(sum),
9304 static_cast<double>(result));
9312 const std::pair<std::string,std::string> test_funcprog[] =
9316 " var s := depth_to_str(depth); "
9320 " if (recursive(depth - 1) == false) "
9326 " s == depth_to_str(depth); ",
9333 " var v[7] := [ depth ]; "
9337 " if (recursive(depth - 1) == false) "
9343 " return [sum(v == depth) == v[]]; ",
9350 " var v1[ 7] := [ depth ]; "
9351 " var v2[21] := [ depth ]; "
9355 " if (recursive(depth - 1) == false) "
9361 " (sum(v1 == depth) == v1[]) and "
9362 " (sum(v2 == depth) == v2[]) ; "
9370 " var s := depth_to_str(depth); "
9372 " for (var i := 0; i < 2; i += 1) "
9376 " if (recursive(depth - 1) == false) "
9383 " s == depth_to_str(depth); ",
9390 " var s := depth_to_str(depth); "
9392 " for (var i := 0; i < 2; i += 1) "
9394 " for (var j := 0; j < 2; j += 1) "
9398 " if (recursive(depth - 1) == false) "
9406 " s == depth_to_str(depth); ",
9413 " var v[7] := [ depth ]; "
9415 " for (var i := 0; i < 2; i += 1) "
9417 " var w[21] := [ depth + 1 ]; "
9421 " if (recursive(depth - 1) == false) "
9427 " if (sum(w == (depth + 1)) != w[]) "
9433 " return [sum(v == depth) == v[]]; ",
9440 " var v[7] := [ depth ]; "
9442 " for (var i := 0; i < 2; i += 1) "
9444 " var u[21] := [ depth + 1 ]; "
9446 " for (var j := 0; j < 2; j += 1) "
9448 " var w[35] := [ depth + 2 ]; "
9452 " if (recursive(depth - 1) == false) "
9458 " if (sum(w == (depth + 2)) != w[]) "
9464 " if (sum(u == (depth + 1)) != u[]) "
9470 " return [sum(v == depth) == v[]]; ",
9477 " var s := depth_to_str(depth); "
9478 " var v[7] := [ depth ]; "
9482 " if (recursive(depth - 1) == false) "
9490 " (s == depth_to_str(depth)) and "
9491 " (sum(v == depth) == v[]) "
9499 " var s0 := depth_to_str(depth); "
9500 " var v0[7] := [ depth ]; "
9501 " var s1 := depth_to_str(depth); "
9502 " var v1[42] := [ depth ]; "
9506 " if (recursive(depth - 1) == false) "
9514 " (s0 == depth_to_str(depth)) and "
9515 " (sum(v0 == depth) == v0[]) and "
9516 " (s1 == depth_to_str(depth)) and "
9517 " (sum(v1 == depth) == v1[]) "
9525 " var s := depth_to_str(depth); "
9526 " var v[7] := [ depth ]; "
9528 " for (var i := 0; i < 2; i += 1) "
9532 " if (recursive(depth - 1) == false) "
9541 " (s == depth_to_str(depth)) and "
9542 " (sum(v == depth) == v[]) "
9550 " var s0 := depth_to_str(depth); "
9551 " var v0[7] := [ depth ]; "
9552 " var s1 := depth_to_str(depth); "
9553 " var v1[42] := [ depth ]; "
9555 " for (var i := 0; i < 2; i += 1) "
9559 " if (recursive(depth - 1) == false) "
9568 " (s0 == depth_to_str(depth)) and "
9569 " (sum(v0 == depth) == v0[]) and "
9570 " (s1 == depth_to_str(depth)) and "
9571 " (sum(v1 == depth) == v1[]) "
9579 " var s0 := depth_to_str(depth); "
9580 " var v0[7] := [ depth ]; "
9582 " for (var i := 0; i < 2; i += 1) "
9584 " var s1 := depth_to_str(depth); "
9585 " var v1[21] := [ depth + 1 ]; "
9589 " if (recursive(depth - 1) == false) "
9595 " if (s1 != depth_to_str(depth)) "
9600 " if (sum(v1 == (depth + 1)) != v1[]) "
9608 " (s0 == depth_to_str(depth)) and "
9609 " (sum(v0 == depth) == v0[]) "
9620 " recursive(depth - 1) + "
9621 " recursive(depth - 2) ; ",
9626 " for (var i := 0; i < n; i += 1) "
9628 " total += recursive(i); "
9635 const std::size_t test_funcprog_size =
sizeof(test_funcprog) /
sizeof(std::pair<std::string,std::string>);
9636 const std::size_t
rounds = 5;
9640 for (std::size_t r = 0; r <
rounds; ++r)
9642 for (std::size_t i = 0; i < test_funcprog_size; ++i)
9646 symbol_table_t symbol_table;
9647 symbol_table.add_function(
"depth_to_str",dts);
9649 compositor_t compositor(symbol_table);
9651 const bool comp_result = compositor.add(
9652 function_t(
"recursive")
9655 ( test_funcprog[i].first ));
9659 printf(
"run_test19() - Compositor Error: %s\nfunction: %s\n",
9660 compositor.error().c_str(),
9661 test_funcprog[i].first.c_str());
9667 expression_t expression;
9668 expression.register_symbol_table(symbol_table);
9672 if (!parser.compile(test_funcprog[i].second, expression))
9674 printf(
"run_test19() - Error: %s Expression: %s\n",
9675 parser.error().c_str(),
9676 test_funcprog[i].second.c_str());
9682 if (T(1) != expression.value())
9684 printf(
"run_test19() - Evaluation Error: test_funcprog %d function: %s\n",
9685 static_cast<int>(i),
9686 test_funcprog[i].second.c_str());
9701 symbol_table_t symbol_table;
9703 symbol_table.add_constants();
9705 const std::string expression_string =
9706 " var sieve[10^7] := [false]; "
9707 " var m := trunc(sqrt(sieve[])); "
9709 " sieve[0] := true; "
9710 " sieve[1] := true; "
9712 " for (var i := 0; i <= m; i += 1) "
9714 " if (false == sieve[i]) "
9716 " for (var j := (i * i); j < sieve[]; j += i) "
9718 " sieve[j] := true; "
9723 " var prime_count := 0; "
9724 " for (var i := 0; i < sieve[]; i += 1) "
9726 " if (false == sieve[i]) "
9728 " prime_count += 1; "
9732 " prime_count == 664579; ";
9734 expression_t expression;
9736 expression.register_symbol_table(symbol_table);
9740 if (!parser.compile(expression_string,expression))
9742 printf(
"run_test19() - Error: %s Expression: %s\n",
9743 parser.error().c_str(),
9744 expression_string.c_str());
9749 if (T(1) != expression.value())
9751 printf(
"run_test19() - Prime Sieve Computation Error");
9758 symbol_table_t symbol_table;
9760 symbol_table.add_constants();
9762 const std::string expression_str[] =
9764 "var delta := 10^-7; var total := 0; for (var i := 0; i <= 3; i += delta) { total += "
9765 "erf(i) }; abs((delta * total) - (3 * erf(3) + (1 / exp(9) - 1) / sqrt(pi))) < 0.000001",
9767 "var delta := 10^-7; var total := 0; for (var i := 0; i <= 3; i += delta) { total += "
9768 "erfc(i) }; abs((delta * total) - (3 * erfc(3) + ((1 - 1 / exp(9)) / sqrt(pi)))) < 0.000001"
9775 for (std::size_t i = 0; i < 2; ++i)
9777 e[i].register_symbol_table(symbol_table);
9779 if (!parser.compile(expression_str[i],e[i]))
9781 printf(
"run_test19() - Error: %s Expression: %s\n",
9782 parser.error().c_str(),
9783 expression_str[i].c_str());
9788 if (T(1) != e[i].value())
9790 printf(
"run_test19() - erf/erfc computation error %d",
9791 static_cast<unsigned int>(i));
10334 symbol_table_t symbol_table;
10335 symbol_table.add_constants();
10336 symbol_table.add_variable(
"x",x);
10337 symbol_table.add_variable(
"y",y);
10338 symbol_table.add_variable(
"z",z);
10345 "return[x + y,y - x]; x;",
10346 "return[x + y,y - x,'abc']; x;",
10347 "if (x < y) return [1,'abc1']; else return [2,'abc2',x];" ,
10348 "if (x > y) return [1,'abc1']; else return [2,'abc2',x];" ,
10349 "if (x < y) { return [1,'abc1'];} else { return [2,'abc2',x];}",
10350 "if (x > y) { return [1,'abc1'];} else { return [2,'abc2',x];}",
10351 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [1]; } ",
10352 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [1,'abc']; } ",
10353 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [1,'abc',x]; }",
10354 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [1,'abc',x,y]; }",
10355 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [1,'abc',x,y,z]; }",
10356 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [2,'abc2',x]; else x += 1; }",
10357 "for(var i := 0; i < 10; i += 1) { if (i == 5) { return [1,'abc1'];} else x += 1; }"
10360 static const std::string result_list[] =
10382 bool error_found =
false;
10386 expression_t expression;
10387 expression.register_symbol_table(symbol_table);
10393 printf(
"run_test21() - Error: %s Expression: %s [1]\n",
10394 parser.error().c_str(),
10397 error_found =
true;
10400 else if (!parser.dec().return_present())
10402 printf(
"run_test21() - Expected a return statement Expression: %s [1]\n",
10405 error_found =
true;
10409 expression.value();
10411 std::string pattern = results_to_string<T>(expression.results());
10413 if (!expression.return_invoked())
10415 printf(
"run_test21() - Invalid return invoke state [1] Expression: %s\n",
10418 error_found =
true;
10421 else if (result_list[i] != pattern)
10423 printf(
"run_test21() - Invalid return results [1] Expected %s Got: %s Expression: %s\n",
10424 result_list[i].c_str(),
10428 error_found =
true;
10444 symbol_table_t symbol_table;
10445 symbol_table.add_constants();
10446 symbol_table.add_variable(
"x",x);
10447 symbol_table.add_variable(
"y",y);
10448 symbol_table.add_variable(
"z",z);
10452 "x := 1; x + 1; x + 2; x + 3; x + 5; x + 7; return [x + 1]; ",
10453 "x := 1; x + 1; x + 2; x + 3; x + 5; return [x + 1]; x := 7; ",
10454 "x := 1; x + 1; x + 2; x + 3; return [x + 1]; x + 5; x := 7; ",
10455 "x := 1; x + 1; x + 2; return [x + 1]; x + 3; x + 5; x := 7; ",
10456 "x := 1; x + 1; return [x + 1]; x + 2; x + 3; x + 5; x := 7; ",
10457 "x := 1; return [x + 1]; x + 1; x + 2; x + 3; x + 5; x := 7; ",
10458 "return [x + 1]; x := 1; x + 1; x + 2; x + 3; x + 5; x := 7; ",
10459 "~{x := 1; x + 1; x + 2; x + 3; x + 5; x + 7; return [x + 1]}",
10460 "~{x := 1; x + 1; x + 2; x + 3; x + 5; return [x + 1]; x := 7}",
10461 "~{x := 1; x + 1; x + 2; x + 3; return [x + 1]; x + 5; x := 7}",
10462 "~{x := 1; x + 1; x + 2; return [x + 1]; x + 3; x + 5; x := 7}",
10463 "~{x := 1; x + 1; return [x + 1]; x + 2; x + 3; x + 5; x := 7}",
10464 "~{x := 1; return [x + 1]; x + 1; x + 2; x + 3; x + 5; x := 7}",
10465 "~{return [x + 1]; x := 1; x + 1; x + 2; x + 3; x + 5; x := 7}"
10468 static const std::string result_list[] =
10470 "T",
"T",
"T",
"T",
"T",
"T",
"T",
10471 "T",
"T",
"T",
"T",
"T",
"T",
"T",
10476 bool error_found =
false;
10480 expression_t expression;
10481 expression.register_symbol_table(symbol_table);
10487 printf(
"run_test21() - Error: %s Expression: %s [2]\n",
10488 parser.error().c_str(),
10491 error_found =
true;
10494 else if (!parser.dec().return_present())
10496 printf(
"run_test21() - Expected a return statement Expression: %s [2]\n",
10499 error_found =
true;
10503 expression.value();
10505 std::string pattern = results_to_string<T>(expression.results());
10507 if (!expression.return_invoked())
10509 printf(
"run_test21() - Invalid return invoke state [2] Expression: %s\n",
10512 error_found =
true;
10515 else if (result_list[i] != pattern)
10517 printf(
"run_test21() - Invalid return results [2] Expected %s Got: %s Expression: %s\n",
10518 result_list[i].c_str(),
10522 error_found =
true;
10525 else if (!
result_equal(expression.results(), x + T(1)))
10527 printf(
"run_test21() - Invalid return results [2] Expected %s Got: %s Expression: %s\n",
10528 result_list[i].c_str(),
10532 error_found =
true;
10548 T v[] = {0 , 1, 2, 3 };
10549 std::string s =
"Hello ";
10553 symbol_table_t symbol_table;
10554 expression_t expression;
10557 symbol_table.add_variable (
"x", x);
10558 symbol_table.add_variable (
"y", y);
10559 symbol_table.add_variable (
"z", z);
10560 symbol_table.add_vector (
"v", v);
10561 symbol_table.add_stringvar(
"s", s);
10563 expression.register_symbol_table(symbol_table);
10565 const std::string expression_str =
10569 " return [ x, x + y, 2 * v, s + 'world' ]; ";
10571 if (!parser.compile(expression_str, expression))
10573 printf(
"run_test21() - ERROR: %s\tExpression: %s\n",
10574 parser.error().c_str(),
10575 expression_str.c_str());
10579 expression.value();
10582 const results_context_t& results = expression.results();
10584 if (results.count() != 4)
10586 printf(
"run_test21() - ERROR Expected 4 return results, instead got: %d\n",
10587 static_cast<unsigned int>(results.count()));
10593 std::string result_s;
10594 std::vector<T> result_v;
10596 const T expected_result_v[] = {0 , 2, 4, 6 };
10597 const std::string expected_result_s =
"Hello world";
10599 if (!results.get_scalar(0,result_x0))
10601 printf(
"run_test21() - ERROR Failed to get scalar index0 from return result!\n");
10604 else if (result_x0 != T(1))
10606 printf(
"run_test21() - ERROR result_x0 is not expected value!\n");
10609 else if (!results.get_scalar(1,result_x1))
10611 printf(
"run_test21() - ERROR Failed to get scalar index1 from return result!\n");
10614 else if (result_x1 != T(3))
10616 printf(
"run_test21() - ERROR result_x1 is not expected value!\n");
10619 else if (!results.get_vector(2,result_v))
10621 printf(
"run_test21() - ERROR Failed to get vector from return result!\n");
10625 (result_v.size() != (
sizeof(expected_result_v) /
sizeof(T))) ||
10626 !std::equal(result_v.begin(),result_v.end(),expected_result_v)
10629 printf(
"run_test21() - ERROR result_v is not expected value!\n");
10632 else if (!results.get_string(3,result_s))
10634 printf(
"run_test21() - ERROR Failed to get string from return result!\n");
10637 else if (result_s != expected_result_s)
10639 printf(
"run_test21() - ERROR result_s is not expected value!\n");
10645 const std::string invalid_expressions[] =
10658 "var i := 2; v[i] := x",
10659 "var i := 2; v[i] += x",
10665 "var i := 2; aa[i:3] := bb",
10666 "var i := 2; aa[i+1:3] := bb",
10667 "var i := 2; aa[0:i] := bb",
10668 "var i := 2; aa[0:i+1] := bb",
10669 "var i := 1; var j := 3; aa[i:j] := bb",
10670 "var i := 1; var j := 3; aa[i+1:j] := bb",
10671 "var i := 1; var j := 3; aa[i:j+1] := bb",
10672 "var i := 1; var j := 3; aa[i+1:j+1] := bb",
10675 const std::size_t invalid_expressions_size =
sizeof(invalid_expressions) /
sizeof(std::string);
10677 for (std::size_t i = 0; i < invalid_expressions_size; ++i)
10679 symbol_table_t mutable_symbol_table;
10680 symbol_table_t immutable_symbol_table(symbol_table_t::e_immutable);
10684 std::string s =
"xyz";
10685 std::string aa =
"0123456789";
10686 std::string bb =
"A";
10690 std::string s_ =
"xyz";
10692 std::string a_ =
"0123456789";
10693 std::string b_ =
"A";
10695 immutable_symbol_table.add_variable (
"x" , x );
10696 immutable_symbol_table.add_vector (
"v" , v );
10697 immutable_symbol_table.add_stringvar(
"s" , s );
10698 immutable_symbol_table.add_stringvar(
"aa", aa);
10699 immutable_symbol_table.add_stringvar(
"bb", bb);
10701 mutable_symbol_table.add_variable (
"x_", x_);
10702 mutable_symbol_table.add_vector (
"v_", v_);
10703 mutable_symbol_table.add_stringvar (
"s_", s_);
10704 mutable_symbol_table.add_stringvar (
"a_", a_);
10705 mutable_symbol_table.add_stringvar (
"b_", b_);
10707 const std::string& expression_str = invalid_expressions[i];
10708 expression_t expression;
10709 expression.register_symbol_table(immutable_symbol_table);
10710 expression.register_symbol_table(mutable_symbol_table );
10713 const bool compile_result = parser.compile(expression_str, expression);
10715 if (compile_result)
10717 expression.value();
10718 printf(
"run_test21() - Invalid expression due to immutability was successfully compiled. Expression: %s\n",
10719 expression_str.c_str());
10730 symbol_table_t mutable_symbol_table;
10731 symbol_table_t immutable_symbol_table(symbol_table_t::e_immutable);
10733 mutable_symbol_table.add_variable(
"x", x);
10734 mutable_symbol_table.add_variable(
"y", y);
10736 immutable_symbol_table.add_variable(
"w", w);
10737 immutable_symbol_table.add_variable(
"z", z);
10739 expression_t expression;
10740 expression.register_symbol_table(mutable_symbol_table );
10741 expression.register_symbol_table(immutable_symbol_table);
10745 typedef std::pair<std::string,bool> local_test_t;
10747 const local_test_t expressions[] =
10749 std::make_pair<std::string,bool>(
"x := y + (z / w)" ,
true ),
10750 std::make_pair<std::string,bool>(
"y := y / x + (z / w)" ,
true ),
10751 std::make_pair<std::string,bool>(
"z := y + x - w" ,
false),
10752 std::make_pair<std::string,bool>(
"z == (w += y / x)" ,
false)
10755 const std::size_t expressions_size =
sizeof(expressions) /
sizeof(local_test_t);
10757 bool error_found =
false;
10759 for (std::size_t i = 0; i < expressions_size; ++i)
10761 const std::string expression_str = expressions[i].first;
10762 const bool expected_compile_result = expressions[i].second;
10764 if (expected_compile_result != parser.compile(expression_str, expression))
10766 printf(
"run_test21() - Invalid compilation of expression. Expected compile result: %c Expression: %s\n",
10767 expected_compile_result ?
'T' :
'F',
10768 expression_str.c_str());
10770 error_found =
true;
10778 expression.value();
10788 typedef typename parser_t::settings_store settings_t;
10790 const std::string expressions[] =
10792 "var result := 0; if (true) { result := 2 } if (true) { result := 3 }; result",
10793 "var result := 0; if (true) { result := 2 }; if (true) { result := 3 } result",
10794 "var result := 0; if (true) { result := 2 } if (true) { result := 3 } result",
10795 "var result := 0; var x:=1; if (x > 0) { result := 2 } else if (x > 0) { result := 3 } result",
10796 "var result := 0; var x := 1; if (x > 0) { result := 2 } if (x > 0) { result := 3 }; result",
10797 "var result := 0; var x := 1; if (x > 0) { result := 2 }; if (x > 0) { result := 3 } result",
10798 "var result := 0; var x := 1; if (x > 0) { result := 2 } if (x > 0) { result := 3 } result",
10799 "var result := 0; var x := 1; if (x > 0) { result := 2 } else if (x > 0) { result := 3 } result",
10800 "var result := 0; var x := 1; if (x > 0) result := 2 else if (x > 0) { result := 3 } result",
10801 "var result := 0; var x := 1; if (x > 0) {result := 2 } else if (x > 0) result := 3 result"
10804 const std::size_t expressions_size =
sizeof(expressions) /
sizeof(std::string);
10806 static const std::size_t compile_options =
10807 settings_t::e_replacer +
10808 settings_t::e_joiner +
10809 settings_t::e_numeric_check +
10810 settings_t::e_bracket_check +
10811 settings_t::e_sequence_check +
10812 settings_t::e_strength_reduction;
10814 const settings_t settings(compile_options);
10815 parser_t parser(settings);
10817 bool error_found =
false;
10819 for (std::size_t e = 0; e < expressions_size; ++e)
10821 const std::string& expression_string = expressions[e];
10822 expression_t expression;
10824 if (parser.compile(expression_string,expression))
10826 printf(
"run_test21() - Expected compilation error for expression: %s\n",
10827 expression_string.c_str());
10828 error_found =
true;
10832 expression.value();
10842 const std::string expressions[] =
10845 "var x := 2; sum(if (x > 1) { vv8 } else { vv7 }) == sum(vv8)",
10846 "var x := 2; sum(if (x > 1) { vv8 + 1 } else { vv8 + 2 }) == sum(vv8 + 1)",
10849 "var v[8] := {1,1,1,1,1,1,1,1}; vv8 += 1; sgn(vv8) == v",
10850 "abs(-1 * vv8) == vv8",
10851 "abs(vv8 * -1) == vv8",
10852 "var x := -1; abs(x * vv8) == vv8",
10853 "var x := -1; abs(vv8 * x) == vv8",
10854 "var x := 1; abs(-x * vv8) == vv8",
10855 "var x := 1; abs(vv8 * -x) == vv8",
10856 "var x := -2; abs(x * vv8) == 2vv8",
10857 "var x := -2; abs(vv8 * x) == 2vv8",
10858 "var x := 2; abs(-x * vv8) == 2vv8",
10859 "var x := 2; abs(vv8 * -x) == 2vv8",
10860 "var x := -2; abs(x * vv8) == -x * vv8",
10861 "var x := -2; abs(vv8 * x) == -x * vv8",
10862 "var x := 2; abs(-x * vv8) == x * vv8",
10863 "var x := 2; abs(vv8 * -x) == x * vv8",
10864 "var x := -2; abs(x * vv8) == vv8 * -x",
10865 "var x := -2; abs(vv8 * x) == vv8 * -x",
10866 "var x := 2; abs(-x * vv8) == vv8 * x",
10867 "var x := 2; abs(vv8 * -x) == vv8 * x",
10868 "var x := -2; abs(x * vv8) == abs(x) * vv8",
10869 "var x := -2; abs(vv8 * x) == abs(x) * vv8",
10870 "var x := -2; abs(x * vv8) == vv8 * abs(x)",
10871 "var x := -2; abs(vv8 * x) == vv8 * abs(x)",
10874 "var v[8] := {1,2,3,4,5,6,7,8}; var x := 1; (vv8 + x) == v",
10875 "var v[7] := {1,2,3,4,5,6,7}; var x := 1; (vv8 + x) == v",
10876 "var v[6] := {1,2,3,4,5,6}; var x := 1; (vv8 + x) == v",
10877 "var v[5] := {1,2,3,4,5}; var x := 1; (vv8 + x) == v",
10878 "var v[4] := {1,2,3,4}; var x := 1; (vv8 + x) == v",
10879 "var v[3] := {1,2,3}; var x := 1; (vv8 + x) == v",
10880 "var v[2] := {1,2}; var x := 1; (vv8 + x) == v",
10881 "var v[1] := {1}; var x := 1; (vv8 + x) == v",
10882 "var v[8] := {1,2,3,4,5,6,7,8}; var x := 1; (x + vv8) == v",
10883 "var v[7] := {1,2,3,4,5,6,7}; var x := 1; (x + vv8) == v",
10884 "var v[6] := {1,2,3,4,5,6}; var x := 1; (x + vv8) == v",
10885 "var v[5] := {1,2,3,4,5}; var x := 1; (x + vv8) == v",
10886 "var v[4] := {1,2,3,4}; var x := 1; (x + vv8) == v",
10887 "var v[3] := {1,2,3}; var x := 1; (x + vv8) == v",
10888 "var v[2] := {1,2}; var x := 1; (x + vv8) == v",
10889 "var v[1] := {1}; var x := 1; (x + vv8) == v",
10892 "var v[8] := [-1]; v < vv8",
10893 "var v[7] := [-1]; v < vv8",
10894 "var v[3] := [-1]; v < vv8",
10895 "var v[2] := [-1]; v < vv8",
10896 "var v[1] := [-1]; v < vv8",
10899 "var vv8sum := sum(vv8); vv8 += (vv8 + 1); sum(vv8) == (2 * sum(vv8sum) + vv8[] * 1)",
10900 "var vv8sum := sum(vv8); vv8 += (vv8 - 1); sum(vv8) == (2 * sum(vv8sum) - vv8[] * 1)",
10901 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 + x); sum(vv8) == (2 * sum(vv8sum) + vv8[] * 1)",
10902 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 - x); sum(vv8) == (2 * sum(vv8sum) - vv8[] * 1)",
10903 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 + (vv8 + x)); sum(vv8) == (3 * sum(vv8sum) + vv8[] * 1)",
10904 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 + (vv8 - x)); sum(vv8) == (3 * sum(vv8sum) - vv8[] * 1)",
10905 "var vv8sum := sum(vv8); vv8 += (vv8 += 1); sum(vv8) == (2 * vv8sum + 2 * (vv8[] * 1))",
10906 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 += x); sum(vv8) == (2 * vv8sum + 2 * (vv8[] * x))",
10907 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 -= x); sum(vv8) == (2 * vv8sum - 2 * (vv8[] * x))",
10908 "var vv8sum := sum(vv8); vv8 += (vv8 + 1); sum(vv8) == (2 * sum(vv8sum) + vv8[] * 1);",
10909 "var vv8sum := sum(vv8); vv8 += (vv8 - 1); sum(vv8) == (2 * sum(vv8sum) - vv8[] * 1);",
10910 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 + x); sum(vv8) == (2 * sum(vv8sum) + vv8[] * 1);",
10911 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 - x); sum(vv8) == (2 * sum(vv8sum) - vv8[] * 1);",
10912 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 + (vv8 + x)); sum(vv8) == (3 * sum(vv8sum) + vv8[] * 1);",
10913 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 + (vv8 - x)); sum(vv8) == (3 * sum(vv8sum) - vv8[] * 1);",
10914 "var vv8sum := sum(vv8); vv8 += (vv8 += 1); sum(vv8) == (2 * vv8sum + 2 * (vv8[] * 1));",
10915 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 += x); sum(vv8) == (2 * vv8sum + 2 * (vv8[] * x));",
10916 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 -= x); sum(vv8) == (2 * vv8sum - 2 * (vv8[] * x));",
10917 "var vv3sum := sum(vv3); vv3 += (vv3 + 1); sum(vv3) == (2 * sum(vv3sum) + vv3[] * 1)",
10918 "var vv3sum := sum(vv3); vv3 += (vv3 - 1); sum(vv3) == (2 * sum(vv3sum) - vv3[] * 1)",
10919 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 + x); sum(vv3) == (2 * sum(vv3sum) + vv3[] * 1)",
10920 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 - x); sum(vv3) == (2 * sum(vv3sum) - vv3[] * 1)",
10921 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 + (vv3 + x)); sum(vv3) == (3 * sum(vv3sum) + vv3[] * 1)",
10922 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 + (vv3 - x)); sum(vv3) == (3 * sum(vv3sum) - vv3[] * 1)",
10923 "var vv3sum := sum(vv3); vv3 += (vv3 += 1); sum(vv3) == (2 * vv3sum + 2 * (vv3[] * 1))",
10924 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 += x); sum(vv3) == (2 * vv3sum + 2 * (vv3[] * x))",
10925 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 -= x); sum(vv3) == (2 * vv3sum - 2 * (vv3[] * x))",
10926 "var vv3sum := sum(vv3); vv3 += (vv3 + 1); sum(vv3) == (2 * sum(vv3sum) + vv3[] * 1);",
10927 "var vv3sum := sum(vv3); vv3 += (vv3 - 1); sum(vv3) == (2 * sum(vv3sum) - vv3[] * 1);",
10928 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 + x); sum(vv3) == (2 * sum(vv3sum) + vv3[] * 1);",
10929 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 - x); sum(vv3) == (2 * sum(vv3sum) - vv3[] * 1);",
10930 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 + (vv3 + x)); sum(vv3) == (3 * sum(vv3sum) + vv3[] * 1);",
10931 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 + (vv3 - x)); sum(vv3) == (3 * sum(vv3sum) - vv3[] * 1);",
10932 "var vv3sum := sum(vv3); vv3 += (vv3 += 1); sum(vv3) == (2 * vv3sum + 2 * (vv3[] * 1));",
10933 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 += x); sum(vv3) == (2 * vv3sum + 2 * (vv3[] * x));",
10934 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 -= x); sum(vv3) == (2 * vv3sum - 2 * (vv3[] * x));",
10937 "var vv8sum := sum(vv8); vv8 += 1; sum(vv8) == (vv8sum + vv8[] * 1)",
10938 "var vv7sum := sum(vv7); vv7 += 1; sum(vv7) == (vv7sum + vv7[] * 1)",
10939 "var vv6sum := sum(vv6); vv6 += 1; sum(vv6) == (vv6sum + vv6[] * 1)",
10940 "var vv5sum := sum(vv5); vv5 += 1; sum(vv5) == (vv5sum + vv5[] * 1)",
10941 "var vv4sum := sum(vv4); vv4 += 1; sum(vv4) == (vv4sum + vv4[] * 1)",
10942 "var vv3sum := sum(vv3); vv3 += 1; sum(vv3) == (vv3sum + vv3[] * 1)",
10943 "var vv2sum := sum(vv2); vv2 += 1; sum(vv2) == (vv2sum + vv2[] * 1)",
10944 "var vv1sum := sum(vv1); vv1 += 1; sum(vv1) == (vv1sum + vv1[] * 1)",
10945 "var vv8sum := sum(vv8); var x := 7; vv8 += (x - 1) / 2; sum(vv8) == (vv8sum + vv8[] * 3)",
10946 "var vv7sum := sum(vv7); var x := 7; vv7 += (x - 1) / 2; sum(vv7) == (vv7sum + vv7[] * 3)",
10947 "var vv6sum := sum(vv6); var x := 7; vv6 += (x - 1) / 2; sum(vv6) == (vv6sum + vv6[] * 3)",
10948 "var vv5sum := sum(vv5); var x := 7; vv5 += (x - 1) / 2; sum(vv5) == (vv5sum + vv5[] * 3)",
10949 "var vv4sum := sum(vv4); var x := 7; vv4 += (x - 1) / 2; sum(vv4) == (vv4sum + vv4[] * 3)",
10950 "var vv3sum := sum(vv3); var x := 7; vv3 += (x - 1) / 2; sum(vv3) == (vv3sum + vv3[] * 3)",
10951 "var vv2sum := sum(vv2); var x := 7; vv2 += (x - 1) / 2; sum(vv2) == (vv2sum + vv2[] * 3)",
10952 "var vv1sum := sum(vv1); var x := 7; vv1 += (x - 1) / 2; sum(vv1) == (vv1sum + vv1[] * 3)",
10955 "var v[8] := [-1]; vv8 := v; sum(vv8) == (-1 * 8 + 0)",
10956 "var v[7] := [-1]; vv8 := v; sum(vv8) == (-1 * 7 + (7))",
10957 "var v[6] := [-1]; vv8 := v; sum(vv8) == (-1 * 6 + (6+7))",
10958 "var v[5] := [-1]; vv8 := v; sum(vv8) == (-1 * 5 + (5+6+7))",
10959 "var v[4] := [-1]; vv8 := v; sum(vv8) == (-1 * 4 + (4+5+6+7))",
10960 "var v[3] := [-1]; vv8 := v; sum(vv8) == (-1 * 3 + (3+4+5+6+7))",
10961 "var v[2] := [-1]; vv8 := v; sum(vv8) == (-1 * 2 + (2+3+4+5+6+7))",
10962 "var v[1] := [-1]; vv8 := v; sum(vv8) == (-1 * 1 + (1+2+3+4+5+6+7))",
10963 "var v[8] := [-1]; vv8 := v; var x[8] := { -1, -1, -1, -1, -1, -1, -1, -1 }; x == vv8",
10964 "var v[7] := [-1]; vv8 := v; var x[8] := { -1, -1, -1, -1, -1, -1, -1, 7 }; x == vv8",
10965 "var v[6] := [-1]; vv8 := v; var x[8] := { -1, -1, -1, -1, -1, -1, 6, 7 }; x == vv8",
10966 "var v[5] := [-1]; vv8 := v; var x[8] := { -1, -1, -1, -1, -1, 5, 6, 7 }; x == vv8",
10967 "var v[4] := [-1]; vv8 := v; var x[8] := { -1, -1, -1, -1, 4, 5, 6, 7 }; x == vv8",
10968 "var v[3] := [-1]; vv8 := v; var x[8] := { -1, -1, -1, 3, 4, 5, 6, 7 }; x == vv8",
10969 "var v[2] := [-1]; vv8 := v; var x[8] := { -1, -1, 2, 3, 4, 5, 6, 7 }; x == vv8",
10970 "var v[1] := [-1]; vv8 := v; var x[8] := { -1, 1, 2, 3, 4, 5, 6, 7 }; x == vv8",
10971 "var v[3] := [-1]; vv3 := v; sum(vv3) == (-1 * 3 + (0))",
10972 "var v[2] := [-1]; vv3 := v; sum(vv3) == (-1 * 2 + (2))",
10973 "var v[1] := [-1]; vv3 := v; sum(vv3) == (-1 * 1 + (1+2))",
10974 "var v[3] := [-1]; vv3 := v; var x[3] := { -1, -1, -1}; x == vv3",
10975 "var v[2] := [-1]; vv3 := v; var x[3] := { -1, -1, 2}; x == vv3",
10976 "var v[1] := [-1]; vv3 := v; var x[3] := { -1, 1, 2}; x == vv3",
10977 "vv8 := vv7; sum(vv8) == (sum(vv7) + 7)",
10978 "vv8 := vv6; sum(vv8) == (sum(vv6) + 6+ 7)",
10979 "vv8 := vv5; sum(vv8) == (sum(vv5) + 5 + 6 + 7)",
10980 "vv8 := vv4; sum(vv8) == (sum(vv4) + 4 + 5 + 6 + 7)",
10981 "vv8 := vv3; sum(vv8) == (sum(vv3) + 3 + 4 + 5 + 6 + 7)",
10982 "vv8 := vv2; sum(vv8) == (sum(vv2) + 2 + 3 + 4 + 5 + 6 + 7)",
10983 "vv8 := vv1; sum(vv8) == (sum(vv1) + 1 + 2 + 3 + 4 + 5 + 6 + 7)",
10984 "vv8 := vv7 + vv7; sum(vv8) == (2 * sum(vv7) + 7)",
10985 "vv8 := vv6 + vv6; sum(vv8) == (2 * sum(vv6) + 6+ 7)",
10986 "vv8 := vv5 + vv5; sum(vv8) == (2 * sum(vv5) + 5 + 6 + 7)",
10987 "vv8 := vv4 + vv4; sum(vv8) == (2 * sum(vv4) + 4 + 5 + 6 + 7)",
10988 "vv8 := vv3 + vv3; sum(vv8) == (2 * sum(vv3) + 3 + 4 + 5 + 6 + 7)",
10989 "vv8 := vv2 + vv2; sum(vv8) == (2 * sum(vv2) + 2 + 3 + 4 + 5 + 6 + 7)",
10990 "vv8 := vv1 + vv1; sum(vv8) == (2 * sum(vv1) + 1 + 2 + 3 + 4 + 5 + 6 + 7)",
10993 "var x := 3; vv8 := 2*x+1; sum(vv8) == (vv8[] * 7)",
10994 "var x := 3; vv7 := 2*x+1; sum(vv7) == (vv7[] * 7)",
10995 "var x := 3; vv6 := 2*x+1; sum(vv6) == (vv6[] * 7)",
10996 "var x := 3; vv5 := 2*x+1; sum(vv5) == (vv5[] * 7)",
10997 "var x := 3; vv4 := 2*x+1; sum(vv4) == (vv4[] * 7)",
10998 "var x := 3; vv3 := 2*x+1; sum(vv3) == (vv3[] * 7)",
10999 "var x := 3; vv2 := 2*x+1; sum(vv2) == (vv2[] * 7)",
11000 "var x := 3; vv1 := 2*x+1; sum(vv1) == (vv1[] * 7)",
11001 "var x[3] := [3]; vv8 := 2x[0]+1; sum(vv8) == (vv8[] * 7)",
11002 "var x[3] := [3]; vv7 := 2x[1]+1; sum(vv7) == (vv7[] * 7)",
11003 "var x[3] := [3]; vv6 := 2x[2]+1; sum(vv6) == (vv6[] * 7)",
11004 "var x[3] := [3]; vv5 := 2x[0]+1; sum(vv5) == (vv5[] * 7)",
11005 "var x[3] := [3]; vv4 := 2x[1]+1; sum(vv4) == (vv4[] * 7)",
11006 "var x[3] := [3]; vv3 := 2x[2]+1; sum(vv3) == (vv3[] * 7)",
11007 "var x[3] := [3]; vv2 := 2x[0]+1; sum(vv2) == (vv2[] * 7)",
11008 "var x[3] := [3]; vv1 := 2x[1]+1; sum(vv1) == (vv1[] * 7)",
11009 "var x[3] := [3]; var y[3] := [1]; vv8 := 2x[0]+y[0]; sum(vv8) == (vv8[] * 7)",
11010 "var x[3] := [3]; var y[3] := [1]; vv7 := 2x[1]+y[1]; sum(vv7) == (vv7[] * 7)",
11011 "var x[3] := [3]; var y[3] := [1]; vv6 := 2x[2]+y[2]; sum(vv6) == (vv6[] * 7)",
11012 "var x[3] := [3]; var y[3] := [1]; vv5 := 2x[0]+y[0]; sum(vv5) == (vv5[] * 7)",
11013 "var x[3] := [3]; var y[3] := [1]; vv4 := 2x[1]+y[1]; sum(vv4) == (vv4[] * 7)",
11014 "var x[3] := [3]; var y[3] := [1]; vv3 := 2x[2]+y[2]; sum(vv3) == (vv3[] * 7)",
11015 "var x[3] := [3]; var y[3] := [1]; vv2 := 2x[0]+y[0]; sum(vv2) == (vv2[] * 7)",
11016 "var x[3] := [3]; var y[3] := [1]; vv1 := 2x[1]+y[1]; sum(vv1) == (vv1[] * 7)",
11019 "var v[8] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 8 + 0)",
11020 "var v[7] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 7 + (7))",
11021 "var v[6] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 6 + (6+7))",
11022 "var v[5] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 5 + (5+6+7))",
11023 "var v[4] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 4 + (4+5+6+7))",
11024 "var v[3] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 3 + (3+4+5+6+7))",
11025 "var v[2] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 2 + (2+3+4+5+6+7))",
11026 "var v[1] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 1 + (1+2+3+4+5+6+7))",
11027 "var v[8] := [-1]; vv8 <=> v; var x[8] := { -1, -1, -1, -1, -1, -1, -1, -1 }; x == vv8",
11028 "var v[7] := [-1]; vv8 <=> v; var x[8] := { -1, -1, -1, -1, -1, -1, -1, 7 }; x == vv8",
11029 "var v[6] := [-1]; vv8 <=> v; var x[8] := { -1, -1, -1, -1, -1, -1, 6, 7 }; x == vv8",
11030 "var v[5] := [-1]; vv8 <=> v; var x[8] := { -1, -1, -1, -1, -1, 5, 6, 7 }; x == vv8",
11031 "var v[4] := [-1]; vv8 <=> v; var x[8] := { -1, -1, -1, -1, 4, 5, 6, 7 }; x == vv8",
11032 "var v[3] := [-1]; vv8 <=> v; var x[8] := { -1, -1, -1, 3, 4, 5, 6, 7 }; x == vv8",
11033 "var v[2] := [-1]; vv8 <=> v; var x[8] := { -1, -1, 2, 3, 4, 5, 6, 7 }; x == vv8",
11034 "var v[1] := [-1]; vv8 <=> v; var x[8] := { -1, 1, 2, 3, 4, 5, 6, 7 }; x == vv8",
11035 "var v[3] := [-1]; vv3 <=> v; sum(vv3) == (-1 * 3 + (0))",
11036 "var v[2] := [-1]; vv3 <=> v; sum(vv3) == (-1 * 2 + (2))",
11037 "var v[1] := [-1]; vv3 <=> v; sum(vv3) == (-1 * 1 + (1+2))",
11038 "var v[3] := [-1]; vv3 <=> v; var x[3] := { -1, -1, -1}; x == vv3",
11039 "var v[2] := [-1]; vv3 <=> v; var x[3] := { -1, -1, 2}; x == vv3",
11040 "var v[1] := [-1]; vv3 <=> v; var x[3] := { -1, 1, 2}; x == vv3",
11045 "vv8[vv8[] - 1] == vv8[] - 1",
11046 "var vec_sum := 0; for (var i := 0; i < vv8[]; i +=1) { vec_sum += vv8[i]; }; vec_sum == (vv8[] - 1) * vv8[] / 2",
11047 "var vec_sum := 0; for (var i := 0; i < vv8[]; i +=1) { vec_sum += vv8[2i / 2]; }; vec_sum == (vv8[] - 1) * vv8[] / 2",
11048 "var x:= 1; var y:= 1; (vv8 + x)[y / x] == 2",
11049 "var x:= 1; var y:= 1; (vv8 + x - y)[y / x] == 1",
11050 "var x:= 1; (x + vv8)[1] == 2",
11051 "var x:= 1; var y:= 1; (x + vv8)[y / x] == 2",
11052 "var x:= 1; var y:= 1; (x + vv8 - y)[y / x] == 1",
11053 "var successes := 0; for(var i:=0; i < vv8[]; i += 1) { successes += (vv8 + 1)[i] == i + 1; }; successes == vv8[]",
11054 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (vv8 + x)[i] == i + x; }; successes == vv8[]",
11055 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (x + vv8)[i] == i + x; }; successes == vv8[]",
11056 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (vv8 + x)[i / x] == i + x; }; successes == vv8[]",
11057 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (x + vv8)[i / x] == i + x; }; successes == vv8[]",
11058 "(1 + vv8)[1] == 2",
11059 "(vv8 + 1)[1] == 2",
11060 "(vv8 + 1)[2 / 2] == 2",
11061 "(1 + vv8)[2 / 2] == 2",
11062 "var x:= 1; (x + vv8)[1] == 2",
11063 "var x:= 1; (vv8 + x)[1] == 2",
11064 "var x:= 1; var y:= 1; (x + vv8)[y] == 2",
11065 "var x:= 1; var y:= 1; (vv8 + x)[y] == 2",
11066 "var x:= 1; var y:= 1; (vv8 + x)[y / x] == 2",
11067 "var x:= 1; var y:= 1; (vv8 + x - y)[y / x] == 1",
11068 "var x:= 1; var y:= 1; (x + vv8)[y / x] == 2",
11069 "var x:= 1; var y:= 1; (x + vv8 - y)[y / x] == 1",
11070 "(abs(vv8 + 1))[1] == 2",
11071 "(abs(1 + vv8))[1] == 2",
11072 "(abs(vv8 + 1))[2 / 2] == 2",
11073 "(abs(1 + vv8))[2 / 2] == 2",
11074 "(abs(vv8 + 1)/2)[1] == 1",
11075 "(abs(1 + vv8)/2)[1] == 1",
11076 "(abs(vv8 + 1)/2)[2 / 2] == 1",
11077 "(abs(1 + vv8)/2)[2 / 2] == 1",
11078 "(abs(abs(vv8 + 1)) - 1)[1] == 1",
11079 "(abs(2 * abs(vv8 + 1)) - 1)[1] == 3",
11080 "(abs(abs(vv8 + 1) * 2) - 1)[1] == 3",
11081 "(abs(2abs(vv8 + 1)) - 1)[1] == 3",
11082 "(abs(abs(vv8 + 1)2) - 1)[1] == 3",
11083 "var x:= 1; (abs(x + vv8))[1] == 2",
11084 "var x:= 1; (abs(vv8 + x))[1] == 2",
11085 "var x:= 1; var y:= 1; (abs(x + vv8))[y] == 2",
11086 "var x:= 1; var y:= 1; (abs(vv8 + x))[y] == 2",
11087 "var x:= 1; var y:= 1; (abs(vv8 + x))[y / x] == 2",
11088 "var x:= 1; var y:= 1; (abs(vv8 + x - y))[y / x] == 1",
11089 "var x:= 1; var y:= 1; (abs(x + vv8))[y / x] == 2",
11090 "var x:= 1; var y:= 1; (abs(x + vv8 - y))[y / x] == 1",
11091 "var x:= 1; (abs(x + vv8)/2)[1] == 1",
11092 "var x:= 1; (abs(vv8 + x)/2)[1] == 1",
11093 "var x:= 1; var y:= 1; (abs(x + vv8)/2)[y] == 1",
11094 "var x:= 1; var y:= 1; (abs(vv8 + x)/2)[y] == 1",
11095 "var x:= 1; var y:= 1; (abs(vv8 + x)/2)[y / x] == 1",
11096 "var x:= 1; var y:= 1; (abs(x + vv8)/2)[y / x] == 1",
11097 "var x := 1; (abs(abs(vv8 + x)) - x)[1] == 1",
11098 "var x := 1; (abs(2 * abs(vv8 + x)) - x)[1] == 3",
11099 "var x := 1; (abs(abs(vv8 + x) * 2) - x)[1] == 3",
11100 "var x := 1; (abs(2abs(vv8 + x)) - x)[1] == 3",
11101 "var x := 1; (abs(abs(vv8 + x)2) - x)[1] == 3",
11102 "var x := 1; var y := 1; (abs(abs(vv8 + x)) - x)[y] == 1",
11103 "var x := 1; var y := 1; (abs(2 * abs(vv8 + x)) - x)[y] == 3",
11104 "var x := 1; var y := 1; (abs(abs(vv8 + x) * 2) - x)[y] == 3",
11105 "var x := 1; var y := 1; (abs(2abs(vv8 + x)) - x)[y] == 3",
11106 "var x := 1; var y := 1; (abs(abs(vv8 + x)2) - x)[y] == 3",
11107 "var x := 1; var y := 1; (abs(abs(vv8 + x)) - x)[x / y] == 1",
11108 "var x := 1; var y := 1; (abs(2 * abs(vv8 + x)) - x)[x / y] == 3",
11109 "var x := 1; var y := 1; (abs(abs(vv8 + x) * 2) - x)[x / y] == 3",
11110 "var x := 1; var y := 1; (abs(2abs(vv8 + x)) - x)[x / y] == 3",
11111 "var x := 1; var y := 1; (abs(abs(vv8 + x)2) - x)[x / y] == 3",
11112 "var successes := 0; for(var i:=0; i < vv8[]; i += 1) { successes += (vv8 + 1)[i] == i + 1; }; successes == vv8[]",
11113 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (vv8 + x)[i] == i + x; }; successes == vv8[]",
11114 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (x + vv8)[i] == i + x; }; successes == vv8[]",
11115 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (vv8 + x)[i / x] == i + x; }; successes == vv8[]",
11116 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (x + vv8)[i / x] == i + x; }; successes == vv8[]",
11117 "var successes := 0; for(var i:=0; i < vv8[]; i += 1) { successes += (abs(vv8 + 1))[i] == i + 1; }; successes == vv8[]",
11118 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (abs(vv8 + x))[i] == i + x; }; successes == vv8[]",
11119 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (abs(x + vv8))[i] == i + x; }; successes == vv8[]",
11120 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (abs(vv8 + x))[i / x] == i + x; }; successes == vv8[]",
11121 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (abs(x + vv8))[i / x] == i + x; }; successes == vv8[]",
11124 bool error_found =
false;
11126 for (std::size_t e = 0; e <
sizeof(expressions)/
sizeof(std::string); ++e)
11128 T vs8[] = { 0, 1, 2, 3, 4, 5, 6, 7 };
11129 T vs7[] = { 0, 1, 2, 3, 4, 5, 6 };
11130 T vs6[] = { 0, 1, 2, 3, 4, 5 };
11131 T vs5[] = { 0, 1, 2, 3, 4 };
11132 T vs4[] = { 0, 1, 2, 3 };
11133 T vs3[] = { 0, 1, 2 };
11134 T vs2[] = { 0, 1 };
11146 symbol_table_t symbol_table;
11148 symbol_table.add_vector(
"vv1", vv1);
11149 symbol_table.add_vector(
"vv2", vv2);
11150 symbol_table.add_vector(
"vv3", vv3);
11151 symbol_table.add_vector(
"vv4", vv4);
11152 symbol_table.add_vector(
"vv5", vv5);
11153 symbol_table.add_vector(
"vv6", vv6);
11154 symbol_table.add_vector(
"vv7", vv7);
11155 symbol_table.add_vector(
"vv8", vv8);
11159 const std::string& expression_string = expressions[e];
11160 expression_t expression;
11161 expression.register_symbol_table(symbol_table);
11163 if (!parser.compile(expression_string,expression))
11165 printf(
"run_test21() - vector_veiw expression compilation error. Expression: %s\n",
11166 expression_string.c_str());
11168 for (std::size_t i = 0; i < parser.error_count(); ++i)
11170 error_type error = parser.get_error(i);
11173 printf(
"run_test21() - Exp[%02d] Error[%02d] Position: %02d line: %d column: %d Type: [%14s] Msg: %s\n",
11174 static_cast<unsigned int>(e),
11175 static_cast<unsigned int>(i),
11176 static_cast<unsigned int>(error.token.position),
11177 static_cast<unsigned int>(error.line_no),
11178 static_cast<unsigned int>(error.column_no),
11180 error.diagnostic.c_str());
11183 error_found =
true;
11188 const T result = expression.value();
11190 if (result != T(1.0))
11192 error_found =
true;
11194 printf(
"run_test21() - Error: Exp[%02d] Expression result: %5.3f expected: 1 expression: %s\n",
11195 static_cast<unsigned int>(e),
11196 static_cast<double>(result),
11197 expression_string.c_str());
11208 const std::string expressions[] =
11210 "vv0[] == vv0_size",
11211 "sum(vv0) == (vv0[] * (vv0[] + 1) / 2) and (vv0[] == vv0_size)",
11212 "(min(vv0) == 1) and (vv0[] == vv0_size)",
11213 "(max(vv0) == vv0[]) and (vv0[] == vv0_size)",
11214 "(avg(vv0) == (min(vv0) + max(vv0)) / 2) and (vv0[] == vv0_size)",
11215 "(sum(vv0 + 1) == (vv0[] * (vv0[] + 1) / 2 + (vv0[] * 1))) and (vv0[] == vv0_size)",
11216 "(sum(vv0 - 1) == (vv0[] * (vv0[] + 1) / 2 - (vv0[] * 1))) and (vv0[] == vv0_size)",
11217 "(sum(1 + vv0) == (vv0[] * (vv0[] + 1) / 2 + (vv0[] * 1))) and (vv0[] == vv0_size)",
11218 "(sum(-1 + vv0) == (vv0[] * (vv0[] + 1) / 2 - (vv0[] * 1))) and (vv0[] == vv0_size)",
11219 "var x:= 1; sum(vv0 + x) == (vv0[] * (vv0[] + 1) / 2 + (vv0[] * x)) and (vv0[] == vv0_size)",
11220 "var x:= 1; sum(vv0 - x) == (vv0[] * (vv0[] + 1) / 2 - (vv0[] * x)) and (vv0[] == vv0_size)",
11221 "sum(2vv0) == (vv0[] * (vv0[] + 1)) and (vv0[] == vv0_size)",
11222 "sum(vv0 * 2) == (vv0[] * (vv0[] + 1)) and (vv0[] == vv0_size)",
11223 "sum(2vv0 + 1) == (vv0[] * (vv0[] + 1) + vv0[]) and (vv0[] == vv0_size)",
11224 "sum(1 + 2vv0) == (vv0[] * (vv0[] + 1) + vv0[]) and (vv0[] == vv0_size)",
11225 "var x := 1; sum(2vv0 + x) == (vv0[] * (vv0[] + 1) + x * vv0[]) and (vv0[] == vv0_size)",
11226 "var x := 1; sum(x + 2vv0) == (vv0[] * (vv0[] + 1) + x * vv0[]) and (vv0[] == vv0_size)",
11227 "sum(vv0 += 1) == (vv0[] * (vv0[] + 1) / 2 + vv0[]) and (vv0[] == vv0_size)",
11228 "var x:= 1; sum(vv0 += x) == (vv0[] * (vv0[] + 1) / 2 + x * vv0[]) and (vv0[] == vv0_size)",
11229 "var x:= 1; sum(vv0 -= x) == (vv0[] * (vv0[] + 1 - 2x) / 2) and (vv0[] == vv0_size)",
11230 "(sum(2vv0) == 2 * sum(vv0)) and (vv0[] == vv0_size)",
11231 "(sum(vv0 * 2) == 2 * sum(vv0)) and (vv0[] == vv0_size)",
11232 "var x:= 1; sum(2vv0) == (vv0[] * (vv0[] + 1)) and (vv0[] == vv0_size)",
11233 "var x := 2; sum(if (x > 1) { vv0 } else { vv1 }) == sum(vv0)",
11234 "dot(2 * vv0,vv1 - 1) + dot(2 * vv0,vv1 - 1) == 2sum(2vv0 * (vv1 - 1))",
11235 "(0 * dot(2 * vv0,vv1 - 1)) == 0"
11238 bool error_found =
false;
11240 for (std::size_t e = 0; e <
sizeof(expressions) /
sizeof(std::string); ++e)
11242 const T vanilla[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
11243 const std::size_t vanilla_size =
sizeof(vanilla) /
sizeof(T);
11245 std::vector<T> v0(vanilla, vanilla + vanilla_size);
11248 std::vector<T> v1(vanilla, vanilla + vanilla_size);
11251 T vv0_size = T(0.0);
11253 symbol_table_t symbol_table;
11254 symbol_table.add_variable(
"vv0_size", vv0_size);
11255 symbol_table.add_vector (
"vv0" , vv0 );
11256 symbol_table.add_vector (
"vv1" , vv1 );
11261 symbol_table.add_package( vector_package );
11262 symbol_table.add_package( io_package );
11264 const std::string& expression_string = expressions[e];
11265 expression_t expression;
11266 expression.register_symbol_table(symbol_table);
11270 if (!parser.compile(expression_string, expression))
11272 printf(
"run_test21() - Error: %s\tExpression: %s\n",
11273 parser.error().c_str(),
11274 expression_string.c_str());
11276 for (std::size_t i = 0; i < parser.error_count(); ++i)
11278 error_type error = parser.get_error(i);
11281 printf(
"run_test21() - Exp[%02d] Error[%02d] Position: %02d line: %d column: %d Type: [%14s] Msg: %s\n",
11282 static_cast<unsigned int>(e),
11283 static_cast<unsigned int>(i),
11284 static_cast<unsigned int>(error.token.position),
11285 static_cast<unsigned int>(error.line_no),
11286 static_cast<unsigned int>(error.column_no),
11288 error.diagnostic.c_str());
11294 for (std::size_t i = 1; i <= vv0.
base_size(); ++i)
11296 v0.assign(vanilla, vanilla + vanilla_size);
11297 v1.assign(vanilla, vanilla + vanilla_size);
11302 const T result = expression.value();
11306 printf(
"run_test21() - Exp[%02d] Error: size: %d expected 1 instead got: %f expr:%s\n",
11307 static_cast<unsigned int>(e),
11308 static_cast<unsigned int>(i),
11309 static_cast<double>(result),
11310 expression_string.c_str());
11316 expression.value();
11320 expression.value();
11322 expression.release();
11332 const T vanilla[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
11333 const std::size_t vanilla_size =
sizeof(vanilla) /
sizeof(T);
11335 std::vector<T> v0(vanilla, vanilla + vanilla_size);
11336 std::vector<T> v1(vanilla, vanilla + vanilla_size);
11343 symbol_table_t symbol_table;
11344 symbol_table.add_vector(
"v", vv);
11349 symbol_table.add_package( vector_package );
11350 symbol_table.add_package( io_package );
11351 symbol_table.add_function(
"resize", vv_size_handler);
11353 expression_t expression;
11354 expression.register_symbol_table(symbol_table);
11358 const std::string resize_expression =
11359 " var vec_original_size := v[]; "
11360 " var success_count := 0; "
11362 " for (var i := 1; i <= vec_original_size; i += 1) "
11364 " if (resize(v,i) == true and v[] == i) "
11366 " success_count += 1; "
11370 " success_count == vec_original_size ";
11372 if (!parser.compile(resize_expression, expression))
11374 printf(
"run_test21() - Error: %s\tExpression: %s\n",
11375 parser.error().c_str(),
11376 resize_expression.c_str());
11378 for (std::size_t i = 0; i < parser.error_count(); ++i)
11380 error_type error = parser.get_error(i);
11383 printf(
"run_test21() - Error[%02d] Position: %02d line: %d column: %d Type: [%14s] Msg: %s\n",
11384 static_cast<unsigned int>(i),
11385 static_cast<unsigned int>(error.token.position),
11386 static_cast<unsigned int>(error.line_no),
11387 static_cast<unsigned int>(error.column_no),
11389 error.diagnostic.c_str());
11395 const T value0 = expression.value();
11397 if (expression.value() != T(1))
11399 printf(
"run_test21() - Error: Failed evaluation Expected 1 got: %f (1)\n",
static_cast<double>(value0));
11405 const T value1 = expression.value();
11407 if (expression.value() != T(1))
11409 printf(
"run_test21() - Error: Failed evaluation Expected 1 got: %f (1)\n",
static_cast<double>(value1));
11415 expression.release();
11419 const T vanilla[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
11420 const std::size_t vanilla_size =
sizeof(vanilla) /
sizeof(T);
11422 std::vector<T> v0(vanilla, vanilla + vanilla_size);
11423 std::vector<T> v1(vanilla, vanilla + vanilla_size);
11430 symbol_table_t symbol_table;
11431 symbol_table.add_vector(
"v", vv);
11436 symbol_table.add_package( vector_package );
11437 symbol_table.add_package( io_package );
11438 symbol_table.add_function(
"resize", vv_size_handler);
11440 expression_t expression;
11441 expression.register_symbol_table(symbol_table);
11445 const std::string resize_expression =
11446 " var vec_original_size := v[]; "
11447 " var failure_count := 0; "
11449 " for (var i := vec_original_size + 1; i <= 2 * vec_original_size; i += 1) "
11451 " if (resize(v,i) == false or v[] != i) "
11453 " failure_count += 1 "
11457 " failure_count == vec_original_size ";
11459 if (!parser.compile(resize_expression, expression))
11461 printf(
"run_test21() - Error: %s\tExpression: %s\n",
11462 parser.error().c_str(),
11463 resize_expression.c_str());
11465 for (std::size_t i = 0; i < parser.error_count(); ++i)
11467 error_type error = parser.get_error(i);
11470 printf(
"run_test21() - Error[%02d] Position: %02d line: %d column: %d Type: [%14s] Msg: %s\n",
11471 static_cast<unsigned int>(i),
11472 static_cast<unsigned int>(error.token.position),
11473 static_cast<unsigned int>(error.line_no),
11474 static_cast<unsigned int>(error.column_no),
11476 error.diagnostic.c_str());
11482 const T value0 = expression.value();
11484 if (expression.value() != T(1))
11486 printf(
"run_test21() - Error: Failed evaluation Expected 1 got: %f (2)\n",
static_cast<double>(value0));
11492 const T value1 = expression.value();
11494 if (expression.value() != T(1))
11496 printf(
"run_test21() - Error: Failed evaluation Expected 1 got: %f (2)\n",
static_cast<double>(value1));
11502 expression.release();
11524 bool result =
true;
11527 const std::string expressions[] =
11529 " assert(1 > 1); ",
11530 " assert(1 > 2, 'assert statement 2'); ",
11531 " assert(1 > 3, 'assert ' + 'statement 3'); ",
11532 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); ",
11533 " assert(1 > 5, 'assert ' + 'statement 5'); ",
11534 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); "
11537 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
11539 for (std::size_t i = 0; i < expression_count; ++i)
11541 expression_t expression;
11544 if (!parser.compile(expressions[i], expression))
11546 printf(
"run_test22() - Error: %s\tExpression: %s [1]\n",
11547 parser.error().c_str(),
11548 expressions[i].c_str());
11554 printf(
"run_test22() - Error: Expression is not null! expression: %s [1]\n",
11555 expressions[i].c_str());
11560 expression.value();
11565 const std::string expressions[] =
11567 " assert(1 > 1); 1 + 0 ",
11568 " assert(1 > 2, 'assert statement 2'); 2 + 0 ",
11569 " assert(1 > 3, 'assert ' + 'statement 3'); 3 + 0 ",
11570 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 4 + 0 ",
11571 " assert(1 > 5, 'assert ' + 'statement 5'); 5 + 0 ",
11572 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 6 + 0 "
11575 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
11577 for (std::size_t i = 0; i < expression_count; ++i)
11579 expression_t expression;
11582 if (!parser.compile(expressions[i], expression))
11584 printf(
"run_test22() - Error: %s\tExpression: %s [2]\n",
11585 parser.error().c_str(),
11586 expressions[i].c_str());
11592 printf(
"run_test22() - Error: Expression is not constant! expression: %s [2]\n",
11593 expressions[i].c_str());
11597 expression.value();
11602 const std::string expressions[] =
11605 " assert(1 > 2, 'assert statement 2'); "
11606 " assert(1 > 3, 'assert ' + 'statement 3'); "
11607 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); "
11608 " assert(1 > 5, 'assert ' + 'statement 5'); "
11609 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); "
11612 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
11614 for (std::size_t i = 0; i < expression_count; ++i)
11616 expression_t expression;
11622 parser.register_assert_check(handler);
11624 if (!parser.compile(expressions[i], expression))
11626 printf(
"run_test22() - Error: %s\tExpression: %s [3]\n",
11627 parser.error().c_str(),
11628 expressions[i].c_str());
11633 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
11636 type_sequence.push_back(et_t::e_assert);
11637 type_sequence.push_back(et_t::e_assert);
11638 type_sequence.push_back(et_t::e_assert);
11639 type_sequence.push_back(et_t::e_assert);
11640 type_sequence.push_back(et_t::e_assert);
11641 type_sequence.push_back(et_t::e_assert);
11645 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [3]\n",
11646 expressions[i].c_str());
11651 expression.value();
11655 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [3]\n",
11657 expressions[i].c_str());
11665 const std::string expressions[] =
11667 " assert(1 > 1); 1 ",
11668 " assert(1 > 2, 'assert statement 2'); 2 ",
11669 " assert(1 > 3, 'assert ' + 'statement 3'); 3 ",
11670 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 4 ",
11671 " assert(1 > 5, 'assert ' + 'statement 5'); 5 ",
11672 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 6 "
11675 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
11677 for (std::size_t i = 0; i < expression_count; ++i)
11679 expression_t expression;
11685 parser.register_assert_check(handler);
11687 if (!parser.compile(expressions[i], expression))
11689 printf(
"run_test22() - Error: %s\tExpression: %s [4]\n",
11690 parser.error().c_str(),
11691 expressions[i].c_str());
11696 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
11699 type_sequence.push_back(et_t::e_assert );
11700 type_sequence.push_back(et_t::e_literal);
11704 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [4]\n",
11705 expressions[i].c_str());
11710 expression.value();
11714 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [4]\n",
11716 expressions[i].c_str());
11724 const std::string expressions[] =
11726 " assert(1 > 1); 1 + 0 ",
11727 " assert(1 > 2, 'assert statement 2'); 2 + 0 ",
11728 " assert(1 > 3, 'assert ' + 'statement 3'); 3 + 0 ",
11729 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 4 + 0 ",
11730 " assert(1 > 5, 'assert ' + 'statement 5'); 5 + 0 ",
11731 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 6 + 0 "
11734 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
11736 for (std::size_t i = 0; i < expression_count; ++i)
11738 expression_t expression;
11744 parser.register_assert_check(handler);
11746 if (!parser.compile(expressions[i], expression))
11748 printf(
"run_test22() - Error: %s\tExpression: %s [5]\n",
11749 parser.error().c_str(),
11750 expressions[i].c_str());
11755 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
11758 type_sequence.push_back(et_t::e_assert );
11759 type_sequence.push_back(et_t::e_literal);
11763 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [5]\n",
11764 expressions[i].c_str());
11769 expression.value();
11773 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [5]\n",
11775 expressions[i].c_str());
11783 const std::string expressions[] =
11785 " assert(1 > 1); 'assert statement 0001' ",
11786 " assert(1 > 2, 'assert statement 2'); 'assert statement 0002' ",
11787 " assert(1 > 3, 'assert ' + 'statement 3'); 'assert statement 0003' ",
11788 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 'assert statement 0004' ",
11789 " assert(1 > 5, 'assert ' + 'statement 5'); 'assert statement 0005' ",
11790 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 'assert statement 0006' "
11793 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
11795 for (std::size_t i = 0; i < expression_count; ++i)
11797 expression_t expression;
11803 parser.register_assert_check(handler);
11805 if (!parser.compile(expressions[i], expression))
11807 printf(
"run_test22() - Error: %s\tExpression: %s [6]\n",
11808 parser.error().c_str(),
11809 expressions[i].c_str());
11814 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
11817 type_sequence.push_back(et_t::e_assert);
11818 type_sequence.push_back(et_t::e_string);
11822 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [6]\n",
11823 expressions[i].c_str());
11828 expression.value();
11832 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [6]\n",
11834 expressions[i].c_str());
11842 const std::string expressions[] =
11844 " assert(1 > 1); 'assert statement' + '0001' ",
11845 " assert(1 > 2, 'assert statement 2'); 'assert statement' + '0002' ",
11846 " assert(1 > 3, 'assert ' + 'statement 3'); 'assert statement' + '0003' ",
11847 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 'assert statement' + '0004' ",
11848 " assert(1 > 5, 'assert ' + 'statement 5'); 'assert statement' + '0005' ",
11849 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 'assert statement' + '0006' "
11852 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
11854 for (std::size_t i = 0; i < expression_count; ++i)
11856 expression_t expression;
11862 parser.register_assert_check(handler);
11864 if (!parser.compile(expressions[i], expression))
11866 printf(
"run_test22() - Error: %s\tExpression: %s [7]\n",
11867 parser.error().c_str(),
11868 expressions[i].c_str());
11873 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
11876 type_sequence.push_back(et_t::e_assert);
11877 type_sequence.push_back(et_t::e_string);
11881 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [7]\n",
11882 expressions[i].c_str());
11887 expression.value();
11891 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [7]\n",
11893 expressions[i].c_str());
11901 const std::string expressions[] =
11903 " assert(x > y); ",
11904 " assert(x > y, 'assert statement 2'); ",
11905 " assert(x > y, 'assert ' + 'statement 3'); ",
11906 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); ",
11907 " assert(x > y, 'assert ' + 'statement 5'); ",
11908 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); "
11911 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
11913 for (std::size_t i = 0; i < expression_count; ++i)
11918 symbol_table_t symbol_table;
11919 expression_t expression;
11922 symbol_table.add_variable(
"x", x);
11923 symbol_table.add_variable(
"y", y);
11924 expression.register_symbol_table(symbol_table);
11926 if (!parser.compile(expressions[i], expression))
11928 printf(
"run_test22() - Error: %s\tExpression: %s [8]\n",
11929 parser.error().c_str(),
11930 expressions[i].c_str());
11936 printf(
"run_test22() - Error: Expression is not null! expression: %s [8]\n",
11937 expressions[i].c_str());
11942 expression.value();
11947 const std::string expressions[] =
11949 " assert(x > y); 1 + 0 ",
11950 " assert(x > y, 'assert statement 2'); 2 + 0 ",
11951 " assert(x > y, 'assert ' + 'statement 3'); 3 + 0 ",
11952 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); 4 + 0 ",
11953 " assert(x > y, 'assert ' + 'statement 5'); 5 + 0 ",
11954 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); 6 + 0 "
11957 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
11959 for (std::size_t i = 0; i < expression_count; ++i)
11964 symbol_table_t symbol_table;
11965 expression_t expression;
11968 symbol_table.add_variable(
"x", x);
11969 symbol_table.add_variable(
"y", y);
11970 expression.register_symbol_table(symbol_table);
11972 if (!parser.compile(expressions[i], expression))
11974 printf(
"run_test22() - Error: %s\tExpression: %s [9]\n",
11975 parser.error().c_str(),
11976 expressions[i].c_str());
11982 printf(
"run_test22() - Error: Expression is not constant! expression: %s [9]\n",
11983 expressions[i].c_str());
11987 expression.value();
11992 const std::string expressions[] =
11995 " assert(x > y, 'assert statement 2'); "
11996 " assert(x > y, 'assert ' + 'statement 3'); "
11997 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); "
11998 " assert(x > y, 'assert ' + 'statement 5'); "
11999 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); "
12002 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12004 for (std::size_t i = 0; i < expression_count; ++i)
12009 symbol_table_t symbol_table;
12010 expression_t expression;
12016 symbol_table.add_variable(
"x", x);
12017 symbol_table.add_variable(
"y", y);
12018 expression.register_symbol_table(symbol_table);
12020 parser.register_assert_check(handler);
12022 if (!parser.compile(expressions[i], expression))
12024 printf(
"run_test22() - Error: %s\tExpression: %s [10]\n",
12025 parser.error().c_str(),
12026 expressions[i].c_str());
12031 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12034 type_sequence.push_back(et_t::e_assert);
12035 type_sequence.push_back(et_t::e_assert);
12036 type_sequence.push_back(et_t::e_assert);
12037 type_sequence.push_back(et_t::e_assert);
12038 type_sequence.push_back(et_t::e_assert);
12039 type_sequence.push_back(et_t::e_assert);
12043 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [10]\n",
12044 expressions[i].c_str());
12049 expression.value();
12053 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [10]\n",
12055 expressions[i].c_str());
12063 const std::string expressions[] =
12065 " assert(x > y); 1 ",
12066 " assert(x > y, 'assert statement 2'); 2 ",
12067 " assert(x > y, 'assert ' + 'statement 3'); 3 ",
12068 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); 4 ",
12069 " assert(x > y, 'assert ' + 'statement 5'); 5 ",
12070 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); 6 "
12073 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12075 for (std::size_t i = 0; i < expression_count; ++i)
12080 symbol_table_t symbol_table;
12081 expression_t expression;
12087 symbol_table.add_variable(
"x", x);
12088 symbol_table.add_variable(
"y", y);
12089 expression.register_symbol_table(symbol_table);
12091 parser.register_assert_check(handler);
12093 if (!parser.compile(expressions[i], expression))
12095 printf(
"run_test22() - Error: %s\tExpression: %s [11]\n",
12096 parser.error().c_str(),
12097 expressions[i].c_str());
12102 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12105 type_sequence.push_back(et_t::e_assert );
12106 type_sequence.push_back(et_t::e_literal);
12110 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [11]\n",
12111 expressions[i].c_str());
12116 expression.value();
12120 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [11]\n",
12122 expressions[i].c_str());
12131 const std::string expressions[] =
12133 " assert(x > y); 1 + 0 ",
12134 " assert(x > y, 'assert statement 2'); 2 + 0 ",
12135 " assert(x > y, 'assert ' + 'statement 3'); 3 + 0 ",
12136 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); 4 + 0 ",
12137 " assert(x > y, 'assert ' + 'statement 5'); 5 + 0 ",
12138 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); 6 + 0 "
12141 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12143 for (std::size_t i = 0; i < expression_count; ++i)
12148 symbol_table_t symbol_table;
12149 expression_t expression;
12155 symbol_table.add_variable(
"x", x);
12156 symbol_table.add_variable(
"y", y);
12157 expression.register_symbol_table(symbol_table);
12159 parser.register_assert_check(handler);
12161 if (!parser.compile(expressions[i], expression))
12163 printf(
"run_test22() - Error: %s\tExpression: %s [12]\n",
12164 parser.error().c_str(),
12165 expressions[i].c_str());
12170 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12173 type_sequence.push_back(et_t::e_assert );
12174 type_sequence.push_back(et_t::e_literal);
12178 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [12]\n",
12179 expressions[i].c_str());
12184 expression.value();
12188 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [12]\n",
12190 expressions[i].c_str());
12198 const std::string expressions[] =
12200 " assert(x > y); 'assert statement 0001' ",
12201 " assert(x > y, 'assert statement 2'); 'assert statement 0002' ",
12202 " assert(x > y, 'assert ' + 'statement 3'); 'assert statement 0003' ",
12203 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); 'assert statement 0004' ",
12204 " assert(x > y, 'assert ' + 'statement 5'); 'assert statement 0005' ",
12205 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); 'assert statement 0006' "
12208 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12210 for (std::size_t i = 0; i < expression_count; ++i)
12215 symbol_table_t symbol_table;
12216 expression_t expression;
12222 symbol_table.add_variable(
"x", x);
12223 symbol_table.add_variable(
"y", y);
12224 expression.register_symbol_table(symbol_table);
12226 parser.register_assert_check(handler);
12228 if (!parser.compile(expressions[i], expression))
12230 printf(
"run_test22() - Error: %s\tExpression: %s [13]\n",
12231 parser.error().c_str(),
12232 expressions[i].c_str());
12237 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12240 type_sequence.push_back(et_t::e_assert);
12241 type_sequence.push_back(et_t::e_string);
12245 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [13]\n",
12246 expressions[i].c_str());
12251 expression.value();
12255 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [13]\n",
12257 expressions[i].c_str());
12265 const std::string expressions[] =
12267 " assert(x > y); 'assert statement' + '0001' ",
12268 " assert(x > y, 'assert statement 2'); 'assert statement' + '0002' ",
12269 " assert(x > y, 'assert ' + 'statement 3'); 'assert statement' + '0003' ",
12270 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); 'assert statement' + '0004' ",
12271 " assert(x > y, 'assert ' + 'statement 5'); 'assert statement' + '0005' ",
12272 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); 'assert statement' + '0006' "
12275 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12277 for (std::size_t i = 0; i < expression_count; ++i)
12282 symbol_table_t symbol_table;
12283 expression_t expression;
12289 symbol_table.add_variable(
"x", x);
12290 symbol_table.add_variable(
"y", y);
12291 expression.register_symbol_table(symbol_table);
12293 parser.register_assert_check(handler);
12295 if (!parser.compile(expressions[i], expression))
12297 printf(
"run_test22() - Error: %s\tExpression: %s [14]\n",
12298 parser.error().c_str(),
12299 expressions[i].c_str());
12304 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12307 type_sequence.push_back(et_t::e_assert);
12308 type_sequence.push_back(et_t::e_string);
12312 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [14]\n",
12313 expressions[i].c_str());
12318 expression.value();
12322 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [14]\n",
12324 expressions[i].c_str());
12332 const std::string expressions[] =
12334 " assert(1 > 1); 1 + 0; "
12335 " assert(1 > 2, 'assert statement 2'); 2 + 0; "
12336 " assert(1 > 3, 'assert ' + 'statement 3'); 3 + 0; "
12337 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 4 + 0; "
12338 " assert(1 > 5, 'assert ' + 'statement 5'); 5 + 0 "
12339 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 6 + 0; "
12342 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12344 for (std::size_t i = 0; i < expression_count; ++i)
12346 expression_t expression;
12352 parser.register_assert_check(handler);
12354 if (!parser.compile(expressions[i], expression))
12356 printf(
"run_test22() - Error: %s\tExpression: %s [15]\n",
12357 parser.error().c_str(),
12358 expressions[i].c_str());
12363 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12366 type_sequence.push_back(et_t::e_assert );
12367 type_sequence.push_back(et_t::e_assert );
12368 type_sequence.push_back(et_t::e_assert );
12369 type_sequence.push_back(et_t::e_assert );
12370 type_sequence.push_back(et_t::e_assert );
12371 type_sequence.push_back(et_t::e_assert );
12372 type_sequence.push_back(et_t::e_literal);
12376 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [15]\n",
12377 expressions[i].c_str());
12382 expression.value();
12386 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [15]\n",
12388 expressions[i].c_str());
12396 const std::string expressions[] =
12398 " assert(1 > 1); 'assert' + '01'; "
12399 " assert(1 > 2, 'assert statement 2'); 'assert' + '02'; "
12400 " assert(1 > 3, 'assert ' + 'statement 3'); 'assert' + '03'; "
12401 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 'assert' + '04'; "
12402 " assert(1 > 5, 'assert ' + 'statement 5'); 'assert' + '05'; "
12403 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 'assert' + '06'; "
12406 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12408 for (std::size_t i = 0; i < expression_count; ++i)
12410 expression_t expression;
12416 parser.register_assert_check(handler);
12418 if (!parser.compile(expressions[i], expression))
12420 printf(
"run_test22() - Error: %s\tExpression: %s [16]\n",
12421 parser.error().c_str(),
12422 expressions[i].c_str());
12427 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12430 type_sequence.push_back(et_t::e_assert);
12431 type_sequence.push_back(et_t::e_assert);
12432 type_sequence.push_back(et_t::e_assert);
12433 type_sequence.push_back(et_t::e_assert);
12434 type_sequence.push_back(et_t::e_assert);
12435 type_sequence.push_back(et_t::e_assert);
12436 type_sequence.push_back(et_t::e_string);
12440 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [16]\n",
12441 expressions[i].c_str());
12446 expression.value();
12450 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [16]\n",
12452 expressions[i].c_str());
12460 const std::string expressions[] =
12462 " assert(x > y); x + y + 1; "
12463 " assert(x > y, 'assert statement 2'); x + y + 1; "
12464 " assert(x > y, 'assert ' + 'statement 3'); x + y + 1; "
12465 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); x + y + 1; "
12466 " assert(x > y, 'assert ' + 'statement 5'); x + y + 1; "
12467 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); x + y + 1; "
12470 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12472 for (std::size_t i = 0; i < expression_count; ++i)
12477 symbol_table_t symbol_table;
12478 expression_t expression;
12484 symbol_table.add_variable(
"x", x);
12485 symbol_table.add_variable(
"y", y);
12486 expression.register_symbol_table(symbol_table);
12488 parser.register_assert_check(handler);
12490 if (!parser.compile(expressions[i], expression))
12492 printf(
"run_test22() - Error: %s\tExpression: %s [17]\n",
12493 parser.error().c_str(),
12494 expressions[i].c_str());
12499 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12502 type_sequence.push_back(et_t::e_assert);
12503 type_sequence.push_back(et_t::e_assert);
12504 type_sequence.push_back(et_t::e_assert);
12505 type_sequence.push_back(et_t::e_assert);
12506 type_sequence.push_back(et_t::e_assert);
12507 type_sequence.push_back(et_t::e_assert);
12508 type_sequence.push_back(et_t::e_sf3ext);
12512 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [17]\n",
12513 expressions[i].c_str());
12518 expression.value();
12522 printf(
"run_test22() - Error: Invalid assert count of %d expected 6. Expression: %s [17]\n",
12524 expressions[i].c_str());
12532 const std::string expressions[] =
12534 " assert(x > y); 'assert' + ((x < y) ? '01' : 'XYZ'); "
12535 " assert(x > y, 'assert statement 2'); 'assert' + ((x < y) ? '02' : 'XYZ'); "
12536 " assert(x > y, 'assert ' + 'statement 3'); 'assert' + ((x < y) ? '03' : 'XYZ'); "
12537 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); 'assert' + ((x < y) ? '04' : 'XYZ'); "
12538 " assert(x > y, 'assert ' + 'statement 5'); 'assert' + ((x < y) ? '05' : 'XYZ'); "
12539 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); 'assert' + ((x < y) ? '06' : 'XYZ'); "
12542 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12544 for (std::size_t i = 0; i < expression_count; ++i)
12549 symbol_table_t symbol_table;
12550 expression_t expression;
12556 symbol_table.add_variable(
"x", x);
12557 symbol_table.add_variable(
"y", y);
12558 expression.register_symbol_table(symbol_table);
12560 parser.register_assert_check(handler);
12562 if (!parser.compile(expressions[i], expression))
12564 printf(
"run_test22() - Error: %s\tExpression: %s [18]\n",
12565 parser.error().c_str(),
12566 expressions[i].c_str());
12571 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12574 type_sequence.push_back(et_t::e_assert);
12575 type_sequence.push_back(et_t::e_assert);
12576 type_sequence.push_back(et_t::e_assert);
12577 type_sequence.push_back(et_t::e_assert);
12578 type_sequence.push_back(et_t::e_assert);
12579 type_sequence.push_back(et_t::e_assert);
12580 type_sequence.push_back(et_t::e_string);
12584 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [18]\n",
12585 expressions[i].c_str());
12590 expression.value();
12594 printf(
"run_test22() - Error: Invalid assert count of %d expected 6. Expression: %s [18]\n",
12596 expressions[i].c_str());