1334 test_xy<T>(
"(x + y) * (x + y)" ,T(2.2),T(3.3),T(30.25)),
1335 test_xy<T>(
"(x + y) / (x + y)" ,T(2.2),T(3.3),T(1.0 )),
1336 test_xy<T>(
"x + y > x and x + y > y" ,T(2.2),T(3.3),T(1.0)),
1337 test_xy<T>(
"1 + (x + y)" ,T(2.2),T(3.3),T(6.5 )),
1338 test_xy<T>(
"(x + y) - 1" ,T(2.2),T(3.3),T(4.5 )),
1339 test_xy<T>(
"1 + (x + y) * 2" ,T(2.2),T(3.3),T(12.0 )),
1340 test_xy<T>(
"2 * (x + y) - 1" ,T(2.2),T(3.3),T(10.0 )),
1341 test_xy<T>(
"y + (x + 1)" ,T(2.2),T(3.3),T(6.5 )),
1342 test_xy<T>(
"(x + 1) + y" ,T(2.2),T(3.3),T(6.5 )),
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(3)),
1374 test_xy<T>(
"(x--1 + 1)" ,T(1.0),T(0.0),T(3)),
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(1)),
1379 test_xy<T>(
"(x+-1 + 1)" ,T(1.0),T(0.0),T(1)),
1380 test_xy<T>(
"(x +- -1 + 1)" ,T(1.0),T(0.0),T(3)),
1381 test_xy<T>(
"(x + +1 + 1)" ,T(1.0),T(0.0),T(3)),
1382 test_xy<T>(
"(x ++1 + 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(3)),
1386 test_xy<T>(
"(1--x + 1)" ,T(1.0),T(0.0),T(3)),
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(1)),
1391 test_xy<T>(
"(1+-x + 1)" ,T(1.0),T(0.0),T(1)),
1392 test_xy<T>(
"(1 +- -x + 1)" ,T(1.0),T(0.0),T(3)),
1393 test_xy<T>(
"(1 + +x + 1)" ,T(1.0),T(0.0),T(3)),
1394 test_xy<T>(
"(1 ++x + 1)" ,T(1.0),T(0.0),T(3)),
1395 test_xy<T>(
"(x - -1 - 1)" ,T(1.0),T(0.0),T(1)),
1396 test_xy<T>(
"(x --1 - 1)" ,T(1.0),T(0.0),T(1)),
1397 test_xy<T>(
"(x-- 1 - 1)" ,T(1.0),T(0.0),T(1)),
1398 test_xy<T>(
"(x--1 - 1)" ,T(1.0),T(0.0),T(1)),
1399 test_xy<T>(
"(x -- -1 - 1)" ,T(1.0),T(0.0),T(-1)),
1400 test_xy<T>(
"(x + -1 - 1)" ,T(1.0),T(0.0),T(-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>(
"(x + +1 - 1)" ,T(1.0),T(0.0),T(1)),
1406 test_xy<T>(
"(x ++1 - 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>(
"(1 + +x - 1)" ,T(1.0),T(0.0),T(1)),
1418 test_xy<T>(
"(1 ++x - 1)" ,T(1.0),T(0.0),T(1)),
1419 test_xy<T>(
"x * 1 == x" ,T(2.0),T(3.0),T(1.0)),
1420 test_xy<T>(
"1 * x == x" ,T(2.0),T(3.0),T(1.0)),
1421 test_xy<T>(
"y * 1 == y" ,T(2.0),T(3.0),T(1.0)),
1422 test_xy<T>(
"1 * y == y" ,T(2.0),T(3.0),T(1.0)),
1423 test_xy<T>(
"x * 0 == 0" ,T(2.0),T(3.0),T(1.0)),
1424 test_xy<T>(
"0 * x == 0" ,T(2.0),T(3.0),T(1.0)),
1425 test_xy<T>(
"y * 0 == 0" ,T(2.0),T(3.0),T(1.0)),
1426 test_xy<T>(
"0 * y == 0" ,T(2.0),T(3.0),T(1.0)),
1427 test_xy<T>(
"x + 1 == 1 + x" ,T(2.0),T(3.0),T(1.0)),
1428 test_xy<T>(
"y + 1 == 1 + y" ,T(2.0),T(3.0),T(1.0)),
1429 test_xy<T>(
"x + y == y + x" ,T(2.0),T(3.0),T(1.0)),
1430 test_xy<T>(
"x * y == 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>(
"(x * y) > y" ,T(2.0),T(3.0),T(1.0)),
1442 test_xy<T>(
"(x * y) > x" ,T(2.0),T(3.0),T(1.0)),
1443 test_xy<T>(
"(2x + 3y) == (2*x + 3*y)" ,T(2.0),T(3.0),T(1.0)),
1444 test_xy<T>(
"2(x + y) == (2*x + 2*y)" ,T(2.0),T(3.0),T(1.0)),
1445 test_xy<T>(
" (x + y)3 == (3*x + 3*y)" ,T(2.0),T(3.0),T(1.0)),
1446 test_xy<T>(
"2x + 3y == 2*x + 3*y" ,T(2.0),T(3.0),T(1.0)),
1447 test_xy<T>(
"2(x + y) == 2*x + 2*y" ,T(2.0),T(3.0),T(1.0)),
1448 test_xy<T>(
" (x + y)3 == 3*x + 3*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) y) == (x*y)" ,T(2.0),T(3.0),T(1.0)),
1454 test_xy<T>(
" (x (y)) == (x*y)" ,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>(
" ((x) 3) == (x*3)" ,T(2.0),T(3.0),T(1.0)),
1460 test_xy<T>(
" (x (3)) == (x*3)" ,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>(
" ((2) y) == (2*y)" ,T(2.0),T(3.0),T(1.0)),
1466 test_xy<T>(
" (2 (y)) == (2*y)" ,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; {a}{3} == 6" ,T(2.0),T(3.0),T(1.0)),
1472 test_xy<T>(
"var a := 2; {a}[3] == 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; var b := 3; {a}{b} == 6" ,T(2.0),T(3.0),T(1.0)),
1478 test_xy<T>(
"var a := 2; var b := 3; {a}[b] == 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; {a}{a+1} == 6" ,T(2.0),T(3.0),T(1.0)),
1484 test_xy<T>(
"var a := 2; {a}[a+1] == 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>(
"var a := 2; var b := 3; {b-1}{b} == 6" ,T(2.0),T(3.0),T(1.0)),
1490 test_xy<T>(
"var a := 2; var b := 3; {b-1}[b] == 6" ,T(2.0),T(3.0),T(1.0)),
1491 test_xy<T>(
"equal(x^2.2^1.1,17.15193942371376191362)" ,T(3.3),T(0.0),T(1.0)),
1492 test_xy<T>(
"equal(3.3^x^1.1,17.15193942371376191362)" ,T(2.2),T(0.0),T(1.0)),
1493 test_xy<T>(
"equal(3.3^2.2^x,17.15193942371376191362)" ,T(1.1),T(0.0),T(1.0)),
1494 test_xy<T>(
"equal(x^2.2^y,17.15193942371376191362)" ,T(3.3),T(1.1),T(1.0)),
1495 test_xy<T>(
"equal(x^y^1.1,17.15193942371376191362)" ,T(3.3),T(2.2),T(1.0)),
1496 test_xy<T>(
"equal(3.3^x^y,17.15193942371376191362)" ,T(2.2),T(1.1),T(1.0)),
1497 test_xy<T>(
"equal(x+y^3/7,x+(y*y*y)/7)",T(2.0),T(3.0),T(1.0)),
1498 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)),
1499 test_xy<T>(
"equal( x^0,1)",T(12.34),T(0.0),T(1.0)),
1500 test_xy<T>(
"equal( x^1,x)",T(12.34),T(0.0),T(1.0)),
1501 test_xy<T>(
"equal( x^2,x*x)",T(12.34),T(0.0),T(1.0)),
1502 test_xy<T>(
"equal( x^3,x*x*x)",T(12.34),T(0.0),T(1.0)),
1503 test_xy<T>(
"equal( x^4,x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1504 test_xy<T>(
"equal( x^5,x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1505 test_xy<T>(
"equal( x^6,x*x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1506 test_xy<T>(
"equal( x^7,x*x*x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1507 test_xy<T>(
"equal( x^8,x*x*x*x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1508 test_xy<T>(
"equal( x^9,x*x*x*x*x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1509 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)),
1510 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)),
1511 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)),
1512 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)),
1513 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)),
1514 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)),
1515 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)),
1516 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)),
1517 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)),
1518 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)),
1519 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)),
1520 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)),
1521 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)),
1522 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)),
1523 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)),
1524 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)),
1525 test_xy<T>(
"equal( y^0,1)",T(0.0),T(12.34),T(1.0)),
1526 test_xy<T>(
"equal( y^1,y)",T(0.0),T(12.34),T(1.0)),
1527 test_xy<T>(
"equal( y^2,y*y)",T(0.0),T(12.34),T(1.0)),
1528 test_xy<T>(
"equal( y^3,y*y*y)",T(0.0),T(12.34),T(1.0)),
1529 test_xy<T>(
"equal( y^4,y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1530 test_xy<T>(
"equal( y^5,y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1531 test_xy<T>(
"equal( y^6,y*y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1532 test_xy<T>(
"equal( y^7,y*y*y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1533 test_xy<T>(
"equal( y^8,y*y*y*y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1534 test_xy<T>(
"equal( y^9,y*y*y*y*y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1535 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)),
1536 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)),
1537 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)),
1538 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)),
1539 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)),
1540 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)),
1541 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)),
1542 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)),
1543 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)),
1544 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)),
1545 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)),
1546 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)),
1547 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)),
1548 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)),
1549 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)),
1550 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)),
1551 test_xy<T>(
"equal( x^-0,1/1)",T(12.34),T(0.0),T(1.0)),
1552 test_xy<T>(
"equal( x^-1,1/(x))",T(12.34),T(0.0),T(1.0)),
1553 test_xy<T>(
"equal( x^-2,1/(x*x))",T(12.34),T(0.0),T(1.0)),
1554 test_xy<T>(
"equal( x^-3,1/(x*x*x))",T(12.34),T(0.0),T(1.0)),
1555 test_xy<T>(
"equal( x^-4,1/(x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1556 test_xy<T>(
"equal( x^-5,1/(x*x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1557 test_xy<T>(
"equal( x^-6,1/(x*x*x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1558 test_xy<T>(
"equal( x^-7,1/(x*x*x*x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1559 test_xy<T>(
"equal( x^-8,1/(x*x*x*x*x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1560 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)),
1561 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)),
1562 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)),
1563 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)),
1564 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)),
1565 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)),
1566 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)),
1567 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)),
1568 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)),
1569 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)),
1570 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)),
1571 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)),
1572 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)),
1573 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)),
1574 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)),
1575 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)),
1576 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)),
1577 test_xy<T>(
"equal( y^-0,1/1)",T(0.0),T(12.34),T(1.0)),
1578 test_xy<T>(
"equal( y^-1,1/(y))",T(0.0),T(12.34),T(1.0)),
1579 test_xy<T>(
"equal( y^-2,1/(y*y))",T(0.0),T(12.34),T(1.0)),
1580 test_xy<T>(
"equal( y^-3,1/(y*y*y))",T(0.0),T(12.34),T(1.0)),
1581 test_xy<T>(
"equal( y^-4,1/(y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1582 test_xy<T>(
"equal( y^-5,1/(y*y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1583 test_xy<T>(
"equal( y^-6,1/(y*y*y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1584 test_xy<T>(
"equal( y^-7,1/(y*y*y*y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1585 test_xy<T>(
"equal( y^-8,1/(y*y*y*y*y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1586 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)),
1587 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)),
1588 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)),
1589 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)),
1590 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)),
1591 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)),
1592 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)),
1593 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)),
1594 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)),
1595 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)),
1596 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)),
1597 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)),
1598 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)),
1599 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)),
1600 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)),
1601 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)),
1602 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)),
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 / (x * 7)",T(3.0),T(0.0),T(2.0 / (3.0 * 7.0))),
1618 test_xy<T>(
"2 / (x / 7)",T(3.0),T(0.0),T(2.0 / (3.0 / 7.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>(
"2 / (7 * x)",T(3.0),T(0.0),T(2.0 / (7.0 * 3.0))),
1626 test_xy<T>(
"2 / (7 / x)",T(3.0),T(0.0),T(2.0 / (7.0 / 3.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>(
"(x / 2) * 7",T(3.0),T(0.0),T((3.0 / 2.0) * 7.0)),
1634 test_xy<T>(
"(x / 2) / 7",T(3.0),T(0.0),T((3.0 / 2.0) / 7.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>(
"((2 - x) - (3 - y))",T(7.0),T(9.0),T(((2.0 - 7.0) - (3.0 - 9.0)))),
1638 test_xy<T>(
"((2 * x) * (3 * y))",T(7.0),T(9.0),T(((2.0 * 7.0) * (3.0 * 9.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>(
"((x + 2) - (y + 3))",T(7.0),T(9.0),T(((7.0 + 2.0) - (9.0 + 3.0)))),
1641 test_xy<T>(
"((x - 2) - (y - 3))",T(7.0),T(9.0),T(((7.0 - 2.0) - (9.0 - 3.0)))),
1642 test_xy<T>(
"((2 * x) * (3 * y))",T(7.0),T(9.0),T(((2.0 * 7.0) * (3.0 * 9.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) - (y + 3))",T(7.0),T(9.0),T(((2.0 + 7.0) - (9.0 + 3.0)))),
1645 test_xy<T>(
"((2 - x) - (y - 3))",T(7.0),T(9.0),T(((2.0 - 7.0) - (9.0 - 3.0)))),
1646 test_xy<T>(
"((2 * x) * (3 * y))",T(7.0),T(9.0),T(((2.0 * 7.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>(
"((x + 2) - (3 + y))",T(7.0),T(9.0),T(((7.0 + 2.0) - (3.0 + 9.0)))),
1649 test_xy<T>(
"((x - 2) - (3 - y))",T(7.0),T(9.0),T(((7.0 - 2.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>(
"((2 * x) / (3 / y))",T(7.0),T(9.0),T(((2.0 * 7.0) / (3.0 / 9.0)))),
1654 test_xy<T>(
"((2 / x) / (3 * y))",T(7.0),T(9.0),T(((2.0 / 7.0) / (3.0 * 9.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>(
"((x * 2) / (y / 3))",T(7.0),T(9.0),T(((7.0 * 2.0) / (9.0 / 3.0)))),
1658 test_xy<T>(
"((x / 2) / (y * 3))",T(7.0),T(9.0),T(((7.0 / 2.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>(
"((2 * x) / (y / 3))",T(7.0),T(9.0),T(((2.0 * 7.0) / (9.0 / 3.0)))),
1662 test_xy<T>(
"((2 / x) / (y * 3))",T(7.0),T(9.0),T(((2.0 / 7.0) / (9.0 * 3.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>(
"((x * 2) / (3 / y))",T(7.0),T(9.0),T(((7.0 * 2.0) / (3.0 / 9.0)))),
1666 test_xy<T>(
"((x / 2) / (3 * y))",T(7.0),T(9.0),T(((7.0 / 2.0) / (3.0 * 9.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>(
"([(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))),
1682 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))),
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>(
"(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))))),
1698 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))))),
1699 test_xy<T>(
"((2 * x) + (2 * y))",T(7.0),T(9.0),T(((2.0 * 7.0) + (2.0 * 9.0)))),
1700 test_xy<T>(
"((2 * x) - (2 * y))",T(7.0),T(9.0),T(((2.0 * 7.0) - (2.0 * 9.0)))),
1701 test_xy<T>(
"((2 * x) + (y * 2))",T(7.0),T(9.0),T(((2.0 * 7.0) + (9.0 * 2.0)))),
1702 test_xy<T>(
"((x * 2) - (y * 2))",T(7.0),T(9.0),T(((7.0 * 2.0) - (9.0 * 2.0)))),
1703 test_xy<T>(
"0 * (abs (x) + acos (y) + asin (x) + atan (y))",T(1.0),T(1.0),T(0.0)),
1704 test_xy<T>(
"0 * (ceil (x) + cos (y) + cosh (x) + exp (y))",T(1.0),T(1.0),T(0.0)),
1705 test_xy<T>(
"0 * (floor(x) + log (y) + log10(x) + round(y))",T(1.0),T(1.0),T(0.0)),
1706 test_xy<T>(
"0 * (sin (x) + sinh (y) + sqrt (x) + tan (y))",T(1.0),T(1.0),T(0.0)),
1707 test_xy<T>(
"0 * (sec (x) + csc (y) + tanh (x) + cot (y))",T(1.0),T(1.0),T(0.0)),
1708 test_xy<T>(
"0 * (erf (x) + erfc (y) + sgn (y) + frac (y))",T(1.0),T(1.0),T(0.0)),
1709 test_xy<T>(
"0 * (log1p(x) + expm1(y) + acosh(x) + asinh(y))",T(1.0),T(1.0),T(0.0)),
1710 test_xy<T>(
"0 * (deg2grad(x) + grad2deg(y) + rad2deg(x) + deg2rad(y))",T(1.0),T(1.0),T(0.0)),
1711 test_xy<T>(
"switch { case (x <= y) : (y - x); default: 1.12345; }",T(1.0),T(2.0),T(1.0)),
1712 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)),
1713 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)),
1714 test_xy<T>(
"switch { case [x <= y] : [y - x]; default: 1.12345; }",T(1.0),T(2.0),T(1.0)),
1715 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)),
1716 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)),
1717 test_xy<T>(
"switch { case {x <= y} : x; default: 1.12345; }",T(1.0),T(2.0),T(1.0)),
1718 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)),
1719 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)),
1720 test_xy<T>(
"switch { case [(x <= y)] : {y - x}; default: 1.12345; }",T(1.0),T(2.0),T(1.0)),
1721 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)),
1722 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)),
1723 test_xy<T>(
"[*]{ case x < y : x + y; case y < x : y - x; }",T(2.0),T(3.0),T(5.0)),
1724 test_xy<T>(
"[*]{ case x > y : x + y; case y > x : y - x; }",T(2.0),T(3.0),T(1.0)),
1725 test_xy<T>(
"[*]{ case x > y : x - y; case y < x : y + x; }",T(2.0),T(3.0),T(0.0)),
1726 test_xy<T>(
"0 ? x : y" ,T(1.0),T(2.0),T( 2.0)),
1727 test_xy<T>(
"1 ? x : y" ,T(1.0),T(2.0),T( 1.0)),
1728 test_xy<T>(
"x ? x : y" ,T(1.0),T(2.0),T( 1.0)),
1729 test_xy<T>(
"x ? x : y" ,T(0.0),T(2.0),T( 2.0)),
1730 test_xy<T>(
"(x + y < 4) ? 1 : 2" ,T(1.0),T(2.0),T( 1.0)),
1731 test_xy<T>(
"(x + y > 4) ? 1 : 2" ,T(1.0),T(2.0),T( 2.0)),
1732 test_xy<T>(
"x < y ? x + y : x - y" ,T(1.0),T(2.0),T( 3.0)),
1733 test_xy<T>(
"x > y ? x + y : x - y" ,T(1.0),T(2.0),T(-1.0)),
1734 test_xy<T>(
"(x + x < y ? 7 : 9) == 7" ,T(1.0),T(3.0),T( 1.0)),
1735 test_xy<T>(
"(x + x < y + y ? 7 : 9) == 7" ,T(1.0),T(3.0),T( 1.0)),
1736 test_xy<T>(
"(x > y + y ? 7 : 9) == 9" ,T(1.0),T(3.0),T( 1.0)),
1737 test_xy<T>(
"(x + x > y ? 7 : 9) == 9" ,T(1.0),T(3.0),T( 1.0)),
1738 test_xy<T>(
"(x + x > y + 3 ? 7 : 9) == 9" ,T(1.0),T(3.0),T( 1.0)),
1739 test_xy<T>(
"(x < (y + y) ? 7 : 9) == 7" ,T(1.0),T(3.0),T( 1.0)),
1740 test_xy<T>(
"((x + x) < y ? 7 : 9) == 7" ,T(1.0),T(3.0),T( 1.0)),
1741 test_xy<T>(
"((x + x) < (y + y) ? 7 : 9) == 7",T(1.0),T(3.0),T( 1.0)),
1742 test_xy<T>(
"(x += 2 ) == 3 " ,T(1),T(3),T(1)),
1743 test_xy<T>(
"(x += 2y) == 7 " ,T(1),T(3),T(1)),
1744 test_xy<T>(
"(x -= 2 ) == -1 " ,T(1),T(3),T(1)),
1745 test_xy<T>(
"(x -= 2y) == -5 " ,T(1),T(3),T(1)),
1746 test_xy<T>(
"(x *= 2 ) == 2 " ,T(1),T(3),T(1)),
1747 test_xy<T>(
"(x *= 2y) == 6 " ,T(1),T(3),T(1)),
1748 test_xy<T>(
"(x /= 2 ) == (1/2)" ,T(1),T(3),T(1)),
1749 test_xy<T>(
"(x /= 2y) == (1/6)" ,T(1),T(3),T(1)),
1750 test_xy<T>(
"for(var i := 0; (i < 10);) { i += 1; }; x;" ,T(1),T(20),T( 1)),
1751 test_xy<T>(
"for(var i := 0; (i < 10) and (i != y); i+=2) { x += i; }; x;" ,T(1),T(20),T(21)),
1752 test_xy<T>(
"for(var i := 0; (i < 10) and (i != y);) { x += i; i+=2; }; x;",T(1),T(20),T(21)),
1753 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)),
1754 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)),
1755 test_xy<T>(
"var a := 2; (0 * a) == 0",T(0),T(0),T(1)),
1756 test_xy<T>(
"var a := 2; (0 / a) == 0",T(0),T(0),T(1)),
1757 test_xy<T>(
"var a := 2; (a * 0) == 0",T(0),T(0),T(1)),
1758 test_xy<T>(
"var a := 2; (a / 1) == a",T(0),T(0),T(1)),
1759 test_xy<T>(
"var a := 2; (0 + a) == a",T(0),T(0),T(1)),
1760 test_xy<T>(
"var a := 2; (a + 0) == a",T(0),T(0),T(1)),
1761 test_xy<T>(
"var a := 2; (1 * a) == a",T(0),T(0),T(1)),
1762 test_xy<T>(
"var a.b := 3; (2 * a.b ) == 6",T(0),T(0),T(1)),
1763 test_xy<T>(
"var aa.bb := 3; (2 * aa.bb ) == 6",T(0),T(0),T(1)),
1764 test_xy<T>(
"var aaa.bbb := 3; (2 * aAa.BbB) == 6",T(0),T(0),T(1)),
1765 test_xy<T>(
"var a1.b2 := 3; (2 * a1.b2 ) == 6",T(0),T(0),T(1))
1768 static const std::size_t test_list_size =
sizeof(test_list) /
sizeof(
test_xy<T>);
1770 const std::size_t
rounds = 60;
1772 for (std::size_t r = 0; r <
rounds; ++r)
1774 bool loop_result =
true;
1776 for (std::size_t i = 0; i < test_list_size; ++i)
1795 printf(
"run_test01() - Error: %s Expression: %s\n",
1796 parser.
error().c_str(),
1799 loop_result =
false;
1805 const T result = expression.
value();
1809 printf(
"run_test01() - Computation Error: Expression: [%s]\tExpected: %19.15f\tResult: %19.15f\n",
1811 static_cast<double>(test.
result),
1812 static_cast<double>(result));
1814 loop_result =
false;
1828 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 ))),
1829 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 ))),
1830 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 ))),
1831 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 ))),
1832 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)))),
1833 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)))),
1834 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)))),
1835 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)))),
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>(
"([(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))),
1851 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))),
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>(
"(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))))),
1867 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))))),
1868 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)),
1869 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)),
1870 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)),
1871 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)),
1872 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)),
1873 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)),
1874 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)),
1875 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)),
1876 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)),
1877 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)),
1878 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)),
1879 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))
1882 static const std::size_t test_list_size =
sizeof(test_list) /
sizeof(
test_xyzw<T>);
1884 const std::size_t
rounds = 60;
1886 for (std::size_t r = 0; r <
rounds; ++r)
1888 bool loop_result =
true;
1889 for (std::size_t i = 0; i < test_list_size; ++i)
1894 symbol_table.add_variable(
"x",test.
x);
1895 symbol_table.add_variable(
"y",test.
y);
1896 symbol_table.add_variable(
"z",test.
z);
1897 symbol_table.add_variable(
"w",test.
w);
1907 printf(
"run_test01() - Error: %s Expression: %s\n",
1908 parser.
error().c_str(),
1911 loop_result =
false;
1917 const T result = expression.
value();
1921 printf(
"run_test01() - Computation Error: Expression: [%s]\tExpected: %19.15f\tResult: %19.15f\n",
1923 static_cast<double>(test.
result),
1924 static_cast<double>(result));
1926 loop_result =
false;
1938 const std::string expr_list[] =
1940 "((v[1] + x) == (x + v[1]))",
1941 "((v[0] += x) == x)",
1942 "((v[0] += x + y) == (x + y))",
1943 "((v[0] -= x) == -x)",
1944 "((v[0] -= (x + y)) == -(x + y))",
1945 "((v[1] + v[2]) == (v[3 - 1] + v[2 * 1/2]))",
1946 "(v[v[1]] == v[1])",
1947 "(v[1] += v[1]) == v[1 + 1]",
1948 "((v[i[1]] + x) == (x + v[i[1]]))",
1949 "((v[i[0]] += x) == x)",
1950 "((v[i[0]] += x + y) == (x + y))",
1951 "((v[i[0]] -= x) == -x)",
1952 "((v[i[0]] -= (x + y)) == -(x + y))",
1953 "((v[i[1]] + v[2]) == (v[i[3] - i[1]] + v[i[2] * 1/2]))",
1954 "(v[v[i[1]]] == v[i[1]])",
1955 "(v[i[1]] += v[i[1]]) == v[i[1] + 1]"
1958 const std::size_t expr_list_size =
sizeof(expr_list) /
sizeof(std::string);
1960 const std::size_t
rounds = 60;
1962 for (std::size_t r = 0; r <
rounds; ++r)
1964 bool loop_result =
true;
1966 for (std::size_t i = 0; i < expr_list_size; ++i)
1968 T v[] = { T(0.0), T(1.1), T(2.2), T(3.3), T(4.4), T(5.5) };
1969 T index[] = { T(0) , T(1) , T(2) , T(3) , T(4) , T(5) };
1988 if (!parser.
compile(expr_list[i],expression))
1990 printf(
"run_test01() - Error: %s Expression: %s\n",
1991 parser.
error().c_str(),
1992 expr_list[i].c_str());
1994 loop_result =
false;
2000 const T result = expression.
value();
2004 printf(
"run_test01() - Computation Error: Expression: [%s]\tExpected: %19.15f\tResult: %19.15f\n",
2005 expr_list[i].c_str(),
2006 static_cast<double>(1.0),
2007 static_cast<double>(result));
2009 loop_result =
false;
2019 for (std::size_t r = 0; r <
rounds; ++r)
2021 bool loop_result =
true;
2023 for (std::size_t i = 0; i < expr_list_size; ++i)
2025 T v_[] = { T(0.0), T(1.1), T(2.2), T(3.3), T(4.4), T(5.5) };
2026 T index_[] = { T(0) , T(1) , T(2) , T(3) , T(4) , T(5) };
2048 if (!parser.
compile(expr_list[i],expression))
2050 printf(
"run_test01() - Error: %s Expression: %s\n",
2051 parser.
error().c_str(),
2052 expr_list[i].c_str());
2054 loop_result =
false;
2060 const T result = expression.
value();
2064 printf(
"run_test01() - Computation Error: Expression: [%s]\tExpected: %19.15f\tResult: %19.15f\n",
2065 expr_list[i].c_str(),
2066 static_cast<double>(1.0),
2067 static_cast<double>(result));
2068 loop_result =
false;
3895 std::string i_s =
"A String";
3896 std::string j_s =
"Another String";
3897 std::string ii_s =
"A String";
3898 std::string jj_s =
"Another String";
3902 static inline bool variable(
exprtk::symbol_table<T>& symbol_table,
const std::string& variable_name,
const T& value)
3912 static inline bool string(
exprtk::symbol_table<T>& symbol_table,
const std::string& string_name,
const std::string& str)
3917 return (str_node->
ref() == str);
3924 static const std::size_t
rounds = 10;
3928 for (std::size_t r = 0; r <
rounds; ++r)
3937 printf(
"run_test10() - Symbol 'x' does not exist!\n");
3942 printf(
"run_test10() - Symbol 'y' does not exist!\n");
3947 printf(
"run_test10() - Symbol 'xx' does not exist!\n");
3952 printf(
"run_test10() - Symbol 'yy' does not exist!\n");
3955 else if (!test::variable(symbol_table,
"x", x))
3957 printf(
"run_test10() - Symbol 'x' value failure!\n");
3960 else if (!test::variable(symbol_table,
"y", y))
3962 printf(
"run_test10() - Symbol 'y' value failure!\n");
3965 else if (!test::variable(symbol_table,
"xx", xx))
3967 printf(
"run_test10() - Symbol 'xx' value failure!\n");
3970 else if (!test::variable(symbol_table,
"yy", yy))
3972 printf(
"run_test10() - Symbol 'yy' value failure!\n");
3978 printf(
"run_test10() - Failed to remove symbol 'x'!\n");
3983 printf(
"run_test10() - Failed to remove symbol 'y'!\n");
3988 printf(
"run_test10() - Failed to remove symbol 'xx'!\n");
3993 printf(
"run_test10() - Failed to remove symbol 'yy'!\n");
3998 for (std::size_t r = 0; r <
rounds; ++r)
4007 printf(
"run_test10() - function 'f' does not exist!\n");
4012 printf(
"run_test10() - function 'f1' does not exist!\n");
4018 printf(
"run_test10() - Failed to remove function 'f'!\n");
4023 printf(
"run_test10() - Failed to remove function 'f1'!\n");
4028 for (std::size_t r = 0; r <
rounds; ++r)
4038 printf(
"run_test10() - String 'i' does not exist!\n");
4043 printf(
"run_test10() - String 'j' does not exist!\n");
4048 printf(
"run_test10() - String 'ii' does not exist!\n");
4053 printf(
"run_test10() - String 'jj' does not exist!\n");
4056 else if (!test::string(symbol_table,
"i", i_s))
4058 printf(
"run_test10() - String 'i' value failure!\n");
4061 else if (!test::string(symbol_table,
"j", j_s))
4063 printf(
"run_test10() - String 'j' value failure!\n");
4066 else if (!test::string(symbol_table,
"ii", ii_s))
4068 printf(
"run_test10() - String 'ii' value failure!\n");
4071 else if (!test::string(symbol_table,
"jj", jj_s))
4073 printf(
"run_test10() - String 'jj' value failure!\n");
4078 printf(
"run_test10() - Failed to remove String 'i'!\n");
4083 printf(
"run_test10() - Failed to remove String 'j'!\n");
4088 printf(
"run_test10() - Failed to remove String 'ii'!\n");
4093 printf(
"run_test10() - Failed to remove String 'jj'!\n");
4098 for (std::size_t r = 0; r <
rounds; ++r)
4105 std::vector<std::string> expected_var_list;
4107 expected_var_list.push_back(
"x" );
4108 expected_var_list.push_back(
"y" );
4109 expected_var_list.push_back(
"xx");
4110 expected_var_list.push_back(
"yy");
4112 std::deque<std::pair<std::string, T> > variable_list;
4116 if (variable_list.size() != expected_var_list.size())
4118 printf(
"run_test10() - Failed to get variable list (1)\n");
4122 std::size_t found_count = 0;
4124 for (std::size_t i = 0; i < variable_list.size(); ++i)
4126 for (std::size_t j = 0; j < expected_var_list.size(); ++j)
4128 if (variable_list[i].first == expected_var_list[j])
4136 if (found_count != expected_var_list.size())
4138 printf(
"run_test10() - Failed to get variable list (2)\n");
4143 for (std::size_t r = 0; r <
rounds; ++r)
4150 std::vector<std::string> expected_var_list;
4152 expected_var_list.push_back(
"x" );
4153 expected_var_list.push_back(
"y" );
4154 expected_var_list.push_back(
"xx");
4155 expected_var_list.push_back(
"yy");
4157 std::deque<std::string> variable_list;
4161 if (variable_list.size() != expected_var_list.size())
4163 printf(
"run_test10() - Failed to get variable list (3)\n");
4167 std::size_t found_count = 0;
4169 for (std::size_t i = 0; i < variable_list.size(); ++i)
4171 for (std::size_t j = 0; j < expected_var_list.size(); ++j)
4173 if (variable_list[i] == expected_var_list[j])
4181 if (found_count != expected_var_list.size())
4183 printf(
"run_test10() - Failed to get variable list (4)\n");
4188 for (std::size_t r = 0; r <
rounds; ++r)
4195 std::vector<std::string> expected_var_list;
4197 expected_var_list.push_back(
"i" );
4198 expected_var_list.push_back(
"j" );
4199 expected_var_list.push_back(
"ii");
4200 expected_var_list.push_back(
"jj");
4202 std::deque<std::pair<std::string, std::string> > stringvar_list;
4206 if (stringvar_list.size() != expected_var_list.size())
4208 printf(
"run_test10() - Failed to get stringvar list (1)\n");
4212 std::size_t found_count = 0;
4214 for (std::size_t i = 0; i < stringvar_list.size(); ++i)
4216 for (std::size_t j = 0; j < expected_var_list.size(); ++j)
4218 if (stringvar_list[i].first == expected_var_list[j])
4226 if (found_count != expected_var_list.size())
4228 printf(
"run_test10() - Failed to get stringvar list (2)\n");
4233 for (std::size_t r = 0; r <
rounds; ++r)
4240 std::vector<std::string> expected_var_list;
4242 expected_var_list.push_back(
"i" );
4243 expected_var_list.push_back(
"j" );
4244 expected_var_list.push_back(
"ii");
4245 expected_var_list.push_back(
"jj");
4247 std::deque<std::string> stringvar_list;
4251 if (stringvar_list.size() != expected_var_list.size())
4253 printf(
"run_test10() - Failed to get stringvar list (3.0)\n");
4259 printf(
"run_test10() - Failed to get stringvar list (3.1)\n");
4263 std::size_t found_count = 0;
4265 for (std::size_t i = 0; i < stringvar_list.size(); ++i)
4267 for (std::size_t j = 0; j < expected_var_list.size(); ++j)
4269 if (stringvar_list[i] == expected_var_list[j])
4277 if (found_count != expected_var_list.size())
4279 printf(
"run_test10() - Failed to get stringvar list (4)\n");
4290 std::string expression_string =
"(x0 + y0) / z0";
4292 static const std::size_t
rounds = 100;
4294 for (std::size_t i = 0; i <
rounds; ++i)
4296 expression_t expression0;
4308 expression0.register_symbol_table(st0);
4313 if (!parser.
compile(expression_string,expression0))
4315 printf(
"run_test10() - Error: %s Expression: %s\n",
4316 parser.
error().c_str(),
4317 expression_string.c_str());
4324 expression_t expression1;
4326 expression1.register_symbol_table(st1);
4331 if (!parser.
compile(expression_string,expression1))
4333 printf(
"run_test10() - Error: %s Expression: %s\n",
4334 parser.
error().c_str(),
4335 expression_string.c_str());
4354 std::string e =
"string";
4364 expression_t expression;
4365 expression.register_symbol_table(symbol_table);
4367 std::string expression_string =
"(E == '1234') and (sin(a) + C) / b";
4370 typedef typename parser_t::dependent_entity_collector::symbol_t symbol_t;
4372 std::deque<symbol_t> symbol_list;
4378 parser.dec().collect_functions() =
true;
4380 if (!parser.compile(expression_string,expression))
4382 printf(
"run_test10() - Error: %s Expression: %s\n",
4383 parser.error().c_str(),
4384 expression_string.c_str());
4389 parser.dec().symbols(symbol_list);
4392 std::deque<symbol_t> expected_symbol_list;
4394 expected_symbol_list.push_back(symbol_t(
"a" ,parser_t::e_st_variable));
4395 expected_symbol_list.push_back(symbol_t(
"b" ,parser_t::e_st_variable));
4396 expected_symbol_list.push_back(symbol_t(
"c" ,parser_t::e_st_variable));
4397 expected_symbol_list.push_back(symbol_t(
"e" ,parser_t::e_st_string ));
4398 expected_symbol_list.push_back(symbol_t(
"sin",parser_t::e_st_function));
4400 bool result = (symbol_list.size() == expected_symbol_list.size()) &&
4401 std::equal(symbol_list.begin(),
4403 expected_symbol_list.begin());
4406 printf(
"run_test10() - Failed variable list comparison.(5)\n");
4417 std::string e =
"string";
4427 expression_t expression;
4428 expression.register_symbol_table(symbol_table);
4430 const std::string expression_string =
4437 typedef typename parser_t::dependent_entity_collector::symbol_t symbol_t;
4439 std::deque<symbol_t> variable_list;
4446 if (!parser.compile(expression_string,expression))
4448 printf(
"run_test10() - Error: %s Expression: %s\n",
4449 parser.error().c_str(),
4450 expression_string.c_str());
4455 parser.dec().assignment_symbols(variable_list);
4458 std::deque<symbol_t> expected_assignment_list;
4460 expected_assignment_list.push_back(symbol_t(
"a",parser_t::e_st_variable));
4461 expected_assignment_list.push_back(symbol_t(
"b",parser_t::e_st_variable));
4462 expected_assignment_list.push_back(symbol_t(
"c",parser_t::e_st_variable));
4463 expected_assignment_list.push_back(symbol_t(
"e",parser_t::e_st_string ));
4465 bool result = (variable_list.size() == expected_assignment_list.size()) &&
4466 std::equal(variable_list.begin(),
4467 variable_list.end(),
4468 expected_assignment_list.begin());
4471 printf(
"run_test10() - Failed variable list comparison.(6)\n");
4480 if (symbol_table0 == symbol_table1)
4482 printf(
"run_test10() - Error symbol_table0 and symbol_table1 are equal\n");
4486 symbol_table0 = symbol_table1;
4487 symbol_table1 = symbol_table0;
4489 if (!(symbol_table0 == symbol_table1))
4491 printf(
"run_test10() - Error symbol_table0 and symbol_table1 are not equal\n");
4502 std::string e =
"a string";
4506 expression_t expression;
4508 for (std::size_t i = 0; i < 10000; ++i)
4510 symbol_table0.
clear();
4511 symbol_table1.
clear();
4527 expression.register_symbol_table(symbol_table0);
4528 expression.register_symbol_table(symbol_table1);
4533 const std::string expression =
4534 "for (var i := 0; i < min(x[],y[],z[]); i += 1)"
4535 "{ z[i] := 3sin(x[i]) + 2log(y[i]); }";
4537 std::vector<std::string> var_symbol_list;
4538 std::vector<std::string> func_symbol_list;
4542 printf(
"run_test10() - Failed to collect variables.\n");
4548 printf(
"run_test10() - Failed to collect functions.\n");
4552 std::sort(var_symbol_list .begin(), var_symbol_list .end());
4553 std::sort(func_symbol_list.begin(), func_symbol_list.end());
4555 std::vector<std::string> expected_var_symbol_list;
4556 std::vector<std::string> expected_func_symbol_list;
4558 expected_var_symbol_list.push_back(
"i");
4559 expected_var_symbol_list.push_back(
"x");
4560 expected_var_symbol_list.push_back(
"y");
4561 expected_var_symbol_list.push_back(
"z");
4563 expected_func_symbol_list.push_back(
"log");
4564 expected_func_symbol_list.push_back(
"min");
4565 expected_func_symbol_list.push_back(
"sin");
4567 const bool var_result = (var_symbol_list.size() == expected_var_symbol_list.size()) &&
4568 std::equal(var_symbol_list.begin(),
4569 var_symbol_list.end(),
4570 expected_var_symbol_list.begin());
4573 printf(
"run_test10() - Failed collected variable comparison between received and expected variables\n");
4577 const bool func_result = (func_symbol_list.size() == expected_func_symbol_list.size()) &&
4578 std::equal(func_symbol_list.begin(),
4579 func_symbol_list.end(),
4580 expected_func_symbol_list.begin());
4583 printf(
"run_test10() - Failed collected functions comparison between received and expected functions\n");
4593 "var x:= 1; x - -1 == 2",
4594 "var x:= 1; x --1 == 2",
4595 "var x:= 1; x-- 1 == 2",
4596 "var x:= 1; x--1 == 2",
4597 "var x:= 1; x -- -1== 0",
4598 "var x:= 1; x + -1 == 0",
4599 "var x:= 1; x +-1 == 0",
4600 "var x:= 1; x+- 1 == 0",
4601 "var x:= 1; x+-1 == 0",
4602 "var x:= 1; x +- -1== 2",
4603 "var x:= 1; x + +1 == 2",
4604 "var x:= 1; x ++1 == 2",
4605 "var x:= 1; 1 - -x == 2",
4606 "var x:= 1; 1 --x == 2",
4607 "var x:= 1; 1-- x == 2",
4608 "var x:= 1; 1--x == 2",
4609 "var x:= 1; 1 -- -x== 0",
4610 "var x:= 1; 1 + -x == 0",
4611 "var x:= 1; 1 +-x == 0",
4612 "var x:= 1; 1+- x == 0",
4613 "var x:= 1; 1+-x == 0",
4614 "var x:= 1; 1 +- -x== 2",
4615 "var x:= 1; 1 + +x == 2",
4616 "var x:= 1; 1 ++x == 2",
4617 "var x:= 1; (x - -1 + 1) == 3",
4618 "var x:= 1; (x --1 + 1) == 3",
4619 "var x:= 1; (x-- 1 + 1) == 3",
4620 "var x:= 1; (x--1 + 1) == 3",
4621 "var x:= 1; (x -- -1 + 1) == 1",
4622 "var x:= 1; (x + -1 + 1) == 1",
4623 "var x:= 1; (x +-1 + 1) == 1",
4624 "var x:= 1; (x+- 1 + 1) == 1",
4625 "var x:= 1; (x+-1 + 1) == 1",
4626 "var x:= 1; (x +- -1 + 1) == 3",
4627 "var x:= 1; (x + +1 + 1) == 3",
4628 "var x:= 1; (x ++1 + 1) == 3",
4629 "var x:= 1; (1 - -x + 1) == 3",
4630 "var x:= 1; (1 --x + 1) == 3",
4631 "var x:= 1; (1-- x + 1) == 3",
4632 "var x:= 1; (1--x + 1) == 3",
4633 "var x:= 1; (1 -- -x + 1) == 1",
4634 "var x:= 1; (1 + -x + 1) == 1",
4635 "var x:= 1; (1 +-x + 1) == 1",
4636 "var x:= 1; (1+- x + 1) == 1",
4637 "var x:= 1; (1+-x + 1) == 1",
4638 "var x:= 1; (1 +- -x + 1) == 3",
4639 "var x:= 1; (1 + +x + 1) == 3",
4640 "var x:= 1; (1 ++x + 1) == 3",
4641 "var x:= 1; (x - -1 - 1) == 1",
4642 "var x:= 1; (x --1 - 1) == 1",
4643 "var x:= 1; (x-- 1 - 1) == 1",
4644 "var x:= 1; (x--1 - 1) == 1",
4645 "var x:= 1; (x -- -1 - 1) == -1",
4646 "var x:= 1; (x + -1 - 1) == -1",
4647 "var x:= 1; (x +-1 - 1) == -1",
4648 "var x:= 1; (x+- 1 - 1) == -1",
4649 "var x:= 1; (x+-1 - 1) == -1",
4650 "var x:= 1; (x +- -1 - 1) == 1",
4651 "var x:= 1; (x + +1 - 1) == 1",
4652 "var x:= 1; (x ++1 - 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; (1 +-x - 1) == -1",
4660 "var x:= 1; (1+- x - 1) == -1",
4661 "var x:= 1; (1+-x - 1) == -1",
4662 "var x:= 1; (1 +- -x - 1) == 1",
4663 "var x:= 1; (1 + +x - 1) == 1",
4664 "var x:= 1; (1 ++x - 1) == 1",
4665 "var x := 1; var y := 2; 1",
4666 "var x := 1; var y := 2; x",
4667 "var x:=6; var y:=4; x + -3 == 3",
4668 "var x:=6; var y:=4; x - -3 == 9",
4669 "var x:=6; var y:=4; x * -3 == -18",
4670 "var x:=6; var y:=4; x / -3 == -2",
4671 "var x:=6; var y:=4; -x + -3 == -9",
4672 "var x:=6; var y:=4; -x - -3 == -3",
4673 "var x:=6; var y:=4; -x * -3 == 18",
4674 "var x:=6; var y:=4; -x / -3 == 2",
4675 "var x:=6; var y:=4; -3 + -x == -9",
4676 "var x:=6; var y:=4; -3 - -x == 3",
4677 "var x:=6; var y:=4; -3 * -x == 18",
4678 "var x:=6; var y:=4; -3 / -x == 0.5",
4679 "var x:=6; var y:=4; 3 + -x == -3",
4680 "var x:=6; var y:=4; 3 - -x == 9",
4681 "var x:=6; var y:=4; 3 * -x == -18",
4682 "var x:=6; var y:=4; 3 / -x == -0.5",
4683 "var x := 3; var y := 6; x + -y == -3",
4684 "var x := 3; var y := 6; x - -y == 9",
4685 "var x := 3; var y := 6; -x + -y == -9",
4686 "var x := 3; var y := 6; -x - -y == 3",
4687 "var x := 3; var y := 6; -x * -y == 18",
4688 "var x := 6; var y := 3; -x / -y == 2",
4689 "var x := 3; var y := 6; -(-x * -y) == -18",
4690 "var x := 6; var y := 3; -(-x / -y) == -2",
4691 "var x:=1; 2+(3+abs(x)) == 6 ",
4692 "var x:=1; (3+abs(x))+2 == 6 ",
4693 "var x:=1; 2+(abs(x)+3) == 6 ",
4694 "var x:=1; (abs(x)+3)+2 == 6 ",
4695 "var x:=1; 2+(3-abs(x)) == 4 ",
4696 "var x:=1; (3-abs(x))+2 == 4 ",
4697 "var x:=1; 2+(abs(x)-3) == 0 ",
4698 "var x:=1; (abs(x)-3)+2 == 0 ",
4699 "var x:=1; 2-(3+abs(x)) == -2 ",
4700 "var x:=1; (3+abs(x))-2 == 2 ",
4701 "var x:=1; 2-(abs(x)+3) == -2 ",
4702 "var x:=1; (abs(x)+3)-2 == 2 ",
4703 "var x:=1; 2*(3*abs(x)) == 6 ",
4704 "var x:=1; (3*abs(x))*2 == 6 ",
4705 "var x:=1; 2*(abs(x)*3) == 6 ",
4706 "var x:=1; (abs(x)*3)*2 == 6 ",
4707 "var x:=1; 2*(3/abs(x)) == 6 ",
4708 "var x:=1; (3/abs(x))*2 == 6 ",
4709 "var x:=1; 2*(abs(x)/3) == (2/3)",
4710 "var x:=1; (abs(x)/3)*2 == (2/3)",
4711 "var x:=1; 2/(3*abs(x)) == (2/3)",
4712 "var x:=1; (3*abs(x))/2 == (3/2)",
4713 "var x:=1; 2/(abs(x)*3) == (2/3)",
4714 "var x:=1; (abs(x)*3)/2 == (3/2)",
4715 "var x:=1; 2/(3/abs(x)) == (2/3)",
4716 "var x:=1; (3/abs(x))/2 == (3/2)",
4717 "var x:=1; 2/(abs(x)/3) == 6 ",
4718 "var x:=1; (abs(x)/3)/2 == (1/6)",
4719 "var x:=3; var y:=6; -(-x)*-(-y) == 18",
4720 "var x:=3; var y:=6; -(-x)*-(-(-y)) == -18",
4721 "var x:=3; var y:=6; -(-(-x))*-(-y) == -18",
4722 "var x:=3; var y:=6; -(-(-x))*-(-(-y)) == 18",
4723 "var x:=3; var y:=6; -(-(x+y))*-(-(y+x)) == 81",
4724 "var x:=3; var y:=6; -(-(-(x+y)))*-(-(y+x)) == -81",
4725 "var x:=3; var y:=6; -(-(x+y))*-(-(-(y+x))) == -81",
4726 "var x:=3; var y:=6; -(-(-(x+y)))*-(-(-(y+x))) == 81",
4727 "var x:= 2; var y := 3; (-abs(x)+-abs(y)) == -5 ",
4728 "var x:= 2; var y := 3; (-abs(x)--abs(y)) == 1 ",
4729 "var x:= 2; var y := 3; (-abs(x)*-abs(y)) == 6 ",
4730 "var x:= 2; var y := 3; (-abs(x)/-abs(y)) == (2/3) ",
4731 "var x:= 2; var y := 3; (-abs(x)+abs(y)) == 1 ",
4732 "var x:= 2; var y := 3; (-abs(x)-abs(y)) == -5 ",
4733 "var x:= 2; var y := 3; (-abs(x)*abs(y)) == -6 ",
4734 "var x:= 2; var y := 3; (-abs(x)/abs(y)) == -(2/3) ",
4735 "var x:= 2; var y := 3; (abs(x)+-abs(y)) == -1 ",
4736 "var x:= 2; var y := 3; (abs(x)--abs(y)) == 5 ",
4737 "var x:= 2; var y := 3; (abs(x)*-abs(y)) == -6 ",
4738 "var x:= 2; var y := 3; (abs(x)/-abs(y)) == -(2/3) ",
4739 "var x:= 2; var y := 3; (-abs(x + 0)+-abs(y - 0)) == -5 ",
4740 "var x:= 2; var y := 3; (-abs(x + 0)--abs(y - 0)) == 1 ",
4741 "var x:= 2; var y := 3; (-abs(x + 0)*-abs(y - 0)) == 6 ",
4742 "var x:= 2; var y := 3; (-abs(x + 0)/-abs(y - 0)) == (2/3) ",
4743 "var x:= 2; var y := 3; (-abs(x + 0)+abs(y - 0)) == 1 ",
4744 "var x:= 2; var y := 3; (-abs(x + 0)-abs(y - 0)) == -5 ",
4745 "var x:= 2; var y := 3; (-abs(x + 0)*abs(y - 0)) == -6 ",
4746 "var x:= 2; var y := 3; (-abs(x + 0)/abs(y - 0)) == -(2/3) ",
4747 "var x:= 2; var y := 3; (abs(x + 0)+-abs(y - 0)) == -1 ",
4748 "var x:= 2; var y := 3; (abs(x + 0)--abs(y - 0)) == 5 ",
4749 "var x:= 2; var y := 3; (abs(x + 0)*-abs(y - 0)) == -6 ",
4750 "var x:= 2; var y := 3; (abs(x + 0)/-abs(y - 0)) == -(2/3) ",
4751 "var x := 1; var y := 2; swap(x,y); (x == 2) and (y == 1)",
4752 "var x := 1; var y := 2; x <=> y ; (x == 2) and (y == 1)",
4753 "var x := 'abc'; x == 'abc' ",
4754 "var x := 'abc'; var y := '123'; x != y ",
4755 "var x := 'abc'; var y := x + '123'; y == 'abc123' ",
4756 "var x := 'abc'; var y := '123' + x; y == '123abc' ",
4757 "~{var x := '123'; x[]} + ~{var x := '1234'; x[]} == 7",
4758 "~{var x := '123'; x[]} + ~{~{var x := '1234'; x[]}} == 7",
4759 "~{~{var x := '123'; x[]}} + ~{var x := '1234'; x[]} == 7",
4760 "~{var x := '123'; x[]} + ~{var x := 4} == 7",
4761 "~{var x := 3} + ~{var x := '1234'; x[]} == 7",
4762 "~{var x := '123'; x[]} + ~{~{var x := 4}} == 7",
4763 "~{~{var x := 3}} + ~{var x := '1234'; x[]} == 7",
4764 "var v[2] := {1,2}; swap(v[0],v[1]); (v[0] == 2) and (v[1] == 1)",
4765 "var v[2] := {1,2}; v[0] <=> v[1] ; (v[0] == 2) and (v[1] == 1)",
4766 "var x := 1; var y := 2; ~(swap(x,y),(x == 2) and (y == 1))",
4767 "var x := 1; var y := 2; ~(x <=> y , (x == 2) and (y == 1))",
4768 "var v[2] := {1,2}; ~(swap(v[0],v[1]), (v[0] == 2) and (v[1] == 1))",
4769 "var v[2] := {1,2}; ~(v[0] <=> v[1] , (v[0] == 2) and (v[1] == 1))",
4770 "var v[2] := {1,2}; swap(v[zero],v[one]); (v[zero] == 2) and (v[one] == 1)",
4771 "var v[2] := {1,2}; v[zero] <=> v[one] ; (v[zero] == 2) and (v[one] == 1)",
4772 "var v[2] := {1,2}; ~(swap(v[zero],v[one]), (v[zero] == 2) and (v[one] == 1))",
4773 "var v[2] := {1,2}; ~(v[zero] <=> v[one] , (v[zero] == 2) and (v[one] == 1))",
4774 "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)",
4775 "var v[2] := {1,2}; v[2 * zero] <=> v[(2*one)/(1+1)] ; (v[2 * zero] == 2) and (v[(2 * one) / (1 + 1)] == 1)",
4776 "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))",
4777 "var v[2] := {1,2}; ~(v[2 * zero] <=> v[(2 * one) / (1 + 1)] , (v[2 * zero] == 2) and (v[(2 * one) / (1 + 1)] == 1))",
4778 "var x := 1; var y := 2; var v[2] := {3,4}; swap(x,v[0]); swap(v[1],y); (x == 3) and (y == 4)",
4779 "var x := 1; var y := 2; var v[2] := {3,4}; x <=> v[0]; v[1] <=> y; (x == 3) and (y == 4)",
4780 "var x := 1; var y := 2; var v[2] := {3,4}; swap(x,v[zero]); swap(v[one],y); (x == 3) and (y == 4)",
4781 "var x := 1; var y := 2; var v[2] := {3,4}; x <=> v[zero]; v[one] <=> y; (x == 3) and (y == 4)",
4782 "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)",
4783 "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)",
4784 "~{ var x := 1 } + ~{ var x := 2 } == 3",
4785 "(~{ var x := 1 } + ~{ var x := 2 }) == (~{ var x := 2 } + ~{ var x := 1 })",
4786 "(~{ var x := 1 } + ~{ var x := 2 } + ~{~{ var x := 1 } + ~{ var x := 2 }}) == 6",
4787 "(~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{~{ var x[1] := [1] } + ~{ var x[1] := [2] }}) == 6",
4788 "(~{ var x := [1] } + ~{ var x[1] := [2] } + ~{~{ var x[1] := [1] } + ~{ var x[1] := [2] }}) == 6",
4789 "(~{ var x[1] := [1] } + ~{ var x := [2] } + ~{~{ var x[1] := [1] } + ~{ var x[1] := [2] }}) == 6",
4790 "(~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{~{ var x := [1] } + ~{ var x[1] := [2] }}) == 6",
4791 "(~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{~{ var x[1] := [1] } + ~{ var x := [2] }}) == 6",
4792 "(~{~{ var x[1] := [1] } + ~{ var x[1] := [2] }} + ~{ var x[1] := [1] } + ~{ var x[1] := [2] }) == 6",
4793 "(~{~{ var x := [1] } + ~{ var x[1] := [2] }} + ~{ var x[1] := [1] } + ~{ var x[1] := [2] }) == 6",
4794 "(~{~{ var x[1] := [1] } + ~{ var x := [2] }} + ~{ var x[1] := [1] } + ~{ var x[1] := [2] }) == 6",
4795 "(~{~{ var x[1] := [1] } + ~{ var x[1] := [2] }} + ~{ var x := [1] } + ~{ var x[1] := [2] }) == 6",
4796 "(~{~{ var x[1] := [1] } + ~{ var x[1] := [2] }} + ~{ var x[1] := [1] } + ~{ var x := [2] }) == 6",
4797 "(~{~{ var x[1] := [1] }} + ~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{{ var x[1] := [2] }}) == 6",
4798 "(~{~{ var x := [1] }} + ~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{{ var x[1] := [2] }}) == 6",
4799 "(~{~{ var x[1] := [1] }} + ~{ var x := [1] } + ~{ var x[1] := [2] } + ~{{ var x[1] := [2] }}) == 6",
4800 "(~{~{ var x[1] := [1] }} + ~{ var x[1] := [1] } + ~{ var x := [2] } + ~{{ var x[1] := [2] }}) == 6",
4801 "(~{~{ var x[1] := [1] }} + ~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{{ var x := [2] }}) == 6",
4802 "(~{~{~{var x[1] := [1]}}} + ~{~{var x[1] := [2]}} + ~{var x[1] := [3]}) == 6",
4803 "(~{var x[1] := [1]} + ~{~{var x[1] := [2]}} + ~{~{~{var x[1] := [3]}}}) == 6",
4804 "(~{ var x[3] := [1] } + ~{ var x[6] := {6,5,4,3,2,1}}) == 7",
4805 "(~{ var x[6] := {6,5,4,3,2,1} } + ~{ var x := 1 }) == 7",
4806 "(~{ var x := 1 } + ~{ var x[6] := {6,5,4,3,2,1} }) == 7",
4807 "var x[3] := {}; (x[0] == 0) and (x[1] == 0) and (x[2] == 0)",
4808 "var x[3] := {1,2}; (x[0] == 1) and (x[1] == 2) and (x[2] == 0)",
4809 "var x[3] := {1,2,3}; (x[0] == 1) and (x[1] == 2) and (x[2] == 3)",
4810 "var x[3] := [1]; (x[0] == 1) and (x[1] == 1) and (x[2] == 1)",
4811 "var v[3] := [1]; v += 1; (v[0] == v[1]) and (v[0] == v[2]) and (v[0] == 2)",
4812 "var v[3] := [1]; v -= 1; (v[0] == v[1]) and (v[0] == v[2]) and (v[0] == 0)",
4813 "var v[3] := [1]; v *= 2; (v[0] == v[1]) and (v[0] == v[2]) and (v[0] == 2)",
4814 "var v[3] := [3]; v /= 3; (v[0] == v[1]) and (v[0] == v[2]) and (v[0] == 1)",
4815 "var v[3] := {1,2, 3}; v += 1; (v[0] == 2) and (v[1] == 3) and (v[2] == 4)",
4816 "var v[3] := {1,2, 3}; v -= 1; (v[0] == 0) and (v[1] == 1) and (v[2] == 2)",
4817 "var v[3] := {1,2, 3}; v *= 2; (v[0] == 2) and (v[1] == 4) and (v[2] == 6)",
4818 "var v[3] := {3,9,15}; v /= 3; (v[0] == 1) and (v[1] == 3) and (v[2] == 5)",
4819 "var v0[3] := [1]; var v1[3] := [1]; v0 += v1; (v0[0] == v0[1]) and (v0[0] == v0[2]) and (v0[0] == 2)",
4820 "var v0[3] := [1]; var v1[3] := [1]; v0 -= v1; (v0[0] == v0[1]) and (v0[0] == v0[2]) and (v0[0] == 0)",
4821 "var v0[3] := [1]; var v1[3] := [2]; v0 *= v1; (v0[0] == v0[1]) and (v0[0] == v0[2]) and (v0[0] == 2)",
4822 "var v0[3] := [3]; var v1[3] := [3]; v0 /= v1; (v0[0] == v0[1]) and (v0[0] == v0[2]) and (v0[0] == 1)",
4823 "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)",
4824 "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)",
4825 "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)",
4826 "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)",
4827 "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])",
4828 "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])",
4829 "var x[3] := {}; var y[2] := {1,2}; x := y; (x[0] == y[0]) and (x[1] == y[1]) and (x[2] == 0)",
4830 "var x[3] := {}; var y[1] := {1}; x := y; (x[0] == y[0]) and (x[1] == 0) and (x[2] == 0)",
4831 "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])",
4832 "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])",
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]) and (x[1] == 0) and (x[2] == 0)",
4835 "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])",
4836 "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])",
4837 "var x[3] := {}; var y[2] := {1,2}; x += (y+=1); (x[0] == y[0]) ",
4838 "var x[3] := {}; var y[2] := {1,2}; x += (y+=1); (x[0] == y[0]) and (x[1] == y[1]) ",
4839 "var x[3] := {}; var y[2] := {1,2}; x += (y+=1); (x[0] == y[0]) and (x[1] == y[1]) and (x[2] == 0)",
4840 "var x[3] := {}; var y[1] := {1}; x += (y+=1); (x[0] == y[0]) ",
4841 "var x[3] := {}; var y[1] := {1}; x += (y+=1); (x[0] == y[0]) and (x[1] == 0) ",
4842 "var x[3] := {}; var y[1] := {1}; x += (y+=1); (x[0] == y[0]) and (x[1] == 0) and (x[2] == 0)",
4843 "var x[3] := [9]; var y[4] := {1,2,3,4}; x <=> y; (x[0] == 1) and (x[1] == 2) and (x[2] == 3)",
4844 "var x[3] := [9]; var y[3] := {1,2,3}; x <=> y; (x[0] == 1) and (x[1] == 2) and (x[2] == 3)",
4845 "var x[3] := [9]; var y[2] := {1,2}; x <=> y; (x[0] == 1) and (x[1] == 2) and (x[2] == 9)",
4846 "var x[3] := [9]; var y[1] := {1}; x <=> y; (x[0] == 1) and (x[1] == 9) and (x[2] == 9)",
4847 "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)",
4848 "var x[3] := [9]; var y[3] := {1,2,3}; x <=> (y += 1); (x[0] == 2) and (x[1] == 3) and (x[2] == 4)",
4849 "var x[3] := [9]; var y[2] := {1,2}; x <=> (y += 1); (x[0] == 2) and (x[1] == 3) and (x[2] == 9)",
4850 "var x[3] := [9]; var y[1] := {1}; x <=> (y += 1); (x[0] == 2) and (x[1] == 9) and (x[2] == 9)",
4851 "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)",
4852 "var x[3] := [8]; var y[3] := {1,2,3}; (x += 1) <=> y; (x[0] == 1) and (x[1] == 2) and (x[2] == 3)",
4853 "var x[3] := [8]; var y[2] := {1,2}; (x += 1) <=> y; (x[0] == 1) and (x[1] == 2) and (x[2] == 9)",
4854 "var x[3] := [8]; var y[1] := {1}; (x += 1) <=> y; (x[0] == 1) and (x[1] == 9) and (x[2] == 9)",
4855 "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)",
4856 "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)",
4857 "var x[3] := [8]; var y[2] := {1,2}; (x += 1) <=> (y += 1); (x[0] == 2) and (x[1] == 3) and (x[2] == 9)",
4858 "var x[3] := [8]; var y[1] := {1}; (x += 1) <=> (y += 1); (x[0] == 2) and (x[1] == 9) and (x[2] == 9)",
4859 "var x[3] := [0]; var y[4] := {1,2,3,4}; X < y",
4860 "var x[3] := [0]; var y[3] := {1,2,3}; x < Y",
4861 "var x[3] := [0]; var y[2] := {1,2}; X < y",
4862 "var x[3] := [0]; var y[1] := {1}; x < Y",
4863 "var x[3] := [0]; var y[4] := {1,2,3,4}; x <= y",
4864 "var x[3] := [0]; var y[3] := {1,2,3}; x <= y",
4865 "var x[3] := [0]; var y[2] := {1,2}; x <= y",
4866 "var x[3] := [0]; var y[1] := {1}; x <= y",
4867 "var x[3] := [5]; var y[4] := {1,2,3,4}; x > y",
4868 "var x[3] := [5]; var y[3] := {1,2,3}; x > y",
4869 "var x[3] := [5]; var y[2] := {1,2}; x > y",
4870 "var x[3] := [5]; var y[1] := {1}; x > y",
4871 "var x[3] := [5]; var y[4] := {1,2,3,4}; x >= y",
4872 "var x[3] := [5]; var y[3] := {1,2,3}; x >= y",
4873 "var x[3] := [5]; var y[2] := {1,2}; x >= y",
4874 "var x[3] := [5]; var y[1] := {1}; x >= y",
4875 "var x[3] := [1]; var y[4] := [1]; x == y",
4876 "var x[3] := [1]; var y[3] := [1]; x == y",
4877 "var x[3] := [1]; var y[2] := [1]; x == y",
4878 "var x[3] := [1]; var y[1] := [1]; x == y",
4879 "var x[3] := [1]; var y[4] := [2]; x != y",
4880 "var x[3] := [1]; var y[3] := [2]; x != y",
4881 "var x[3] := [1]; var y[2] := [2]; x != y",
4882 "var x[3] := [1]; var y[1] := [2]; x != y",
4883 "var x[3] := [0]; var y[4] := {5,6,7,8}; (x += 1) < y",
4884 "var x[3] := [0]; var y[3] := {5,6,7}; (x += 1) < y",
4885 "var x[3] := [0]; var y[2] := {5,6}; (x += 1) < y",
4886 "var x[3] := [0]; var y[1] := {5}; (x += 1) < y",
4887 "var x[3] := [0]; var y[4] := {1,2,3,4}; x < (y += 1)",
4888 "var x[3] := [0]; var y[3] := {1,2,3}; x < (y += 1)",
4889 "var x[3] := [0]; var y[2] := {1,2}; x < (y += 1)",
4890 "var x[3] := [0]; var y[1] := {1}; x < (y += 1)",
4891 "var x[3] := [0]; var y[4] := {5,6,7,8}; (x += 1) < (y += 1)",
4892 "var x[3] := [0]; var y[3] := {5,6,7}; (x += 1) < (y += 1)",
4893 "var x[3] := [0]; var y[2] := {5,6}; (x += 1) < (y += 1)",
4894 "var x[3] := [0]; var y[1] := {5}; (x += 1) < (y += 1)",
4895 "var x[3] := {1,2,3}; var y := 5; x < y ",
4896 "var x[3] := {1,2,3}; var y := 3; x < y + 1 ",
4897 "var x[3] := {1,2,3}; var y := 5; x <= y ",
4898 "var x[3] := {1,2,3}; var y := 3; x <= y + 1",
4899 "var x[3] := {1,1,1}; var y := 1; x == y ",
4900 "var x[3] := {1,1,1}; var y := 2; x == y - 1",
4901 "var x[3] := {1,2,3}; var y := 5; y > x ",
4902 "var x[3] := {1,2,3}; var y := 3; y >= x ",
4903 "var x[3] := {1,2,3}; var y := 5; y + 1 > x ",
4904 "var x[3] := {1,1,1}; var y := 1; y == x ",
4905 "var x[3] := {1,1,1}; var y := 2; y - 1 == x",
4906 "var x[3] := {1,2,3}; var y := 5; equal(true,(x += 1) < y) ",
4907 "var x[3] := {1,2,3}; var y := 3; equal(true,(x -= 1) < y + 1)",
4908 "var x[3] := {1,2,3}; var y := 5; equal(true,(x -= 1) <= y) ",
4909 "var x[3] := {2,2,2}; var y := 1; (x -= 1) == y ",
4910 "var x[3] := {1,2,3}; var y := 5; y > (x += 1) ",
4911 "var x[3] := {1,2,3}; var y := 5; y + 1 > (x += 1) ",
4912 "var x[3] := {2,2,2}; var y := 1; y == (x -= 1) ",
4913 "var x[3] := {2,2,2}; var y := 0; y + 1 == (x -= 1)",
4914 "var x[3] := [1]; var y[4] := {1,2,3,4}; var z[3] := [1]; z := (x + y); z == (x + y)",
4915 "var x[3] := [1]; var y[3] := {1,2,3}; var z[3] := [1]; z := (x - y); z == (x - y)",
4916 "var x[3] := [1]; var y[2] := {1,2}; var z[3] := [1]; z := (x / y); z == (x / y)",
4917 "var x[3] := [1]; var y[1] := {1}; var z[3] := [1]; z := (x * y); z == (x * y)",
4918 "var x[3] := [1]; var y[4] := {1,2,3,4}; var z[3] := [1]; z := 2(x + y); z == (x + y)2",
4919 "var x[3] := [1]; var y[3] := {1,2,3}; var z[3] := [1]; z := 2(x - y); z == (x - y)2",
4920 "var x[3] := [1]; var y[2] := {1,2}; var z[3] := [1]; z := 2(x / y); z == (x / y)2",
4921 "var x[3] := [1]; var y[1] := {1}; var z[3] := [1]; z := 2(x * y); z == (x * y)2",
4922 "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",
4923 "var x[3] := [1]; var y[3] := {1,2,3}; var z[3] := [1]; z := 2(x - y)/3; z == 2(x - y)/3",
4924 "var x[3] := [1]; var y[2] := {1,2}; var z[3] := [1]; z := 2(x / y)/3; z == 2(x / y)/3",
4925 "var x[3] := [1]; var y[1] := {1}; var z[3] := [1]; z := 2(x * y)/3; z == 2(x * y)/3",
4926 "var x[6] := {1,2,3,4,5,6}; equal(sqrt(sum([x - avg(x)]^2) / x[]),1.70782512765993300)",
4927 "var x[3] := {-1,-2,-3}; sum(abs(x) ) == 6",
4928 "var x[3] := {0.1,0.2,0.3}; sum(trunc(x)) == 0",
4930 "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)",
4932 "var x := 2; (~{ for (var i := 0; i < 10; i += 1) { for (var j := 0; j <= i; "
4933 "j += 1) { var y := 3; if ((i + j + y + x) < 6) { y += x; continue; } else "
4934 "break[i + j]; } } } + ~{ for (var i := 0; i < 10; i += 1) { for (var j := 0; "
4935 "j <= i; j += 1) { var y := 3; if ((i + j + y + x) < 6) { y += x; continue; } "
4936 " else break[i + j]; } } }) == 18 ",
4938 "var x := 2; var v0[3] := {1,2,3}; ( ~{ for (var i := 0; i < 10; i += 1) { "
4939 "for (var j := 0; j <= i; j += 1) { var y := 3; var v2[3] := {1,2,3}; if ( "
4940 "(i + j + y + x + abs(v0[i % v0[]] - v2[j % v2[]])) < 6) { var v3[3] := "
4941 "{1,2,3}; y += x / v3[j % v3[]]; continue; } else break[i + j]; } } } "
4942 "+ ~{ for (var i := 0; i < 10; i += 1) { for (var j := 0; j <= i; j += 1) "
4943 " { var y := 3; var v2[3] := {1,2,3}; if ((i + j + y + x + abs(v0[i % v0[]] - "
4944 "v2[j % v2[]])) < 6) { var v3[3] := {1,2,3}; y += x / v3[j % v3[]]; "
4945 "continue; } else break[i + j]; } } } ) == 18 ",
4947 "12 == (if (1 > 2) { var x:= 2; } else { var x[3] := {7,2,3}; sum(x); })",
4948 "12 == (if (1 < 2) { var x[3] := {7,2,3}; sum(x); } else { var x:= 2; })",
4949 "12 == (if (1 > 2) { var x:= 2; } else { var x[3] := {7,2,3}; sum(x); })",
4950 "12 == (if (1 < 2) { var x[3] := {7,2,3}; sum(x); } else { var x:= 2; })",
4952 "21 == (for (var i := 0; i < 10; i += 1) { if (i > 2) { break [i * 7]; i += 1;"
4953 "i += 2; i += 3; }; })",
4955 "21 == (for (var i := 0; i < 10; i += 1) { if (i > 2) { break [i * 7]; return "
4956 "[i * 8]; i += 1; i += 2; i += 3; }; })",
4958 "2 == for (var i := 0; i < 10; i += 1) { if (i > 2) { continue; i += 1; i += 2;"
4959 "i += 3; } else i; }",
4961 "2 == for (var i := 0; i < 10; i += 1) { if (i > 2) { continue; return [i * 8];"
4962 "i += 1; i += 2; i += 3; } else i; }",
4964 "var x[10] := [-1]; var y[10] := [-1]; for (var i := 0; i < 10; i += 1) { x[i] := i; "
4965 "y[i] := 2 * x[i]; }; (sum(x) == 45) and (sum(y) == (2 * sum(x)));"
4967 "7 == (for (var i := 0; i < 10; i += 1) { ~{break[7]; continue; i += i} })",
4968 "0 == (for (var i := 0; i < 10; i += 1) { ~{break[i]; continue; i += i} })",
4969 "0 == (for (var i := 0; i < 10; i += 1) { ~{continue; break[7]; i += i} })",
4970 "1 == (for (var i := 0; i < 10; i += 1) { ~{break[i += 1]; continue; i += i} })",
4972 "var s := 'abc'; s == ~{'abc' } ",
4973 "var s := 'abc'; s == ~{s } ",
4974 "var s := 'abc'; s == ~{'ab' + 'c'} ",
4975 "var s := 'abc'; ~{'abc' } == s ",
4976 "var s := 'abc'; ~{s } == s ",
4977 "var s := 'abc'; ~{'ab' + 'c'} == s ",
4978 "var s := 'abc'; ~{1 + 2; 'abc' + s; s} == s ",
4979 "var s := 'abc'; ~{1 + 2; var x := 'ab'; x + 'c'} == s ",
4981 "var x[10^6] := null; var y[10^7] := null; 0 * (min(x) + min(y)) + x[] + y[] == 10^7 + 10^6",
4983 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; if (1 < 2, v0, v1) == v0",
4984 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; if (1 > 2, v0, v1) == v1",
4985 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; if (1 < 2, v0 - v1, v1 - v0) == (v0 - v1)",
4986 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; if (1 > 2, v0 - v1, v1 - v0) == (v1 - v0)",
4987 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; var x := 1; var y := 2; if (x < y, v0, v1) == v0",
4988 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; var x := 1; var y := 2; if (x > y, v0, v1) == v1",
4989 "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)",
4990 "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)",
4992 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; if (1 < 2, v0, v1) == v0",
4993 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; if (1 > 2, v0, v1) == v1",
4994 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; if (1 < 2, v0 - v1, v1 - v0) == (v0 - v1)",
4995 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; if (1 > 2, v0 - v1, v1 - v0) == (v1 - v0)",
4996 "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",
4997 "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",
4998 "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)",
4999 "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)",
5001 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; (if (1 < 2) v0; else v1;) == v0",
5002 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; (if (1 > 2) v0; else v1;) == v1",
5003 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; (if (1 < 2) v0 - v1; else v1 - v0;) == (v0 - v1)",
5004 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; (if (1 > 2) v0 - v1; else v1 - v0;) == (v1 - v0)",
5005 "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",
5006 "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",
5007 "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)",
5008 "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)",
5010 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; (if (1 < 2) v0; else v1;) == v0",
5011 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; (if (1 > 2) v0; else v1;) == v1",
5012 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; (if (1 < 2) v0 - v1; else v1 - v0;) == (v0 - v1)",
5013 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; (if (1 > 2) v0 - v1; else v1 - v0;) == (v1 - v0)",
5014 "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",
5015 "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",
5016 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; var x := 1; var y := 2; (if (x < y) v0 - v1; else v1 - v0;) == (v0 - v1)",
5017 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; var x := 1; var y := 2; (if (x > y) v0 - v1; else v1 - v0;) == (v1 - v0)",
5019 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((-x * -y)); true;",
5020 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((-x + -y)); true;",
5021 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((-x - -y)); true;",
5022 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((-x / -y)); true;",
5023 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) + (1.123 * y)); true;",
5024 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) - (1.123 * y)); true;",
5025 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) + (y * 1.123)); true;",
5026 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) - (y * 1.123)); true;",
5027 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) * (y / z)); true;",
5028 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) / (y / z)); true;",
5029 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) / y); true;",
5030 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) * 2.123); true;",
5031 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) / 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 * y)); true;",
5033 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) * (y * 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) / (2.123 / y)); true;",
5036 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) / (y * 2.123)); 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 + y)); true;",
5043 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 + x) - (y + 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); true;",
5045 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 - x) - 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) - (y - 2.123)); true;",
5048 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) * 2.123); true;",
5049 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) / 2.123); true;",
5050 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) * (2.123 / y)); true;",
5051 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) * (y / 2.123)); true;",
5052 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) / (2.123 * y)); true;",
5053 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) / (2.123 / y)); true;",
5054 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) / (y * 2.123)); true;",
5055 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) / (y / 2.123)); true;",
5056 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) * (2.123 * x)); true;",
5057 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) * (2.123 / x)); true;",
5058 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) * (x * 2.123)); true;",
5059 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) * (x / 2.123)); true;",
5060 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) + (2.123 + x)); true;",
5061 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) + (2.123 - x)); true;",
5062 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) + (x + 2.123)); true;",
5063 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) + (x - 2.123)); true;",
5064 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) - (2.123 + x)); true;",
5065 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) - (2.123 - x)); true;",
5066 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) - (x + 2.123)); true;",
5067 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) - (x - 2.123)); true;",
5068 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) / (2.123 * x)); true;",
5069 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) / (2.123 / x)); true;",
5070 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) / (x * 2.123)); true;",
5071 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) / (x / 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) - 2.123); true;",
5076 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x - 1.123) + 2.123); true;",
5077 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x - 1.123) - 2.123); true;",
5078 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) * 2.123); true;",
5079 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) / 2.123); true;",
5080 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x ^ 1.123) ^ 2.123); true;",
5081 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) + (1.123 * y)); true;",
5082 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) - (1.123 * y)); true;",
5083 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) + (y * 1.123)); true;",
5084 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) - (y * 1.123)); true;",
5085 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) * (2.123 * y)); true;",
5086 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) * (y * 2.123)); true;",
5087 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) / (2.123 * y)); 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 * 1.123) / (y / 2.123)); true;",
5091 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * y) / (z / w)); true;",
5092 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x + 1.123) + (2.123 + y)); true;",
5093 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x + 1.123) + (y + 2.123)); true;",
5094 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x + 1.123) - (2.123 + y)); true;",
5095 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x + 1.123) - (y + 2.123)); true;",
5096 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x + y) / (z / w)); true;",
5097 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x - 1.123) - (2.123 - y)); true;",
5098 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x - 1.123) - (y - 2.123)); true;",
5099 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x - y) / (z / w)); true;",
5100 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) * (y / z)); true;",
5101 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) + (y / 1.123)); true;",
5102 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) - (y / 1.123)); true;",
5103 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) / (y / z)); true;",
5104 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) / y); true;",
5105 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) * (2.123 / y)); true;",
5106 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) * (y + 2.123)); true;",
5107 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) * (y - 2.123)); true;",
5108 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) * (y / 2.123)); true;",
5109 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) / (2.123 * y)); true;",
5110 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) / (2.123 / y)); true;",
5111 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) / (y * 2.123)); true;",
5112 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) / (y / 2.123)); true;",
5113 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / y) * (1.123 / z)); true;",
5114 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / y) * (z / 1.123)); true;",
5115 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / y) * (z / w)); true;",
5116 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / y) / (1.123 / z)); true;",
5117 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / y) / (z / 1.123)); true;",
5118 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / y) / (z / w)); true;",
5119 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / y) / 1.123); true;",
5120 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / y) / z); true;",
5125 static const std::size_t
rounds = 20;
5136 bool failed =
false;
5138 for (std::size_t r = 0; r <
rounds; ++r)
5142 expression_t expression;
5143 expression.register_symbol_table(symbol_table);
5150 printf(
"run_test10() - swaps[1] Error: %s Expression: %s\n",
5151 parser.
error().c_str(),
5159 const T result = expression.value();
5163 printf(
"run_test10() - swaps[1] evaluation error Expression: %s\n",
5169 expression.release();
5179 for (std::size_t r = 0; r <
rounds; ++r)
5185 expression_t expression;
5186 expression.register_symbol_table(symbol_table);
5190 printf(
"run_test10() - swaps[2] Error: %s Expression: %s\n",
5191 parser.
error().c_str(),
5198 const T result = expression.value();
5202 printf(
"run_test10() - swaps[2] evaluation error Expression: %s\n",
6489 const bool result1 = symbol_table.
add_variable(
"x", x);
6493 if (!result1 || !result2 || result3)
6495 printf(
"run_test18() - Failed sym_tab add/remove [1]\n");
6505 if (!result1 || !result2 || result3)
6507 printf(
"run_test18() - Failed sym_tab add/remove [2]\n");
6512 std::vector<T> x(10,T(0));
6513 const bool result1 = symbol_table.
add_vector(
"x", x);
6517 if (!result1 || !result2 || result3)
6519 printf(
"run_test18() - Failed sym_tab add/remove [3]\n");
6525 const bool result1 = symbol_table.
add_function(
"x", x);
6529 if (!result1 || !result2 || result3)
6531 printf(
"run_test18() - Failed sym_tab add/remove [4]\n");
6537 const bool result1 = symbol_table.
add_function(
"x", x);
6541 if (!result1 || !result2 || result3)
6543 printf(
"run_test18() - Failed sym_tab add/remove [5]\n");
6588 static const std::string expr_str_list[] =
6590 "equal(va_func,(0))",
6591 "equal(va_func(),(0))",
6592 "equal(va_func(1,2,3,4,5,6,7,8,9),(1+2+3+4+5+6+7+8+9))",
6593 "equal(va_func(1,x,3,y,5,z,7,w,9),(1+x+3+y+5+z+7+w+9))",
6594 "equal(va_func(x,2,y,4,z,6,w,8,u),(x+2+y+4+z+6+w+8+u))",
6595 "equal(va_func(x,y,z,w,u,v,t,1,2,3),(x+y+z+w+u+v+t+1+2+3))",
6596 "equal(va_func(x,y,z,w,u,v,t),(x+y+z+w+u+v+t))",
6597 "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))",
6598 "equal(1+va_func(1,x,3,y,5,z,7,w,9),(1+x+3+y+5+z+7+w+9)+1)",
6599 "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))",
6600 "equal(va_func(va_func(x),va_func(y),va_func(z)),va_func(x,y,z))",
6601 "equal(va_func(va_func(va_func(va_func(va_func(va_func(va_func(va_func(x)))))))),x)",
6602 "equal(va_func(va_func(va_func(va_func(va_func(va_func(va_func(va_func(123.456)))))))),123.456)",
6603 "equal(va_func(va_func(va_func(va_func(va_func(va_func(va_func(va_func(x+1)))))))),x+1)",
6604 "equal(va_func(va_func(va_func(va_func(va_func(va_func(va_func(va_func(x+y)))))))),x+y)"
6606 static const std::size_t expr_str_list_size =
sizeof(expr_str_list) /
sizeof(std::string);
6610 for (std::size_t i = 0; i < expr_str_list_size; ++i)
6612 expression_t expression;
6613 expression.register_symbol_table(symbol_table);
6617 if (!parser.
compile(expr_str_list[i],expression))
6619 printf(
"run_test18() - [1] VarArg Error: %s Expression: %s\n",
6620 parser.
error().c_str(),
6621 expr_str_list[i].c_str());
6629 bool error_found =
false;
6635 printf(
"run_test18() - Error in evaluation! (1) Expression: %s\n",
6636 expr_str_list[i].c_str());
6656 T v0[] = { T(1), T(1), T(1), T(1) };
6657 T v1[] = { T(1), T(2), T(3), T(4) };
6666 std::string s0 =
"AbCdEfGhIj";
6670 symbol_table_t symbol_table;
6672 symbol_table.add_constants();
6674 symbol_table.add_variable (
"x" , x);
6675 symbol_table.add_variable (
"y" , y);
6676 symbol_table.add_vector (
"v0" ,v0);
6677 symbol_table.add_vector (
"v1" ,v1);
6678 symbol_table.add_vector (
"v2" ,v2);
6679 symbol_table.add_stringvar(
"s0", s0);
6680 symbol_table.add_function (
"gen_func", f);
6684 "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]);",
6685 "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]);",
6686 "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);",
6687 "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);",
6688 "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]);",
6689 "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);",
6690 "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);",
6691 "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);",
6692 "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);",
6693 "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');"
6698 bool error_found =
false;
6703 expression_t expression;
6705 expression.register_symbol_table(symbol_table);
6709 if (!parser.compile(expression_str,expression))
6711 printf(
"run_test18() - [2] GenFunc Error: %s Expression: %s [2]\n",
6712 parser.error().c_str(),
6713 expression_str.c_str());
6731 printf(
"run_test18() - Error in evaluation! (2) Expression: %s "
6743 expression.release();
6760 T v0[] = { T(1), T(1), T(1), T(1) };
6761 T v1[] = { T(1), T(2), T(3), T(4) };
6762 T v2[] = { T(5), T(6), T(7), T(8) };
6764 std::string s0 =
"AbCdEfGhIj";
6768 symbol_table_t symbol_table;
6770 symbol_table.add_constants();
6772 symbol_table.add_variable (
"x" , x);
6773 symbol_table.add_variable (
"y" , y);
6774 symbol_table.add_vector (
"v0" ,v0);
6775 symbol_table.add_vector (
"v1" ,v1);
6776 symbol_table.add_vector (
"v2" ,v2);
6777 symbol_table.add_stringvar(
"s0", s0);
6778 symbol_table.add_function (
"foo", f);
6782 "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]);",
6783 "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);",
6784 "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);",
6785 "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]);",
6786 "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);",
6787 "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);",
6788 "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);",
6789 "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);",
6790 "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');",
6791 "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');",
6792 "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]);",
6793 "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]);",
6794 "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]);",
6795 "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]);",
6796 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x);",
6797 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x);",
6798 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x,x);",
6799 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x,x,x);",
6800 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0);",
6801 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0);",
6802 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0,s0);",
6803 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0,s0,s0);",
6804 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0);",
6805 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0);",
6806 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0,v0);",
6807 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0,v0,v0);",
6808 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x);",
6809 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x);",
6810 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x,x);",
6811 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x,x,x);",
6812 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0);",
6813 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0);",
6814 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0,s0);",
6815 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0,s0,s0);",
6816 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0);",
6817 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0);",
6818 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0,v0);",
6819 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0,v0,v0);",
6820 "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]);",
6821 "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]);",
6822 "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]);",
6823 "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]);"
6828 const std::string parameter_type_list[] =
6868 "TTTTTTT|STSTSTS|V*T*VS*" ,
6869 "TTTTTTT|STSTSTS|V*TTTTVSS",
6870 "TTTTTTT|STSTSTS|VVT*VSS" ,
6871 "TTTTTTT|STSTSTS|VVTTTTVS*",
6874 bool error_found =
false;
6879 expression_t expression;
6881 expression.register_symbol_table(symbol_table);
6887 if (!parser.compile(expression_str,expression))
6889 printf(
"run_test18() - [3] GenFunc2 Error: %s Expression: %s Parameter Sequence: %s [3]\n",
6890 parser.error().c_str(),
6891 expression_str.c_str(),
6892 parameter_type_list[i].c_str());
6908 bool error_found =
false;
6912 "foo(v0,v1,v2,x,y,s0);",
6913 "foo(v1,v2,x,y,s0,v0);",
6914 "foo(v2,x,y,s0,v0,v1);",
6915 "foo(x,y,s0,v0,v1,v2);",
6916 "foo(y,s0,v0,v1,v2,x);",
6917 "foo(s0,v0,v1,v2,x,y);"
6922 const std::string parameter_type_list[] =
6941 T v0[] = { T(1), T(1), T(1), T(1) };
6942 T v1[] = { T(1), T(2), T(3), T(4) };
6943 T v2[] = { T(5), T(6), T(7), T(8) };
6945 std::string s0 =
"AbCdEfGhIj";
6950 T v0_inc[] = { T(2), T(2), T(2), T(2) };
6951 T v1_inc[] = { T(2), T(3), T(4), T(5) };
6952 T v2_inc[] = { T(6), T(7), T(8), T(9) };
6954 std::size_t sizeof_vec =
sizeof(v0) /
sizeof(T);
6956 std::string s0_inc =
"BcDeFgHiJk";
6960 symbol_table_t symbol_table;
6962 symbol_table.add_constants();
6964 symbol_table.add_variable (
"x" , x );
6965 symbol_table.add_variable (
"y" , y );
6966 symbol_table.add_vector (
"v0" , v0);
6967 symbol_table.add_vector (
"v1" , v1);
6968 symbol_table.add_vector (
"v2" , v2);
6969 symbol_table.add_stringvar(
"s0", s0);
6970 symbol_table.add_function (
"foo", f );
6972 expression_t expression;
6974 expression.register_symbol_table(symbol_table);
6982 printf(
"run_test18() - [4] IncFunc Error: %s Expression: %s Parameter Sequence: %s [4]\n",
6983 parser.error().c_str(),
6985 parameter_type_list[i].c_str());
6995 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: x\n",
7002 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: y\n",
7009 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: y\n",
7014 if (!std::equal(v0,v0 + sizeof_vec,v0_inc))
7016 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: v0\n",
7021 if (!std::equal(v1,v1 + sizeof_vec,v1_inc))
7023 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: v1\n",
7028 if (!std::equal(v2,v2 + sizeof_vec,v2_inc))
7030 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: v2\n",
7043 bool error_found =
false;
7047 std::string s0 =
"XXXXXXXXXXXXXXX";
7048 std::string s1 =
"XXXXXXXXXXXXXXX";
7049 std::string s2 =
"XXXXXXXXXXXXXXX";
7050 std::string s3 =
"XXXXXXXXXXXXXXX";
7051 std::string s4 =
"XXXXXXXXXXXXXXX";
7057 symbol_table_t symbol_table;
7059 symbol_table.add_constants();
7061 symbol_table.add_stringvar(
"s0", s0);
7062 symbol_table.add_stringvar(
"s1", s1);
7063 symbol_table.add_stringvar(
"s2", s2);
7064 symbol_table.add_stringvar(
"s3", s3);
7065 symbol_table.add_stringvar(
"s4", s4);
7067 symbol_table.add_function(
"remspc_uc", rsauc);
7069 const std::string program =
7070 " s0 := 'How now '; "
7071 " s1 := 'brown cow?'; "
7072 " s2 := remspc_uc(s0 + s1); "
7073 " s3 := remspc_uc(s0) + s1; "
7074 " s4 := s0 + remspc_uc(s1); "
7075 " remspc_uc(s0 + s1) == remspc_uc(s0) + remspc_uc(s1); ";
7077 const std::string parameter_type_list[] =
7087 std::size_t parameter_type_list_size =
sizeof(parameter_type_list) /
sizeof(std::string);
7089 for (std::size_t i = 0; i < parameter_type_list_size; ++i)
7091 expression_t expression;
7093 expression.register_symbol_table(symbol_table);
7099 if (!parser.compile(program,expression))
7101 printf(
"run_test18() - [5] Error: %s\tExpression: %s\n",
7102 parser.error().c_str(),
7108 const T result = expression.value();
7112 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Result <> 1\n",
7119 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s0\n",
7124 if (
"How now " != s0)
7126 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s0\n",
7131 if (
"brown cow?" != s1)
7133 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s1\n",
7138 if (
"HOWNOWBROWNCOW?" != s2)
7140 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s2\n",
7145 if (
"HOWNOWbrown cow?" != s3)
7147 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s3\n",
7152 if (
"How now BROWNCOW?" != s4)
7154 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s4\n",
7167 bool error_found =
false;
7173 symbol_table_t symbol_table;
7175 T v[4] = {T(5), T(6), T(7), T(8)};
7177 symbol_table.add_vector(
"v",v);
7180 symbol_table.add_function(
"vararg_func",vaf);
7182 expression_t expression;
7183 expression.register_symbol_table(symbol_table);
7187 const std::string programs[] =
7189 "equal(0,vararg_func())",
7190 "equal(1,vararg_func() + 1)",
7191 "equal(1,1 + vararg_func())",
7192 "equal(1,vararg_func + 1)",
7193 "equal(1,1 + vararg_func)",
7194 "equal(0,vararg_func() + vararg_func)",
7195 "equal(0,vararg_func + vararg_func())",
7196 "equal(1,vararg_func + vararg_func(1))",
7197 "equal(1,vararg_func + vararg_func(1,2))",
7198 "equal(2,vararg_func + vararg_func(v))",
7199 "equal(1,vararg_func() + vararg_func(1))",
7200 "equal(1,vararg_func() + vararg_func(1,2))",
7201 "equal(2,vararg_func() + vararg_func(v))",
7202 "equal(2,vararg_func(v))",
7203 "equal(1,vararg_func(1))",
7204 "equal(1,vararg_func(1,2,3))",
7205 "equal(1,vararg_func(5,6,7,8))",
7206 "equal(5,vararg_func(v) + 3)",
7207 "equal(5,vararg_func(1) + 4)",
7208 "equal(6,vararg_func(1,2,3) + 5)",
7209 "equal(7,vararg_func(5,6,7,8) + 6)"
7212 static const std::size_t programs_size =
sizeof(programs) /
sizeof(std::string);
7214 for (std::size_t i = 0; i < programs_size; ++i)
7216 if (!parser.compile(programs[i],expression))
7218 printf(
"run_test18() - [6] Error: %s\tExpression: %s\n",
7219 parser.error().c_str(),
7220 programs[i].c_str());
7224 else if (T(1) != expression.value())
7226 printf(
"run_test18() - Error in evaluation! (5) Expression: %s\n",
7227 programs[i].c_str());
7240 bool error_found =
false;
7252 v.push_back(T(N)); \
7260 const std::string expr_string =
"sum(v + 1)";
7264 symbol_table_t symbol_table;
7265 symbol_table.add_vector(
"v",v);
7267 expression_t expression;
7268 expression.register_symbol_table(symbol_table);
7272 if (!parser.compile(expr_string,expression))
7274 printf(
"run_test18() - [7] Error: %s\tExpression: %s\n",
7275 parser.error().c_str(),
7276 expr_string.c_str());
7283 sum = expression.value();
7287 printf(
"run_test18() - Error in evaluation! (6) Expression: %s\n",
7288 expr_string.c_str());
7294 sum = expression.value();
7298 printf(
"run_test18() - Error in evaluation! (7) Expression: %s\n",
7299 expr_string.c_str());
7304 sum = expression.value();
7308 printf(
"run_test18() - Error in evaluation! (8) Expression: %s\n",
7309 expr_string.c_str());
7314 sum = expression.value();
7318 printf(
"run_test18() - Error in evaluation! (9) Expression: %s\n",
7319 expr_string.c_str());
7330 bool error_found =
false;
7340 v.push_back(T(N)); \
7345 pb(s, 3)
pb(s, 6)
pb(s, 9)
pb(s,12)
7346 pb(s,15)
pb(s,18)
pb(s,21)
7349 const std::string expr_string =
"v[0] + v[1] + v[2]";
7353 symbol_table_t symbol_table;
7354 symbol_table.add_vector(
"v",v);
7356 expression_t expression;
7357 expression.register_symbol_table(symbol_table);
7361 if (!parser.compile(expr_string,expression))
7363 printf(
"run_test18() - [8] Error: %s\tExpression: %s\n",
7364 parser.error().c_str(),
7365 expr_string.c_str());
7370 for (std::size_t i = 0; i < v0.size() - 4; ++i)
7374 T sum = expression.value();
7378 printf(
"run_test18() - Error in evaluation! (7) Expression: %s Expected: %5.3f Computed: %5.3f\n",
7379 expr_string.c_str(),
7380 static_cast<double>(s[i]),
7381 static_cast<double>(sum));
7395 bool error_found =
false;
7405 v.push_back(T(N)); \
7410 pb(s, 3)
pb(s, 6)
pb(s, 9)
pb(s,12)
7411 pb(s,15)
pb(s,18)
pb(s,21)
7414 const std::string expr_string =
"var i := 0; var j := 1; var k := 2; v[i] + v[j] + v[k]";
7418 symbol_table_t symbol_table;
7419 symbol_table.add_vector(
"v",v);
7421 expression_t expression;
7422 expression.register_symbol_table(symbol_table);
7426 if (!parser.compile(expr_string,expression))
7428 printf(
"run_test18() - [9] Error: %s\tExpression: %s\n",
7429 parser.error().c_str(),
7430 expr_string.c_str());
7435 for (std::size_t i = 0; i < v0.size() - 4; ++i)
7439 T sum = expression.value();
7443 printf(
"run_test18() - Error in evaluation! (8) Expression: %s Expected: %5.3f Computed: %5.3f\n",
7444 expr_string.c_str(),
7445 static_cast<double>(s[i]),
7446 static_cast<double>(sum));
7464 const std::string const_folded_expression_list[] =
7466 "(0 * dot(2 * v0,v1 - 1))",
7467 "(0 * dot(2 * v0,v1 - 1)) + (dot(2 * v0,v1 - 1) * 0)",
7468 "(0 * dot(v0 - v1,v1 / v0))",
7469 "(0 * dot(v0 - v1,v1 / v0)) + (dot(v0 - v1,v1 / v0) * 0)",
7471 "(0 * dot(v0,v1)) + (dot(v0,v1) * 0)",
7472 "(0 / dot(2 * v0,v1 - 1))",
7473 "(0 / dot(2 * v0,v1 - 1)) + (dot(2 * v0,v1 - 1) * 0)",
7474 "(0 / dot(v0 - v1,v1 / v0))",
7475 "(0 / dot(v0 - v1,v1 / v0)) + (dot(v0 - v1,v1 / v0) * 0)",
7477 "(0 / dot(v0,v1)) + (dot(v0,v1) * 0)",
7478 "(dot(2 * v0,v1 - 1) * 0)",
7479 "(dot(2 * v0,v1 - 1) * 0) + (0 * dot(2 * v0,v1 - 1))",
7480 "(dot(2 * v0,v1 - 1) * 0) + (0 / dot(2 * v0,v1 - 1))",
7481 "(dot(v0 - v1,v1 / v0) * 0)",
7482 "(dot(v0 - v1,v1 / v0) * 0) + (0 * dot(v0 - v1,v1 / v0))",
7483 "(dot(v0 - v1,v1 / v0) * 0) + (0 / dot(v0 - v1,v1 / v0))",
7485 "(dot(v0,v1) * 0) + (0 * dot(v0,v1))",
7486 "(dot(v0,v1) * 0) + (0 / dot(v0,v1))"
7489 const std::size_t const_folded_expression_list_size =
sizeof(const_folded_expression_list) /
sizeof(std::string);
7491 const std::size_t vector_size = 5;
7492 T v0[vector_size] = { 0, 2, 4, 6, 8 };
7493 T v1[vector_size] = { 1, 3, 5, 7, 9 };
7501 symbol_table_t symbol_table;
7503 symbol_table.add_package( vector_package );
7504 symbol_table.add_package( io_package );
7505 symbol_table.add_vector (
"v0" , vv0 );
7506 symbol_table.add_vector (
"v1" , vv1 );
7508 expression_t expression;
7509 expression.register_symbol_table(symbol_table);
7513 for (std::size_t i = 0; i < const_folded_expression_list_size; ++i)
7515 const std::string& expression_string = const_folded_expression_list[i];
7517 if (!parser.compile(expression_string, expression))
7519 printf(
"run_test18() - [10] Error: %s Expression: %s\n",
7520 parser.error().c_str(),
7521 expression_string.c_str());
7528 printf(
"run_test18() - Error: Expression did not compile to a constant! [1] Expression: %s\n",
7529 expression_string.c_str());
7534 for (std::size_t j = 0; j < 100; ++j)
7547 const T result = expression.value();
7551 printf(
"run_test18() - Error: Expected result of zero, result: %8.4f for Expression: %s\n",
7552 static_cast<double>(result),
7553 expression_string.c_str());
7559 expression.release();
7568 const std::string rebase_expression_list[] =
7571 "dot(2 * v0,v1 - 1) + dot(2 * v0,v1 - 1)",
7572 "dot(2 * v0,v1 - 1)",
7573 "dot(v0 - v1,v1 / v0) + dot(v0 - v1,v1 / v0)",
7574 "dot(v0 - v1,v1 / v0)",
7575 "dot(v0,v1) + dot(v0,v1)",
7577 "dot(2 * v0,v1 - 1) * x + dot(2 * v0,v1 - 1) * y",
7578 "x / dot(2 * v0,v1 - 1)",
7579 "x / dot(v0 - v1,v1 / v0) + dot(v0 - v1,v1 / v0) / y",
7580 "x * dot(v0 - v1,v1 / v0) / y",
7581 "x - dot(v0,v1) + dot(v0,v1) + y",
7584 const std::size_t rebase_expression_list_size =
sizeof(rebase_expression_list) /
sizeof(std::string);
7589 const std::size_t vector_size = 5;
7590 T v0[vector_size] = { 0, 2, 4, 6, 8 };
7591 T v1[vector_size] = { 1, 3, 5, 7, 9 };
7599 symbol_table_t symbol_table;
7601 symbol_table.add_package ( vector_package );
7602 symbol_table.add_package ( io_package );
7603 symbol_table.add_variable(
"x" , x );
7604 symbol_table.add_variable(
"y" , y );
7605 symbol_table.add_vector (
"v0" , vv0 );
7606 symbol_table.add_vector (
"v1" , vv1 );
7608 expression_t expression;
7609 expression.register_symbol_table(symbol_table);
7613 for (std::size_t i = 0; i < rebase_expression_list_size; ++i)
7615 const std::string& expression_string = rebase_expression_list[i];
7617 if (!parser.compile(expression_string, expression))
7619 printf(
"run_test18() - [11] Error: %s Expression: %s\n",
7620 parser.error().c_str(),
7621 expression_string.c_str());
7626 for (std::size_t j = 0; j < 100; ++j)
7642 expression.release();
7647 bool error_found =
false;
7657 v.push_back(T(N)); \
7662 pb(s, 3)
pb(s, 6)
pb(s, 9)
pb(s,12)
7663 pb(s,15)
pb(s,18)
pb(s,21)
7666 const std::string expr_string =
"var i := 0; v[i + 0] + v[i + 1] + v[i + 2]";
7670 symbol_table_t symbol_table;
7671 symbol_table.add_vector(
"v",v);
7673 expression_t expression;
7674 expression.register_symbol_table(symbol_table);
7678 if (!parser.compile(expr_string,expression))
7680 printf(
"run_test18() - [12] Error: %s\tExpression: %s\n",
7681 parser.error().c_str(),
7682 expr_string.c_str());
7687 for (std::size_t i = 0; i < v0.size() - 4; ++i)
7691 const T sum = expression.value();
7695 printf(
"run_test18() - Error in evaluation! (9) Expression: %s Expected: %5.3f Computed: %5.3f\n",
7696 expr_string.c_str(),
7697 static_cast<double>(s[i]),
7698 static_cast<double>(sum));
7716 T v0[] = { T(0), T(1), T(2), T(3), T(4) };
7717 T v1[] = { T(5), T(6), T(7), T(8), T(9) };
7719 const std::size_t v0_size =
sizeof(v0) /
sizeof (T);
7720 const std::size_t v1_size =
sizeof(v1) /
sizeof (T);
7726 symbol_table_t symbol_table;
7727 symbol_table.add_vector(
"v",v);
7728 symbol_table.add_function(
"vec_sum",vec_sum);
7730 expression_t expression;
7731 expression.register_symbol_table(symbol_table);
7735 const std::string expr_string =
"vec_sum(v)";
7737 if (!parser.compile(expr_string,expression))
7739 printf(
"run_test18() - [13] Error: %s\tExpression: %s\n",
7740 parser.error().c_str(),
7741 expr_string.c_str());
7746 const T expected_result0 = std::accumulate(v0, v0 + v0_size, T(0));
7748 if (expression.value() != expected_result0)
7750 printf(
"run_test18() - Error in evaluation! (10.1) Expression: %s Expected: %5.3f Computed: %5.3f\n",
7751 expr_string.c_str(),
7752 static_cast<double>(expected_result0),
7753 static_cast<double>(expression.value()));
7760 const T expected_result1 = std::accumulate(v1, v1 + v1_size, T(0));
7762 if (expression.value() != expected_result1)
7764 printf(
"run_test18() - Error in evaluation! (10.2) Expression: %s Expected: %5.3f Computed: %5.3f\n",
7765 expr_string.c_str(),
7766 static_cast<double>(expected_result1),
7767 static_cast<double>(expression.value()));
7774 bool error_found =
false;
7782 symbol_table_t symbol_table;
7783 symbol_table.add_package(vecops_pkg);
7785 const std::string expr_str_list[] =
7787 "var v[9] := {1,2,3,4,5,6,7,8,9}; all_true(v) == true" ,
7788 "var v[6] := {-1,-2,-3,-4,-5,-6}; all_true(v) == true" ,
7789 "var v[8] := {1,2,3,0,0,0,0,0}; all_true(v) == false",
7790 "var v[8] := {-1,-2,-3,0,0,0,0,0}; all_true(v) == false",
7791 "var v[9] := {0,0,0,0,0,0,0,0,0}; all_true(v + 1) == true",
7793 "var v[9] := {0,0,0,0,0,0,0,0,0}; all_false(v) == true" ,
7794 "var v[9] := {0,0,0,0,0,1,2,3,4}; all_false(v) == false" ,
7795 "var v[8] := {0,0,0,0,0,-1,-2,-3}; all_false(v) == false" ,
7796 "var v[9] := {1,1,1,1,1,1,1,1,1}; any_false(v - 1) == true",
7798 "var v[9] := {0,0,0,0,0,0,0,0,1}; any_true(v) == true" ,
7799 "var v[9] := {0,0,0,0,1,0,0,0,0}; any_true(v) == true" ,
7800 "var v[9] := {0,0,0,0,0,0,0,0,0}; any_true(v) == false" ,
7801 "var v[9] := {0,0,0,0,0,0,0,0,0}; any_true(v + 1) == true",
7803 "var v[9] := {1,1,1,1,1,1,1,1,0}; any_false(v) == true" ,
7804 "var v[9] := {1,1,1,1,0,1,1,1,1}; any_false(v) == true" ,
7805 "var v[9] := {1,1,1,1,1,1,1,1,1}; any_false(v) == false" ,
7806 "var v[9] := {1,1,1,1,1,1,1,1,1}; any_false(v - 1) == true",
7808 "var v[9] := {0,0,0,0,0,0,0,0,0}; count(v) == 0" ,
7809 "var v[9] := {0,0,0,0,0,0,0,0,1}; count(v) == 1" ,
7810 "var v[9] := {0,0,0,0,0,0,0,2,1}; count(v) == 2" ,
7811 "var v[9] := {0,0,0,0,0,0,3,2,1}; count(v) == 3" ,
7812 "var v[9] := {0,0,0,0,0,0,0,0,0}; count(v + 1) == v[]",
7813 "var v[9] := {1,1,1,1,1,1,1,1,1}; count(v - 1) == 0",
7815 "var v[9] := {1,2,3,4,5,6,7,8,9}; var r[9] := [0]; copy(v,r); sum(v == r) == v[]",
7816 "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",
7817 "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",
7818 "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",
7820 "var v[5] := {1,2,3,4,5}; var r[5] := {4,5,1,2,3}; rol(v,3); sum(v == r) == v[]",
7821 "var v[5] := {1,2,3,4,5}; var r[5] := {3,4,5,1,2}; ror(v,3); sum(v == r) == v[]",
7823 "var v[5] := {1,2,3,4,5}; var r[5] := {3,4,5,1,2}; rol(v,2); sum(v == r) == v[]",
7824 "var v[5] := {1,2,3,4,5}; var r[5] := {4,5,1,2,3}; ror(v,2); sum(v == r) == v[]",
7826 "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[]",
7827 "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[]",
7829 "var v[5] := {1,2,3,4,5}; var r[5] := {3,4,5,0,0}; shftl(v,2); sum(v == r) == v[]",
7830 "var v[5] := {1,2,3,4,5}; var r[5] := {5,0,0,0,0}; shftl(v,4); sum(v == r) == v[]",
7831 "var v[5] := {1,2,3,4,5}; var r[5] := {0,0,0,0,0}; shftl(v,5); sum(v == r) == v[]",
7833 "var v[5] := {1,2,3,4,5}; var r[5] := {0,0,1,2,3}; shftr(v,2); sum(v == r) == v[]",
7834 "var v[5] := {1,2,3,4,5}; var r[5] := {0,0,0,0,1}; shftr(v,4); sum(v == r) == v[]",
7835 "var v[5] := {1,2,3,4,5}; var r[5] := {0,0,0,0,0}; shftr(v,5); sum(v == r) == v[]",
7837 "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[]",
7838 "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[]",
7840 "var v[5] := {1,3,5,2,4}; var r[5] := {1,2,3,4,5}; sort(v); sum(v == r) == v[]",
7841 "var v[5] := {5,4,3,2,1}; var r[5] := {1,2,3,4,5}; sort(v); sum(v == r) == v[]",
7842 "var v[5] := {1,4,2,3,5}; var r[5] := {1,2,3,4,5}; sort(v,1,3); sum(v == r) == v[]",
7843 "var v[5] := {5,4,2,3,1}; var r[5] := {5,2,3,4,1}; sort(v,1,3); sum(v == r) == v[]",
7844 "var v[5] := {3,1,2,4,5}; var r[5] := {1,2,3,4,5}; sort(v,0,2); sum(v == r) == v[]",
7845 "var v[5] := {1,2,5,3,4}; var r[5] := {1,2,3,4,5}; sort(v,2,4); sum(v == r) == v[]",
7847 "var v[5] := {1,3,5,2,4}; var r[5] := {1,2,3,4,5}; sort(v,'ascending'); sum(v == r) == v[]",
7848 "var v[5] := {1,3,5,2,4}; var r[5] := {1,2,3,4,5}; sort(v,'aScEnDiNg'); sum(v == r) == v[]",
7849 "var v[5] := {5,4,3,2,1}; var r[5] := {1,2,3,4,5}; sort(v,'ascending'); sum(v == r) == v[]",
7850 "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[]",
7851 "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[]",
7852 "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[]",
7854 "var v[5] := {1,3,5,2,4}; var r[5] := {5,4,3,2,1}; sort(v,'descending'); sum(v == r) == v[]",
7855 "var v[5] := {1,3,5,2,4}; var r[5] := {5,4,3,2,1}; sort(v,'DeScEnDiNg'); sum(v == r) == v[]",
7856 "var v[5] := {5,4,3,2,1}; var r[5] := {5,4,3,2,1}; sort(v,'descending'); sum(v == r) == v[]",
7857 "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[]",
7858 "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[]",
7859 "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[]",
7861 "var v[9] := {7,8,9,1,2,3,4,5,6}; nth_element(v,trunc(v[] / 2)); v[v[] / 2] == 5",
7862 "var v[9] := {7,8,9,1,2,3,4,5,6}; nth_element(v,trunc(v[] / 3)); v[v[] / 3] == 4",
7864 "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)",
7865 "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)",
7867 "var v[5]; iota(v, 0,1); var r[5] := { 0, 1, 2, 3, 4}; sum(v == r) == v[]",
7868 "var v[5]; iota(v, 0,2); var r[5] := { 0, 2, 4, 6, 8}; sum(v == r) == v[]",
7869 "var v[5]; iota(v, 1,1); var r[5] := { 1, 2, 3, 4, 5}; sum(v == r) == v[]",
7870 "var v[5]; iota(v, 1,2); var r[5] := { 1, 3, 5, 7, 9}; sum(v == r) == v[]",
7871 "var v[5]; iota(v,-1,1); var r[5] := {-1, 0, 1, 2, 3}; sum(v == r) == v[]",
7872 "var v[5]; iota(v,-1,2); var r[5] := {-1, 1, 3, 5, 7}; sum(v == r) == v[]",
7873 "var v[5]; iota(v,-2,1); var r[5] := {-2,-1, 0, 1, 2}; sum(v == r) == v[]",
7874 "var v[5]; iota(v,-2,2); var r[5] := {-2, 0, 2, 4, 6}; sum(v == r) == v[]",
7875 "var v[5]; iota(v, 0); var r[5] := { 0, 1, 2, 3, 4}; sum(v == r) == v[]",
7876 "var v[5]; iota(v, 1); var r[5] := { 1, 2, 3, 4, 5}; sum(v == r) == v[]",
7877 "var v[5]; iota(v,-1); var r[5] := {-1, 0, 1, 2, 3}; sum(v == r) == v[]",
7878 "var v[5]; iota(v,-2); var r[5] := {-2,-1, 0, 1, 2}; sum(v == r) == v[]",
7879 "var v[5]; iota(v, 0, 0); var r[5] := { 0, 0, 0, 0, 0}; sum(v == r) == v[]",
7880 "var v[5]; iota(v, 1, 0); var r[5] := { 1, 1, 1, 1, 1}; sum(v == r) == v[]",
7882 "var v[5]; iota(v, 0, v[] - 1, 0,1); var r[5] := { 0, 1, 2, 3, 4}; sum(v == r) == v[]",
7883 "var v[5]; iota(v, 0, v[] - 1, 0,2); var r[5] := { 0, 2, 4, 6, 8}; sum(v == r) == v[]",
7884 "var v[5]; iota(v, 0, v[] - 1, 1,1); var r[5] := { 1, 2, 3, 4, 5}; sum(v == r) == v[]",
7885 "var v[5]; iota(v, 0, v[] - 1, 1,2); var r[5] := { 1, 3, 5, 7, 9}; sum(v == r) == v[]",
7886 "var v[5]; iota(v, 0, v[] - 1,-1,1); var r[5] := {-1, 0, 1, 2, 3}; sum(v == r) == v[]",
7887 "var v[5]; iota(v, 0, v[] - 1,-1,2); var r[5] := {-1, 1, 3, 5, 7}; sum(v == r) == v[]",
7888 "var v[5]; iota(v, 0, v[] - 1,-2,1); var r[5] := {-2,-1, 0, 1, 2}; sum(v == r) == v[]",
7889 "var v[5]; iota(v, 0, v[] - 1,-2,2); var r[5] := {-2, 0, 2, 4, 6}; sum(v == r) == v[]",
7890 "var v[5]; iota(v, 0, v[] - 1, 0 ); var r[5] := { 0, 1, 2, 3, 4}; sum(v == r) == v[]",
7891 "var v[5]; iota(v, 0, v[] - 1, 1 ); var r[5] := { 1, 2, 3, 4, 5}; sum(v == r) == v[]",
7892 "var v[5]; iota(v, 0, v[] - 1,-1 ); var r[5] := {-1, 0, 1, 2, 3}; sum(v == r) == v[]",
7893 "var v[5]; iota(v, 0, v[] - 1,-2 ); var r[5] := {-2,-1, 0, 1, 2}; sum(v == r) == v[]",
7894 "var v[5]; iota(v, 0, v[] - 1, 0,0); var r[5] := { 0, 0, 0, 0, 0}; sum(v == r) == v[]",
7895 "var v[5]; iota(v, 0, v[] - 1, 1,0); var r[5] := { 1, 1, 1, 1, 1}; sum(v == r) == v[]",
7897 "var v[5]; iota(v, 1, v[] - 1, 0,1); var r[5] := { 0, 0, 1, 2, 3 }; sum(v == r) == v[]",
7898 "var v[5]; iota(v, 1, v[] - 1, 0,2); var r[5] := { 0, 0, 2, 4, 6 }; sum(v == r) == v[]",
7899 "var v[5]; iota(v, 1, v[] - 1, 1,1); var r[5] := { 0, 1, 2, 3, 4 }; sum(v == r) == v[]",
7900 "var v[5]; iota(v, 1, v[] - 1, 1,2); var r[5] := { 0, 1, 3, 5, 7 }; sum(v == r) == v[]",
7901 "var v[5]; iota(v, 1, v[] - 1,-1,1); var r[5] := { 0, -1, 0, 1, 2 }; sum(v == r) == v[]",
7902 "var v[5]; iota(v, 1, v[] - 1,-1,2); var r[5] := { 0, -1, 1, 3, 5 }; sum(v == r) == v[]",
7903 "var v[5]; iota(v, 1, v[] - 1,-2,1); var r[5] := { 0, -2,-1, 0, 1 }; sum(v == r) == v[]",
7904 "var v[5]; iota(v, 1, v[] - 1,-2,2); var r[5] := { 0, -2, 0, 2, 4 }; sum(v == r) == v[]",
7905 "var v[5]; iota(v, 1, v[] - 1, 0 ); var r[5] := { 0, 0, 1, 2, 3 }; sum(v == r) == v[]",
7906 "var v[5]; iota(v, 1, v[] - 1, 1 ); var r[5] := { 0, 1, 2, 3, 4 }; sum(v == r) == v[]",
7907 "var v[5]; iota(v, 1, v[] - 1,-1 ); var r[5] := { 0, -1, 0, 1, 2 }; sum(v == r) == v[]",
7908 "var v[5]; iota(v, 1, v[] - 1,-2 ); var r[5] := { 0, -2,-1, 0, 1 }; sum(v == r) == v[]",
7910 "var v[5]; iota(v, 1, v[] - 2, 0,1); var r[5] := { 0, 0, 1, 2, 0 }; sum(v == r) == v[]",
7911 "var v[5]; iota(v, 1, v[] - 2, 0,2); var r[5] := { 0, 0, 2, 4, 0 }; sum(v == r) == v[]",
7912 "var v[5]; iota(v, 1, v[] - 2, 1,1); var r[5] := { 0, 1, 2, 3, 0 }; sum(v == r) == v[]",
7913 "var v[5]; iota(v, 1, v[] - 2, 1,2); var r[5] := { 0, 1, 3, 5, 0 }; sum(v == r) == v[]",
7914 "var v[5]; iota(v, 1, v[] - 2,-1,1); var r[5] := { 0, -1, 0, 1, 0 }; sum(v == r) == v[]",
7915 "var v[5]; iota(v, 1, v[] - 2,-1,2); var r[5] := { 0, -1, 1, 3, 0 }; sum(v == r) == v[]",
7916 "var v[5]; iota(v, 1, v[] - 2,-2,1); var r[5] := { 0, -2,-1, 0, 0 }; sum(v == r) == v[]",
7917 "var v[5]; iota(v, 1, v[] - 2,-2,2); var r[5] := { 0, -2, 0, 2, 0 }; sum(v == r) == v[]",
7918 "var v[5]; iota(v, 1, v[] - 2, 0 ); var r[5] := { 0, 0, 1, 2, 0 }; sum(v == r) == v[]",
7919 "var v[5]; iota(v, 1, v[] - 2, 1 ); var r[5] := { 0, 1, 2, 3, 0 }; sum(v == r) == v[]",
7920 "var v[5]; iota(v, 1, v[] - 2,-1 ); var r[5] := { 0, -1, 0, 1, 0 }; sum(v == r) == v[]",
7921 "var v[5]; iota(v, 1, v[] - 2,-2 ); var r[5] := { 0, -2,-1, 0, 0 }; sum(v == r) == v[]",
7923 "var v[5]; iota(v, 0, v[] - 2, 0,1); var r[5] := { 0, 1, 2, 3, 0}; sum(v == r) == v[]",
7924 "var v[5]; iota(v, 0, v[] - 2, 0,2); var r[5] := { 0, 2, 4, 6, 0}; sum(v == r) == v[]",
7925 "var v[5]; iota(v, 0, v[] - 2, 1,1); var r[5] := { 1, 2, 3, 4, 0}; sum(v == r) == v[]",
7926 "var v[5]; iota(v, 0, v[] - 2, 1,2); var r[5] := { 1, 3, 5, 7, 0}; sum(v == r) == v[]",
7927 "var v[5]; iota(v, 0, v[] - 2,-1,1); var r[5] := {-1, 0, 1, 2, 0}; sum(v == r) == v[]",
7928 "var v[5]; iota(v, 0, v[] - 2,-1,2); var r[5] := {-1, 1, 3, 5, 0}; sum(v == r) == v[]",
7929 "var v[5]; iota(v, 0, v[] - 2,-2,1); var r[5] := {-2,-1, 0, 1, 0}; sum(v == r) == v[]",
7930 "var v[5]; iota(v, 0, v[] - 2,-2,2); var r[5] := {-2, 0, 2, 4, 0}; sum(v == r) == v[]",
7931 "var v[5]; iota(v, 0, v[] - 2, 0 ); var r[5] := { 0, 1, 2, 3, 0}; sum(v == r) == v[]",
7932 "var v[5]; iota(v, 0, v[] - 2, 1 ); var r[5] := { 1, 2, 3, 4, 0}; sum(v == r) == v[]",
7933 "var v[5]; iota(v, 0, v[] - 2,-1 ); var r[5] := {-1, 0, 1, 2, 0}; sum(v == r) == v[]",
7934 "var v[5]; iota(v, 0, v[] - 2,-2 ); var r[5] := {-2,-1, 0, 1, 0}; sum(v == r) == v[]",
7936 "var v[5]; iota(v, 0, -1); var r[5] := { 0, -1, -2, -3, -4}; sum(v == r) == v[]",
7937 "var v[5]; iota(v, 0, -2); var r[5] := { 0, -2, -4, -6, -8}; sum(v == r) == v[]",
7938 "var v[5]; iota(v, -1, -2); var r[5] := { -1, -3, -5, -7, -9}; sum(v == r) == v[]",
7940 "var v[5]; iota(v, 0, v[] -1, 0, -1); var r[5] := { 0, -1, -2, -3, -4}; sum(v == r) == v[]",
7941 "var v[5]; iota(v, 0, v[] -1, 0, -2); var r[5] := { 0, -2, -4, -6, -8}; sum(v == r) == v[]",
7942 "var v[5]; iota(v, 0, v[] -1, -1, -2); var r[5] := { -1, -3, -5, -7, -9}; sum(v == r) == v[]",
7944 "var v[5]; iota(v, 0,1); threshold_below(v,2, 0); var r[5] := { 0, 0, 2, 3, 4}; sum(v == r) == v[]",
7945 "var v[5]; iota(v, 0,1); threshold_above(v,2, 0); var r[5] := { 0, 1, 2, 0, 0}; sum(v == r) == v[]",
7947 "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[]",
7948 "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[]",
7950 "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[]",
7951 "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[]",
7953 "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[]",
7954 "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[]",
7956 " 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[]",
7957 " 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[]",
7959 " 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[]",
7960 " 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[]",
7961 " 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[]",
7964 const std::size_t expr_str_list_size =
sizeof(expr_str_list) /
sizeof(std::string);
7968 for (std::size_t i = 0; i < expr_str_list_size; ++i)
7970 expression_t expression;
7971 expression.register_symbol_table(symbol_table);
7973 if (!parser.compile(expr_str_list[i], expression))
7975 printf(
"run_test18() - [14] Error: %s Expression: %s\n",
7976 parser.error().c_str(),
7977 expr_str_list[i].c_str());
7984 const T result = expression.value();
7988 printf(
"run_test18() - Error in evaluation! (11) Expression: %s\n",
7989 expr_str_list[i].c_str());
8004 std::string a =
"a";
8005 std::string b =
"b";
8006 std::string c =
"c";
8007 std::string d =
"d";
8016 "T:T|T:TT|T:TTT|T:TTTT|"
8017 "T:S|T:SS|T:SSS|T:SSSS|"
8018 "T:ST|T:STS|T:STST|"
8019 "T:TS|T:TST|T:TSTS|"
8020 "T:TTSS|T:SSTT|T:STTS|T:TSST"
8039 typedef std::pair<std::string, typename overload_func<T>::test_result_t> test_pack_t;
8041 static const test_pack_t test_pack_list[] =
8043 test_pack_t(
"foo(x)" , test_result_t( 0,
"T" )),
8044 test_pack_t(
"foo(x, y)" , test_result_t( 1,
"TT" )),
8045 test_pack_t(
"foo(x, y, z)" , test_result_t( 2,
"TTT" )),
8046 test_pack_t(
"foo(x, y, z, w)" , test_result_t( 3,
"TTTT")),
8047 test_pack_t(
"foo(x + y)" , test_result_t( 0,
"T" )),
8048 test_pack_t(
"foo(x + y, y + z)" , test_result_t( 1,
"TT" )),
8049 test_pack_t(
"foo(x + y, y + z, z + w)" , test_result_t( 2,
"TTT" )),
8050 test_pack_t(
"foo(x + y, y + z, z + w, w)" , test_result_t( 3,
"TTTT")),
8051 test_pack_t(
"foo(a)" , test_result_t( 4,
"S" )),
8052 test_pack_t(
"foo(a, b)" , test_result_t( 5,
"SS" )),
8053 test_pack_t(
"foo(a, b, c)" , test_result_t( 6,
"SSS" )),
8054 test_pack_t(
"foo(a, b, c, d)" , test_result_t( 7,
"SSSS")),
8055 test_pack_t(
"foo(a + b)" , test_result_t( 4,
"S" )),
8056 test_pack_t(
"foo(a + b, b + c)" , test_result_t( 5,
"SS" )),
8057 test_pack_t(
"foo(a + b, b + c, c + d)" , test_result_t( 6,
"SSS" )),
8058 test_pack_t(
"foo(a + b, b + c, c + d, d)" , test_result_t( 7,
"SSSS")),
8059 test_pack_t(
"foo(a, x)" , test_result_t( 8,
"ST" )),
8060 test_pack_t(
"foo(a, x, b)" , test_result_t( 9,
"STS" )),
8061 test_pack_t(
"foo(a, x, b, y)" , test_result_t(10,
"STST")),
8062 test_pack_t(
"foo(a + b, x + y)" , test_result_t( 8,
"ST" )),
8063 test_pack_t(
"foo(a + b, x + y, b + c)" , test_result_t( 9,
"STS" )),
8064 test_pack_t(
"foo(a + b, x + y, b + c, y + z)" , test_result_t(10,
"STST")),
8065 test_pack_t(
"foo(x, a)" , test_result_t(11,
"TS" )),
8066 test_pack_t(
"foo(x, a, y)" , test_result_t(12,
"TST" )),
8067 test_pack_t(
"foo(x, a, y, b)" , test_result_t(13,
"TSTS")),
8068 test_pack_t(
"foo(x + y, a + b)" , test_result_t(11,
"TS" )),
8069 test_pack_t(
"foo(x + y, a + b, y + z)" , test_result_t(12,
"TST" )),
8070 test_pack_t(
"foo(x + y, a + b, y + z, b + c)" , test_result_t(13,
"TSTS")),
8071 test_pack_t(
"foo(x, y, a, b)" , test_result_t(14,
"TTSS")),
8072 test_pack_t(
"foo(a, b, x, y)" , test_result_t(15,
"SSTT")),
8073 test_pack_t(
"foo(a, x, y, b)" , test_result_t(16,
"STTS")),
8074 test_pack_t(
"foo(x, a, b, y)" , test_result_t(17,
"TSST")),
8075 test_pack_t(
"foo(x + y, y + z, a + b, b + c)" , test_result_t(14,
"TTSS")),
8076 test_pack_t(
"foo(a + b, b + c, x + y, y + z)" , test_result_t(15,
"SSTT")),
8077 test_pack_t(
"foo(a + b, x + y, y + z, b + c)" , test_result_t(16,
"STTS")),
8078 test_pack_t(
"foo(x + y, a + b, b + c, y + z)" , test_result_t(17,
"TSST"))
8081 static const std::size_t test_pack_list_size =
sizeof(test_pack_list) /
sizeof(test_pack_t);
8085 for (std::size_t i = 0; i < test_pack_list_size; ++i)
8087 expression_t expression;
8088 expression.register_symbol_table(symbol_table);
8092 if (!parser.
compile(test_pack_list[i].first, expression))
8094 printf(
"run_test18() - [15] Overload VarArg Error: %s Expression: %s\n",
8095 parser.
error().c_str(),
8096 test_pack_list[i].first.c_str());
8104 bool error_found =
false;
8112 printf(
"run_test18() - Error in evaluation! (12) Expression: %s\n",
8113 test_pack_list[i].first.c_str());
8120 printf(
"run_test18() - Error with ps_index (12) Expression: %s Expected: %d Got: %d\n",
8121 test_pack_list[i].first.c_str(),
8122 static_cast<int>(test_pack_list[i].second.ps_index),
8130 printf(
"run_test18() - Error with parameter seq (12) Expression: %s Expected: %s Got: %s\n",
8131 test_pack_list[i].first.c_str(),
8132 test_pack_list[i].second.param_seq.c_str(),
8149 std::string a =
"a";
8150 std::string b =
"b";
8151 std::string c =
"c";
8152 std::string d =
"d";
8153 std::string result =
"";
8162 "S:T|S:TT|S:TTT|S:TTTT|"
8163 "S:S|S:SS|S:SSS|S:SSSS|"
8164 "S:ST|S:STS|S:STST|"
8165 "S:TS|S:TST|S:TSTS|"
8166 "S:TTSS|S:SSTT|S:STTS|S:TSST"
8186 typedef std::pair<std::string, typename overload_func<T>::test_result_t> test_pack_t;
8188 static const test_pack_t test_pack_list[] =
8190 test_pack_t(
"result := foo(x)" , test_result_t( 0,
"T" )),
8191 test_pack_t(
"result := foo(x, y)" , test_result_t( 1,
"TT" )),
8192 test_pack_t(
"result := foo(x, y, z)" , test_result_t( 2,
"TTT" )),
8193 test_pack_t(
"result := foo(x, y, z, w)" , test_result_t( 3,
"TTTT")),
8194 test_pack_t(
"result := foo(x + y)" , test_result_t( 0,
"T" )),
8195 test_pack_t(
"result := foo(x + y, y + z)" , test_result_t( 1,
"TT" )),
8196 test_pack_t(
"result := foo(x + y, y + z, z + w)" , test_result_t( 2,
"TTT" )),
8197 test_pack_t(
"result := foo(x + y, y + z, z + w, w)" , test_result_t( 3,
"TTTT")),
8198 test_pack_t(
"result := foo(a)" , test_result_t( 4,
"S" )),
8199 test_pack_t(
"result := foo(a, b)" , test_result_t( 5,
"SS" )),
8200 test_pack_t(
"result := foo(a, b, c)" , test_result_t( 6,
"SSS" )),
8201 test_pack_t(
"result := foo(a, b, c, d)" , test_result_t( 7,
"SSSS")),
8202 test_pack_t(
"result := foo(a + b)" , test_result_t( 4,
"S" )),
8203 test_pack_t(
"result := foo(a + b, b + c)" , test_result_t( 5,
"SS" )),
8204 test_pack_t(
"result := foo(a + b, b + c, c + d)" , test_result_t( 6,
"SSS" )),
8205 test_pack_t(
"result := foo(a + b, b + c, c + d, d)" , test_result_t( 7,
"SSSS")),
8206 test_pack_t(
"result := foo(a, x)" , test_result_t( 8,
"ST" )),
8207 test_pack_t(
"result := foo(a, x, b)" , test_result_t( 9,
"STS" )),
8208 test_pack_t(
"result := foo(a, x, b, y)" , test_result_t(10,
"STST")),
8209 test_pack_t(
"result := foo(a + b, x + y)" , test_result_t( 8,
"ST" )),
8210 test_pack_t(
"result := foo(a + b, x + y, b + c)" , test_result_t( 9,
"STS" )),
8211 test_pack_t(
"result := foo(a + b, x + y, b + c, y + z)" , test_result_t(10,
"STST")),
8212 test_pack_t(
"result := foo(x, a)" , test_result_t(11,
"TS" )),
8213 test_pack_t(
"result := foo(x, a, y)" , test_result_t(12,
"TST" )),
8214 test_pack_t(
"result := foo(x, a, y, b)" , test_result_t(13,
"TSTS")),
8215 test_pack_t(
"result := foo(x + y, a + b)" , test_result_t(11,
"TS" )),
8216 test_pack_t(
"result := foo(x + y, a + b, y + z)" , test_result_t(12,
"TST" )),
8217 test_pack_t(
"result := foo(x + y, a + b, y + z, b + c)" , test_result_t(13,
"TSTS")),
8218 test_pack_t(
"result := foo(x, y, a, b)" , test_result_t(14,
"TTSS")),
8219 test_pack_t(
"result := foo(a, b, x, y)" , test_result_t(15,
"SSTT")),
8220 test_pack_t(
"result := foo(a, x, y, b)" , test_result_t(16,
"STTS")),
8221 test_pack_t(
"result := foo(x, a, b, y)" , test_result_t(17,
"TSST")),
8222 test_pack_t(
"result := foo(x + y, y + z, a + b, b + c)" , test_result_t(14,
"TTSS")),
8223 test_pack_t(
"result := foo(a + b, b + c, x + y, y + z)" , test_result_t(15,
"SSTT")),
8224 test_pack_t(
"result := foo(a + b, x + y, y + z, b + c)" , test_result_t(16,
"STTS")),
8225 test_pack_t(
"result := foo(x + y, a + b, b + c, y + z)" , test_result_t(17,
"TSST"))
8228 static const std::size_t test_pack_list_size =
sizeof(test_pack_list) /
sizeof(test_pack_t);
8232 for (std::size_t i = 0; i < test_pack_list_size; ++i)
8234 expression_t expression;
8235 expression.register_symbol_table(symbol_table);
8239 if (!parser.
compile(test_pack_list[i].first, expression))
8241 printf(
"run_test18() - [16] Overload VarArg Error: %s Expression: %s\n",
8242 parser.
error().c_str(),
8243 test_pack_list[i].first.c_str());
8251 bool error_found =
false;
8259 if (result !=
"string result")
8261 printf(
"run_test18() - Error in evaluation! (13) Expression: %s\n",
8262 test_pack_list[i].first.c_str());
8269 printf(
"run_test18() - Error with ps_index (13) Expression: %s Expected: %d Got: %d\n",
8270 test_pack_list[i].first.c_str(),
8271 static_cast<int>(test_pack_list[i].second.ps_index),
8279 printf(
"run_test18() - Error with parameter seq (13) Expression: %s Expected: %s Got: %s\n",
8280 test_pack_list[i].first.c_str(),
8281 test_pack_list[i].second.param_seq.c_str(),
8299 typedef std::pair<std::string,std::size_t> rtc_test_t;
8300 static const rtc_test_t rtc_tests[] =
8302 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i + v[]]; } ", 5 ),
8303 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i + 10]; } ", 5 ),
8304 std::make_pair(
" x:= 0; for (var i := 0; i < (2 * v[]); i += 1) { x += (v[i] == vv[i]); } ", 10),
8305 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i + v[]] := i; } ", 5 ),
8306 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i + v[]] <=> v[i]; } ", 5 ),
8307 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i] <=> v[i + v[]]; } ", 10),
8308 std::make_pair(
" var z[5] := [1]; for (var i := 0; i < z[]; i += 1) { z[i + z[]]; } ", 5 ),
8309 std::make_pair(
" var z[5] := [1]; for (var i := 0; i < z[]; i += 1) { z[i + 10]; } ", 5 ),
8310 std::make_pair(
" var z[5] := [1]; for (var i := 0; i < z[]; i += 1) { z[i + z[]] := i; } ", 5 ),
8311 std::make_pair(
" var z[5] := [1]; for (var i := 0; i < z[]; i += 1) { z[i + z[]] <=> z[i]; } ", 5 ),
8312 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v*w)[i + v[]]; } ", 10),
8313 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v*w)[i+w[]]; } ", 10),
8314 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v+w)[i + v[]]; } ", 10),
8315 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v+w)[i+w[]]; } ", 10),
8316 std::make_pair(
" var z[4] := [1]; for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v*z)[i+v[]]; } ", 10),
8317 std::make_pair(
" var z[4] := [1]; for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v*z)[i+w[]]; } ", 9 ),
8318 std::make_pair(
" var z[4] := [1]; for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v+z)[i+v[]]; } ", 10),
8319 std::make_pair(
" var z[4] := [1]; for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v+z)[i+z[]]; } ", 10),
8320 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 ),
8321 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 ),
8322 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 ),
8323 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 ),
8324 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 ),
8325 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 ),
8326 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 ),
8327 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 ),
8328 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 ),
8329 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 ),
8330 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 ),
8331 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 ),
8332 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 ),
8333 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 ),
8334 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 ),
8335 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 ),
8336 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 ),
8339 static const std::size_t rtc_tests_size =
sizeof(rtc_tests) /
sizeof(rtc_test_t);
8341 bool error_found =
false;
8343 for (std::size_t i = 0; i < rtc_tests_size; ++i)
8345 const std::string& expression_str = rtc_tests[i].first;
8349 T v[5] = { 0, 1, 2, 3, 4 };
8350 T w[3] = { 0, 1, 2 };
8354 symbol_table_t symbol_table;
8355 expression_t expression;
8358 symbol_table.add_variable(
"x" , x );
8359 symbol_table.add_vector (
"v" , v );
8360 symbol_table.add_vector (
"w" , w );
8361 symbol_table.add_vector (
"vv", vv);
8362 symbol_table.add_vector (
"ww", ww);
8366 expression.register_symbol_table(symbol_table);
8368 parser.register_vector_access_runtime_check(vartc);
8370 if (!parser.compile(expression_str, expression))
8372 printf(
"run_test18() - Error: %s\t [1] Expression: %s\n",
8373 parser.error().c_str(),
8374 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 [0] 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());
8395 T v[5] = { 0, 1, 2, 3, 4 };
8396 T w[3] = { 0, 1, 2 };
8397 T v0[5] = { 0, 1, 2, 3, 4 };
8398 T v1[5] = { 0, 1, 2, 3, 4 };
8402 symbol_table_t symbol_table;
8403 expression_t expression;
8406 symbol_table.add_variable(
"x" , x );
8407 symbol_table.add_vector (
"v" , v );
8408 symbol_table.add_vector (
"w" , w );
8409 symbol_table.add_vector (
"vv", vv);
8410 symbol_table.add_vector (
"ww", ww);
8414 expression.register_symbol_table(symbol_table);
8416 parser.register_vector_access_runtime_check(vartc);
8418 if (!parser.compile(expression_str, expression))
8420 printf(
"run_test18() - Error: %s\t [2] Expression: %s\n",
8421 parser.error().c_str(),
8422 expression_str.c_str());
8432 if (vartc.
rtc_count != rtc_tests[i].second)
8434 printf(
"run_test18() - Expected rtc_count: %d got rtc_count: %d [1] Expression: %s\n",
8435 static_cast<unsigned int>(rtc_tests[i].second),
8436 static_cast<unsigned int>(vartc.
rtc_count),
8437 expression_str.c_str());
8445 if (vartc.
rtc_count != rtc_tests[i].second)
8447 printf(
"run_test18() - Expected rtc_count: %d got rtc_count: %d [2] Expression: %s\n",
8448 static_cast<unsigned int>(rtc_tests[i].second),
8449 static_cast<unsigned int>(vartc.
rtc_count),
8450 expression_str.c_str());
8495 typedef typename compositor_t::function function_t;
8500 compositor_t compositor;
8503 compositor.add(function_t(
"f",
"x + 2",
"x"));
8506 compositor.add(function_t(
"g",
"x^2 - 3",
"x"));
8509 compositor.add(function_t(
"fof",
"f(f(x))",
"x"));
8512 compositor.add(function_t(
"gog",
"g(g(x))",
"x"));
8515 compositor.add(function_t(
"fog",
"f(g(x))",
"x"));
8518 compositor.add(function_t(
"gof",
"g(f(x))",
"x"));
8521 compositor.add(function_t(
"fogof",
"f(g(f(x)))",
"x"));
8524 compositor.add(function_t(
"gofog",
"g(f(g(x)))",
"x"));
8526 symbol_table_t& symbol_table = compositor.symbol_table();
8527 symbol_table.add_constants();
8528 symbol_table.add_variable(
"x", x);
8530 static const std::string expr_str_list[] =
8532 "equal(f(x),(x + 2))",
8533 "equal(g(x),(x^2 - 3))",
8534 "equal(fof(x),(x + 4))",
8535 "equal(gog(x),(x^4 - 6x^2 + 6))",
8536 "equal(fog(x),(x^2 - 1))",
8537 "equal(gof(x),(x^2 + 4x + 1))",
8538 "equal(fogof(x),(x^2 + 4x + 3))",
8539 "equal(gofog(x),(x^4 - 2x^2 - 2))"
8541 static const std::size_t expr_str_list_size =
sizeof(expr_str_list) /
sizeof(std::string);
8545 for (std::size_t i = 0; i < expr_str_list_size; ++i)
8547 expression_t expression;
8548 expression.register_symbol_table(symbol_table);
8552 if (!parser.compile(expr_str_list[i], expression))
8554 printf(
"run_test19() - Error: %s Expression: %s\n",
8555 parser.error().c_str(),
8556 expr_str_list[i].c_str());
8564 bool error_found =
false;
8570 printf(
"run_test19() - Error in evaluation! (1) Expression: %s\n",
8571 expr_str_list[i].c_str());
8584 const std::size_t
rounds = 100;
8586 for (std::size_t r = 0; r <
rounds; ++r)
8595 compositor_t compositor;
8601 .expression(
"3 * 2"));
8608 .expression(
"5 * (f0 + x)"));
8615 .expression(
"7 * (f1(x) + f1(y))"));
8621 .var(
"x").var(
"y").var(
"z")
8622 .expression(
"9 * (f2(x,y) + f2(y,z) + f2(x,z))"));
8628 .var(
"x").var(
"y").var(
"z").var(
"w")
8629 .expression(
"11 * (f3(x,y,z) + f3(y,z,w) + f3(z,w,x))"));
8635 .var(
"x").var(
"y").var(
"z").var(
"w").var(
"u")
8636 .expression(
"13 * (f4(x,y,z,w) + f4(y,z,w,u) + f4(z,w,u,x) + f4(w,u,x,y))"));
8642 .var(
"x").var(
"y").var(
"z")
8643 .var(
"w").var(
"u").var(
"v")
8644 .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))"));
8646 symbol_table_t& symbol_table = compositor.symbol_table();
8647 symbol_table.add_constants();
8648 symbol_table.add_variable(
"x", x);
8649 symbol_table.add_variable(
"y", y);
8650 symbol_table.add_variable(
"z", z);
8651 symbol_table.add_variable(
"w", w);
8652 symbol_table.add_variable(
"u", u);
8653 symbol_table.add_variable(
"v", v);
8657 const std::string expr_str_list[] =
8673 const std::size_t expr_str_list_size =
sizeof(expr_str_list) /
sizeof(std::string);
8675 const T result_list[] =
8691 bool error_found =
false;
8693 for (std::size_t i = 0; i < expr_str_list_size; ++i)
8695 expression_t expression;
8696 expression.register_symbol_table(symbol_table);
8698 if (!parser.compile(expr_str_list[i], expression))
8700 printf(
"run_test19() - Error: %s Expression: %s\n",
8701 parser.error().c_str(),
8702 expr_str_list[i].c_str());
8708 const T result = expression.value();
8710 if (result_list[i] != result)
8712 printf(
"run_test19() - Error in evaluation! (2) Expression: %s Expected: %10.1f\tResult: %10.1f\n",
8713 expr_str_list[i].c_str(),
8714 static_cast<double>(result_list[i]),
8715 static_cast<double>(result));
8732 compositor_t compositor;
8739 " if (0 == (x % y),false, "
8740 " is_prime_impl1(x,y - 1))) ",
8747 "if (frac(x) != 0, false, "
8748 " if (x <= 0, false, "
8749 " is_prime_impl1(x,min(x - 1,trunc(sqrt(x)) + 1)))) ",
8758 " case y == 1 : true; "
8759 " case (x % y) == 0 : false; "
8760 " default : is_prime_impl2(x,y - 1);"
8770 " case x <= 0 : false; "
8771 " case frac(x) != 0 : false; "
8772 " default : is_prime_impl2(x,min(x - 1,trunc(sqrt(x)) + 1));"
8784 " case y == 1 : ~(y := 0, true);"
8785 " case (x % y) == 0 : ~(y := 0,false);"
8786 " default : y := y - 1; "
8797 " case x <= 0 : false; "
8798 " case frac(x) != 0 : false; "
8799 " default : is_prime_impl3(x,min(x - 1,trunc(sqrt(x)) + 1));"
8809 " case 1 == x : false; "
8810 " case 2 == x : true; "
8811 " case 3 == x : true; "
8812 " case 5 == x : true; "
8813 " case 7 == x : true; "
8814 " case 0 == x % 2 : false; "
8817 " for (var i := 3; i < y; i += 2) "
8819 " if ((x % i) == 0) "
8834 " case x <= 0 : false; "
8835 " case frac(x) != 0 : false; "
8836 " default : is_prime_impl4(x,min(x - 1,trunc(sqrt(x)) + 1));"
8840 symbol_table_t& symbol_table = compositor.symbol_table();
8841 symbol_table.add_constants();
8842 symbol_table.add_variable(
"x",x);
8844 const std::string expression_str[] =
8852 const std::size_t expression_count =
sizeof(expression_str) /
sizeof(std::string);
8856 for (std::size_t i = 0; i < expression_count; ++i)
8860 expression_t expression;
8861 expression.register_symbol_table(symbol_table);
8863 if (!parser.compile(expression_str[i],expression))
8865 printf(
"run_test19() - Error: %s Expression%d: %s\n",
8866 parser.error().c_str(),
8867 static_cast<unsigned int>(i),
8868 expression_str[i].c_str());
8876 bool error_found =
false;
8878 const std::size_t prime_list[] =
8880 2, 3, 5, 7, 11, 13, 17, 19,
8881 877, 947, 1087, 1153, 1229, 1297, 1381, 1453,
8882 1523, 1597, 1663, 1741, 1823, 1901, 1993, 2063,
8883 2131, 2221, 2293, 2371, 2437, 2539, 2621, 2689,
8884 2749, 2833, 2909, 3001, 3083, 3187, 3259, 3343,
8885 3433, 3517, 3581, 3659, 3733, 3823, 3911, 4001,
8886 4073, 4153, 4241, 4327, 4421, 4507, 4591, 4663,
8887 4759, 4861, 4943, 5009, 5099, 5189, 5281, 5393,
8888 5449, 5527, 5641, 5701, 5801, 5861, 5953, 6067,
8889 6143, 6229, 6311, 6373, 6481, 6577, 6679, 6763,
8890 6841, 6947, 7001, 7109, 7211, 7307, 7417, 7507,
8891 104309, 104311, 104323, 104327, 104347, 104369, 104381, 104383,
8892 104393, 104399, 104417, 104459, 104471, 104473, 104479, 104491,
8893 104513, 104527, 104537, 104543, 104549, 104551, 104561, 104579,
8894 104593, 104597, 104623, 104639, 104651, 104659, 104677, 104681,
8895 104683, 104693, 104701, 104707, 104711, 104717, 104723, 104729,
8896 1000621, 1000639, 1000651, 1000667, 1000669, 1001023, 1001027, 1001041
8899 const std::size_t prime_list_size =
sizeof(prime_list) /
sizeof(std::size_t);
8901 for (std::size_t i = 0; (i < prime_list_size) && (!error_found); ++i)
8903 x =
static_cast<T
>(prime_list[i]);
8905 std::vector<T> result(expression_count,T(0));
8914 if (result[j] != result[0])
8923 printf(
"run_test19() - Error in evaluation! (3) Results don't match! Prime: %d\n",
8924 static_cast<unsigned int>(prime_list[i]));
8928 printf(
"Expression[%02d]: %s = %d\n",
8929 static_cast<unsigned int>(j),
8930 expression_str[j].c_str(),
8931 static_cast<unsigned int>(result[j]));
8936 printf(
"run_test19() - Error in evaluation! (4) Results don't match! Prime: %d\n",
8937 static_cast<unsigned int>(prime_list[i]));
8941 printf(
"Expression[%02d]: %s = %d\n",
8942 static_cast<unsigned int>(j),
8943 expression_str[j].c_str(),
8944 static_cast<unsigned int>(result[j]));
8958 compositor_t compositor;
8966 " fibonacci1(x - 1) + fibonacci1(x - 2)))",
8975 " case x == 0 : 0; "
8976 " case x == 1 : 1; "
8977 " default : fibonacci2(x - 1) + fibonacci2(x - 2);"
8987 " case x == 0 : 0; "
8988 " case x == 1 : 1; "
8990 " while ((x := (x - 1)) > 0) "
9004 "fibonacci_impl3(x,0,1,0)",
9013 " case x == 0 : 0; "
9014 " case x == 1 : 1; "
9030 "fibonacci_impl4(x,0,1,0)",
9037 "if ((x == 0) or (x == 1)) "
9040 " fibonacci5(x - 1) + fibonacci5(x - 2); ",
9043 symbol_table_t& symbol_table = compositor.symbol_table();
9045 symbol_table.add_constants();
9046 symbol_table.add_variable(
"x",x);
9048 const std::string expression_str[] =
9057 const std::size_t expression_count =
sizeof(expression_str) /
sizeof(std::string);
9061 for (std::size_t i = 0; i < expression_count; ++i)
9065 expression_t expression;
9066 expression.register_symbol_table(symbol_table);
9068 if (!parser.compile(expression_str[i],expression))
9070 printf(
"run_test19() - Error: %s Expression[%02d]: %s\n",
9071 parser.error().c_str(),
9072 static_cast<unsigned int>(i),
9073 expression_str[i].c_str());
9081 bool error_found =
false;
9083 const std::size_t fibonacci_list[] =
9089 987, 1597, 2584, 4181,
9090 6765, 10946, 17711, 28657,
9091 46368, 75025, 121393, 196418,
9092 317811, 514229, 832040, 1346269
9095 const std::size_t fibonacci_list_size =
sizeof(fibonacci_list) /
sizeof(std::size_t);
9097 for (std::size_t i = 0; (i < fibonacci_list_size) && (!error_found); ++i)
9099 x =
static_cast<T
>(i);
9101 std::vector<T> result(expression_count,T(0));
9110 if (result[j] != result[0])
9119 printf(
"run_test19() - Error in evaluation! (5) Results don't match! fibonacci(%d) = %d\n",
9120 static_cast<unsigned int>(i),
9121 static_cast<unsigned int>(fibonacci_list[i]));
9125 printf(
"Expression[%02d]: %s = %d\n",
9126 static_cast<unsigned int>(j),
9127 expression_str[j].c_str(),
9128 static_cast<unsigned int>(result[j]));
9133 printf(
"run_test19() - Error in evaluation! (6) Results don't match! fibonacci(%d) = %d\n",
9134 static_cast<unsigned int>(i),
9135 static_cast<unsigned int>(fibonacci_list[i]));
9139 printf(
"Expression[%02d]: %s = %d\n",
9140 static_cast<unsigned int>(j),
9141 expression_str[j].c_str(),
9142 static_cast<unsigned int>(result[j]));
9156 symbol_table_t symbol_table;
9158 symbol_table.add_constants();
9159 symbol_table.add_variable(
"x",x);
9161 compositor_t compositor(symbol_table);
9169 " case x < 0 : -inf; "
9170 " case x == 0 : 0; "
9171 " case x == 1 : 1; "
9177 " y := (1 / 2) * (y + (x / y)); "
9178 " if (equal(y * y,x)) "
9180 " until ((z -= 1) <= 0); "
9189 "newton_sqrt_impl(x,0,0)",
"x"));
9191 std::string expression_str =
"newton_sqrt(x)";
9193 expression_t expression;
9195 expression.register_symbol_table(symbol_table);
9199 if (!parser.compile(expression_str,expression))
9201 printf(
"run_test19() - Error: %s Expression: %s\n",
9202 parser.error().c_str(),
9203 expression_str.c_str());
9208 bool error_found =
false;
9210 for (std::size_t i = 0; i < 100; ++i)
9212 x =
static_cast<T
>(i);
9214 const T result = expression.value();
9218 printf(
"run_test19() - Computation Error "
9219 "Expression: [%s]\tExpected: %12.8f\tResult: %12.8f\n",
9220 expression_str.c_str(),
9222 static_cast<double>(result));
9235 symbol_table_t symbol_table;
9237 symbol_table.add_constants();
9239 compositor_t compositor(symbol_table);
9245 " var width := 118; "
9246 " var height := 41; "
9247 " var imag_max := +1; "
9248 " var imag_min := -1; "
9249 " var real_max := +1; "
9250 " var real_min := -2.5; "
9251 " var x_step := (real_max - real_min) / width; "
9252 " var y_step := (imag_max - imag_min) / height; "
9253 " for (var y := 0; y < height; y += 1) "
9255 " var imag := imag_min + (y_step * y); "
9256 " for (var x := 0; x < width; x += 1) "
9258 " var real := real_min + x_step * x; "
9259 " var z_real := real; "
9260 " var z_imag := imag; "
9262 " for (var n := 0; n < 30; n += 1) "
9264 " var a := z_real^2; "
9265 " var b := z_imag^2; "
9266 " plot_value := n; "
9267 " if ((a + b) < 4) "
9269 " z_imag := 2 * z_real * z_imag + imag; "
9270 " z_real := a - b + real; "
9278 std::string expression_str =
"mandelbrot()";
9280 expression_t expression;
9282 expression.register_symbol_table(symbol_table);
9286 if (!parser.compile(expression_str,expression))
9288 printf(
"run_test19() - Error: %s Expression: %s\n",
9289 parser.error().c_str(),
9290 expression_str.c_str());
9295 for (std::size_t i = 0; i < 100; ++i)
9304 symbol_table_t symbol_table;
9306 symbol_table.add_variable(
"x",x);
9308 compositor_t compositor(symbol_table);
9316 " fooboo(x - 1) + x; "
9321 std::string expression_str =
"fOoBoO(x)";
9323 expression_t expression;
9325 expression.register_symbol_table(symbol_table);
9329 if (!parser.compile(expression_str,expression))
9331 printf(
"run_test19() - Error: %s Expression: %s\n",
9332 parser.error().c_str(),
9333 expression_str.c_str());
9340 for (std::size_t i = 0; i < 100; ++i)
9346 const T result = expression.value();
9350 printf(
"run_test19() - FooBoo(%5.2f) Expected: %5.2f\tResult: %5.2f\n",
9351 static_cast<double>(x),
9352 static_cast<double>(sum),
9353 static_cast<double>(result));
9361 const std::pair<std::string,std::string> test_funcprog[] =
9365 " var s := depth_to_str(depth); "
9369 " if (recursive(depth - 1) == false) "
9375 " s == depth_to_str(depth); ",
9382 " var v[7] := [ depth ]; "
9386 " if (recursive(depth - 1) == false) "
9392 " return [sum(v == depth) == v[]]; ",
9399 " var v1[ 7] := [ depth ]; "
9400 " var v2[21] := [ depth ]; "
9404 " if (recursive(depth - 1) == false) "
9410 " (sum(v1 == depth) == v1[]) and "
9411 " (sum(v2 == depth) == v2[]) ; "
9419 " var s := depth_to_str(depth); "
9421 " for (var i := 0; i < 2; i += 1) "
9425 " if (recursive(depth - 1) == false) "
9432 " s == depth_to_str(depth); ",
9439 " var s := depth_to_str(depth); "
9441 " for (var i := 0; i < 2; i += 1) "
9443 " for (var j := 0; j < 2; j += 1) "
9447 " if (recursive(depth - 1) == false) "
9455 " s == depth_to_str(depth); ",
9462 " var v[7] := [ depth ]; "
9464 " for (var i := 0; i < 2; i += 1) "
9466 " var w[21] := [ depth + 1 ]; "
9470 " if (recursive(depth - 1) == false) "
9476 " if (sum(w == (depth + 1)) != w[]) "
9482 " return [sum(v == depth) == v[]]; ",
9489 " var v[7] := [ depth ]; "
9491 " for (var i := 0; i < 2; i += 1) "
9493 " var u[21] := [ depth + 1 ]; "
9495 " for (var j := 0; j < 2; j += 1) "
9497 " var w[35] := [ depth + 2 ]; "
9501 " if (recursive(depth - 1) == false) "
9507 " if (sum(w == (depth + 2)) != w[]) "
9513 " if (sum(u == (depth + 1)) != u[]) "
9519 " return [sum(v == depth) == v[]]; ",
9526 " var s := depth_to_str(depth); "
9527 " var v[7] := [ depth ]; "
9531 " if (recursive(depth - 1) == false) "
9539 " (s == depth_to_str(depth)) and "
9540 " (sum(v == depth) == v[]) "
9548 " var s0 := depth_to_str(depth); "
9549 " var v0[7] := [ depth ]; "
9550 " var s1 := depth_to_str(depth); "
9551 " var v1[42] := [ depth ]; "
9555 " if (recursive(depth - 1) == false) "
9563 " (s0 == depth_to_str(depth)) and "
9564 " (sum(v0 == depth) == v0[]) and "
9565 " (s1 == depth_to_str(depth)) and "
9566 " (sum(v1 == depth) == v1[]) "
9574 " var s := depth_to_str(depth); "
9575 " var v[7] := [ depth ]; "
9577 " for (var i := 0; i < 2; i += 1) "
9581 " if (recursive(depth - 1) == false) "
9590 " (s == depth_to_str(depth)) and "
9591 " (sum(v == depth) == v[]) "
9599 " var s0 := depth_to_str(depth); "
9600 " var v0[7] := [ depth ]; "
9601 " var s1 := depth_to_str(depth); "
9602 " var v1[42] := [ depth ]; "
9604 " for (var i := 0; i < 2; i += 1) "
9608 " if (recursive(depth - 1) == false) "
9617 " (s0 == depth_to_str(depth)) and "
9618 " (sum(v0 == depth) == v0[]) and "
9619 " (s1 == depth_to_str(depth)) and "
9620 " (sum(v1 == depth) == v1[]) "
9628 " var s0 := depth_to_str(depth); "
9629 " var v0[7] := [ depth ]; "
9631 " for (var i := 0; i < 2; i += 1) "
9633 " var s1 := depth_to_str(depth); "
9634 " var v1[21] := [ depth + 1 ]; "
9638 " if (recursive(depth - 1) == false) "
9644 " if (s1 != depth_to_str(depth)) "
9649 " if (sum(v1 == (depth + 1)) != v1[]) "
9657 " (s0 == depth_to_str(depth)) and "
9658 " (sum(v0 == depth) == v0[]) "
9669 " recursive(depth - 1) + "
9670 " recursive(depth - 2) ; ",
9675 " for (var i := 0; i < n; i += 1) "
9677 " total += recursive(i); "
9684 const std::size_t test_funcprog_size =
sizeof(test_funcprog) /
sizeof(std::pair<std::string,std::string>);
9685 const std::size_t
rounds = 5;
9689 for (std::size_t r = 0; r <
rounds; ++r)
9691 for (std::size_t i = 0; i < test_funcprog_size; ++i)
9695 symbol_table_t symbol_table;
9696 symbol_table.add_function(
"depth_to_str",dts);
9698 compositor_t compositor(symbol_table);
9700 const bool comp_result = compositor.add(
9701 function_t(
"recursive")
9704 ( test_funcprog[i].first ));
9708 printf(
"run_test19() - Compositor Error: %s\nfunction: %s\n",
9709 compositor.error().c_str(),
9710 test_funcprog[i].first.c_str());
9716 expression_t expression;
9717 expression.register_symbol_table(symbol_table);
9721 if (!parser.compile(test_funcprog[i].second, expression))
9723 printf(
"run_test19() - Error: %s Expression: %s\n",
9724 parser.error().c_str(),
9725 test_funcprog[i].second.c_str());
9731 if (T(1) != expression.value())
9733 printf(
"run_test19() - Evaluation Error: test_funcprog %d function: %s\n",
9734 static_cast<int>(i),
9735 test_funcprog[i].second.c_str());
9750 symbol_table_t symbol_table;
9752 symbol_table.add_constants();
9754 const std::string expression_string =
9755 " var sieve[10^7] := [false]; "
9756 " var m := trunc(sqrt(sieve[])); "
9758 " sieve[0] := true; "
9759 " sieve[1] := true; "
9761 " for (var i := 0; i <= m; i += 1) "
9763 " if (false == sieve[i]) "
9765 " for (var j := (i * i); j < sieve[]; j += i) "
9767 " sieve[j] := true; "
9772 " var prime_count := 0; "
9773 " for (var i := 0; i < sieve[]; i += 1) "
9775 " if (false == sieve[i]) "
9777 " prime_count += 1; "
9781 " prime_count == 664579; ";
9783 expression_t expression;
9785 expression.register_symbol_table(symbol_table);
9789 if (!parser.compile(expression_string,expression))
9791 printf(
"run_test19() - Error: %s Expression: %s\n",
9792 parser.error().c_str(),
9793 expression_string.c_str());
9798 if (T(1) != expression.value())
9800 printf(
"run_test19() - Prime Sieve Computation Error");
9807 symbol_table_t symbol_table;
9809 symbol_table.add_constants();
9811 const std::string expression_str[] =
9813 "var delta := 10^-7; var total := 0; for (var i := 0; i <= 3; i += delta) { total += "
9814 "erf(i) }; abs((delta * total) - (3 * erf(3) + (1 / exp(9) - 1) / sqrt(pi))) < 0.000001",
9816 "var delta := 10^-7; var total := 0; for (var i := 0; i <= 3; i += delta) { total += "
9817 "erfc(i) }; abs((delta * total) - (3 * erfc(3) + ((1 - 1 / exp(9)) / sqrt(pi)))) < 0.000001"
9824 for (std::size_t i = 0; i < 2; ++i)
9826 e[i].register_symbol_table(symbol_table);
9828 if (!parser.compile(expression_str[i],e[i]))
9830 printf(
"run_test19() - Error: %s Expression: %s\n",
9831 parser.error().c_str(),
9832 expression_str[i].c_str());
9837 if (T(1) != e[i].value())
9839 printf(
"run_test19() - erf/erfc computation error %d",
9840 static_cast<unsigned int>(i));
10383 symbol_table_t symbol_table;
10384 symbol_table.add_constants();
10385 symbol_table.add_variable(
"x",x);
10386 symbol_table.add_variable(
"y",y);
10387 symbol_table.add_variable(
"z",z);
10394 "return[x + y,y - x]; x;",
10395 "return[x + y,y - x,'abc']; x;",
10396 "if (x < y) return [1,'abc1']; else return [2,'abc2',x];" ,
10397 "if (x > y) return [1,'abc1']; else return [2,'abc2',x];" ,
10398 "if (x < y) { return [1,'abc1'];} else { return [2,'abc2',x];}",
10399 "if (x > y) { return [1,'abc1'];} else { return [2,'abc2',x];}",
10400 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [1]; } ",
10401 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [1,'abc']; } ",
10402 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [1,'abc',x]; }",
10403 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [1,'abc',x,y]; }",
10404 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [1,'abc',x,y,z]; }",
10405 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [2,'abc2',x]; else x += 1; }",
10406 "for(var i := 0; i < 10; i += 1) { if (i == 5) { return [1,'abc1'];} else x += 1; }"
10409 static const std::string result_list[] =
10431 bool error_found =
false;
10435 expression_t expression;
10436 expression.register_symbol_table(symbol_table);
10442 printf(
"run_test21() - Error: %s Expression: %s [1]\n",
10443 parser.error().c_str(),
10446 error_found =
true;
10449 else if (!parser.dec().return_present())
10451 printf(
"run_test21() - Expected a return statement Expression: %s [1]\n",
10454 error_found =
true;
10458 expression.value();
10460 std::string pattern = results_to_string<T>(expression.results());
10462 if (!expression.return_invoked())
10464 printf(
"run_test21() - Invalid return invoke state [1] Expression: %s\n",
10467 error_found =
true;
10470 else if (result_list[i] != pattern)
10472 printf(
"run_test21() - Invalid return results [1] Expected %s Got: %s Expression: %s\n",
10473 result_list[i].c_str(),
10477 error_found =
true;
10493 symbol_table_t symbol_table;
10494 symbol_table.add_constants();
10495 symbol_table.add_variable(
"x",x);
10496 symbol_table.add_variable(
"y",y);
10497 symbol_table.add_variable(
"z",z);
10501 "x := 1; x + 1; x + 2; x + 3; x + 5; x + 7; return [x + 1]; ",
10502 "x := 1; x + 1; x + 2; x + 3; x + 5; return [x + 1]; x := 7; ",
10503 "x := 1; x + 1; x + 2; x + 3; return [x + 1]; x + 5; x := 7; ",
10504 "x := 1; x + 1; x + 2; return [x + 1]; x + 3; x + 5; x := 7; ",
10505 "x := 1; x + 1; return [x + 1]; x + 2; x + 3; x + 5; x := 7; ",
10506 "x := 1; return [x + 1]; x + 1; x + 2; x + 3; x + 5; x := 7; ",
10507 "return [x + 1]; x := 1; x + 1; x + 2; x + 3; x + 5; x := 7; ",
10508 "~{x := 1; x + 1; x + 2; x + 3; x + 5; x + 7; return [x + 1]}",
10509 "~{x := 1; x + 1; x + 2; x + 3; x + 5; return [x + 1]; x := 7}",
10510 "~{x := 1; x + 1; x + 2; x + 3; return [x + 1]; x + 5; x := 7}",
10511 "~{x := 1; x + 1; x + 2; return [x + 1]; x + 3; x + 5; x := 7}",
10512 "~{x := 1; x + 1; return [x + 1]; x + 2; x + 3; x + 5; x := 7}",
10513 "~{x := 1; return [x + 1]; x + 1; x + 2; x + 3; x + 5; x := 7}",
10514 "~{return [x + 1]; x := 1; x + 1; x + 2; x + 3; x + 5; x := 7}"
10517 static const std::string result_list[] =
10519 "T",
"T",
"T",
"T",
"T",
"T",
"T",
10520 "T",
"T",
"T",
"T",
"T",
"T",
"T",
10525 bool error_found =
false;
10529 expression_t expression;
10530 expression.register_symbol_table(symbol_table);
10536 printf(
"run_test21() - Error: %s Expression: %s [2]\n",
10537 parser.error().c_str(),
10540 error_found =
true;
10543 else if (!parser.dec().return_present())
10545 printf(
"run_test21() - Expected a return statement Expression: %s [2]\n",
10548 error_found =
true;
10552 expression.value();
10554 std::string pattern = results_to_string<T>(expression.results());
10556 if (!expression.return_invoked())
10558 printf(
"run_test21() - Invalid return invoke state [2] Expression: %s\n",
10561 error_found =
true;
10564 else if (result_list[i] != pattern)
10566 printf(
"run_test21() - Invalid return results [2] Expected %s Got: %s Expression: %s\n",
10567 result_list[i].c_str(),
10571 error_found =
true;
10574 else if (!
result_equal(expression.results(), x + T(1)))
10576 printf(
"run_test21() - Invalid return results [2] Expected %s Got: %s Expression: %s\n",
10577 result_list[i].c_str(),
10581 error_found =
true;
10597 T v[] = {0 , 1, 2, 3 };
10598 std::string s =
"Hello ";
10602 symbol_table_t symbol_table;
10603 expression_t expression;
10606 symbol_table.add_variable (
"x", x);
10607 symbol_table.add_variable (
"y", y);
10608 symbol_table.add_variable (
"z", z);
10609 symbol_table.add_vector (
"v", v);
10610 symbol_table.add_stringvar(
"s", s);
10612 expression.register_symbol_table(symbol_table);
10614 const std::string expression_str =
10618 " return [ x, x + y, 2 * v, s + 'world' ]; ";
10620 if (!parser.compile(expression_str, expression))
10622 printf(
"run_test21() - ERROR: %s\tExpression: %s\n",
10623 parser.error().c_str(),
10624 expression_str.c_str());
10628 expression.value();
10631 const results_context_t& results = expression.results();
10633 if (results.count() != 4)
10635 printf(
"run_test21() - ERROR Expected 4 return results, instead got: %d\n",
10636 static_cast<unsigned int>(results.count()));
10642 std::string result_s;
10643 std::vector<T> result_v;
10645 const T expected_result_v[] = {0 , 2, 4, 6 };
10646 const std::string expected_result_s =
"Hello world";
10648 if (!results.get_scalar(0,result_x0))
10650 printf(
"run_test21() - ERROR Failed to get scalar index0 from return result!\n");
10653 else if (result_x0 != T(1))
10655 printf(
"run_test21() - ERROR result_x0 is not expected value!\n");
10658 else if (!results.get_scalar(1,result_x1))
10660 printf(
"run_test21() - ERROR Failed to get scalar index1 from return result!\n");
10663 else if (result_x1 != T(3))
10665 printf(
"run_test21() - ERROR result_x1 is not expected value!\n");
10668 else if (!results.get_vector(2,result_v))
10670 printf(
"run_test21() - ERROR Failed to get vector from return result!\n");
10674 (result_v.size() != (
sizeof(expected_result_v) /
sizeof(T))) ||
10675 !std::equal(result_v.begin(),result_v.end(),expected_result_v)
10678 printf(
"run_test21() - ERROR result_v is not expected value!\n");
10681 else if (!results.get_string(3,result_s))
10683 printf(
"run_test21() - ERROR Failed to get string from return result!\n");
10686 else if (result_s != expected_result_s)
10688 printf(
"run_test21() - ERROR result_s is not expected value!\n");
10694 const std::string invalid_expressions[] =
10707 "var i := 2; v[i] := x",
10708 "var i := 2; v[i] += x",
10714 "var i := 2; aa[i:3] := bb",
10715 "var i := 2; aa[i+1:3] := bb",
10716 "var i := 2; aa[0:i] := bb",
10717 "var i := 2; aa[0:i+1] := bb",
10718 "var i := 1; var j := 3; aa[i:j] := bb",
10719 "var i := 1; var j := 3; aa[i+1:j] := bb",
10720 "var i := 1; var j := 3; aa[i:j+1] := bb",
10721 "var i := 1; var j := 3; aa[i+1:j+1] := bb",
10724 const std::size_t invalid_expressions_size =
sizeof(invalid_expressions) /
sizeof(std::string);
10726 for (std::size_t i = 0; i < invalid_expressions_size; ++i)
10728 symbol_table_t mutable_symbol_table;
10729 symbol_table_t immutable_symbol_table(symbol_table_t::e_immutable);
10733 std::string s =
"xyz";
10734 std::string aa =
"0123456789";
10735 std::string bb =
"A";
10739 std::string s_ =
"xyz";
10741 std::string a_ =
"0123456789";
10742 std::string b_ =
"A";
10744 immutable_symbol_table.add_variable (
"x" , x );
10745 immutable_symbol_table.add_vector (
"v" , v );
10746 immutable_symbol_table.add_stringvar(
"s" , s );
10747 immutable_symbol_table.add_stringvar(
"aa", aa);
10748 immutable_symbol_table.add_stringvar(
"bb", bb);
10750 mutable_symbol_table.add_variable (
"x_", x_);
10751 mutable_symbol_table.add_vector (
"v_", v_);
10752 mutable_symbol_table.add_stringvar (
"s_", s_);
10753 mutable_symbol_table.add_stringvar (
"a_", a_);
10754 mutable_symbol_table.add_stringvar (
"b_", b_);
10756 const std::string& expression_str = invalid_expressions[i];
10757 expression_t expression;
10758 expression.register_symbol_table(immutable_symbol_table);
10759 expression.register_symbol_table(mutable_symbol_table );
10762 const bool compile_result = parser.compile(expression_str, expression);
10764 if (compile_result)
10766 expression.value();
10767 printf(
"run_test21() - Invalid expression due to immutability was successfully compiled. Expression: %s\n",
10768 expression_str.c_str());
10779 symbol_table_t mutable_symbol_table;
10780 symbol_table_t immutable_symbol_table(symbol_table_t::e_immutable);
10782 mutable_symbol_table.add_variable(
"x", x);
10783 mutable_symbol_table.add_variable(
"y", y);
10785 immutable_symbol_table.add_variable(
"w", w);
10786 immutable_symbol_table.add_variable(
"z", z);
10788 expression_t expression;
10789 expression.register_symbol_table(mutable_symbol_table );
10790 expression.register_symbol_table(immutable_symbol_table);
10794 typedef std::pair<std::string,bool> local_test_t;
10796 const local_test_t expressions[] =
10798 std::make_pair<std::string,bool>(
"x := y + (z / w)" ,
true ),
10799 std::make_pair<std::string,bool>(
"y := y / x + (z / w)" ,
true ),
10800 std::make_pair<std::string,bool>(
"z := y + x - w" ,
false),
10801 std::make_pair<std::string,bool>(
"z == (w += y / x)" ,
false)
10804 const std::size_t expressions_size =
sizeof(expressions) /
sizeof(local_test_t);
10806 bool error_found =
false;
10808 for (std::size_t i = 0; i < expressions_size; ++i)
10810 const std::string expression_str = expressions[i].first;
10811 const bool expected_compile_result = expressions[i].second;
10813 if (expected_compile_result != parser.compile(expression_str, expression))
10815 printf(
"run_test21() - Invalid compilation of expression. Expected compile result: %c Expression: %s\n",
10816 expected_compile_result ?
'T' :
'F',
10817 expression_str.c_str());
10819 error_found =
true;
10827 expression.value();
10837 typedef typename parser_t::settings_store settings_t;
10839 const std::string invalid_expressions[] =
10841 "var result := 0; if (true) { result := 2 } if (true) { result := 3 }; result",
10842 "var result := 0; if (true) { result := 2 }; if (true) { result := 3 } result",
10843 "var result := 0; if (true) { result := 2 } if (true) { result := 3 } result",
10844 "var result := 0; var x:=1; if (x > 0) { result := 2 } else if (x > 0) { result := 3 } result",
10845 "var result := 0; var x := 1; if (x > 0) { result := 2 } if (x > 0) { result := 3 }; result",
10846 "var result := 0; var x := 1; if (x > 0) { result := 2 }; if (x > 0) { result := 3 } result",
10847 "var result := 0; var x := 1; if (x > 0) { result := 2 } if (x > 0) { result := 3 } result",
10848 "var result := 0; var x := 1; if (x > 0) { result := 2 } else if (x > 0) { result := 3 } result",
10849 "var result := 0; var x := 1; if (x > 0) result := 2 else if (x > 0) { result := 3 } result",
10850 "var result := 0; var x := 1; if (x > 0) {result := 2 } else if (x > 0) result := 3 result",
10851 "var x := 2; var y := 0; x y ",
10852 "var x := 2; x var y := 0; ",
10853 "var x := 2; var y := 0; while (y < 3) { x := x * x; y += 1; } x ",
10854 "var x := 2; var y := 0; for (var i := 0; i < 2; i += 1) { x := x * x; y += 1; } x ",
10855 "var x := 2; var y := 0; while (y < 3) { x := x * x; y += 1; } 1 ",
10856 "var x := 2; var y := 0; for (var i := 0; i < 2; i += 1) { x := x * x; y += 1; } 1 ",
10857 "var x := 2; var y := 0; x while (y < 3) { x := x * x; y += 1; } ",
10858 "var x := 2; var y := 0; x for (var i := 0; i < 2; i += 1) { x := x * x; y += 1; } ",
10859 "var x := 2; var y := 0; for (var i := 0; i < 2; i += 1) { x := x * x; y += 1; } (1 + x)",
10860 "var x := 2; var y := 0; for (var i := 0; i < 2; i += 1) { x := x * x; y += 1; } (x + 1)",
10861 "var x := 2; var y := 0; (1 + x) for (var i := 0; i < 2; i += 1) { x := x * x; y += 1; }",
10862 "var x := 2; var y := 0; (x + 1) for (var i := 0; i < 2; i += 1) { x := x * x; y += 1; }",
10863 "var x := 2; var y := 0; (x + y) for (var i := 0; i < 2; i += 1) { x := x * x; y += 1; }",
10871 "var x := 2; 1 2 ",
10872 "var x := 2; 1 x ",
10873 "var x := 2; x 1 ",
10874 "var x := 2; a 1 ",
10875 "var x := 2; x a ",
10876 "var x := 2; x a b ",
10877 "var x := 2; x a b c ",
10878 "var x := 2; a x ",
10879 "var x := 2; a x b ",
10880 "var x := 2; a x b c ",
10881 "var x := 2; 'hello' 1",
10882 "var x := 2; 1 'hello'",
10883 "var x := 2; 'hello' x",
10884 "var x := 2; x 'hello'",
10885 "var x := 2; (x 1) ",
10886 "var x := 2; (1 x) ",
10887 "var x := 2; 2 + (x 1) ",
10888 "var x := 2; 2 + (1 x) ",
10889 "var x := 2; x + (x 1) ",
10890 "var x := 2; x + (1 x) ",
10891 "var x := 2; (x 1) + 2 ",
10892 "var x := 2; (1 x) + 2 ",
10893 "var x := 2; (x 1) + x ",
10894 "var x := 2; (1 x) + x ",
10895 "var x := 2; var y := 3; (x y) ",
10896 "var x := 2; var y := 3; (y x) ",
10897 "var x := 2; var y := 3; 2 + (x y) ",
10898 "var x := 2; var y := 3; 2 + (y x) ",
10899 "var x := 2; var y := 3; x + (x y) ",
10900 "var x := 2; var y := 3; x + (y x) ",
10901 "var x := 2; var y := 3; (x y) + 2 ",
10902 "var x := 2; var y := 3; (y x) + 2 ",
10903 "var x := 2; var y := 3; (x y) + x ",
10904 "var x := 2; var y := 3; (y x) + x ",
10905 "var x := 2; 2 + x 1 ",
10906 "var x := 2; 2 + 1 x ",
10907 "var x := 2; x + x 1 ",
10908 "var x := 2; x + 1 x ",
10909 "var x := 2; var y := 3; 2 + x y ",
10910 "var x := 2; var y := 3; 2 + y x ",
10911 "var x := 2; var y := 3; x + x y ",
10912 "var x := 2; var y := 3; x + y x ",
10915 "var x := 2; x ~{x; 1; 2} ",
10916 "var x := 2; 1 ~{x; 1; 2} ",
10917 "var x := 2; ~{x; 1; 2} x ",
10918 "var x := 2; ~{x; 1; 2} 1 ",
10921 "var x := 2; x ~(x; 1; 2) ",
10922 "var x := 2; 1 ~(x; 1; 2) ",
10923 "var x := 2; ~(x; 1; 2) x ",
10924 "var x := 2; ~(x; 1; 2) 1 ",
10925 "var x := 2; (x + 1) ~{x; 1; 2} ",
10926 "var x := 2; (1 + x) ~{x; 1; 2} ",
10927 "var x := 2; ~{x; 1; 2} (x + 1) ",
10928 "var x := 2; ~{x; 1; 2} (1 + x) ",
10929 "var x := 2; x + 1 ~{x; 1; 2} ",
10930 "var x := 2; 1 + x ~{x; 1; 2} ",
10931 "var x := 2; ~{x; 1; 2} x + 1 ",
10932 "var x := 2; ~{x; 1; 2} 1 + x ",
10935 "var x := 2; x ~(x, 1, 2) ",
10936 "var x := 2; 1 ~(x, 1, 2) ",
10937 "var x := 2; ~(x, 1, 2) x ",
10938 "var x := 2; ~(x, 1, 2) 1 ",
10939 "var x := 2; 1 switch { case x > 1 : 1; case x < 3 : 2; default : 3; } ",
10940 "var x := 2; x switch { case x > 1 : 1; case x < 3 : 2; default : 3; } ",
10941 "var x := 2; switch { case x > 1 : 1; case x < 3 : 2; default : 3; } x ",
10942 "var x := 2; 1 [*] { case x > 1 : 1; case x < 3 : 2; } ",
10943 "var x := 2; x [*] { case x > 1 : 1; case x < 3 : 2; } ",
10944 "var x := 2; [*] { case x > 1 : 1; case x < 3 : 2; } x ",
10945 "var x := 2; (x + 1) switch { case x > 1 : 1; case x < 3 : 2; default : 3; } ",
10946 "var x := 2; switch { case x > 1 : 1; case x < 3 : 2; default : 3; } (x + 1) ",
10947 "var x := 2; (x + 1) [*] { case x > 1 : 1; case x < 3 : 2; } ",
10948 "var x := 2; [*] { case x > 1 : 1; case x < 3 : 2; } (x + 1) ",
10949 "var x := 2; for (var i := 0; i < 2; i += 1) { return [i] 1; } ",
10950 "var x := 2; for (var i := 0; i < 2; i += 1) { 1 return [i]; } ",
10951 "var x := 2; for (var i := 0; i < 2; i += 1) { return [i] i; } ",
10952 "var x := 2; for (var i := 0; i < 2; i += 1) { i return [i]; } ",
10953 "var x := 2; for (var i := 0; i < 2; i += 1) { return [i] 1 + i; } ",
10954 "var x := 2; for (var i := 0; i < 2; i += 1) { 1 + i return [i]; } ",
10955 "var x := 2; for (var i := 0; i < 2; i += 1) { return [i] i + 1; } ",
10956 "var x := 2; for (var i := 0; i < 2; i += 1) { i + 1 return [i]; } ",
10957 "var x := 2; for (var i := 0; i < 2; i += 1) { 1 if (i > 3) return [i]; } ",
10958 "var x := 2; for (var i := 0; i < 2; i += 1) { if (i > 3) return [i] 1; } ",
10959 "var x := 2; for (var i := 0; i < 2; i += 1) { x if (i > 3) return [i]; } ",
10960 "var x := 2; for (var i := 0; i < 2; i += 1) { if (i > 3) return [i] x; } ",
10961 "var x := 2; for (var i := 0; i < 2; i += 1) { x + 1 if (i > 3) return [i]; }",
10962 "var x := 2; for (var i := 0; i < 2; i += 1) { if (i > 3) return [i] x + 1; }",
10963 "var x := 2; for (var i := 0; i < 2; i += 1) { 1 + x if (i > 3) return [i]; }",
10964 "var x := 2; for (var i := 0; i < 2; i += 1) { if (i > 3) return [i] 1 + x; }",
10965 "var x := 2; for (var i := 0; i < 2; i += 1) { 1 for (var j := 0; j < 2; j += 1){} } ",
10966 "var x := 2; for (var i := 0; i < 2; i += 1) { for (var j := 0; j < 2; j += 1){} 1 } ",
10967 "var x := 2; for (var i := 0; i < 2; i += 1) { x for (var j := 0; j < 2; j += 1){} } ",
10968 "var x := 2; for (var i := 0; i < 2; i += 1) { for (var j := 0; j < 2; j += 1){} x } ",
10969 "var x := 2; for (var i := 0; i < 2; i += 1) { x + 1 for (var j := 0; j < 2; j += 1){} } ",
10970 "var x := 2; for (var i := 0; i < 2; i += 1) { for (var j := 0; j < 2; j += 1){} x + 1 } ",
10971 "var x := 2; for (var i := 0; i < 2; i += 1) { 1 + x for (var j := 0; j < 2; j += 1){} } ",
10972 "var x := 2; for (var i := 0; i < 2; i += 1) { for (var j := 0; j < 2; j += 1){} 1 + x } "
10975 const std::size_t expressions_size =
sizeof(invalid_expressions) /
sizeof(std::string);
10977 static const std::size_t compile_options =
10978 settings_t::e_replacer +
10979 settings_t::e_joiner +
10980 settings_t::e_numeric_check +
10981 settings_t::e_bracket_check +
10982 settings_t::e_sequence_check +
10983 settings_t::e_strength_reduction;
10985 const settings_t settings(compile_options);
10986 parser_t parser(settings);
10992 symbol_table_t symbol_table;
10993 symbol_table.add_variable(
"a", a);
10994 symbol_table.add_variable(
"b", b);
10995 symbol_table.add_variable(
"c", c);
10997 bool error_found =
false;
10999 for (std::size_t e = 0; e < expressions_size; ++e)
11001 const std::string& expression_string = invalid_expressions[e];
11003 expression_t expression;
11004 expression.register_symbol_table(symbol_table);
11006 if (parser.compile(expression_string,expression))
11008 printf(
"run_test21() - Expected compilation error for expression: %s\n",
11009 expression_string.c_str());
11010 error_found =
true;
11014 expression.value();
11024 const std::string expressions[] =
11027 "var x := 2; sum(if (x > 1) { vv8 } else { vv7 }) == sum(vv8)",
11028 "var x := 2; sum(if (x > 1) { vv8 + 1 } else { vv8 + 2 }) == sum(vv8 + 1)",
11031 "var v[8] := {1,1,1,1,1,1,1,1}; vv8 += 1; sgn(vv8) == v",
11032 "abs(-1 * vv8) == vv8",
11033 "abs(vv8 * -1) == vv8",
11034 "var x := -1; abs(x * vv8) == vv8",
11035 "var x := -1; abs(vv8 * x) == vv8",
11036 "var x := 1; abs(-x * vv8) == vv8",
11037 "var x := 1; abs(vv8 * -x) == vv8",
11038 "var x := -2; abs(x * vv8) == 2vv8",
11039 "var x := -2; abs(vv8 * x) == 2vv8",
11040 "var x := 2; abs(-x * vv8) == 2vv8",
11041 "var x := 2; abs(vv8 * -x) == 2vv8",
11042 "var x := -2; abs(x * vv8) == -x * vv8",
11043 "var x := -2; abs(vv8 * x) == -x * vv8",
11044 "var x := 2; abs(-x * vv8) == x * vv8",
11045 "var x := 2; abs(vv8 * -x) == x * vv8",
11046 "var x := -2; abs(x * vv8) == vv8 * -x",
11047 "var x := -2; abs(vv8 * x) == vv8 * -x",
11048 "var x := 2; abs(-x * vv8) == vv8 * x",
11049 "var x := 2; abs(vv8 * -x) == vv8 * x",
11050 "var x := -2; abs(x * vv8) == abs(x) * vv8",
11051 "var x := -2; abs(vv8 * x) == abs(x) * vv8",
11052 "var x := -2; abs(x * vv8) == vv8 * abs(x)",
11053 "var x := -2; abs(vv8 * x) == vv8 * abs(x)",
11056 "var v[8] := {1,2,3,4,5,6,7,8}; var x := 1; (vv8 + x) == v",
11057 "var v[7] := {1,2,3,4,5,6,7}; var x := 1; (vv8 + x) == v",
11058 "var v[6] := {1,2,3,4,5,6}; var x := 1; (vv8 + x) == v",
11059 "var v[5] := {1,2,3,4,5}; var x := 1; (vv8 + x) == v",
11060 "var v[4] := {1,2,3,4}; var x := 1; (vv8 + x) == v",
11061 "var v[3] := {1,2,3}; var x := 1; (vv8 + x) == v",
11062 "var v[2] := {1,2}; var x := 1; (vv8 + x) == v",
11063 "var v[1] := {1}; var x := 1; (vv8 + x) == v",
11064 "var v[8] := {1,2,3,4,5,6,7,8}; var x := 1; (x + vv8) == v",
11065 "var v[7] := {1,2,3,4,5,6,7}; var x := 1; (x + vv8) == v",
11066 "var v[6] := {1,2,3,4,5,6}; var x := 1; (x + vv8) == v",
11067 "var v[5] := {1,2,3,4,5}; var x := 1; (x + vv8) == v",
11068 "var v[4] := {1,2,3,4}; var x := 1; (x + vv8) == v",
11069 "var v[3] := {1,2,3}; var x := 1; (x + vv8) == v",
11070 "var v[2] := {1,2}; var x := 1; (x + vv8) == v",
11071 "var v[1] := {1}; var x := 1; (x + vv8) == v",
11074 "var v[8] := [-1]; v < vv8",
11075 "var v[7] := [-1]; v < vv8",
11076 "var v[3] := [-1]; v < vv8",
11077 "var v[2] := [-1]; v < vv8",
11078 "var v[1] := [-1]; v < vv8",
11081 "var vv8sum := sum(vv8); vv8 += (vv8 + 1); sum(vv8) == (2 * sum(vv8sum) + vv8[] * 1)",
11082 "var vv8sum := sum(vv8); vv8 += (vv8 - 1); sum(vv8) == (2 * sum(vv8sum) - vv8[] * 1)",
11083 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 + x); sum(vv8) == (2 * sum(vv8sum) + vv8[] * 1)",
11084 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 - x); sum(vv8) == (2 * sum(vv8sum) - vv8[] * 1)",
11085 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 + (vv8 + x)); sum(vv8) == (3 * sum(vv8sum) + vv8[] * 1)",
11086 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 + (vv8 - x)); sum(vv8) == (3 * sum(vv8sum) - vv8[] * 1)",
11087 "var vv8sum := sum(vv8); vv8 += (vv8 += 1); sum(vv8) == (2 * vv8sum + 2 * (vv8[] * 1))",
11088 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 += x); sum(vv8) == (2 * vv8sum + 2 * (vv8[] * x))",
11089 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 -= x); sum(vv8) == (2 * vv8sum - 2 * (vv8[] * x))",
11090 "var vv8sum := sum(vv8); vv8 += (vv8 + 1); sum(vv8) == (2 * sum(vv8sum) + vv8[] * 1);",
11091 "var vv8sum := sum(vv8); vv8 += (vv8 - 1); sum(vv8) == (2 * sum(vv8sum) - vv8[] * 1);",
11092 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 + x); sum(vv8) == (2 * sum(vv8sum) + vv8[] * 1);",
11093 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 - x); sum(vv8) == (2 * sum(vv8sum) - vv8[] * 1);",
11094 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 + (vv8 + x)); sum(vv8) == (3 * sum(vv8sum) + vv8[] * 1);",
11095 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 + (vv8 - x)); sum(vv8) == (3 * sum(vv8sum) - vv8[] * 1);",
11096 "var vv8sum := sum(vv8); vv8 += (vv8 += 1); sum(vv8) == (2 * vv8sum + 2 * (vv8[] * 1));",
11097 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 += x); sum(vv8) == (2 * vv8sum + 2 * (vv8[] * x));",
11098 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 -= x); sum(vv8) == (2 * vv8sum - 2 * (vv8[] * x));",
11099 "var vv3sum := sum(vv3); vv3 += (vv3 + 1); sum(vv3) == (2 * sum(vv3sum) + vv3[] * 1)",
11100 "var vv3sum := sum(vv3); vv3 += (vv3 - 1); sum(vv3) == (2 * sum(vv3sum) - vv3[] * 1)",
11101 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 + x); sum(vv3) == (2 * sum(vv3sum) + vv3[] * 1)",
11102 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 - x); sum(vv3) == (2 * sum(vv3sum) - vv3[] * 1)",
11103 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 + (vv3 + x)); sum(vv3) == (3 * sum(vv3sum) + vv3[] * 1)",
11104 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 + (vv3 - x)); sum(vv3) == (3 * sum(vv3sum) - vv3[] * 1)",
11105 "var vv3sum := sum(vv3); vv3 += (vv3 += 1); sum(vv3) == (2 * vv3sum + 2 * (vv3[] * 1))",
11106 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 += x); sum(vv3) == (2 * vv3sum + 2 * (vv3[] * x))",
11107 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 -= x); sum(vv3) == (2 * vv3sum - 2 * (vv3[] * x))",
11108 "var vv3sum := sum(vv3); vv3 += (vv3 + 1); sum(vv3) == (2 * sum(vv3sum) + vv3[] * 1);",
11109 "var vv3sum := sum(vv3); vv3 += (vv3 - 1); sum(vv3) == (2 * sum(vv3sum) - vv3[] * 1);",
11110 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 + x); sum(vv3) == (2 * sum(vv3sum) + vv3[] * 1);",
11111 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 - x); sum(vv3) == (2 * sum(vv3sum) - vv3[] * 1);",
11112 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 + (vv3 + x)); sum(vv3) == (3 * sum(vv3sum) + vv3[] * 1);",
11113 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 + (vv3 - x)); sum(vv3) == (3 * sum(vv3sum) - vv3[] * 1);",
11114 "var vv3sum := sum(vv3); vv3 += (vv3 += 1); sum(vv3) == (2 * vv3sum + 2 * (vv3[] * 1));",
11115 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 += x); sum(vv3) == (2 * vv3sum + 2 * (vv3[] * x));",
11116 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 -= x); sum(vv3) == (2 * vv3sum - 2 * (vv3[] * x));",
11119 "var vv8sum := sum(vv8); vv8 += 1; sum(vv8) == (vv8sum + vv8[] * 1)",
11120 "var vv7sum := sum(vv7); vv7 += 1; sum(vv7) == (vv7sum + vv7[] * 1)",
11121 "var vv6sum := sum(vv6); vv6 += 1; sum(vv6) == (vv6sum + vv6[] * 1)",
11122 "var vv5sum := sum(vv5); vv5 += 1; sum(vv5) == (vv5sum + vv5[] * 1)",
11123 "var vv4sum := sum(vv4); vv4 += 1; sum(vv4) == (vv4sum + vv4[] * 1)",
11124 "var vv3sum := sum(vv3); vv3 += 1; sum(vv3) == (vv3sum + vv3[] * 1)",
11125 "var vv2sum := sum(vv2); vv2 += 1; sum(vv2) == (vv2sum + vv2[] * 1)",
11126 "var vv1sum := sum(vv1); vv1 += 1; sum(vv1) == (vv1sum + vv1[] * 1)",
11127 "var vv8sum := sum(vv8); var x := 7; vv8 += (x - 1) / 2; sum(vv8) == (vv8sum + vv8[] * 3)",
11128 "var vv7sum := sum(vv7); var x := 7; vv7 += (x - 1) / 2; sum(vv7) == (vv7sum + vv7[] * 3)",
11129 "var vv6sum := sum(vv6); var x := 7; vv6 += (x - 1) / 2; sum(vv6) == (vv6sum + vv6[] * 3)",
11130 "var vv5sum := sum(vv5); var x := 7; vv5 += (x - 1) / 2; sum(vv5) == (vv5sum + vv5[] * 3)",
11131 "var vv4sum := sum(vv4); var x := 7; vv4 += (x - 1) / 2; sum(vv4) == (vv4sum + vv4[] * 3)",
11132 "var vv3sum := sum(vv3); var x := 7; vv3 += (x - 1) / 2; sum(vv3) == (vv3sum + vv3[] * 3)",
11133 "var vv2sum := sum(vv2); var x := 7; vv2 += (x - 1) / 2; sum(vv2) == (vv2sum + vv2[] * 3)",
11134 "var vv1sum := sum(vv1); var x := 7; vv1 += (x - 1) / 2; sum(vv1) == (vv1sum + vv1[] * 3)",
11137 "var v[8] := [-1]; vv8 := v; sum(vv8) == (-1 * 8 + 0)",
11138 "var v[7] := [-1]; vv8 := v; sum(vv8) == (-1 * 7 + (7))",
11139 "var v[6] := [-1]; vv8 := v; sum(vv8) == (-1 * 6 + (6+7))",
11140 "var v[5] := [-1]; vv8 := v; sum(vv8) == (-1 * 5 + (5+6+7))",
11141 "var v[4] := [-1]; vv8 := v; sum(vv8) == (-1 * 4 + (4+5+6+7))",
11142 "var v[3] := [-1]; vv8 := v; sum(vv8) == (-1 * 3 + (3+4+5+6+7))",
11143 "var v[2] := [-1]; vv8 := v; sum(vv8) == (-1 * 2 + (2+3+4+5+6+7))",
11144 "var v[1] := [-1]; vv8 := v; sum(vv8) == (-1 * 1 + (1+2+3+4+5+6+7))",
11145 "var v[8] := [-1]; vv8 := v; var x[8] := { -1, -1, -1, -1, -1, -1, -1, -1 }; x == vv8",
11146 "var v[7] := [-1]; vv8 := v; var x[8] := { -1, -1, -1, -1, -1, -1, -1, 7 }; x == vv8",
11147 "var v[6] := [-1]; vv8 := v; var x[8] := { -1, -1, -1, -1, -1, -1, 6, 7 }; x == vv8",
11148 "var v[5] := [-1]; vv8 := v; var x[8] := { -1, -1, -1, -1, -1, 5, 6, 7 }; x == vv8",
11149 "var v[4] := [-1]; vv8 := v; var x[8] := { -1, -1, -1, -1, 4, 5, 6, 7 }; x == vv8",
11150 "var v[3] := [-1]; vv8 := v; var x[8] := { -1, -1, -1, 3, 4, 5, 6, 7 }; x == vv8",
11151 "var v[2] := [-1]; vv8 := v; var x[8] := { -1, -1, 2, 3, 4, 5, 6, 7 }; x == vv8",
11152 "var v[1] := [-1]; vv8 := v; var x[8] := { -1, 1, 2, 3, 4, 5, 6, 7 }; x == vv8",
11153 "var v[3] := [-1]; vv3 := v; sum(vv3) == (-1 * 3 + (0))",
11154 "var v[2] := [-1]; vv3 := v; sum(vv3) == (-1 * 2 + (2))",
11155 "var v[1] := [-1]; vv3 := v; sum(vv3) == (-1 * 1 + (1+2))",
11156 "var v[3] := [-1]; vv3 := v; var x[3] := { -1, -1, -1}; x == vv3",
11157 "var v[2] := [-1]; vv3 := v; var x[3] := { -1, -1, 2}; x == vv3",
11158 "var v[1] := [-1]; vv3 := v; var x[3] := { -1, 1, 2}; x == vv3",
11159 "vv8 := vv7; sum(vv8) == (sum(vv7) + 7)",
11160 "vv8 := vv6; sum(vv8) == (sum(vv6) + 6+ 7)",
11161 "vv8 := vv5; sum(vv8) == (sum(vv5) + 5 + 6 + 7)",
11162 "vv8 := vv4; sum(vv8) == (sum(vv4) + 4 + 5 + 6 + 7)",
11163 "vv8 := vv3; sum(vv8) == (sum(vv3) + 3 + 4 + 5 + 6 + 7)",
11164 "vv8 := vv2; sum(vv8) == (sum(vv2) + 2 + 3 + 4 + 5 + 6 + 7)",
11165 "vv8 := vv1; sum(vv8) == (sum(vv1) + 1 + 2 + 3 + 4 + 5 + 6 + 7)",
11166 "vv8 := vv7 + vv7; sum(vv8) == (2 * sum(vv7) + 7)",
11167 "vv8 := vv6 + vv6; sum(vv8) == (2 * sum(vv6) + 6+ 7)",
11168 "vv8 := vv5 + vv5; sum(vv8) == (2 * sum(vv5) + 5 + 6 + 7)",
11169 "vv8 := vv4 + vv4; sum(vv8) == (2 * sum(vv4) + 4 + 5 + 6 + 7)",
11170 "vv8 := vv3 + vv3; sum(vv8) == (2 * sum(vv3) + 3 + 4 + 5 + 6 + 7)",
11171 "vv8 := vv2 + vv2; sum(vv8) == (2 * sum(vv2) + 2 + 3 + 4 + 5 + 6 + 7)",
11172 "vv8 := vv1 + vv1; sum(vv8) == (2 * sum(vv1) + 1 + 2 + 3 + 4 + 5 + 6 + 7)",
11175 "var x := 3; vv8 := 2*x+1; sum(vv8) == (vv8[] * 7)",
11176 "var x := 3; vv7 := 2*x+1; sum(vv7) == (vv7[] * 7)",
11177 "var x := 3; vv6 := 2*x+1; sum(vv6) == (vv6[] * 7)",
11178 "var x := 3; vv5 := 2*x+1; sum(vv5) == (vv5[] * 7)",
11179 "var x := 3; vv4 := 2*x+1; sum(vv4) == (vv4[] * 7)",
11180 "var x := 3; vv3 := 2*x+1; sum(vv3) == (vv3[] * 7)",
11181 "var x := 3; vv2 := 2*x+1; sum(vv2) == (vv2[] * 7)",
11182 "var x := 3; vv1 := 2*x+1; sum(vv1) == (vv1[] * 7)",
11183 "var x[3] := [3]; vv8 := 2x[0]+1; sum(vv8) == (vv8[] * 7)",
11184 "var x[3] := [3]; vv7 := 2x[1]+1; sum(vv7) == (vv7[] * 7)",
11185 "var x[3] := [3]; vv6 := 2x[2]+1; sum(vv6) == (vv6[] * 7)",
11186 "var x[3] := [3]; vv5 := 2x[0]+1; sum(vv5) == (vv5[] * 7)",
11187 "var x[3] := [3]; vv4 := 2x[1]+1; sum(vv4) == (vv4[] * 7)",
11188 "var x[3] := [3]; vv3 := 2x[2]+1; sum(vv3) == (vv3[] * 7)",
11189 "var x[3] := [3]; vv2 := 2x[0]+1; sum(vv2) == (vv2[] * 7)",
11190 "var x[3] := [3]; vv1 := 2x[1]+1; sum(vv1) == (vv1[] * 7)",
11191 "var x[3] := [3]; var y[3] := [1]; vv8 := 2x[0]+y[0]; sum(vv8) == (vv8[] * 7)",
11192 "var x[3] := [3]; var y[3] := [1]; vv7 := 2x[1]+y[1]; sum(vv7) == (vv7[] * 7)",
11193 "var x[3] := [3]; var y[3] := [1]; vv6 := 2x[2]+y[2]; sum(vv6) == (vv6[] * 7)",
11194 "var x[3] := [3]; var y[3] := [1]; vv5 := 2x[0]+y[0]; sum(vv5) == (vv5[] * 7)",
11195 "var x[3] := [3]; var y[3] := [1]; vv4 := 2x[1]+y[1]; sum(vv4) == (vv4[] * 7)",
11196 "var x[3] := [3]; var y[3] := [1]; vv3 := 2x[2]+y[2]; sum(vv3) == (vv3[] * 7)",
11197 "var x[3] := [3]; var y[3] := [1]; vv2 := 2x[0]+y[0]; sum(vv2) == (vv2[] * 7)",
11198 "var x[3] := [3]; var y[3] := [1]; vv1 := 2x[1]+y[1]; sum(vv1) == (vv1[] * 7)",
11201 "var v[8] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 8 + 0)",
11202 "var v[7] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 7 + (7))",
11203 "var v[6] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 6 + (6+7))",
11204 "var v[5] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 5 + (5+6+7))",
11205 "var v[4] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 4 + (4+5+6+7))",
11206 "var v[3] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 3 + (3+4+5+6+7))",
11207 "var v[2] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 2 + (2+3+4+5+6+7))",
11208 "var v[1] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 1 + (1+2+3+4+5+6+7))",
11209 "var v[8] := [-1]; vv8 <=> v; var x[8] := { -1, -1, -1, -1, -1, -1, -1, -1 }; x == vv8",
11210 "var v[7] := [-1]; vv8 <=> v; var x[8] := { -1, -1, -1, -1, -1, -1, -1, 7 }; x == vv8",
11211 "var v[6] := [-1]; vv8 <=> v; var x[8] := { -1, -1, -1, -1, -1, -1, 6, 7 }; x == vv8",
11212 "var v[5] := [-1]; vv8 <=> v; var x[8] := { -1, -1, -1, -1, -1, 5, 6, 7 }; x == vv8",
11213 "var v[4] := [-1]; vv8 <=> v; var x[8] := { -1, -1, -1, -1, 4, 5, 6, 7 }; x == vv8",
11214 "var v[3] := [-1]; vv8 <=> v; var x[8] := { -1, -1, -1, 3, 4, 5, 6, 7 }; x == vv8",
11215 "var v[2] := [-1]; vv8 <=> v; var x[8] := { -1, -1, 2, 3, 4, 5, 6, 7 }; x == vv8",
11216 "var v[1] := [-1]; vv8 <=> v; var x[8] := { -1, 1, 2, 3, 4, 5, 6, 7 }; x == vv8",
11217 "var v[3] := [-1]; vv3 <=> v; sum(vv3) == (-1 * 3 + (0))",
11218 "var v[2] := [-1]; vv3 <=> v; sum(vv3) == (-1 * 2 + (2))",
11219 "var v[1] := [-1]; vv3 <=> v; sum(vv3) == (-1 * 1 + (1+2))",
11220 "var v[3] := [-1]; vv3 <=> v; var x[3] := { -1, -1, -1}; x == vv3",
11221 "var v[2] := [-1]; vv3 <=> v; var x[3] := { -1, -1, 2}; x == vv3",
11222 "var v[1] := [-1]; vv3 <=> v; var x[3] := { -1, 1, 2}; x == vv3",
11227 "vv8[vv8[] - 1] == vv8[] - 1",
11228 "var vec_sum := 0; for (var i := 0; i < vv8[]; i +=1) { vec_sum += vv8[i]; }; vec_sum == (vv8[] - 1) * vv8[] / 2",
11229 "var vec_sum := 0; for (var i := 0; i < vv8[]; i +=1) { vec_sum += vv8[2i / 2]; }; vec_sum == (vv8[] - 1) * vv8[] / 2",
11230 "var x:= 1; var y:= 1; (vv8 + x)[y / x] == 2",
11231 "var x:= 1; var y:= 1; (vv8 + x - y)[y / x] == 1",
11232 "var x:= 1; (x + vv8)[1] == 2",
11233 "var x:= 1; var y:= 1; (x + vv8)[y / x] == 2",
11234 "var x:= 1; var y:= 1; (x + vv8 - y)[y / x] == 1",
11235 "var successes := 0; for(var i:=0; i < vv8[]; i += 1) { successes += (vv8 + 1)[i] == i + 1; }; successes == vv8[]",
11236 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (vv8 + x)[i] == i + x; }; successes == vv8[]",
11237 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (x + vv8)[i] == i + x; }; successes == vv8[]",
11238 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (vv8 + x)[i / x] == i + x; }; successes == vv8[]",
11239 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (x + vv8)[i / x] == i + x; }; successes == vv8[]",
11240 "(1 + vv8)[1] == 2",
11241 "(vv8 + 1)[1] == 2",
11242 "(vv8 + 1)[2 / 2] == 2",
11243 "(1 + vv8)[2 / 2] == 2",
11244 "var x:= 1; (x + vv8)[1] == 2",
11245 "var x:= 1; (vv8 + x)[1] == 2",
11246 "var x:= 1; var y:= 1; (x + vv8)[y] == 2",
11247 "var x:= 1; var y:= 1; (vv8 + x)[y] == 2",
11248 "var x:= 1; var y:= 1; (vv8 + x)[y / x] == 2",
11249 "var x:= 1; var y:= 1; (vv8 + x - y)[y / x] == 1",
11250 "var x:= 1; var y:= 1; (x + vv8)[y / x] == 2",
11251 "var x:= 1; var y:= 1; (x + vv8 - y)[y / x] == 1",
11252 "(abs(vv8 + 1))[1] == 2",
11253 "(abs(1 + vv8))[1] == 2",
11254 "(abs(vv8 + 1))[2 / 2] == 2",
11255 "(abs(1 + vv8))[2 / 2] == 2",
11256 "(abs(vv8 + 1)/2)[1] == 1",
11257 "(abs(1 + vv8)/2)[1] == 1",
11258 "(abs(vv8 + 1)/2)[2 / 2] == 1",
11259 "(abs(1 + vv8)/2)[2 / 2] == 1",
11260 "(abs(abs(vv8 + 1)) - 1)[1] == 1",
11261 "(abs(2 * abs(vv8 + 1)) - 1)[1] == 3",
11262 "(abs(abs(vv8 + 1) * 2) - 1)[1] == 3",
11263 "(abs(2abs(vv8 + 1)) - 1)[1] == 3",
11264 "(abs(abs(vv8 + 1)2) - 1)[1] == 3",
11265 "var x:= 1; (abs(x + vv8))[1] == 2",
11266 "var x:= 1; (abs(vv8 + x))[1] == 2",
11267 "var x:= 1; var y:= 1; (abs(x + vv8))[y] == 2",
11268 "var x:= 1; var y:= 1; (abs(vv8 + x))[y] == 2",
11269 "var x:= 1; var y:= 1; (abs(vv8 + x))[y / x] == 2",
11270 "var x:= 1; var y:= 1; (abs(vv8 + x - y))[y / x] == 1",
11271 "var x:= 1; var y:= 1; (abs(x + vv8))[y / x] == 2",
11272 "var x:= 1; var y:= 1; (abs(x + vv8 - y))[y / x] == 1",
11273 "var x:= 1; (abs(x + vv8)/2)[1] == 1",
11274 "var x:= 1; (abs(vv8 + x)/2)[1] == 1",
11275 "var x:= 1; var y:= 1; (abs(x + vv8)/2)[y] == 1",
11276 "var x:= 1; var y:= 1; (abs(vv8 + x)/2)[y] == 1",
11277 "var x:= 1; var y:= 1; (abs(vv8 + x)/2)[y / x] == 1",
11278 "var x:= 1; var y:= 1; (abs(x + vv8)/2)[y / x] == 1",
11279 "var x := 1; (abs(abs(vv8 + x)) - x)[1] == 1",
11280 "var x := 1; (abs(2 * abs(vv8 + x)) - x)[1] == 3",
11281 "var x := 1; (abs(abs(vv8 + x) * 2) - x)[1] == 3",
11282 "var x := 1; (abs(2abs(vv8 + x)) - x)[1] == 3",
11283 "var x := 1; (abs(abs(vv8 + x)2) - x)[1] == 3",
11284 "var x := 1; var y := 1; (abs(abs(vv8 + x)) - x)[y] == 1",
11285 "var x := 1; var y := 1; (abs(2 * abs(vv8 + x)) - x)[y] == 3",
11286 "var x := 1; var y := 1; (abs(abs(vv8 + x) * 2) - x)[y] == 3",
11287 "var x := 1; var y := 1; (abs(2abs(vv8 + x)) - x)[y] == 3",
11288 "var x := 1; var y := 1; (abs(abs(vv8 + x)2) - x)[y] == 3",
11289 "var x := 1; var y := 1; (abs(abs(vv8 + x)) - x)[x / y] == 1",
11290 "var x := 1; var y := 1; (abs(2 * abs(vv8 + x)) - x)[x / y] == 3",
11291 "var x := 1; var y := 1; (abs(abs(vv8 + x) * 2) - x)[x / y] == 3",
11292 "var x := 1; var y := 1; (abs(2abs(vv8 + x)) - x)[x / y] == 3",
11293 "var x := 1; var y := 1; (abs(abs(vv8 + x)2) - x)[x / y] == 3",
11294 "var successes := 0; for(var i:=0; i < vv8[]; i += 1) { successes += (vv8 + 1)[i] == i + 1; }; successes == vv8[]",
11295 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (vv8 + x)[i] == i + x; }; successes == vv8[]",
11296 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (x + vv8)[i] == i + x; }; successes == vv8[]",
11297 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (vv8 + x)[i / x] == i + x; }; successes == vv8[]",
11298 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (x + vv8)[i / x] == i + x; }; successes == vv8[]",
11299 "var successes := 0; for(var i:=0; i < vv8[]; i += 1) { successes += (abs(vv8 + 1))[i] == i + 1; }; successes == vv8[]",
11300 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (abs(vv8 + x))[i] == i + x; }; successes == vv8[]",
11301 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (abs(x + vv8))[i] == i + x; }; successes == vv8[]",
11302 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (abs(vv8 + x))[i / x] == i + x; }; successes == vv8[]",
11303 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (abs(x + vv8))[i / x] == i + x; }; successes == vv8[]",
11306 bool error_found =
false;
11308 for (std::size_t e = 0; e <
sizeof(expressions)/
sizeof(std::string); ++e)
11310 T vs8[] = { 0, 1, 2, 3, 4, 5, 6, 7 };
11311 T vs7[] = { 0, 1, 2, 3, 4, 5, 6 };
11312 T vs6[] = { 0, 1, 2, 3, 4, 5 };
11313 T vs5[] = { 0, 1, 2, 3, 4 };
11314 T vs4[] = { 0, 1, 2, 3 };
11315 T vs3[] = { 0, 1, 2 };
11316 T vs2[] = { 0, 1 };
11328 symbol_table_t symbol_table;
11330 symbol_table.add_vector(
"vv1", vv1);
11331 symbol_table.add_vector(
"vv2", vv2);
11332 symbol_table.add_vector(
"vv3", vv3);
11333 symbol_table.add_vector(
"vv4", vv4);
11334 symbol_table.add_vector(
"vv5", vv5);
11335 symbol_table.add_vector(
"vv6", vv6);
11336 symbol_table.add_vector(
"vv7", vv7);
11337 symbol_table.add_vector(
"vv8", vv8);
11341 const std::string& expression_string = expressions[e];
11342 expression_t expression;
11343 expression.register_symbol_table(symbol_table);
11345 if (!parser.compile(expression_string,expression))
11347 printf(
"run_test21() - vector_veiw expression compilation error. Expression: %s\n",
11348 expression_string.c_str());
11350 for (std::size_t i = 0; i < parser.error_count(); ++i)
11352 error_type error = parser.get_error(i);
11355 printf(
"run_test21() - Exp[%02d] Error[%02d] Position: %02d line: %d column: %d Type: [%14s] Msg: %s\n",
11356 static_cast<unsigned int>(e),
11357 static_cast<unsigned int>(i),
11358 static_cast<unsigned int>(error.token.position),
11359 static_cast<unsigned int>(error.line_no),
11360 static_cast<unsigned int>(error.column_no),
11362 error.diagnostic.c_str());
11365 error_found =
true;
11370 const T result = expression.value();
11372 if (result != T(1.0))
11374 error_found =
true;
11376 printf(
"run_test21() - Error: Exp[%02d] Expression result: %5.3f expected: 1 expression: %s\n",
11377 static_cast<unsigned int>(e),
11378 static_cast<double>(result),
11379 expression_string.c_str());
11390 const std::string expressions[] =
11392 "vv0[] == vv0_size",
11393 "sum(vv0) == (vv0[] * (vv0[] + 1) / 2) and (vv0[] == vv0_size)",
11394 "(min(vv0) == 1) and (vv0[] == vv0_size)",
11395 "(max(vv0) == vv0[]) and (vv0[] == vv0_size)",
11396 "(avg(vv0) == (min(vv0) + max(vv0)) / 2) and (vv0[] == vv0_size)",
11397 "(sum(vv0 + 1) == (vv0[] * (vv0[] + 1) / 2 + (vv0[] * 1))) and (vv0[] == vv0_size)",
11398 "(sum(vv0 - 1) == (vv0[] * (vv0[] + 1) / 2 - (vv0[] * 1))) and (vv0[] == vv0_size)",
11399 "(sum(1 + vv0) == (vv0[] * (vv0[] + 1) / 2 + (vv0[] * 1))) and (vv0[] == vv0_size)",
11400 "(sum(-1 + vv0) == (vv0[] * (vv0[] + 1) / 2 - (vv0[] * 1))) and (vv0[] == vv0_size)",
11401 "var x:= 1; sum(vv0 + x) == (vv0[] * (vv0[] + 1) / 2 + (vv0[] * x)) and (vv0[] == vv0_size)",
11402 "var x:= 1; sum(vv0 - x) == (vv0[] * (vv0[] + 1) / 2 - (vv0[] * x)) and (vv0[] == vv0_size)",
11403 "sum(2vv0) == (vv0[] * (vv0[] + 1)) and (vv0[] == vv0_size)",
11404 "sum(vv0 * 2) == (vv0[] * (vv0[] + 1)) and (vv0[] == vv0_size)",
11405 "sum(2vv0 + 1) == (vv0[] * (vv0[] + 1) + vv0[]) and (vv0[] == vv0_size)",
11406 "sum(1 + 2vv0) == (vv0[] * (vv0[] + 1) + vv0[]) and (vv0[] == vv0_size)",
11407 "var x := 1; sum(2vv0 + x) == (vv0[] * (vv0[] + 1) + x * vv0[]) and (vv0[] == vv0_size)",
11408 "var x := 1; sum(x + 2vv0) == (vv0[] * (vv0[] + 1) + x * vv0[]) and (vv0[] == vv0_size)",
11409 "sum(vv0 += 1) == (vv0[] * (vv0[] + 1) / 2 + vv0[]) and (vv0[] == vv0_size)",
11410 "var x:= 1; sum(vv0 += x) == (vv0[] * (vv0[] + 1) / 2 + x * vv0[]) and (vv0[] == vv0_size)",
11411 "var x:= 1; sum(vv0 -= x) == (vv0[] * (vv0[] + 1 - 2x) / 2) and (vv0[] == vv0_size)",
11412 "(sum(2vv0) == 2 * sum(vv0)) and (vv0[] == vv0_size)",
11413 "(sum(vv0 * 2) == 2 * sum(vv0)) and (vv0[] == vv0_size)",
11414 "var x:= 1; sum(2vv0) == (vv0[] * (vv0[] + 1)) and (vv0[] == vv0_size)",
11415 "var x := 2; sum(if (x > 1) { vv0 } else { vv1 }) == sum(vv0)",
11416 "dot(2 * vv0,vv1 - 1) + dot(2 * vv0,vv1 - 1) == 2sum(2vv0 * (vv1 - 1))",
11417 "(0 * dot(2 * vv0,vv1 - 1)) == 0"
11420 bool error_found =
false;
11422 for (std::size_t e = 0; e <
sizeof(expressions) /
sizeof(std::string); ++e)
11424 const T vanilla[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
11425 const std::size_t vanilla_size =
sizeof(vanilla) /
sizeof(T);
11427 std::vector<T> v0(vanilla, vanilla + vanilla_size);
11430 std::vector<T> v1(vanilla, vanilla + vanilla_size);
11433 T vv0_size = T(0.0);
11435 symbol_table_t symbol_table;
11436 symbol_table.add_variable(
"vv0_size", vv0_size);
11437 symbol_table.add_vector (
"vv0" , vv0 );
11438 symbol_table.add_vector (
"vv1" , vv1 );
11443 symbol_table.add_package( vector_package );
11444 symbol_table.add_package( io_package );
11446 const std::string& expression_string = expressions[e];
11447 expression_t expression;
11448 expression.register_symbol_table(symbol_table);
11452 if (!parser.compile(expression_string, expression))
11454 printf(
"run_test21() - Error: %s\tExpression: %s\n",
11455 parser.error().c_str(),
11456 expression_string.c_str());
11458 for (std::size_t i = 0; i < parser.error_count(); ++i)
11460 error_type error = parser.get_error(i);
11463 printf(
"run_test21() - Exp[%02d] Error[%02d] Position: %02d line: %d column: %d Type: [%14s] Msg: %s\n",
11464 static_cast<unsigned int>(e),
11465 static_cast<unsigned int>(i),
11466 static_cast<unsigned int>(error.token.position),
11467 static_cast<unsigned int>(error.line_no),
11468 static_cast<unsigned int>(error.column_no),
11470 error.diagnostic.c_str());
11476 for (std::size_t i = 1; i <= vv0.
base_size(); ++i)
11478 v0.assign(vanilla, vanilla + vanilla_size);
11479 v1.assign(vanilla, vanilla + vanilla_size);
11484 const T result = expression.value();
11488 printf(
"run_test21() - Exp[%02d] Error: size: %d expected 1 instead got: %f expr:%s\n",
11489 static_cast<unsigned int>(e),
11490 static_cast<unsigned int>(i),
11491 static_cast<double>(result),
11492 expression_string.c_str());
11498 expression.value();
11502 expression.value();
11504 expression.release();
11514 const T vanilla[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
11515 const std::size_t vanilla_size =
sizeof(vanilla) /
sizeof(T);
11517 std::vector<T> v0(vanilla, vanilla + vanilla_size);
11518 std::vector<T> v1(vanilla, vanilla + vanilla_size);
11525 symbol_table_t symbol_table;
11526 symbol_table.add_vector(
"v", vv);
11531 symbol_table.add_package( vector_package );
11532 symbol_table.add_package( io_package );
11533 symbol_table.add_function(
"resize", vv_size_handler);
11535 expression_t expression;
11536 expression.register_symbol_table(symbol_table);
11540 const std::string resize_expression =
11541 " var vec_original_size := v[]; "
11542 " var success_count := 0; "
11544 " for (var i := 1; i <= vec_original_size; i += 1) "
11546 " if (resize(v,i) == true and v[] == i) "
11548 " success_count += 1; "
11552 " success_count == vec_original_size ";
11554 if (!parser.compile(resize_expression, expression))
11556 printf(
"run_test21() - Error: %s\tExpression: %s\n",
11557 parser.error().c_str(),
11558 resize_expression.c_str());
11560 for (std::size_t i = 0; i < parser.error_count(); ++i)
11562 error_type error = parser.get_error(i);
11565 printf(
"run_test21() - Error[%02d] Position: %02d line: %d column: %d Type: [%14s] Msg: %s\n",
11566 static_cast<unsigned int>(i),
11567 static_cast<unsigned int>(error.token.position),
11568 static_cast<unsigned int>(error.line_no),
11569 static_cast<unsigned int>(error.column_no),
11571 error.diagnostic.c_str());
11577 const T value0 = expression.value();
11579 if (expression.value() != T(1))
11581 printf(
"run_test21() - Error: Failed evaluation Expected 1 got: %f (1)\n",
static_cast<double>(value0));
11587 const T value1 = expression.value();
11589 if (expression.value() != T(1))
11591 printf(
"run_test21() - Error: Failed evaluation Expected 1 got: %f (1)\n",
static_cast<double>(value1));
11597 expression.release();
11601 const T vanilla[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
11602 const std::size_t vanilla_size =
sizeof(vanilla) /
sizeof(T);
11604 std::vector<T> v0(vanilla, vanilla + vanilla_size);
11605 std::vector<T> v1(vanilla, vanilla + vanilla_size);
11612 symbol_table_t symbol_table;
11613 symbol_table.add_vector(
"v", vv);
11618 symbol_table.add_package( vector_package );
11619 symbol_table.add_package( io_package );
11620 symbol_table.add_function(
"resize", vv_size_handler);
11622 expression_t expression;
11623 expression.register_symbol_table(symbol_table);
11627 const std::string resize_expression =
11628 " var vec_original_size := v[]; "
11629 " var failure_count := 0; "
11631 " for (var i := vec_original_size + 1; i <= 2 * vec_original_size; i += 1) "
11633 " if (resize(v,i) == false or v[] != i) "
11635 " failure_count += 1 "
11639 " failure_count == vec_original_size ";
11641 if (!parser.compile(resize_expression, expression))
11643 printf(
"run_test21() - Error: %s\tExpression: %s\n",
11644 parser.error().c_str(),
11645 resize_expression.c_str());
11647 for (std::size_t i = 0; i < parser.error_count(); ++i)
11649 error_type error = parser.get_error(i);
11652 printf(
"run_test21() - Error[%02d] Position: %02d line: %d column: %d Type: [%14s] Msg: %s\n",
11653 static_cast<unsigned int>(i),
11654 static_cast<unsigned int>(error.token.position),
11655 static_cast<unsigned int>(error.line_no),
11656 static_cast<unsigned int>(error.column_no),
11658 error.diagnostic.c_str());
11664 const T value0 = expression.value();
11666 if (expression.value() != T(1))
11668 printf(
"run_test21() - Error: Failed evaluation Expected 1 got: %f (2)\n",
static_cast<double>(value0));
11674 const T value1 = expression.value();
11676 if (expression.value() != T(1))
11678 printf(
"run_test21() - Error: Failed evaluation Expected 1 got: %f (2)\n",
static_cast<double>(value1));
11684 expression.release();
11706 bool result =
true;
11709 const std::string expressions[] =
11711 " assert(1 > 1); ",
11712 " assert(1 > 2, 'assert statement 2'); ",
11713 " assert(1 > 3, 'assert ' + 'statement 3'); ",
11714 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); ",
11715 " assert(1 > 5, 'assert ' + 'statement 5'); ",
11716 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); "
11719 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
11721 for (std::size_t i = 0; i < expression_count; ++i)
11723 expression_t expression;
11726 if (!parser.compile(expressions[i], expression))
11728 printf(
"run_test22() - Error: %s\tExpression: %s [1]\n",
11729 parser.error().c_str(),
11730 expressions[i].c_str());
11736 printf(
"run_test22() - Error: Expression is not null! expression: %s [1]\n",
11737 expressions[i].c_str());
11742 expression.value();
11747 const std::string expressions[] =
11749 " assert(1 > 1); 1 + 0 ",
11750 " assert(1 > 2, 'assert statement 2'); 2 + 0 ",
11751 " assert(1 > 3, 'assert ' + 'statement 3'); 3 + 0 ",
11752 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 4 + 0 ",
11753 " assert(1 > 5, 'assert ' + 'statement 5'); 5 + 0 ",
11754 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 6 + 0 "
11757 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
11759 for (std::size_t i = 0; i < expression_count; ++i)
11761 expression_t expression;
11764 if (!parser.compile(expressions[i], expression))
11766 printf(
"run_test22() - Error: %s\tExpression: %s [2]\n",
11767 parser.error().c_str(),
11768 expressions[i].c_str());
11774 printf(
"run_test22() - Error: Expression is not constant! expression: %s [2]\n",
11775 expressions[i].c_str());
11779 expression.value();
11784 const std::string expressions[] =
11787 " assert(1 > 2, 'assert statement 2'); "
11788 " assert(1 > 3, 'assert ' + 'statement 3'); "
11789 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); "
11790 " assert(1 > 5, 'assert ' + 'statement 5'); "
11791 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); "
11794 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
11796 for (std::size_t i = 0; i < expression_count; ++i)
11798 expression_t expression;
11804 parser.register_assert_check(handler);
11806 if (!parser.compile(expressions[i], expression))
11808 printf(
"run_test22() - Error: %s\tExpression: %s [3]\n",
11809 parser.error().c_str(),
11810 expressions[i].c_str());
11815 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
11818 type_sequence.push_back(et_t::e_assert);
11819 type_sequence.push_back(et_t::e_assert);
11820 type_sequence.push_back(et_t::e_assert);
11821 type_sequence.push_back(et_t::e_assert);
11822 type_sequence.push_back(et_t::e_assert);
11823 type_sequence.push_back(et_t::e_assert);
11827 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [3]\n",
11828 expressions[i].c_str());
11833 expression.value();
11837 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [3]\n",
11839 expressions[i].c_str());
11847 const std::string expressions[] =
11849 " assert(1 > 1); 1 ",
11850 " assert(1 > 2, 'assert statement 2'); 2 ",
11851 " assert(1 > 3, 'assert ' + 'statement 3'); 3 ",
11852 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 4 ",
11853 " assert(1 > 5, 'assert ' + 'statement 5'); 5 ",
11854 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 6 "
11857 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
11859 for (std::size_t i = 0; i < expression_count; ++i)
11861 expression_t expression;
11867 parser.register_assert_check(handler);
11869 if (!parser.compile(expressions[i], expression))
11871 printf(
"run_test22() - Error: %s\tExpression: %s [4]\n",
11872 parser.error().c_str(),
11873 expressions[i].c_str());
11878 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
11881 type_sequence.push_back(et_t::e_assert );
11882 type_sequence.push_back(et_t::e_literal);
11886 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [4]\n",
11887 expressions[i].c_str());
11892 expression.value();
11896 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [4]\n",
11898 expressions[i].c_str());
11906 const std::string expressions[] =
11908 " assert(1 > 1); 1 + 0 ",
11909 " assert(1 > 2, 'assert statement 2'); 2 + 0 ",
11910 " assert(1 > 3, 'assert ' + 'statement 3'); 3 + 0 ",
11911 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 4 + 0 ",
11912 " assert(1 > 5, 'assert ' + 'statement 5'); 5 + 0 ",
11913 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 6 + 0 "
11916 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
11918 for (std::size_t i = 0; i < expression_count; ++i)
11920 expression_t expression;
11926 parser.register_assert_check(handler);
11928 if (!parser.compile(expressions[i], expression))
11930 printf(
"run_test22() - Error: %s\tExpression: %s [5]\n",
11931 parser.error().c_str(),
11932 expressions[i].c_str());
11937 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
11940 type_sequence.push_back(et_t::e_assert );
11941 type_sequence.push_back(et_t::e_literal);
11945 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [5]\n",
11946 expressions[i].c_str());
11951 expression.value();
11955 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [5]\n",
11957 expressions[i].c_str());
11965 const std::string expressions[] =
11967 " assert(1 > 1); 'assert statement 0001' ",
11968 " assert(1 > 2, 'assert statement 2'); 'assert statement 0002' ",
11969 " assert(1 > 3, 'assert ' + 'statement 3'); 'assert statement 0003' ",
11970 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 'assert statement 0004' ",
11971 " assert(1 > 5, 'assert ' + 'statement 5'); 'assert statement 0005' ",
11972 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 'assert statement 0006' "
11975 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
11977 for (std::size_t i = 0; i < expression_count; ++i)
11979 expression_t expression;
11985 parser.register_assert_check(handler);
11987 if (!parser.compile(expressions[i], expression))
11989 printf(
"run_test22() - Error: %s\tExpression: %s [6]\n",
11990 parser.error().c_str(),
11991 expressions[i].c_str());
11996 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
11999 type_sequence.push_back(et_t::e_assert);
12000 type_sequence.push_back(et_t::e_string);
12004 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [6]\n",
12005 expressions[i].c_str());
12010 expression.value();
12014 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [6]\n",
12016 expressions[i].c_str());
12024 const std::string expressions[] =
12026 " assert(1 > 1); 'assert statement' + '0001' ",
12027 " assert(1 > 2, 'assert statement 2'); 'assert statement' + '0002' ",
12028 " assert(1 > 3, 'assert ' + 'statement 3'); 'assert statement' + '0003' ",
12029 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 'assert statement' + '0004' ",
12030 " assert(1 > 5, 'assert ' + 'statement 5'); 'assert statement' + '0005' ",
12031 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 'assert statement' + '0006' "
12034 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12036 for (std::size_t i = 0; i < expression_count; ++i)
12038 expression_t expression;
12044 parser.register_assert_check(handler);
12046 if (!parser.compile(expressions[i], expression))
12048 printf(
"run_test22() - Error: %s\tExpression: %s [7]\n",
12049 parser.error().c_str(),
12050 expressions[i].c_str());
12055 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12058 type_sequence.push_back(et_t::e_assert);
12059 type_sequence.push_back(et_t::e_string);
12063 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [7]\n",
12064 expressions[i].c_str());
12069 expression.value();
12073 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [7]\n",
12075 expressions[i].c_str());
12083 const std::string expressions[] =
12085 " assert(x > y); ",
12086 " assert(x > y, 'assert statement 2'); ",
12087 " assert(x > y, 'assert ' + 'statement 3'); ",
12088 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); ",
12089 " assert(x > y, 'assert ' + 'statement 5'); ",
12090 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); "
12093 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12095 for (std::size_t i = 0; i < expression_count; ++i)
12100 symbol_table_t symbol_table;
12101 expression_t expression;
12104 symbol_table.add_variable(
"x", x);
12105 symbol_table.add_variable(
"y", y);
12106 expression.register_symbol_table(symbol_table);
12108 if (!parser.compile(expressions[i], expression))
12110 printf(
"run_test22() - Error: %s\tExpression: %s [8]\n",
12111 parser.error().c_str(),
12112 expressions[i].c_str());
12118 printf(
"run_test22() - Error: Expression is not null! expression: %s [8]\n",
12119 expressions[i].c_str());
12124 expression.value();
12129 const std::string expressions[] =
12131 " assert(x > y); 1 + 0 ",
12132 " assert(x > y, 'assert statement 2'); 2 + 0 ",
12133 " assert(x > y, 'assert ' + 'statement 3'); 3 + 0 ",
12134 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); 4 + 0 ",
12135 " assert(x > y, 'assert ' + 'statement 5'); 5 + 0 ",
12136 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); 6 + 0 "
12139 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12141 for (std::size_t i = 0; i < expression_count; ++i)
12146 symbol_table_t symbol_table;
12147 expression_t expression;
12150 symbol_table.add_variable(
"x", x);
12151 symbol_table.add_variable(
"y", y);
12152 expression.register_symbol_table(symbol_table);
12154 if (!parser.compile(expressions[i], expression))
12156 printf(
"run_test22() - Error: %s\tExpression: %s [9]\n",
12157 parser.error().c_str(),
12158 expressions[i].c_str());
12164 printf(
"run_test22() - Error: Expression is not constant! expression: %s [9]\n",
12165 expressions[i].c_str());
12169 expression.value();
12174 const std::string expressions[] =
12177 " assert(x > y, 'assert statement 2'); "
12178 " assert(x > y, 'assert ' + 'statement 3'); "
12179 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); "
12180 " assert(x > y, 'assert ' + 'statement 5'); "
12181 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); "
12184 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12186 for (std::size_t i = 0; i < expression_count; ++i)
12191 symbol_table_t symbol_table;
12192 expression_t expression;
12198 symbol_table.add_variable(
"x", x);
12199 symbol_table.add_variable(
"y", y);
12200 expression.register_symbol_table(symbol_table);
12202 parser.register_assert_check(handler);
12204 if (!parser.compile(expressions[i], expression))
12206 printf(
"run_test22() - Error: %s\tExpression: %s [10]\n",
12207 parser.error().c_str(),
12208 expressions[i].c_str());
12213 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12216 type_sequence.push_back(et_t::e_assert);
12217 type_sequence.push_back(et_t::e_assert);
12218 type_sequence.push_back(et_t::e_assert);
12219 type_sequence.push_back(et_t::e_assert);
12220 type_sequence.push_back(et_t::e_assert);
12221 type_sequence.push_back(et_t::e_assert);
12225 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [10]\n",
12226 expressions[i].c_str());
12231 expression.value();
12235 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [10]\n",
12237 expressions[i].c_str());
12245 const std::string expressions[] =
12247 " assert(x > y); 1 ",
12248 " assert(x > y, 'assert statement 2'); 2 ",
12249 " assert(x > y, 'assert ' + 'statement 3'); 3 ",
12250 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); 4 ",
12251 " assert(x > y, 'assert ' + 'statement 5'); 5 ",
12252 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); 6 "
12255 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12257 for (std::size_t i = 0; i < expression_count; ++i)
12262 symbol_table_t symbol_table;
12263 expression_t expression;
12269 symbol_table.add_variable(
"x", x);
12270 symbol_table.add_variable(
"y", y);
12271 expression.register_symbol_table(symbol_table);
12273 parser.register_assert_check(handler);
12275 if (!parser.compile(expressions[i], expression))
12277 printf(
"run_test22() - Error: %s\tExpression: %s [11]\n",
12278 parser.error().c_str(),
12279 expressions[i].c_str());
12284 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12287 type_sequence.push_back(et_t::e_assert );
12288 type_sequence.push_back(et_t::e_literal);
12292 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [11]\n",
12293 expressions[i].c_str());
12298 expression.value();
12302 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [11]\n",
12304 expressions[i].c_str());
12313 const std::string expressions[] =
12315 " assert(x > y); 1 + 0 ",
12316 " assert(x > y, 'assert statement 2'); 2 + 0 ",
12317 " assert(x > y, 'assert ' + 'statement 3'); 3 + 0 ",
12318 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); 4 + 0 ",
12319 " assert(x > y, 'assert ' + 'statement 5'); 5 + 0 ",
12320 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); 6 + 0 "
12323 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12325 for (std::size_t i = 0; i < expression_count; ++i)
12330 symbol_table_t symbol_table;
12331 expression_t expression;
12337 symbol_table.add_variable(
"x", x);
12338 symbol_table.add_variable(
"y", y);
12339 expression.register_symbol_table(symbol_table);
12341 parser.register_assert_check(handler);
12343 if (!parser.compile(expressions[i], expression))
12345 printf(
"run_test22() - Error: %s\tExpression: %s [12]\n",
12346 parser.error().c_str(),
12347 expressions[i].c_str());
12352 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12355 type_sequence.push_back(et_t::e_assert );
12356 type_sequence.push_back(et_t::e_literal);
12360 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [12]\n",
12361 expressions[i].c_str());
12366 expression.value();
12370 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [12]\n",
12372 expressions[i].c_str());
12380 const std::string expressions[] =
12382 " assert(x > y); 'assert statement 0001' ",
12383 " assert(x > y, 'assert statement 2'); 'assert statement 0002' ",
12384 " assert(x > y, 'assert ' + 'statement 3'); 'assert statement 0003' ",
12385 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); 'assert statement 0004' ",
12386 " assert(x > y, 'assert ' + 'statement 5'); 'assert statement 0005' ",
12387 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); 'assert statement 0006' "
12390 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12392 for (std::size_t i = 0; i < expression_count; ++i)
12397 symbol_table_t symbol_table;
12398 expression_t expression;
12404 symbol_table.add_variable(
"x", x);
12405 symbol_table.add_variable(
"y", y);
12406 expression.register_symbol_table(symbol_table);
12408 parser.register_assert_check(handler);
12410 if (!parser.compile(expressions[i], expression))
12412 printf(
"run_test22() - Error: %s\tExpression: %s [13]\n",
12413 parser.error().c_str(),
12414 expressions[i].c_str());
12419 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12422 type_sequence.push_back(et_t::e_assert);
12423 type_sequence.push_back(et_t::e_string);
12427 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [13]\n",
12428 expressions[i].c_str());
12433 expression.value();
12437 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [13]\n",
12439 expressions[i].c_str());
12447 const std::string expressions[] =
12449 " assert(x > y); 'assert statement' + '0001' ",
12450 " assert(x > y, 'assert statement 2'); 'assert statement' + '0002' ",
12451 " assert(x > y, 'assert ' + 'statement 3'); 'assert statement' + '0003' ",
12452 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); 'assert statement' + '0004' ",
12453 " assert(x > y, 'assert ' + 'statement 5'); 'assert statement' + '0005' ",
12454 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); 'assert statement' + '0006' "
12457 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12459 for (std::size_t i = 0; i < expression_count; ++i)
12464 symbol_table_t symbol_table;
12465 expression_t expression;
12471 symbol_table.add_variable(
"x", x);
12472 symbol_table.add_variable(
"y", y);
12473 expression.register_symbol_table(symbol_table);
12475 parser.register_assert_check(handler);
12477 if (!parser.compile(expressions[i], expression))
12479 printf(
"run_test22() - Error: %s\tExpression: %s [14]\n",
12480 parser.error().c_str(),
12481 expressions[i].c_str());
12486 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12489 type_sequence.push_back(et_t::e_assert);
12490 type_sequence.push_back(et_t::e_string);
12494 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [14]\n",
12495 expressions[i].c_str());
12500 expression.value();
12504 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [14]\n",
12506 expressions[i].c_str());
12514 const std::string expressions[] =
12516 " assert(1 > 1); 1 + 0; "
12517 " assert(1 > 2, 'assert statement 2'); 2 + 0; "
12518 " assert(1 > 3, 'assert ' + 'statement 3'); 3 + 0; "
12519 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 4 + 0; "
12520 " assert(1 > 5, 'assert ' + 'statement 5'); 5 + 0 "
12521 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 6 + 0; "
12524 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12526 for (std::size_t i = 0; i < expression_count; ++i)
12528 expression_t expression;
12534 parser.register_assert_check(handler);
12536 if (!parser.compile(expressions[i], expression))
12538 printf(
"run_test22() - Error: %s\tExpression: %s [15]\n",
12539 parser.error().c_str(),
12540 expressions[i].c_str());
12545 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12548 type_sequence.push_back(et_t::e_assert );
12549 type_sequence.push_back(et_t::e_assert );
12550 type_sequence.push_back(et_t::e_assert );
12551 type_sequence.push_back(et_t::e_assert );
12552 type_sequence.push_back(et_t::e_assert );
12553 type_sequence.push_back(et_t::e_assert );
12554 type_sequence.push_back(et_t::e_literal);
12558 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [15]\n",
12559 expressions[i].c_str());
12564 expression.value();
12568 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [15]\n",
12570 expressions[i].c_str());
12578 const std::string expressions[] =
12580 " assert(1 > 1); 'assert' + '01'; "
12581 " assert(1 > 2, 'assert statement 2'); 'assert' + '02'; "
12582 " assert(1 > 3, 'assert ' + 'statement 3'); 'assert' + '03'; "
12583 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 'assert' + '04'; "
12584 " assert(1 > 5, 'assert ' + 'statement 5'); 'assert' + '05'; "
12585 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 'assert' + '06'; "
12588 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12590 for (std::size_t i = 0; i < expression_count; ++i)
12592 expression_t expression;
12598 parser.register_assert_check(handler);
12600 if (!parser.compile(expressions[i], expression))
12602 printf(
"run_test22() - Error: %s\tExpression: %s [16]\n",
12603 parser.error().c_str(),
12604 expressions[i].c_str());
12609 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12612 type_sequence.push_back(et_t::e_assert);
12613 type_sequence.push_back(et_t::e_assert);
12614 type_sequence.push_back(et_t::e_assert);
12615 type_sequence.push_back(et_t::e_assert);
12616 type_sequence.push_back(et_t::e_assert);
12617 type_sequence.push_back(et_t::e_assert);
12618 type_sequence.push_back(et_t::e_string);
12622 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [16]\n",
12623 expressions[i].c_str());
12628 expression.value();
12632 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [16]\n",
12634 expressions[i].c_str());
12642 const std::string expressions[] =
12644 " assert(x > y); x + y + 1; "
12645 " assert(x > y, 'assert statement 2'); x + y + 1; "
12646 " assert(x > y, 'assert ' + 'statement 3'); x + y + 1; "
12647 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); x + y + 1; "
12648 " assert(x > y, 'assert ' + 'statement 5'); x + y + 1; "
12649 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); x + y + 1; "
12652 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12654 for (std::size_t i = 0; i < expression_count; ++i)
12659 symbol_table_t symbol_table;
12660 expression_t expression;
12666 symbol_table.add_variable(
"x", x);
12667 symbol_table.add_variable(
"y", y);
12668 expression.register_symbol_table(symbol_table);
12670 parser.register_assert_check(handler);
12672 if (!parser.compile(expressions[i], expression))
12674 printf(
"run_test22() - Error: %s\tExpression: %s [17]\n",
12675 parser.error().c_str(),
12676 expressions[i].c_str());
12681 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12684 type_sequence.push_back(et_t::e_assert);
12685 type_sequence.push_back(et_t::e_assert);
12686 type_sequence.push_back(et_t::e_assert);
12687 type_sequence.push_back(et_t::e_assert);
12688 type_sequence.push_back(et_t::e_assert);
12689 type_sequence.push_back(et_t::e_assert);
12690 type_sequence.push_back(et_t::e_sf3ext);
12694 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [17]\n",
12695 expressions[i].c_str());
12700 expression.value();
12704 printf(
"run_test22() - Error: Invalid assert count of %d expected 6. Expression: %s [17]\n",
12706 expressions[i].c_str());
12714 const std::string expressions[] =
12716 " assert(x > y); 'assert' + ((x < y) ? '01' : 'XYZ'); "
12717 " assert(x > y, 'assert statement 2'); 'assert' + ((x < y) ? '02' : 'XYZ'); "
12718 " assert(x > y, 'assert ' + 'statement 3'); 'assert' + ((x < y) ? '03' : 'XYZ'); "
12719 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); 'assert' + ((x < y) ? '04' : 'XYZ'); "
12720 " assert(x > y, 'assert ' + 'statement 5'); 'assert' + ((x < y) ? '05' : 'XYZ'); "
12721 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); 'assert' + ((x < y) ? '06' : 'XYZ'); "
12724 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12726 for (std::size_t i = 0; i < expression_count; ++i)
12731 symbol_table_t symbol_table;
12732 expression_t expression;
12738 symbol_table.add_variable(
"x", x);
12739 symbol_table.add_variable(
"y", y);
12740 expression.register_symbol_table(symbol_table);
12742 parser.register_assert_check(handler);
12744 if (!parser.compile(expressions[i], expression))
12746 printf(
"run_test22() - Error: %s\tExpression: %s [18]\n",
12747 parser.error().c_str(),
12748 expressions[i].c_str());
12753 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12756 type_sequence.push_back(et_t::e_assert);
12757 type_sequence.push_back(et_t::e_assert);
12758 type_sequence.push_back(et_t::e_assert);
12759 type_sequence.push_back(et_t::e_assert);
12760 type_sequence.push_back(et_t::e_assert);
12761 type_sequence.push_back(et_t::e_assert);
12762 type_sequence.push_back(et_t::e_string);
12766 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [18]\n",
12767 expressions[i].c_str());
12772 expression.value();
12776 printf(
"run_test22() - Error: Invalid assert count of %d expected 6. Expression: %s [18]\n",
12778 expressions[i].c_str());