1332 test_xy<T>(
"(x + y) * (x + y)" ,T(2.2),T(3.3),T(30.25)),
1333 test_xy<T>(
"(x + y) / (x + y)" ,T(2.2),T(3.3),T(1.0 )),
1334 test_xy<T>(
"x + y > x and x + y > y" ,T(2.2),T(3.3),T(1.0)),
1335 test_xy<T>(
"1 + (x + y)" ,T(2.2),T(3.3),T(6.5 )),
1336 test_xy<T>(
"(x + y) - 1" ,T(2.2),T(3.3),T(4.5 )),
1337 test_xy<T>(
"1 + (x + y) * 2" ,T(2.2),T(3.3),T(12.0 )),
1338 test_xy<T>(
"2 * (x + y) - 1" ,T(2.2),T(3.3),T(10.0 )),
1339 test_xy<T>(
"y + (x + 1)" ,T(2.2),T(3.3),T(6.5 )),
1340 test_xy<T>(
"(x + 1) + y" ,T(2.2),T(3.3),T(6.5 )),
1369 test_xy<T>(
"(x - -1 + 1)" ,T(1.0),T(0.0),T(3)),
1370 test_xy<T>(
"(x --1 + 1)" ,T(1.0),T(0.0),T(3)),
1371 test_xy<T>(
"(x-- 1 + 1)" ,T(1.0),T(0.0),T(3)),
1372 test_xy<T>(
"(x--1 + 1)" ,T(1.0),T(0.0),T(3)),
1373 test_xy<T>(
"(x -- -1 + 1)" ,T(1.0),T(0.0),T(1)),
1374 test_xy<T>(
"(x + -1 + 1)" ,T(1.0),T(0.0),T(1)),
1375 test_xy<T>(
"(x +-1 + 1)" ,T(1.0),T(0.0),T(1)),
1376 test_xy<T>(
"(x+- 1 + 1)" ,T(1.0),T(0.0),T(1)),
1377 test_xy<T>(
"(x+-1 + 1)" ,T(1.0),T(0.0),T(1)),
1378 test_xy<T>(
"(x +- -1 + 1)" ,T(1.0),T(0.0),T(3)),
1379 test_xy<T>(
"(x + +1 + 1)" ,T(1.0),T(0.0),T(3)),
1380 test_xy<T>(
"(x ++1 + 1)" ,T(1.0),T(0.0),T(3)),
1381 test_xy<T>(
"(1 - -x + 1)" ,T(1.0),T(0.0),T(3)),
1382 test_xy<T>(
"(1 --x + 1)" ,T(1.0),T(0.0),T(3)),
1383 test_xy<T>(
"(1-- x + 1)" ,T(1.0),T(0.0),T(3)),
1384 test_xy<T>(
"(1--x + 1)" ,T(1.0),T(0.0),T(3)),
1385 test_xy<T>(
"(1 -- -x + 1)" ,T(1.0),T(0.0),T(1)),
1386 test_xy<T>(
"(1 + -x + 1)" ,T(1.0),T(0.0),T(1)),
1387 test_xy<T>(
"(1 +-x + 1)" ,T(1.0),T(0.0),T(1)),
1388 test_xy<T>(
"(1+- x + 1)" ,T(1.0),T(0.0),T(1)),
1389 test_xy<T>(
"(1+-x + 1)" ,T(1.0),T(0.0),T(1)),
1390 test_xy<T>(
"(1 +- -x + 1)" ,T(1.0),T(0.0),T(3)),
1391 test_xy<T>(
"(1 + +x + 1)" ,T(1.0),T(0.0),T(3)),
1392 test_xy<T>(
"(1 ++x + 1)" ,T(1.0),T(0.0),T(3)),
1393 test_xy<T>(
"(x - -1 - 1)" ,T(1.0),T(0.0),T(1)),
1394 test_xy<T>(
"(x --1 - 1)" ,T(1.0),T(0.0),T(1)),
1395 test_xy<T>(
"(x-- 1 - 1)" ,T(1.0),T(0.0),T(1)),
1396 test_xy<T>(
"(x--1 - 1)" ,T(1.0),T(0.0),T(1)),
1397 test_xy<T>(
"(x -- -1 - 1)" ,T(1.0),T(0.0),T(-1)),
1398 test_xy<T>(
"(x + -1 - 1)" ,T(1.0),T(0.0),T(-1)),
1399 test_xy<T>(
"(x +-1 - 1)" ,T(1.0),T(0.0),T(-1)),
1400 test_xy<T>(
"(x+- 1 - 1)" ,T(1.0),T(0.0),T(-1)),
1401 test_xy<T>(
"(x+-1 - 1)" ,T(1.0),T(0.0),T(-1)),
1402 test_xy<T>(
"(x +- -1 - 1)" ,T(1.0),T(0.0),T(1)),
1403 test_xy<T>(
"(x + +1 - 1)" ,T(1.0),T(0.0),T(1)),
1404 test_xy<T>(
"(x ++1 - 1)" ,T(1.0),T(0.0),T(1)),
1405 test_xy<T>(
"(1 - -x - 1)" ,T(1.0),T(0.0),T(1)),
1406 test_xy<T>(
"(1 --x - 1)" ,T(1.0),T(0.0),T(1)),
1407 test_xy<T>(
"(1-- x - 1)" ,T(1.0),T(0.0),T(1)),
1408 test_xy<T>(
"(1--x - 1)" ,T(1.0),T(0.0),T(1)),
1409 test_xy<T>(
"(1 -- -x - 1)" ,T(1.0),T(0.0),T(-1)),
1410 test_xy<T>(
"(1 + -x - 1)" ,T(1.0),T(0.0),T(-1)),
1411 test_xy<T>(
"(1 +-x - 1)" ,T(1.0),T(0.0),T(-1)),
1412 test_xy<T>(
"(1+- x - 1)" ,T(1.0),T(0.0),T(-1)),
1413 test_xy<T>(
"(1+-x - 1)" ,T(1.0),T(0.0),T(-1)),
1414 test_xy<T>(
"(1 +- -x - 1)" ,T(1.0),T(0.0),T(1)),
1415 test_xy<T>(
"(1 + +x - 1)" ,T(1.0),T(0.0),T(1)),
1416 test_xy<T>(
"(1 ++x - 1)" ,T(1.0),T(0.0),T(1)),
1417 test_xy<T>(
"x * 1 == x" ,T(2.0),T(3.0),T(1.0)),
1418 test_xy<T>(
"1 * x == x" ,T(2.0),T(3.0),T(1.0)),
1419 test_xy<T>(
"y * 1 == y" ,T(2.0),T(3.0),T(1.0)),
1420 test_xy<T>(
"1 * y == y" ,T(2.0),T(3.0),T(1.0)),
1421 test_xy<T>(
"x * 0 == 0" ,T(2.0),T(3.0),T(1.0)),
1422 test_xy<T>(
"0 * x == 0" ,T(2.0),T(3.0),T(1.0)),
1423 test_xy<T>(
"y * 0 == 0" ,T(2.0),T(3.0),T(1.0)),
1424 test_xy<T>(
"0 * y == 0" ,T(2.0),T(3.0),T(1.0)),
1425 test_xy<T>(
"x + 1 == 1 + x" ,T(2.0),T(3.0),T(1.0)),
1426 test_xy<T>(
"y + 1 == 1 + y" ,T(2.0),T(3.0),T(1.0)),
1427 test_xy<T>(
"x + y == y + x" ,T(2.0),T(3.0),T(1.0)),
1428 test_xy<T>(
"x * y == y * x" ,T(2.0),T(3.0),T(1.0)),
1433 test_xy<T>(
"x + y > y" ,T(2.0),T(3.0),T(1.0)),
1434 test_xy<T>(
"x + y > x" ,T(2.0),T(3.0),T(1.0)),
1435 test_xy<T>(
"x * y > y" ,T(2.0),T(3.0),T(1.0)),
1436 test_xy<T>(
"x * y > x" ,T(2.0),T(3.0),T(1.0)),
1437 test_xy<T>(
"(x + y) > y" ,T(2.0),T(3.0),T(1.0)),
1438 test_xy<T>(
"(x + y) > x" ,T(2.0),T(3.0),T(1.0)),
1439 test_xy<T>(
"(x * y) > y" ,T(2.0),T(3.0),T(1.0)),
1440 test_xy<T>(
"(x * y) > x" ,T(2.0),T(3.0),T(1.0)),
1441 test_xy<T>(
"(2x + 3y) == (2*x + 3*y)" ,T(2.0),T(3.0),T(1.0)),
1442 test_xy<T>(
"2(x + y) == (2*x + 2*y)" ,T(2.0),T(3.0),T(1.0)),
1443 test_xy<T>(
" (x + y)3 == (3*x + 3*y)" ,T(2.0),T(3.0),T(1.0)),
1444 test_xy<T>(
"2x + 3y == 2*x + 3*y" ,T(2.0),T(3.0),T(1.0)),
1445 test_xy<T>(
"2(x + y) == 2*x + 2*y" ,T(2.0),T(3.0),T(1.0)),
1446 test_xy<T>(
" (x + y)3 == 3*x + 3*y" ,T(2.0),T(3.0),T(1.0)),
1447 test_xy<T>(
" (x)y == (x*y)" ,T(2.0),T(3.0),T(1.0)),
1448 test_xy<T>(
" x(y) == (x*y)" ,T(2.0),T(3.0),T(1.0)),
1449 test_xy<T>(
" (x) y == (x*y)" ,T(2.0),T(3.0),T(1.0)),
1450 test_xy<T>(
" x (y) == (x*y)" ,T(2.0),T(3.0),T(1.0)),
1451 test_xy<T>(
" ((x) y) == (x*y)" ,T(2.0),T(3.0),T(1.0)),
1452 test_xy<T>(
" (x (y)) == (x*y)" ,T(2.0),T(3.0),T(1.0)),
1453 test_xy<T>(
" (x)3 == (x*3)" ,T(2.0),T(3.0),T(1.0)),
1454 test_xy<T>(
" x(3) == (x*3)" ,T(2.0),T(3.0),T(1.0)),
1455 test_xy<T>(
" (x) 3 == (x*3)" ,T(2.0),T(3.0),T(1.0)),
1456 test_xy<T>(
" x (3) == (x*3)" ,T(2.0),T(3.0),T(1.0)),
1457 test_xy<T>(
" ((x) 3) == (x*3)" ,T(2.0),T(3.0),T(1.0)),
1458 test_xy<T>(
" (x (3)) == (x*3)" ,T(2.0),T(3.0),T(1.0)),
1459 test_xy<T>(
" (2)y == (2*y)" ,T(2.0),T(3.0),T(1.0)),
1460 test_xy<T>(
" 2(y) == (2*y)" ,T(2.0),T(3.0),T(1.0)),
1461 test_xy<T>(
" (2) y == (2*y)" ,T(2.0),T(3.0),T(1.0)),
1462 test_xy<T>(
" 2 (y) == (2*y)" ,T(2.0),T(3.0),T(1.0)),
1463 test_xy<T>(
" ((2) y) == (2*y)" ,T(2.0),T(3.0),T(1.0)),
1464 test_xy<T>(
" (2 (y)) == (2*y)" ,T(2.0),T(3.0),T(1.0)),
1465 test_xy<T>(
"var a := 2; (a)(3) == 6" ,T(2.0),T(3.0),T(1.0)),
1466 test_xy<T>(
"var a := 2; (A){3} == 6" ,T(2.0),T(3.0),T(1.0)),
1467 test_xy<T>(
"var a := 2; (a)[3] == 6" ,T(2.0),T(3.0),T(1.0)),
1468 test_xy<T>(
"var a := 2; {a}(3) == 6" ,T(2.0),T(3.0),T(1.0)),
1469 test_xy<T>(
"var a := 2; {a}{3} == 6" ,T(2.0),T(3.0),T(1.0)),
1470 test_xy<T>(
"var a := 2; {a}[3] == 6" ,T(2.0),T(3.0),T(1.0)),
1471 test_xy<T>(
"var a := 2; var b := 3; (a)(b) == 6" ,T(2.0),T(3.0),T(1.0)),
1472 test_xy<T>(
"var a := 2; var b := 3; (a){B} == 6" ,T(2.0),T(3.0),T(1.0)),
1473 test_xy<T>(
"var a := 2; var b := 3; (a)[b] == 6" ,T(2.0),T(3.0),T(1.0)),
1474 test_xy<T>(
"var a := 2; var b := 3; {a}(b) == 6" ,T(2.0),T(3.0),T(1.0)),
1475 test_xy<T>(
"var a := 2; var b := 3; {a}{b} == 6" ,T(2.0),T(3.0),T(1.0)),
1476 test_xy<T>(
"var a := 2; var b := 3; {a}[b] == 6" ,T(2.0),T(3.0),T(1.0)),
1477 test_xy<T>(
"var a := 2; (a)(a+1) == 6" ,T(2.0),T(3.0),T(1.0)),
1478 test_xy<T>(
"var a := 2; (a){a+1} == 6" ,T(2.0),T(3.0),T(1.0)),
1479 test_xy<T>(
"var a := 2; (a)[a+1] == 6" ,T(2.0),T(3.0),T(1.0)),
1480 test_xy<T>(
"var a := 2; {a}(a+1) == 6" ,T(2.0),T(3.0),T(1.0)),
1481 test_xy<T>(
"var a := 2; {a}{a+1} == 6" ,T(2.0),T(3.0),T(1.0)),
1482 test_xy<T>(
"var a := 2; {a}[a+1] == 6" ,T(2.0),T(3.0),T(1.0)),
1483 test_xy<T>(
"var a := 2; var b := 3; (b-1)(b) == 6" ,T(2.0),T(3.0),T(1.0)),
1484 test_xy<T>(
"var a := 2; var b := 3; (b-1){b} == 6" ,T(2.0),T(3.0),T(1.0)),
1485 test_xy<T>(
"var a := 2; var b := 3; (b-1)[b] == 6" ,T(2.0),T(3.0),T(1.0)),
1486 test_xy<T>(
"var a := 2; var b := 3; {b-1}(b) == 6" ,T(2.0),T(3.0),T(1.0)),
1487 test_xy<T>(
"var a := 2; var b := 3; {b-1}{b} == 6" ,T(2.0),T(3.0),T(1.0)),
1488 test_xy<T>(
"var a := 2; var b := 3; {b-1}[b] == 6" ,T(2.0),T(3.0),T(1.0)),
1489 test_xy<T>(
"abs(x^2.2^1.1 - 17.15193942371376191362472354210675542022)" ,T(
"3.3"),T(
"0.0"),T(
"0.0")),
1490 test_xy<T>(
"equal(x^2.2^1.1,17.15193942371376191362472354210675542022)" ,T(
"3.3"),T(
"0.0"),T(
"1.0")),
1491 test_xy<T>(
"equal(3.3^x^1.1,17.15193942371376191362472354210675542022)" ,T(
"2.2"),T(
"0.0"),T(
"1.0")),
1492 test_xy<T>(
"equal(3.3^2.2^x,17.15193942371376191362472354210675542022)" ,T(
"1.1"),T(
"0.0"),T(
"1.0")),
1493 test_xy<T>(
"equal(x^2.2^y,17.15193942371376191362472354210675542022) " ,T(
"3.3"),T(
"1.1"),T(
"1.0")),
1494 test_xy<T>(
"equal(x^y^1.1,17.15193942371376191362472354210675542022) " ,T(
"3.3"),T(
"2.2"),T(
"1.0")),
1495 test_xy<T>(
"equal(3.3^x^y,17.15193942371376191362472354210675542022) " ,T(
"2.2"),T(
"1.1"),T(
"1.0")),
1496 test_xy<T>(
"equal(x+y^3/7,x+(y*y*y)/7)",T(2.0),T(3.0),T(1.0)),
1497 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)),
1498 test_xy<T>(
"equal( x^0,1)",T(12.34),T(0.0),T(1.0)),
1499 test_xy<T>(
"equal( x^1,x)",T(12.34),T(0.0),T(1.0)),
1500 test_xy<T>(
"equal( x^2,x*x)",T(12.34),T(0.0),T(1.0)),
1501 test_xy<T>(
"equal( x^3,x*x*x)",T(12.34),T(0.0),T(1.0)),
1502 test_xy<T>(
"equal( x^4,x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1503 test_xy<T>(
"equal( x^5,x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1504 test_xy<T>(
"equal( x^6,x*x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1505 test_xy<T>(
"equal( x^7,x*x*x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1506 test_xy<T>(
"equal( x^8,x*x*x*x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1507 test_xy<T>(
"equal( x^9,x*x*x*x*x*x*x*x*x)",T(12.34),T(0.0),T(1.0)),
1508 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)),
1509 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)),
1510 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)),
1511 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)),
1512 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)),
1513 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)),
1514 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)),
1515 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)),
1516 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)),
1517 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)),
1518 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)),
1519 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)),
1520 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)),
1521 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)),
1522 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)),
1523 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)),
1524 test_xy<T>(
"equal( y^0,1)",T(0.0),T(12.34),T(1.0)),
1525 test_xy<T>(
"equal( y^1,y)",T(0.0),T(12.34),T(1.0)),
1526 test_xy<T>(
"equal( y^2,y*y)",T(0.0),T(12.34),T(1.0)),
1527 test_xy<T>(
"equal( y^3,y*y*y)",T(0.0),T(12.34),T(1.0)),
1528 test_xy<T>(
"equal( y^4,y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1529 test_xy<T>(
"equal( y^5,y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1530 test_xy<T>(
"equal( y^6,y*y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1531 test_xy<T>(
"equal( y^7,y*y*y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1532 test_xy<T>(
"equal( y^8,y*y*y*y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1533 test_xy<T>(
"equal( y^9,y*y*y*y*y*y*y*y*y)",T(0.0),T(12.34),T(1.0)),
1534 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)),
1535 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)),
1536 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)),
1537 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)),
1538 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)),
1539 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)),
1540 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)),
1541 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)),
1542 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)),
1543 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)),
1544 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)),
1545 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)),
1546 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)),
1547 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)),
1548 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)),
1549 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)),
1550 test_xy<T>(
"equal( x^-0,1/1)",T(12.34),T(0.0),T(1.0)),
1551 test_xy<T>(
"equal( x^-1,1/(x))",T(12.34),T(0.0),T(1.0)),
1552 test_xy<T>(
"equal( x^-2,1/(x*x))",T(12.34),T(0.0),T(1.0)),
1553 test_xy<T>(
"equal( x^-3,1/(x*x*x))",T(12.34),T(0.0),T(1.0)),
1554 test_xy<T>(
"equal( x^-4,1/(x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1555 test_xy<T>(
"equal( x^-5,1/(x*x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1556 test_xy<T>(
"equal( x^-6,1/(x*x*x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1557 test_xy<T>(
"equal( x^-7,1/(x*x*x*x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1558 test_xy<T>(
"equal( x^-8,1/(x*x*x*x*x*x*x*x))",T(12.34),T(0.0),T(1.0)),
1559 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)),
1560 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)),
1561 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)),
1562 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)),
1563 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)),
1564 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)),
1565 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)),
1566 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)),
1567 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)),
1568 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)),
1569 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)),
1570 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)),
1571 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)),
1572 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)),
1573 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)),
1574 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)),
1575 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)),
1576 test_xy<T>(
"equal( y^-0,1/1)",T(0.0),T(12.34),T(1.0)),
1577 test_xy<T>(
"equal( y^-1,1/(y))",T(0.0),T(12.34),T(1.0)),
1578 test_xy<T>(
"equal( y^-2,1/(y*y))",T(0.0),T(12.34),T(1.0)),
1579 test_xy<T>(
"equal( y^-3,1/(y*y*y))",T(0.0),T(12.34),T(1.0)),
1580 test_xy<T>(
"equal( y^-4,1/(y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1581 test_xy<T>(
"equal( y^-5,1/(y*y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1582 test_xy<T>(
"equal( y^-6,1/(y*y*y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1583 test_xy<T>(
"equal( y^-7,1/(y*y*y*y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1584 test_xy<T>(
"equal( y^-8,1/(y*y*y*y*y*y*y*y))",T(0.0),T(12.34),T(1.0)),
1585 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)),
1586 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)),
1587 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)),
1588 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)),
1589 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)),
1590 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)),
1591 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)),
1592 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)),
1593 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)),
1594 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)),
1595 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)),
1596 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)),
1597 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)),
1598 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)),
1599 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)),
1600 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)),
1601 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)),
1602 test_xy<T>(
"(2 + x) + 7",T(3.0),T(0.0),T((2.0 + 3.0) + 7.0)),
1603 test_xy<T>(
"(2 + x) - 7",T(3.0),T(0.0),T((2.0 + 3.0) - 7.0)),
1604 test_xy<T>(
"(2 - x) + 7",T(3.0),T(0.0),T((2.0 - 3.0) + 7.0)),
1605 test_xy<T>(
"(2 - x) - 7",T(3.0),T(0.0),T((2.0 - 3.0) - 7.0)),
1606 test_xy<T>(
"(2 * x) * 7",T(3.0),T(0.0),T((2.0 * 3.0) * 7.0)),
1607 test_xy<T>(
"(2 * x) / 7",T(3.0),T(0.0),T((2.0 * 3.0) / 7.0)),
1608 test_xy<T>(
"(2 / x) * 7",T(3.0),T(0.0),T((2.0 / 3.0) * 7.0)),
1609 test_xy<T>(
"(2 / x) / 7",T(3.0),T(0.0),T((2.0 / 3.0) / 7.0)),
1610 test_xy<T>(
"2 + (x + 7)",T(3.0),T(0.0),T(2.0 + (3.0 + 7.0))),
1611 test_xy<T>(
"2 + (x - 7)",T(3.0),T(0.0),T(2.0 + (3.0 - 7.0))),
1612 test_xy<T>(
"2 - (x + 7)",T(3.0),T(0.0),T(2.0 - (3.0 + 7.0))),
1613 test_xy<T>(
"2 - (x - 7)",T(3.0),T(0.0),T(2.0 - (3.0 - 7.0))),
1614 test_xy<T>(
"2 * (x * 7)",T(3.0),T(0.0),T(2.0 * (3.0 * 7.0))),
1615 test_xy<T>(
"2 * (x / 7)",T(3.0),T(0.0),T(2.0 * (3.0 / 7.0))),
1616 test_xy<T>(
"2 / (x * 7)",T(3.0),T(0.0),T(2.0 / (3.0 * 7.0))),
1617 test_xy<T>(
"2 / (x / 7)",T(3.0),T(0.0),T(2.0 / (3.0 / 7.0))),
1618 test_xy<T>(
"2 + (7 + x)",T(3.0),T(0.0),T(2.0 + (7.0 + 3.0))),
1619 test_xy<T>(
"2 + (7 - x)",T(3.0),T(0.0),T(2.0 + (7.0 - 3.0))),
1620 test_xy<T>(
"2 - (7 + x)",T(3.0),T(0.0),T(2.0 - (7.0 + 3.0))),
1621 test_xy<T>(
"2 - (7 - x)",T(3.0),T(0.0),T(2.0 - (7.0 - 3.0))),
1622 test_xy<T>(
"2 * (7 * x)",T(3.0),T(0.0),T(2.0 * (7.0 * 3.0))),
1623 test_xy<T>(
"2 * (7 / x)",T(3.0),T(0.0),T(2.0 * (7.0 / 3.0))),
1624 test_xy<T>(
"2 / (7 * x)",T(3.0),T(0.0),T(2.0 / (7.0 * 3.0))),
1625 test_xy<T>(
"2 / (7 / x)",T(3.0),T(0.0),T(2.0 / (7.0 / 3.0))),
1626 test_xy<T>(
"(x + 2) + 7",T(3.0),T(0.0),T((3.0 + 2.0) + 7.0)),
1627 test_xy<T>(
"(x + 2) - 7",T(3.0),T(0.0),T((3.0 + 2.0) - 7.0)),
1628 test_xy<T>(
"(x - 2) + 7",T(3.0),T(0.0),T((3.0 - 2.0) + 7.0)),
1629 test_xy<T>(
"(x - 2) - 7",T(3.0),T(0.0),T((3.0 - 2.0) - 7.0)),
1630 test_xy<T>(
"(x * 2) * 7",T(3.0),T(0.0),T((3.0 * 2.0) * 7.0)),
1631 test_xy<T>(
"(x * 2) / 7",T(3.0),T(0.0),T((3.0 * 2.0) / 7.0)),
1632 test_xy<T>(
"(x / 2) * 7",T(3.0),T(0.0),T((3.0 / 2.0) * 7.0)),
1633 test_xy<T>(
"(x / 2) / 7",T(3.0),T(0.0),T((3.0 / 2.0) / 7.0)),
1634 test_xy<T>(
"((2 + x) + (3 + y))",T(7.0),T(9.0),T(((2.0 + 7.0) + (3.0 + 9.0)))),
1635 test_xy<T>(
"((2 + x) - (3 + y))",T(7.0),T(9.0),T(((2.0 + 7.0) - (3.0 + 9.0)))),
1636 test_xy<T>(
"((2 - x) - (3 - y))",T(7.0),T(9.0),T(((2.0 - 7.0) - (3.0 - 9.0)))),
1637 test_xy<T>(
"((2 * x) * (3 * y))",T(7.0),T(9.0),T(((2.0 * 7.0) * (3.0 * 9.0)))),
1638 test_xy<T>(
"((x + 2) + (y + 3))",T(7.0),T(9.0),T(((7.0 + 2.0) + (9.0 + 3.0)))),
1639 test_xy<T>(
"((x + 2) - (y + 3))",T(7.0),T(9.0),T(((7.0 + 2.0) - (9.0 + 3.0)))),
1640 test_xy<T>(
"((x - 2) - (y - 3))",T(7.0),T(9.0),T(((7.0 - 2.0) - (9.0 - 3.0)))),
1641 test_xy<T>(
"((2 * x) * (3 * y))",T(7.0),T(9.0),T(((2.0 * 7.0) * (3.0 * 9.0)))),
1642 test_xy<T>(
"((2 + x) + (y + 3))",T(7.0),T(9.0),T(((2.0 + 7.0) + (9.0 + 3.0)))),
1643 test_xy<T>(
"((2 + x) - (y + 3))",T(7.0),T(9.0),T(((2.0 + 7.0) - (9.0 + 3.0)))),
1644 test_xy<T>(
"((2 - x) - (y - 3))",T(7.0),T(9.0),T(((2.0 - 7.0) - (9.0 - 3.0)))),
1645 test_xy<T>(
"((2 * x) * (3 * y))",T(7.0),T(9.0),T(((2.0 * 7.0) * (3.0 * 9.0)))),
1646 test_xy<T>(
"((x + 2) + (3 + y))",T(7.0),T(9.0),T(((7.0 + 2.0) + (3.0 + 9.0)))),
1647 test_xy<T>(
"((x + 2) - (3 + y))",T(7.0),T(9.0),T(((7.0 + 2.0) - (3.0 + 9.0)))),
1648 test_xy<T>(
"((x - 2) - (3 - y))",T(7.0),T(9.0),T(((7.0 - 2.0) - (3.0 - 9.0)))),
1649 test_xy<T>(
"((2 * x) * (3 * y))",T(7.0),T(9.0),T(((2.0 * 7.0) * (3.0 * 9.0)))),
1650 test_xy<T>(
"((2 * x) / (3 * y))",T(7.0),T(9.0),T(((2.0 * 7.0) / (3.0 * 9.0)))),
1651 test_xy<T>(
"((2 / x) * (3 / y))",T(7.0),T(9.0),T(((2.0 / 7.0) * (3.0 / 9.0)))),
1652 test_xy<T>(
"((2 * x) / (3 / y))",T(7.0),T(9.0),T(((2.0 * 7.0) / (3.0 / 9.0)))),
1653 test_xy<T>(
"((2 / x) / (3 * y))",T(7.0),T(9.0),T(((2.0 / 7.0) / (3.0 * 9.0)))),
1654 test_xy<T>(
"((x * 2) / (y * 3))",T(7.0),T(9.0),T(((7.0 * 2.0) / (9.0 * 3.0)))),
1655 test_xy<T>(
"((x / 2) * (y / 3))",T(7.0),T(9.0),T(((7.0 / 2.0) * (9.0 / 3.0)))),
1656 test_xy<T>(
"((x * 2) / (y / 3))",T(7.0),T(9.0),T(((7.0 * 2.0) / (9.0 / 3.0)))),
1657 test_xy<T>(
"((x / 2) / (y * 3))",T(7.0),T(9.0),T(((7.0 / 2.0) / (9.0 * 3.0)))),
1658 test_xy<T>(
"((2 * x) / (y * 3))",T(7.0),T(9.0),T(((2.0 * 7.0) / (9.0 * 3.0)))),
1659 test_xy<T>(
"((2 / x) * (y / 3))",T(7.0),T(9.0),T(((2.0 / 7.0) * (9.0 / 3.0)))),
1660 test_xy<T>(
"((2 * x) / (y / 3))",T(7.0),T(9.0),T(((2.0 * 7.0) / (9.0 / 3.0)))),
1661 test_xy<T>(
"((2 / x) / (y * 3))",T(7.0),T(9.0),T(((2.0 / 7.0) / (9.0 * 3.0)))),
1662 test_xy<T>(
"((x * 2) / (3 * y))",T(7.0),T(9.0),T(((7.0 * 2.0) / (3.0 * 9.0)))),
1663 test_xy<T>(
"((x / 2) * (3 / y))",T(7.0),T(9.0),T(((7.0 / 2.0) * (3.0 / 9.0)))),
1664 test_xy<T>(
"((x * 2) / (3 / y))",T(7.0),T(9.0),T(((7.0 * 2.0) / (3.0 / 9.0)))),
1665 test_xy<T>(
"((x / 2) / (3 * y))",T(7.0),T(9.0),T(((7.0 / 2.0) / (3.0 * 9.0)))),
1666 test_xy<T>(
"([(min(x,8) + y) + 3] - 4)",T(7.0),T(9.0),T((((std::min(7.0,8.0) + 9.0) + 3.0) - 4.0))),
1667 test_xy<T>(
"([(min(x,8) + y) + 3] + 4)",T(7.0),T(9.0),T((((std::min(7.0,8.0) + 9.0) + 3.0) + 4.0))),
1668 test_xy<T>(
"([(min(x,8) + y) + 3] * 4)",T(7.0),T(9.0),T((((std::min(7.0,8.0) + 9.0) + 3.0) * 4.0))),
1669 test_xy<T>(
"([(min(x,8) + y) + 3] / 4)",T(7.0),T(9.0),T((((std::min(7.0,8.0) + 9.0) + 3.0) / 4.0))),
1670 test_xy<T>(
"([(min(x,8) + y) - 3] - 4)",T(7.0),T(9.0),T((((std::min(7.0,8.0) + 9.0) - 3.0) - 4.0))),
1671 test_xy<T>(
"([(min(x,8) + y) - 3] + 4)",T(7.0),T(9.0),T((((std::min(7.0,8.0) + 9.0) - 3.0) + 4.0))),
1672 test_xy<T>(
"([(min(x,8) + y) - 3] * 4)",T(7.0),T(9.0),T((((std::min(7.0,8.0) + 9.0) - 3.0) * 4.0))),
1673 test_xy<T>(
"([(min(x,8) + y) - 3] / 4)",T(7.0),T(9.0),T((((std::min(7.0,8.0) + 9.0) - 3.0) / 4.0))),
1674 test_xy<T>(
"([(min(x,8) + y) * 3] - 4)",T(7.0),T(9.0),T((((std::min(7.0,8.0) + 9.0) * 3.0) - 4.0))),
1675 test_xy<T>(
"([(min(x,8) + y) * 3] + 4)",T(7.0),T(9.0),T((((std::min(7.0,8.0) + 9.0) * 3.0) + 4.0))),
1676 test_xy<T>(
"([(min(x,8) + y) * 3] * 4)",T(7.0),T(9.0),T((((std::min(7.0,8.0) + 9.0) * 3.0) * 4.0))),
1677 test_xy<T>(
"([(min(x,8) + y) * 3] / 4)",T(7.0),T(9.0),T((((std::min(7.0,8.0) + 9.0) * 3.0) / 4.0))),
1678 test_xy<T>(
"([(min(x,8) + y) / 3] - 4)",T(7.0),T(9.0),T((((std::min(7.0,8.0) + 9.0) / 3.0) - 4.0))),
1679 test_xy<T>(
"([(min(x,8) + y) / 3] + 4)",T(7.0),T(9.0),T((((std::min(7.0,8.0) + 9.0) / 3.0) + 4.0))),
1680 test_xy<T>(
"([(min(x,8) + y) / 3] * 4)",T(7.0),T(9.0),T((((std::min(7.0,8.0) + 9.0) / 3.0) * 4.0))),
1681 test_xy<T>(
"([(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>(
"(4 - [3 + (min(x,8) + y)])",T(7.0),T(9.0),T((4.0 - (3.0 + (std::min(7.0,8.0) + 9.0))))),
1683 test_xy<T>(
"(4 + [3 + (min(x,8) + y)])",T(7.0),T(9.0),T((4.0 + (3.0 + (std::min(7.0,8.0) + 9.0))))),
1684 test_xy<T>(
"(4 * [3 + (min(x,8) + y)])",T(7.0),T(9.0),T((4.0 * (3.0 + (std::min(7.0,8.0) + 9.0))))),
1685 test_xy<T>(
"(4 / [3 + (min(x,8) + y)])",T(7.0),T(9.0),T((4.0 / (3.0 + (std::min(7.0,8.0) + 9.0))))),
1686 test_xy<T>(
"(4 - [3 - (min(x,8) + y)])",T(7.0),T(9.0),T((4.0 - (3.0 - (std::min(7.0,8.0) + 9.0))))),
1687 test_xy<T>(
"(4 + [3 - (min(x,8) + y)])",T(7.0),T(9.0),T((4.0 + (3.0 - (std::min(7.0,8.0) + 9.0))))),
1688 test_xy<T>(
"(4 * [3 - (min(x,8) + y)])",T(7.0),T(9.0),T((4.0 * (3.0 - (std::min(7.0,8.0) + 9.0))))),
1689 test_xy<T>(
"(4 / [3 - (min(x,8) + y)])",T(7.0),T(9.0),T((4.0 / (3.0 - (std::min(7.0,8.0) + 9.0))))),
1690 test_xy<T>(
"(4 - [3 * (min(x,8) + y)])",T(7.0),T(9.0),T((4.0 - (3.0 * (std::min(7.0,8.0) + 9.0))))),
1691 test_xy<T>(
"(4 + [3 * (min(x,8) + y)])",T(7.0),T(9.0),T((4.0 + (3.0 * (std::min(7.0,8.0) + 9.0))))),
1692 test_xy<T>(
"(4 * [3 * (min(x,8) + y)])",T(7.0),T(9.0),T((4.0 * (3.0 * (std::min(7.0,8.0) + 9.0))))),
1693 test_xy<T>(
"(4 / [3 * (min(x,8) + y)])",T(7.0),T(9.0),T((4.0 / (3.0 * (std::min(7.0,8.0) + 9.0))))),
1694 test_xy<T>(
"(4 - [3 / (min(x,8) + y)])",T(7.0),T(9.0),T((4.0 - (3.0 / (std::min(7.0,8.0) + 9.0))))),
1695 test_xy<T>(
"(4 + [3 / (min(x,8) + y)])",T(7.0),T(9.0),T((4.0 + (3.0 / (std::min(7.0,8.0) + 9.0))))),
1696 test_xy<T>(
"(4 * [3 / (min(x,8) + y)])",T(7.0),T(9.0),T((4.0 * (3.0 / (std::min(7.0,8.0) + 9.0))))),
1697 test_xy<T>(
"(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>(
"((2 * x) + (2 * y))",T(7.0),T(9.0),T(((2.0 * 7.0) + (2.0 * 9.0)))),
1699 test_xy<T>(
"((2 * x) - (2 * y))",T(7.0),T(9.0),T(((2.0 * 7.0) - (2.0 * 9.0)))),
1700 test_xy<T>(
"((2 * x) + (y * 2))",T(7.0),T(9.0),T(((2.0 * 7.0) + (9.0 * 2.0)))),
1701 test_xy<T>(
"((x * 2) - (y * 2))",T(7.0),T(9.0),T(((7.0 * 2.0) - (9.0 * 2.0)))),
1702 test_xy<T>(
"0 * (abs (x) + acos (y) + asin (x) + atan (y))",T(1.0),T(1.0),T(0.0)),
1703 test_xy<T>(
"0 * (ceil (x) + cos (y) + cosh (x) + exp (y))",T(1.0),T(1.0),T(0.0)),
1704 test_xy<T>(
"0 * (floor(x) + log (y) + log10(x) + round(y))",T(1.0),T(1.0),T(0.0)),
1705 test_xy<T>(
"0 * (sin (x) + sinh (y) + sqrt (x) + tan (y))",T(1.0),T(1.0),T(0.0)),
1706 test_xy<T>(
"0 * (sec (x) + csc (y) + tanh (x) + cot (y))",T(1.0),T(1.0),T(0.0)),
1707 test_xy<T>(
"0 * (erf (x) + erfc (y) + sgn (y) + frac (y))",T(1.0),T(1.0),T(0.0)),
1708 test_xy<T>(
"0 * (log1p(x) + expm1(y) + acosh(x) + asinh(y))",T(1.0),T(1.0),T(0.0)),
1709 test_xy<T>(
"0 * (deg2grad(x) + grad2deg(y) + rad2deg(x) + deg2rad(y))",T(1.0),T(1.0),T(0.0)),
1710 test_xy<T>(
"switch { case (x <= y) : (y - x); default: 1.12345; }",T(1.0),T(2.0),T(1.0)),
1711 test_xy<T>(
"switch { case (x > y) : 0; 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) : switch { case (x <= y) : (y - x); default: 1.12345; }; default: 1.12345; }",T(1.0),T(2.0),T(1.0)),
1713 test_xy<T>(
"switch { case [x <= y] : [y - x]; default: 1.12345; }",T(1.0),T(2.0),T(1.0)),
1714 test_xy<T>(
"switch { case [x > y] : 0; 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] : switch { case [x <= y] : {y - x}; default: 1.12345; }; default: 1.12345; }",T(1.0),T(2.0),T(1.0)),
1716 test_xy<T>(
"switch { case {x <= y} : x; default: 1.12345; }",T(1.0),T(2.0),T(1.0)),
1717 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)),
1718 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)),
1719 test_xy<T>(
"switch { case [(x <= y)] : {y - x}; default: 1.12345; }",T(1.0),T(2.0),T(1.0)),
1720 test_xy<T>(
"switch { case ([x > y]) : [0]; 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)} : switch { case ({x <= y}) : x; default: 1.12345; }; default: 1.12345; }",T(1.0),T(2.0),T(1.0)),
1722 test_xy<T>(
"[*]{ case x < y : x + y; case y < x : y - x; }",T(2.0),T(3.0),T(5.0)),
1723 test_xy<T>(
"[*]{ case x > y : x + y; case y > x : y - x; }",T(2.0),T(3.0),T(1.0)),
1724 test_xy<T>(
"[*]{ case x > y : x - y; case y < x : y + x; }",T(2.0),T(3.0),T(0.0)),
1725 test_xy<T>(
"0 ? x : y" ,T(1.0),T(2.0),T( 2.0)),
1726 test_xy<T>(
"1 ? x : y" ,T(1.0),T(2.0),T( 1.0)),
1727 test_xy<T>(
"x ? x : y" ,T(1.0),T(2.0),T( 1.0)),
1728 test_xy<T>(
"x ? x : y" ,T(0.0),T(2.0),T( 2.0)),
1729 test_xy<T>(
"(x + y < 4) ? 1 : 2" ,T(1.0),T(2.0),T( 1.0)),
1730 test_xy<T>(
"(x + y > 4) ? 1 : 2" ,T(1.0),T(2.0),T( 2.0)),
1731 test_xy<T>(
"x < y ? x + y : x - y" ,T(1.0),T(2.0),T( 3.0)),
1732 test_xy<T>(
"x > y ? x + y : x - y" ,T(1.0),T(2.0),T(-1.0)),
1733 test_xy<T>(
"(x + x < y ? 7 : 9) == 7" ,T(1.0),T(3.0),T( 1.0)),
1734 test_xy<T>(
"(x + x < y + y ? 7 : 9) == 7" ,T(1.0),T(3.0),T( 1.0)),
1735 test_xy<T>(
"(x > y + y ? 7 : 9) == 9" ,T(1.0),T(3.0),T( 1.0)),
1736 test_xy<T>(
"(x + x > y ? 7 : 9) == 9" ,T(1.0),T(3.0),T( 1.0)),
1737 test_xy<T>(
"(x + x > y + 3 ? 7 : 9) == 9" ,T(1.0),T(3.0),T( 1.0)),
1738 test_xy<T>(
"(x < (y + y) ? 7 : 9) == 7" ,T(1.0),T(3.0),T( 1.0)),
1739 test_xy<T>(
"((x + x) < y ? 7 : 9) == 7" ,T(1.0),T(3.0),T( 1.0)),
1740 test_xy<T>(
"((x + x) < (y + y) ? 7 : 9) == 7",T(1.0),T(3.0),T( 1.0)),
1741 test_xy<T>(
"(x += 2 ) == 3 " ,T(1),T(3),T(1)),
1742 test_xy<T>(
"(x += 2y) == 7 " ,T(1),T(3),T(1)),
1743 test_xy<T>(
"(x -= 2 ) == -1 " ,T(1),T(3),T(1)),
1744 test_xy<T>(
"(x -= 2y) == -5 " ,T(1),T(3),T(1)),
1745 test_xy<T>(
"(x *= 2 ) == 2 " ,T(1),T(3),T(1)),
1746 test_xy<T>(
"(x *= 2y) == 6 " ,T(1),T(3),T(1)),
1747 test_xy<T>(
"(x /= 2 ) == (1/2)" ,T(1),T(3),T(1)),
1748 test_xy<T>(
"(x /= 2y) == (1/6)" ,T(1),T(3),T(1)),
1749 test_xy<T>(
"for(var i := 0; (i < 10);) { i += 1; }; x;" ,T(1),T(20),T( 1)),
1750 test_xy<T>(
"for(var i := 0; (i < 10) and (i != y); i+=2) { x += i; }; x;" ,T(1),T(20),T(21)),
1751 test_xy<T>(
"for(var i := 0; (i < 10) and (i != y);) { x += i; i+=2; }; x;",T(1),T(20),T(21)),
1752 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)),
1753 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)),
1754 test_xy<T>(
"var a := 2; (0 * a) == 0",T(0),T(0),T(1)),
1755 test_xy<T>(
"var a := 2; (0 / a) == 0",T(0),T(0),T(1)),
1756 test_xy<T>(
"var a := 2; (a * 0) == 0",T(0),T(0),T(1)),
1757 test_xy<T>(
"var a := 2; (a / 1) == a",T(0),T(0),T(1)),
1758 test_xy<T>(
"var a := 2; (0 + a) == a",T(0),T(0),T(1)),
1759 test_xy<T>(
"var a := 2; (a + 0) == a",T(0),T(0),T(1)),
1760 test_xy<T>(
"var a := 2; (1 * a) == a",T(0),T(0),T(1)),
1761 test_xy<T>(
"var a.b := 3; (2 * a.b ) == 6",T(0),T(0),T(1)),
1762 test_xy<T>(
"var aa.bb := 3; (2 * aa.bb ) == 6",T(0),T(0),T(1)),
1763 test_xy<T>(
"var aaa.bbb := 3; (2 * aAa.BbB) == 6",T(0),T(0),T(1)),
1764 test_xy<T>(
"var a1.b2 := 3; (2 * a1.b2 ) == 6",T(0),T(0),T(1))
1767 static const std::size_t test_list_size =
sizeof(test_list) /
sizeof(
test_xy<T>);
1769 const std::size_t
rounds = 60;
1771 for (std::size_t r = 0; r <
rounds; ++r)
1773 bool loop_result =
true;
1775 for (std::size_t i = 0; i < test_list_size; ++i)
1794 printf(
"run_test01() - Error: %s Expression: %s\n",
1795 parser.
error().c_str(),
1798 loop_result =
false;
1804 const T result = expression.
value();
1808 printf(
"run_test01() - Computation Error: Expression: [%s]\tExpected: %25.20f\tResult: %25.20f\n",
1813 loop_result =
false;
1827 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 ))),
1828 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 ))),
1829 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 ))),
1830 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 ))),
1831 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)))),
1832 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)))),
1833 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)))),
1834 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)))),
1835 test_xyzw<T>(
"([(min(x,y) + z) + 3] - 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((std::min(5.0,7.0) + 9.0) + 3.0) - 4.0))),
1836 test_xyzw<T>(
"([(min(x,y) + z) + 3] + 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((std::min(5.0,7.0) + 9.0) + 3.0) + 4.0))),
1837 test_xyzw<T>(
"([(min(x,y) + z) + 3] * 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((std::min(5.0,7.0) + 9.0) + 3.0) * 4.0))),
1838 test_xyzw<T>(
"([(min(x,y) + z) + 3] / 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((std::min(5.0,7.0) + 9.0) + 3.0) / 4.0))),
1839 test_xyzw<T>(
"([(min(x,y) + z) - 3] - 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((std::min(5.0,7.0) + 9.0) - 3.0) - 4.0))),
1840 test_xyzw<T>(
"([(min(x,y) + z) - 3] + 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((std::min(5.0,7.0) + 9.0) - 3.0) + 4.0))),
1841 test_xyzw<T>(
"([(min(x,y) + z) - 3] * 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((std::min(5.0,7.0) + 9.0) - 3.0) * 4.0))),
1842 test_xyzw<T>(
"([(min(x,y) + z) - 3] / 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((std::min(5.0,7.0) + 9.0) - 3.0) / 4.0))),
1843 test_xyzw<T>(
"([(min(x,y) + z) * 3] - 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((std::min(5.0,7.0) + 9.0) * 3.0) - 4.0))),
1844 test_xyzw<T>(
"([(min(x,y) + z) * 3] + 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((std::min(5.0,7.0) + 9.0) * 3.0) + 4.0))),
1845 test_xyzw<T>(
"([(min(x,y) + z) * 3] * 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((std::min(5.0,7.0) + 9.0) * 3.0) * 4.0))),
1846 test_xyzw<T>(
"([(min(x,y) + z) * 3] / 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((std::min(5.0,7.0) + 9.0) * 3.0) / 4.0))),
1847 test_xyzw<T>(
"([(min(x,y) + z) / 3] - 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((std::min(5.0,7.0) + 9.0) / 3.0) - 4.0))),
1848 test_xyzw<T>(
"([(min(x,y) + z) / 3] + 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((std::min(5.0,7.0) + 9.0) / 3.0) + 4.0))),
1849 test_xyzw<T>(
"([(min(x,y) + z) / 3] * 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((std::min(5.0,7.0) + 9.0) / 3.0) * 4.0))),
1850 test_xyzw<T>(
"([(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>(
"(4 - [3 + (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 - (3.0 + (std::min(5.0,7.0) + 9.0))))),
1852 test_xyzw<T>(
"(4 + [3 + (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 + (3.0 + (std::min(5.0,7.0) + 9.0))))),
1853 test_xyzw<T>(
"(4 * [3 + (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 * (3.0 + (std::min(5.0,7.0) + 9.0))))),
1854 test_xyzw<T>(
"(4 / [3 + (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 / (3.0 + (std::min(5.0,7.0) + 9.0))))),
1855 test_xyzw<T>(
"(4 - [3 - (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 - (3.0 - (std::min(5.0,7.0) + 9.0))))),
1856 test_xyzw<T>(
"(4 + [3 - (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 + (3.0 - (std::min(5.0,7.0) + 9.0))))),
1857 test_xyzw<T>(
"(4 * [3 - (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 * (3.0 - (std::min(5.0,7.0) + 9.0))))),
1858 test_xyzw<T>(
"(4 / [3 - (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 / (3.0 - (std::min(5.0,7.0) + 9.0))))),
1859 test_xyzw<T>(
"(4 - [3 * (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 - (3.0 * (std::min(5.0,7.0) + 9.0))))),
1860 test_xyzw<T>(
"(4 + [3 * (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 + (3.0 * (std::min(5.0,7.0) + 9.0))))),
1861 test_xyzw<T>(
"(4 * [3 * (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 * (3.0 * (std::min(5.0,7.0) + 9.0))))),
1862 test_xyzw<T>(
"(4 / [3 * (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 / (3.0 * (std::min(5.0,7.0) + 9.0))))),
1863 test_xyzw<T>(
"(4 - [3 / (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 - (3.0 / (std::min(5.0,7.0) + 9.0))))),
1864 test_xyzw<T>(
"(4 + [3 / (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 + (3.0 / (std::min(5.0,7.0) + 9.0))))),
1865 test_xyzw<T>(
"(4 * [3 / (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 * (3.0 / (std::min(5.0,7.0) + 9.0))))),
1866 test_xyzw<T>(
"(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>(
"if (x < y) { z+2; z;} == z" ,T(1.0),T(2.0),T(3.0),T(4.0),T(1.0)),
1868 test_xyzw<T>(
"if (x > y) { z+2; z;} == null" ,T(1.0),T(2.0),T(3.0),T(4.0),T(1.0)),
1869 test_xyzw<T>(
"if (x < y) { z+2; z;} else w; == z" ,T(1.0),T(2.0),T(3.0),T(4.0),T(1.0)),
1870 test_xyzw<T>(
"if (x > y) { z+2; z;} else 1 + w; == (w + 1)" ,T(1.0),T(2.0),T(3.0),T(4.0),T(1.0)),
1871 test_xyzw<T>(
"if (x < y) { z+2; z;} else {1+2; w;} == z" ,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;} == w" ,T(1.0),T(2.0),T(3.0),T(4.0),T(1.0)),
1873 test_xyzw<T>(
"(if (x < y) { z+2; z;} else if (x < y) w;) == z" ,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) 1 + w;) == w + 1" ,T(1.0),T(2.0),T(3.0),T(4.0),T(1.0)),
1875 test_xyzw<T>(
"(if (x > y) { z+2; z;} else if (x > y) w;) == null" ,T(1.0),T(2.0),T(3.0),T(4.0),T(1.0)),
1876 test_xyzw<T>(
"if (x < y) { z+2; z;} else if (x < y) {w + 2; w;} == z" ,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;} == w" ,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;} == null",T(1.0),T(2.0),T(3.0),T(4.0),T(1.0))
1881 static const std::size_t test_list_size =
sizeof(test_list) /
sizeof(
test_xyzw<T>);
1883 const std::size_t
rounds = 60;
1885 for (std::size_t r = 0; r <
rounds; ++r)
1887 bool loop_result =
true;
1888 for (std::size_t i = 0; i < test_list_size; ++i)
1893 symbol_table.add_variable(
"x",test.
x);
1894 symbol_table.add_variable(
"y",test.
y);
1895 symbol_table.add_variable(
"z",test.
z);
1896 symbol_table.add_variable(
"w",test.
w);
1906 printf(
"run_test01() - Error: %s Expression: %s\n",
1907 parser.
error().c_str(),
1910 loop_result =
false;
1916 const T result = expression.
value();
1920 printf(
"run_test01() - Computation Error: Expression: [%s]\tExpected: %19.15f\tResult: %19.15f\n",
1925 loop_result =
false;
1937 const std::string expr_list[] =
1939 "((v[1] + x) == (x + v[1]))",
1940 "((v[0] += x) == x)",
1941 "((v[0] += x + y) == (x + y))",
1942 "((v[0] -= x) == -x)",
1943 "((v[0] -= (x + y)) == -(x + y))",
1944 "((v[1] + v[2]) == (v[3 - 1] + v[2 * 1/2]))",
1945 "(v[v[1]] == v[1])",
1946 "(v[1] += v[1]) == v[1 + 1]",
1947 "((v[i[1]] + x) == (x + v[i[1]]))",
1948 "((v[i[0]] += x) == x)",
1949 "((v[i[0]] += x + y) == (x + y))",
1950 "((v[i[0]] -= x) == -x)",
1951 "((v[i[0]] -= (x + y)) == -(x + y))",
1952 "((v[i[1]] + v[2]) == (v[i[3] - i[1]] + v[i[2] * 1/2]))",
1953 "(v[v[i[1]]] == v[i[1]])",
1954 "(v[i[1]] += v[i[1]]) == v[i[1] + 1]"
1957 const std::size_t expr_list_size =
sizeof(expr_list) /
sizeof(std::string);
1959 const std::size_t
rounds = 60;
1961 for (std::size_t r = 0; r <
rounds; ++r)
1963 bool loop_result =
true;
1965 for (std::size_t i = 0; i < expr_list_size; ++i)
1967 T v[] = { T(0.0), T(1.1), T(2.2), T(3.3), T(4.4), T(5.5) };
1968 T index[] = { T(0) , T(1) , T(2) , T(3) , T(4) , T(5) };
1987 if (!parser.
compile(expr_list[i],expression))
1989 printf(
"run_test01() - Error: %s Expression: %s\n",
1990 parser.
error().c_str(),
1991 expr_list[i].c_str());
1993 loop_result =
false;
1999 const T result = expression.
value();
2003 printf(
"run_test01() - Computation Error: Expression: [%s]\tExpected: %19.15f\tResult: %19.15f\n",
2004 expr_list[i].c_str(),
2005 static_cast<double>(1.0),
2008 loop_result =
false;
2018 for (std::size_t r = 0; r <
rounds; ++r)
2020 bool loop_result =
true;
2022 for (std::size_t i = 0; i < expr_list_size; ++i)
2024 T v_[] = { T(0.0), T(1.1), T(2.2), T(3.3), T(4.4), T(5.5) };
2025 T index_[] = { T(0) , T(1) , T(2) , T(3) , T(4) , T(5) };
2047 if (!parser.
compile(expr_list[i],expression))
2049 printf(
"run_test01() - Error: %s Expression: %s\n",
2050 parser.
error().c_str(),
2051 expr_list[i].c_str());
2053 loop_result =
false;
2059 const T result = expression.
value();
2063 printf(
"run_test01() - Computation Error: Expression: [%s]\tExpected: %19.15f\tResult: %19.15f\n",
2064 expr_list[i].c_str(),
2065 static_cast<double>(1.0),
2067 loop_result =
false;
3896 std::string i_s =
"A String";
3897 std::string j_s =
"Another String";
3898 std::string ii_s =
"A String";
3899 std::string jj_s =
"Another String";
3903 static inline bool variable(
exprtk::symbol_table<T>& symbol_table,
const std::string& variable_name,
const T& value)
3913 static inline bool string(
exprtk::symbol_table<T>& symbol_table,
const std::string& string_name,
const std::string& str)
3918 return (str_node->
ref() == str);
3925 static const std::size_t
rounds = 10;
3929 for (std::size_t r = 0; r <
rounds; ++r)
3938 printf(
"run_test10() - Symbol 'x' does not exist!\n");
3943 printf(
"run_test10() - Symbol 'y' does not exist!\n");
3948 printf(
"run_test10() - Symbol 'xx' does not exist!\n");
3953 printf(
"run_test10() - Symbol 'yy' does not exist!\n");
3956 else if (!test::variable(symbol_table,
"x", x))
3958 printf(
"run_test10() - Symbol 'x' value failure!\n");
3961 else if (!test::variable(symbol_table,
"y", y))
3963 printf(
"run_test10() - Symbol 'y' value failure!\n");
3966 else if (!test::variable(symbol_table,
"xx", xx))
3968 printf(
"run_test10() - Symbol 'xx' value failure!\n");
3971 else if (!test::variable(symbol_table,
"yy", yy))
3973 printf(
"run_test10() - Symbol 'yy' value failure!\n");
3979 printf(
"run_test10() - Failed to remove symbol 'x'!\n");
3984 printf(
"run_test10() - Failed to remove symbol 'y'!\n");
3989 printf(
"run_test10() - Failed to remove symbol 'xx'!\n");
3994 printf(
"run_test10() - Failed to remove symbol 'yy'!\n");
3999 for (std::size_t r = 0; r <
rounds; ++r)
4008 printf(
"run_test10() - function 'f' does not exist!\n");
4013 printf(
"run_test10() - function 'f1' does not exist!\n");
4019 printf(
"run_test10() - Failed to remove function 'f'!\n");
4024 printf(
"run_test10() - Failed to remove function 'f1'!\n");
4029 for (std::size_t r = 0; r <
rounds; ++r)
4039 printf(
"run_test10() - String 'i' does not exist!\n");
4044 printf(
"run_test10() - String 'j' does not exist!\n");
4049 printf(
"run_test10() - String 'ii' does not exist!\n");
4054 printf(
"run_test10() - String 'jj' does not exist!\n");
4057 else if (!test::string(symbol_table,
"i", i_s))
4059 printf(
"run_test10() - String 'i' value failure!\n");
4062 else if (!test::string(symbol_table,
"j", j_s))
4064 printf(
"run_test10() - String 'j' value failure!\n");
4067 else if (!test::string(symbol_table,
"ii", ii_s))
4069 printf(
"run_test10() - String 'ii' value failure!\n");
4072 else if (!test::string(symbol_table,
"jj", jj_s))
4074 printf(
"run_test10() - String 'jj' value failure!\n");
4079 printf(
"run_test10() - Failed to remove String 'i'!\n");
4084 printf(
"run_test10() - Failed to remove String 'j'!\n");
4089 printf(
"run_test10() - Failed to remove String 'ii'!\n");
4094 printf(
"run_test10() - Failed to remove String 'jj'!\n");
4099 for (std::size_t r = 0; r <
rounds; ++r)
4106 std::vector<std::string> expected_var_list;
4108 expected_var_list.push_back(
"x" );
4109 expected_var_list.push_back(
"y" );
4110 expected_var_list.push_back(
"xx");
4111 expected_var_list.push_back(
"yy");
4113 std::deque<std::pair<std::string, T> > variable_list;
4117 if (variable_list.size() != expected_var_list.size())
4119 printf(
"run_test10() - Failed to get variable list (1)\n");
4123 std::size_t found_count = 0;
4125 for (std::size_t i = 0; i < variable_list.size(); ++i)
4127 for (std::size_t j = 0; j < expected_var_list.size(); ++j)
4129 if (variable_list[i].first == expected_var_list[j])
4137 if (found_count != expected_var_list.size())
4139 printf(
"run_test10() - Failed to get variable list (2)\n");
4144 for (std::size_t r = 0; r <
rounds; ++r)
4151 std::vector<std::string> expected_var_list;
4153 expected_var_list.push_back(
"x" );
4154 expected_var_list.push_back(
"y" );
4155 expected_var_list.push_back(
"xx");
4156 expected_var_list.push_back(
"yy");
4158 std::deque<std::string> variable_list;
4162 if (variable_list.size() != expected_var_list.size())
4164 printf(
"run_test10() - Failed to get variable list (3)\n");
4168 std::size_t found_count = 0;
4170 for (std::size_t i = 0; i < variable_list.size(); ++i)
4172 for (std::size_t j = 0; j < expected_var_list.size(); ++j)
4174 if (variable_list[i] == expected_var_list[j])
4182 if (found_count != expected_var_list.size())
4184 printf(
"run_test10() - Failed to get variable list (4)\n");
4189 for (std::size_t r = 0; r <
rounds; ++r)
4196 std::vector<std::string> expected_var_list;
4198 expected_var_list.push_back(
"i" );
4199 expected_var_list.push_back(
"j" );
4200 expected_var_list.push_back(
"ii");
4201 expected_var_list.push_back(
"jj");
4203 std::deque<std::pair<std::string, std::string> > stringvar_list;
4207 if (stringvar_list.size() != expected_var_list.size())
4209 printf(
"run_test10() - Failed to get stringvar list (1)\n");
4213 std::size_t found_count = 0;
4215 for (std::size_t i = 0; i < stringvar_list.size(); ++i)
4217 for (std::size_t j = 0; j < expected_var_list.size(); ++j)
4219 if (stringvar_list[i].first == expected_var_list[j])
4227 if (found_count != expected_var_list.size())
4229 printf(
"run_test10() - Failed to get stringvar list (2)\n");
4234 for (std::size_t r = 0; r <
rounds; ++r)
4241 std::vector<std::string> expected_var_list;
4243 expected_var_list.push_back(
"i" );
4244 expected_var_list.push_back(
"j" );
4245 expected_var_list.push_back(
"ii");
4246 expected_var_list.push_back(
"jj");
4248 std::deque<std::string> stringvar_list;
4252 if (stringvar_list.size() != expected_var_list.size())
4254 printf(
"run_test10() - Failed to get stringvar list (3.0)\n");
4260 printf(
"run_test10() - Failed to get stringvar list (3.1)\n");
4264 std::size_t found_count = 0;
4266 for (std::size_t i = 0; i < stringvar_list.size(); ++i)
4268 for (std::size_t j = 0; j < expected_var_list.size(); ++j)
4270 if (stringvar_list[i] == expected_var_list[j])
4278 if (found_count != expected_var_list.size())
4280 printf(
"run_test10() - Failed to get stringvar list (4)\n");
4291 std::string expression_string =
"(x0 + y0) / z0";
4293 static const std::size_t
rounds = 100;
4295 for (std::size_t i = 0; i <
rounds; ++i)
4297 expression_t expression0;
4309 expression0.register_symbol_table(st0);
4314 if (!parser.
compile(expression_string,expression0))
4316 printf(
"run_test10() - Error: %s Expression: %s\n",
4317 parser.
error().c_str(),
4318 expression_string.c_str());
4325 expression_t expression1;
4327 expression1.register_symbol_table(st1);
4332 if (!parser.
compile(expression_string,expression1))
4334 printf(
"run_test10() - Error: %s Expression: %s\n",
4335 parser.
error().c_str(),
4336 expression_string.c_str());
4355 std::string e =
"string";
4365 expression_t expression;
4366 expression.register_symbol_table(symbol_table);
4368 std::string expression_string =
"(E == '1234') and (sin(a) + C) / b";
4371 typedef typename parser_t::dependent_entity_collector::symbol_t symbol_t;
4373 std::deque<symbol_t> symbol_list;
4379 parser.dec().collect_functions() =
true;
4381 if (!parser.compile(expression_string,expression))
4383 printf(
"run_test10() - Error: %s Expression: %s\n",
4384 parser.error().c_str(),
4385 expression_string.c_str());
4390 parser.dec().symbols(symbol_list);
4393 std::deque<symbol_t> expected_symbol_list;
4395 expected_symbol_list.push_back(symbol_t(
"a" ,parser_t::e_st_variable));
4396 expected_symbol_list.push_back(symbol_t(
"b" ,parser_t::e_st_variable));
4397 expected_symbol_list.push_back(symbol_t(
"c" ,parser_t::e_st_variable));
4398 expected_symbol_list.push_back(symbol_t(
"e" ,parser_t::e_st_string ));
4399 expected_symbol_list.push_back(symbol_t(
"sin",parser_t::e_st_function));
4401 bool result = (symbol_list.size() == expected_symbol_list.size()) &&
4402 std::equal(symbol_list.begin(),
4404 expected_symbol_list.begin());
4407 printf(
"run_test10() - Failed variable list comparison.(5)\n");
4418 std::string e =
"string";
4428 expression_t expression;
4429 expression.register_symbol_table(symbol_table);
4431 const std::string expression_string =
4438 typedef typename parser_t::dependent_entity_collector::symbol_t symbol_t;
4440 std::deque<symbol_t> variable_list;
4447 if (!parser.compile(expression_string,expression))
4449 printf(
"run_test10() - Error: %s Expression: %s\n",
4450 parser.error().c_str(),
4451 expression_string.c_str());
4456 parser.dec().assignment_symbols(variable_list);
4459 std::deque<symbol_t> expected_assignment_list;
4461 expected_assignment_list.push_back(symbol_t(
"a",parser_t::e_st_variable));
4462 expected_assignment_list.push_back(symbol_t(
"b",parser_t::e_st_variable));
4463 expected_assignment_list.push_back(symbol_t(
"c",parser_t::e_st_variable));
4464 expected_assignment_list.push_back(symbol_t(
"e",parser_t::e_st_string ));
4466 bool result = (variable_list.size() == expected_assignment_list.size()) &&
4467 std::equal(variable_list.begin(),
4468 variable_list.end(),
4469 expected_assignment_list.begin());
4472 printf(
"run_test10() - Failed variable list comparison.(6)\n");
4481 if (symbol_table0 == symbol_table1)
4483 printf(
"run_test10() - Error symbol_table0 and symbol_table1 are equal\n");
4487 symbol_table0 = symbol_table1;
4488 symbol_table1 = symbol_table0;
4490 if (!(symbol_table0 == symbol_table1))
4492 printf(
"run_test10() - Error symbol_table0 and symbol_table1 are not equal\n");
4503 std::string e =
"a string";
4507 expression_t expression;
4509 for (std::size_t i = 0; i < 10000; ++i)
4511 symbol_table0.
clear();
4512 symbol_table1.
clear();
4528 expression.register_symbol_table(symbol_table0);
4529 expression.register_symbol_table(symbol_table1);
4534 const std::string expression =
4535 "for (var i := 0; i < min(x[],y[],z[]); i += 1)"
4536 "{ z[i] := 3sin(x[i]) + 2log(y[i]); }";
4538 std::vector<std::string> var_symbol_list;
4539 std::vector<std::string> func_symbol_list;
4543 printf(
"run_test10() - Failed to collect variables.\n");
4549 printf(
"run_test10() - Failed to collect functions.\n");
4553 std::sort(var_symbol_list .begin(), var_symbol_list .end());
4554 std::sort(func_symbol_list.begin(), func_symbol_list.end());
4556 std::vector<std::string> expected_var_symbol_list;
4557 std::vector<std::string> expected_func_symbol_list;
4559 expected_var_symbol_list.push_back(
"i");
4560 expected_var_symbol_list.push_back(
"x");
4561 expected_var_symbol_list.push_back(
"y");
4562 expected_var_symbol_list.push_back(
"z");
4564 expected_func_symbol_list.push_back(
"log");
4565 expected_func_symbol_list.push_back(
"min");
4566 expected_func_symbol_list.push_back(
"sin");
4568 const bool var_result = (var_symbol_list.size() == expected_var_symbol_list.size()) &&
4569 std::equal(var_symbol_list.begin(),
4570 var_symbol_list.end(),
4571 expected_var_symbol_list.begin());
4574 printf(
"run_test10() - Failed collected variable comparison between received and expected variables\n");
4578 const bool func_result = (func_symbol_list.size() == expected_func_symbol_list.size()) &&
4579 std::equal(func_symbol_list.begin(),
4580 func_symbol_list.end(),
4581 expected_func_symbol_list.begin());
4584 printf(
"run_test10() - Failed collected functions comparison between received and expected functions\n");
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 == 2",
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 == 0",
4603 "var x:= 1; x +- -1== 2",
4604 "var x:= 1; x + +1 == 2",
4605 "var x:= 1; x ++1 == 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 == 2",
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 == 0",
4615 "var x:= 1; 1 +- -x== 2",
4616 "var x:= 1; 1 + +x == 2",
4617 "var x:= 1; 1 ++x == 2",
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) == 3",
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) == 1",
4627 "var x:= 1; (x +- -1 + 1) == 3",
4628 "var x:= 1; (x + +1 + 1) == 3",
4629 "var x:= 1; (x ++1 + 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) == 3",
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) == 1",
4639 "var x:= 1; (1 +- -x + 1) == 3",
4640 "var x:= 1; (1 + +x + 1) == 3",
4641 "var x:= 1; (1 ++x + 1) == 3",
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; (x ++1 - 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; (1 ++x - 1) == 1",
4666 "var x := 1; var y := 2; 1",
4667 "var x := 1; var y := 2; x",
4668 "var x:=6; var y:=4; x + -3 == 3",
4669 "var x:=6; var y:=4; x - -3 == 9",
4670 "var x:=6; var y:=4; x * -3 == -18",
4671 "var x:=6; var y:=4; x / -3 == -2",
4672 "var x:=6; var y:=4; -x + -3 == -9",
4673 "var x:=6; var y:=4; -x - -3 == -3",
4674 "var x:=6; var y:=4; -x * -3 == 18",
4675 "var x:=6; var y:=4; -x / -3 == 2",
4676 "var x:=6; var y:=4; -3 + -x == -9",
4677 "var x:=6; var y:=4; -3 - -x == 3",
4678 "var x:=6; var y:=4; -3 * -x == 18",
4679 "var x:=6; var y:=4; -3 / -x == 0.5",
4680 "var x:=6; var y:=4; 3 + -x == -3",
4681 "var x:=6; var y:=4; 3 - -x == 9",
4682 "var x:=6; var y:=4; 3 * -x == -18",
4683 "var x:=6; var y:=4; 3 / -x == -0.5",
4684 "var x := 3; var y := 6; x + -y == -3",
4685 "var x := 3; var y := 6; x - -y == 9",
4686 "var x := 3; var y := 6; -x + -y == -9",
4687 "var x := 3; var y := 6; -x - -y == 3",
4688 "var x := 3; var y := 6; -x * -y == 18",
4689 "var x := 6; var y := 3; -x / -y == 2",
4690 "var x := 3; var y := 6; -(-x * -y) == -18",
4691 "var x := 6; var y := 3; -(-x / -y) == -2",
4692 "var x:=1; 2+(3+abs(x)) == 6 ",
4693 "var x:=1; (3+abs(x))+2 == 6 ",
4694 "var x:=1; 2+(abs(x)+3) == 6 ",
4695 "var x:=1; (abs(x)+3)+2 == 6 ",
4696 "var x:=1; 2+(3-abs(x)) == 4 ",
4697 "var x:=1; (3-abs(x))+2 == 4 ",
4698 "var x:=1; 2+(abs(x)-3) == 0 ",
4699 "var x:=1; (abs(x)-3)+2 == 0 ",
4700 "var x:=1; 2-(3+abs(x)) == -2 ",
4701 "var x:=1; (3+abs(x))-2 == 2 ",
4702 "var x:=1; 2-(abs(x)+3) == -2 ",
4703 "var x:=1; (abs(x)+3)-2 == 2 ",
4704 "var x:=1; 2*(3*abs(x)) == 6 ",
4705 "var x:=1; (3*abs(x))*2 == 6 ",
4706 "var x:=1; 2*(abs(x)*3) == 6 ",
4707 "var x:=1; (abs(x)*3)*2 == 6 ",
4708 "var x:=1; 2*(3/abs(x)) == 6 ",
4709 "var x:=1; (3/abs(x))*2 == 6 ",
4710 "var x:=1; 2*(abs(x)/3) == (2/3)",
4711 "var x:=1; (abs(x)/3)*2 == (2/3)",
4712 "var x:=1; 2/(3*abs(x)) == (2/3)",
4713 "var x:=1; (3*abs(x))/2 == (3/2)",
4714 "var x:=1; 2/(abs(x)*3) == (2/3)",
4715 "var x:=1; (abs(x)*3)/2 == (3/2)",
4716 "var x:=1; 2/(3/abs(x)) == (2/3)",
4717 "var x:=1; (3/abs(x))/2 == (3/2)",
4718 "var x:=1; 2/(abs(x)/3) == 6 ",
4719 "var x:=1; (abs(x)/3)/2 == (1/6)",
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)) == 18",
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:=3; var y:=6; -(-(-(x+y)))*-(-(-(y+x))) == 81",
4728 "var x:= 2; var y := 3; (-abs(x)+-abs(y)) == -5 ",
4729 "var x:= 2; var y := 3; (-abs(x)--abs(y)) == 1 ",
4730 "var x:= 2; var y := 3; (-abs(x)*-abs(y)) == 6 ",
4731 "var x:= 2; var y := 3; (-abs(x)/-abs(y)) == (2/3) ",
4732 "var x:= 2; var y := 3; (-abs(x)+abs(y)) == 1 ",
4733 "var x:= 2; var y := 3; (-abs(x)-abs(y)) == -5 ",
4734 "var x:= 2; var y := 3; (-abs(x)*abs(y)) == -6 ",
4735 "var x:= 2; var y := 3; (-abs(x)/abs(y)) == -(2/3) ",
4736 "var x:= 2; var y := 3; (abs(x)+-abs(y)) == -1 ",
4737 "var x:= 2; var y := 3; (abs(x)--abs(y)) == 5 ",
4738 "var x:= 2; var y := 3; (abs(x)*-abs(y)) == -6 ",
4739 "var x:= 2; var y := 3; (abs(x)/-abs(y)) == -(2/3) ",
4740 "var x:= 2; var y := 3; (-abs(x + 0)+-abs(y - 0)) == -5 ",
4741 "var x:= 2; var y := 3; (-abs(x + 0)--abs(y - 0)) == 1 ",
4742 "var x:= 2; var y := 3; (-abs(x + 0)*-abs(y - 0)) == 6 ",
4743 "var x:= 2; var y := 3; (-abs(x + 0)/-abs(y - 0)) == (2/3) ",
4744 "var x:= 2; var y := 3; (-abs(x + 0)+abs(y - 0)) == 1 ",
4745 "var x:= 2; var y := 3; (-abs(x + 0)-abs(y - 0)) == -5 ",
4746 "var x:= 2; var y := 3; (-abs(x + 0)*abs(y - 0)) == -6 ",
4747 "var x:= 2; var y := 3; (-abs(x + 0)/abs(y - 0)) == -(2/3) ",
4748 "var x:= 2; var y := 3; (abs(x + 0)+-abs(y - 0)) == -1 ",
4749 "var x:= 2; var y := 3; (abs(x + 0)--abs(y - 0)) == 5 ",
4750 "var x:= 2; var y := 3; (abs(x + 0)*-abs(y - 0)) == -6 ",
4751 "var x:= 2; var y := 3; (abs(x + 0)/-abs(y - 0)) == -(2/3) ",
4752 "var x := 1; var y := 2; swap(x,y); (x == 2) and (y == 1)",
4753 "var x := 1; var y := 2; x <=> y ; (x == 2) and (y == 1)",
4754 "var x := 'abc'; x == 'abc' ",
4755 "var x := 'abc'; var y := '123'; x != y ",
4756 "var x := 'abc'; var y := x + '123'; y == 'abc123' ",
4757 "var x := 'abc'; var y := '123' + x; y == '123abc' ",
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 := '1234'; x[]} == 7",
4761 "~{var x := '123'; x[]} + ~{var x := 4} == 7",
4762 "~{var x := 3} + ~{var x := '1234'; x[]} == 7",
4763 "~{var x := '123'; x[]} + ~{~{var x := 4}} == 7",
4764 "~{~{var x := 3}} + ~{var x := '1234'; x[]} == 7",
4765 "var v[2] := {1,2}; swap(v[0],v[1]); (v[0] == 2) and (v[1] == 1)",
4766 "var v[2] := {1,2}; v[0] <=> v[1] ; (v[0] == 2) and (v[1] == 1)",
4767 "var x := 1; var y := 2; ~(swap(x,y),(x == 2) and (y == 1))",
4768 "var x := 1; var y := 2; ~(x <=> y , (x == 2) and (y == 1))",
4769 "var v[2] := {1,2}; ~(swap(v[0],v[1]), (v[0] == 2) and (v[1] == 1))",
4770 "var v[2] := {1,2}; ~(v[0] <=> v[1] , (v[0] == 2) and (v[1] == 1))",
4771 "var v[2] := {1,2}; swap(v[zero],v[one]); (v[zero] == 2) and (v[one] == 1)",
4772 "var v[2] := {1,2}; v[zero] <=> v[one] ; (v[zero] == 2) and (v[one] == 1)",
4773 "var v[2] := {1,2}; ~(swap(v[zero],v[one]), (v[zero] == 2) and (v[one] == 1))",
4774 "var v[2] := {1,2}; ~(v[zero] <=> v[one] , (v[zero] == 2) and (v[one] == 1))",
4775 "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)",
4776 "var v[2] := {1,2}; 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}; ~(swap(v[2 * zero],v[(2 * one) / (1 + 1)]), (v[2 * zero] == 2) and (v[(2 * one) / (1 + 1)] == 1))",
4778 "var v[2] := {1,2}; ~(v[2 * zero] <=> v[(2 * one) / (1 + 1)] , (v[2 * zero] == 2) and (v[(2 * one) / (1 + 1)] == 1))",
4779 "var x := 1; var y := 2; var v[2] := {3,4}; swap(x,v[0]); swap(v[1],y); (x == 3) and (y == 4)",
4780 "var x := 1; var y := 2; var v[2] := {3,4}; x <=> v[0]; v[1] <=> y; (x == 3) and (y == 4)",
4781 "var x := 1; var y := 2; var v[2] := {3,4}; swap(x,v[zero]); swap(v[one],y); (x == 3) and (y == 4)",
4782 "var x := 1; var y := 2; var v[2] := {3,4}; x <=> v[zero]; v[one] <=> y; (x == 3) and (y == 4)",
4783 "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)",
4784 "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)",
4785 "~{ var x := 1 } + ~{ var x := 2 } == 3",
4786 "(~{ var x := 1 } + ~{ var x := 2 }) == (~{ var x := 2 } + ~{ var x := 1 })",
4787 "(~{ var x := 1 } + ~{ var x := 2 } + ~{~{ var x := 1 } + ~{ var x := 2 }}) == 6",
4788 "(~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{~{ var x[1] := [1] } + ~{ var x[1] := [2] }}) == 6",
4789 "(~{ var x := [1] } + ~{ var x[1] := [2] } + ~{~{ var x[1] := [1] } + ~{ var x[1] := [2] }}) == 6",
4790 "(~{ var x[1] := [1] } + ~{ var x := [2] } + ~{~{ var x[1] := [1] } + ~{ var x[1] := [2] }}) == 6",
4791 "(~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{~{ var x := [1] } + ~{ var x[1] := [2] }}) == 6",
4792 "(~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{~{ var x[1] := [1] } + ~{ var x := [2] }}) == 6",
4793 "(~{~{ var x[1] := [1] } + ~{ var x[1] := [2] }} + ~{ var x[1] := [1] } + ~{ var x[1] := [2] }) == 6",
4794 "(~{~{ var x := [1] } + ~{ var x[1] := [2] }} + ~{ var x[1] := [1] } + ~{ var x[1] := [2] }) == 6",
4795 "(~{~{ var x[1] := [1] } + ~{ var x := [2] }} + ~{ var x[1] := [1] } + ~{ var x[1] := [2] }) == 6",
4796 "(~{~{ var x[1] := [1] } + ~{ var x[1] := [2] }} + ~{ var x := [1] } + ~{ var x[1] := [2] }) == 6",
4797 "(~{~{ var x[1] := [1] } + ~{ var x[1] := [2] }} + ~{ var x[1] := [1] } + ~{ var x := [2] }) == 6",
4798 "(~{~{ var x[1] := [1] }} + ~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{{ var x[1] := [2] }}) == 6",
4799 "(~{~{ var x := [1] }} + ~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{{ var x[1] := [2] }}) == 6",
4800 "(~{~{ var x[1] := [1] }} + ~{ var x := [1] } + ~{ var x[1] := [2] } + ~{{ var x[1] := [2] }}) == 6",
4801 "(~{~{ var x[1] := [1] }} + ~{ var x[1] := [1] } + ~{ var x := [2] } + ~{{ var x[1] := [2] }}) == 6",
4802 "(~{~{ var x[1] := [1] }} + ~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{{ var x := [2] }}) == 6",
4803 "(~{~{~{var x[1] := [1]}}} + ~{~{var x[1] := [2]}} + ~{var x[1] := [3]}) == 6",
4804 "(~{var x[1] := [1]} + ~{~{var x[1] := [2]}} + ~{~{~{var x[1] := [3]}}}) == 6",
4805 "(~{ var x[3] := [1] } + ~{ var x[6] := {6,5,4,3,2,1}}) == 7",
4806 "(~{ var x[6] := {6,5,4,3,2,1} } + ~{ var x := 1 }) == 7",
4807 "(~{ var x := 1 } + ~{ var x[6] := {6,5,4,3,2,1} }) == 7",
4808 "var x[3] := {}; (x[0] == 0) and (x[1] == 0) and (x[2] == 0)",
4809 "var x[3] := {1,2}; (x[0] == 1) and (x[1] == 2) and (x[2] == 0)",
4810 "var x[3] := {1,2,3}; (x[0] == 1) and (x[1] == 2) and (x[2] == 3)",
4811 "var x[3] := [1]; (x[0] == 1) and (x[1] == 1) and (x[2] == 1)",
4812 "var v[3] := [1]; v += 1; (v[0] == v[1]) and (v[0] == v[2]) and (v[0] == 2)",
4813 "var v[3] := [1]; v -= 1; (v[0] == v[1]) and (v[0] == v[2]) and (v[0] == 0)",
4814 "var v[3] := [1]; v *= 2; (v[0] == v[1]) and (v[0] == v[2]) and (v[0] == 2)",
4815 "var v[3] := [3]; v /= 3; (v[0] == v[1]) and (v[0] == v[2]) and (v[0] == 1)",
4816 "var v[3] := {1,2, 3}; v += 1; (v[0] == 2) and (v[1] == 3) and (v[2] == 4)",
4817 "var v[3] := {1,2, 3}; v -= 1; (v[0] == 0) and (v[1] == 1) and (v[2] == 2)",
4818 "var v[3] := {1,2, 3}; v *= 2; (v[0] == 2) and (v[1] == 4) and (v[2] == 6)",
4819 "var v[3] := {3,9,15}; v /= 3; (v[0] == 1) and (v[1] == 3) and (v[2] == 5)",
4820 "var v0[3] := [1]; var v1[3] := [1]; v0 += v1; (v0[0] == v0[1]) and (v0[0] == v0[2]) and (v0[0] == 2)",
4821 "var v0[3] := [1]; var v1[3] := [1]; v0 -= v1; (v0[0] == v0[1]) and (v0[0] == v0[2]) and (v0[0] == 0)",
4822 "var v0[3] := [1]; var v1[3] := [2]; v0 *= v1; (v0[0] == v0[1]) and (v0[0] == v0[2]) and (v0[0] == 2)",
4823 "var v0[3] := [3]; var v1[3] := [3]; v0 /= v1; (v0[0] == v0[1]) and (v0[0] == v0[2]) and (v0[0] == 1)",
4824 "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)",
4825 "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)",
4826 "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)",
4827 "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)",
4828 "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])",
4829 "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])",
4830 "var x[3] := {}; var y[2] := {1,2}; x := y; (x[0] == y[0]) and (x[1] == y[1]) and (x[2] == 0)",
4831 "var x[3] := {}; var y[1] := {1}; x := y; (x[0] == y[0]) and (x[1] == 0) and (x[2] == 0)",
4832 "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])",
4833 "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])",
4834 "var x[3] := {}; var y[2] := {1,2}; x := (y+=1); (x[0] == y[0]) and (x[1] == y[1]) and (x[2] == 0)",
4835 "var x[3] := {}; var y[1] := {1}; x := (y+=1); (x[0] == y[0]) and (x[1] == 0) and (x[2] == 0)",
4836 "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])",
4837 "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])",
4838 "var x[3] := {}; var y[2] := {1,2}; x += (y+=1); (x[0] == y[0]) ",
4839 "var x[3] := {}; var y[2] := {1,2}; x += (y+=1); (x[0] == y[0]) and (x[1] == y[1]) ",
4840 "var x[3] := {}; var y[2] := {1,2}; x += (y+=1); (x[0] == y[0]) and (x[1] == y[1]) and (x[2] == 0)",
4841 "var x[3] := {}; var y[1] := {1}; x += (y+=1); (x[0] == y[0]) ",
4842 "var x[3] := {}; var y[1] := {1}; x += (y+=1); (x[0] == y[0]) and (x[1] == 0) ",
4843 "var x[3] := {}; var y[1] := {1}; x += (y+=1); (x[0] == y[0]) and (x[1] == 0) and (x[2] == 0)",
4844 "var x[3] := [9]; var y[4] := {1,2,3,4}; x <=> y; (x[0] == 1) and (x[1] == 2) and (x[2] == 3)",
4845 "var x[3] := [9]; var y[3] := {1,2,3}; x <=> y; (x[0] == 1) and (x[1] == 2) and (x[2] == 3)",
4846 "var x[3] := [9]; var y[2] := {1,2}; x <=> y; (x[0] == 1) and (x[1] == 2) and (x[2] == 9)",
4847 "var x[3] := [9]; var y[1] := {1}; x <=> y; (x[0] == 1) and (x[1] == 9) and (x[2] == 9)",
4848 "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)",
4849 "var x[3] := [9]; var y[3] := {1,2,3}; x <=> (y += 1); (x[0] == 2) and (x[1] == 3) and (x[2] == 4)",
4850 "var x[3] := [9]; var y[2] := {1,2}; x <=> (y += 1); (x[0] == 2) and (x[1] == 3) and (x[2] == 9)",
4851 "var x[3] := [9]; var y[1] := {1}; x <=> (y += 1); (x[0] == 2) and (x[1] == 9) and (x[2] == 9)",
4852 "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)",
4853 "var x[3] := [8]; var y[3] := {1,2,3}; (x += 1) <=> y; (x[0] == 1) and (x[1] == 2) and (x[2] == 3)",
4854 "var x[3] := [8]; var y[2] := {1,2}; (x += 1) <=> y; (x[0] == 1) and (x[1] == 2) and (x[2] == 9)",
4855 "var x[3] := [8]; var y[1] := {1}; (x += 1) <=> y; (x[0] == 1) and (x[1] == 9) and (x[2] == 9)",
4856 "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)",
4857 "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)",
4858 "var x[3] := [8]; var y[2] := {1,2}; (x += 1) <=> (y += 1); (x[0] == 2) and (x[1] == 3) and (x[2] == 9)",
4859 "var x[3] := [8]; var y[1] := {1}; (x += 1) <=> (y += 1); (x[0] == 2) and (x[1] == 9) and (x[2] == 9)",
4860 "var x[3] := [0]; var y[4] := {1,2,3,4}; X < y",
4861 "var x[3] := [0]; var y[3] := {1,2,3}; x < Y",
4862 "var x[3] := [0]; var y[2] := {1,2}; X < y",
4863 "var x[3] := [0]; var y[1] := {1}; x < Y",
4864 "var x[3] := [0]; var y[4] := {1,2,3,4}; x <= y",
4865 "var x[3] := [0]; var y[3] := {1,2,3}; x <= y",
4866 "var x[3] := [0]; var y[2] := {1,2}; x <= y",
4867 "var x[3] := [0]; var y[1] := {1}; x <= y",
4868 "var x[3] := [5]; var y[4] := {1,2,3,4}; x > y",
4869 "var x[3] := [5]; var y[3] := {1,2,3}; x > y",
4870 "var x[3] := [5]; var y[2] := {1,2}; x > y",
4871 "var x[3] := [5]; var y[1] := {1}; x > y",
4872 "var x[3] := [5]; var y[4] := {1,2,3,4}; x >= y",
4873 "var x[3] := [5]; var y[3] := {1,2,3}; x >= y",
4874 "var x[3] := [5]; var y[2] := {1,2}; x >= y",
4875 "var x[3] := [5]; var y[1] := {1}; x >= y",
4876 "var x[3] := [1]; var y[4] := [1]; x == y",
4877 "var x[3] := [1]; var y[3] := [1]; x == y",
4878 "var x[3] := [1]; var y[2] := [1]; x == y",
4879 "var x[3] := [1]; var y[1] := [1]; x == y",
4880 "var x[3] := [1]; var y[4] := [2]; x != y",
4881 "var x[3] := [1]; var y[3] := [2]; x != y",
4882 "var x[3] := [1]; var y[2] := [2]; x != y",
4883 "var x[3] := [1]; var y[1] := [2]; x != y",
4884 "var x[3] := [0]; var y[4] := {5,6,7,8}; (x += 1) < y",
4885 "var x[3] := [0]; var y[3] := {5,6,7}; (x += 1) < y",
4886 "var x[3] := [0]; var y[2] := {5,6}; (x += 1) < y",
4887 "var x[3] := [0]; var y[1] := {5}; (x += 1) < y",
4888 "var x[3] := [0]; var y[4] := {1,2,3,4}; x < (y += 1)",
4889 "var x[3] := [0]; var y[3] := {1,2,3}; x < (y += 1)",
4890 "var x[3] := [0]; var y[2] := {1,2}; x < (y += 1)",
4891 "var x[3] := [0]; var y[1] := {1}; x < (y += 1)",
4892 "var x[3] := [0]; var y[4] := {5,6,7,8}; (x += 1) < (y += 1)",
4893 "var x[3] := [0]; var y[3] := {5,6,7}; (x += 1) < (y += 1)",
4894 "var x[3] := [0]; var y[2] := {5,6}; (x += 1) < (y += 1)",
4895 "var x[3] := [0]; var y[1] := {5}; (x += 1) < (y += 1)",
4896 "var x[3] := {1,2,3}; var y := 5; x < y ",
4897 "var x[3] := {1,2,3}; var y := 3; x < y + 1 ",
4898 "var x[3] := {1,2,3}; var y := 5; x <= y ",
4899 "var x[3] := {1,2,3}; var y := 3; x <= y + 1",
4900 "var x[3] := {1,1,1}; var y := 1; x == y ",
4901 "var x[3] := {1,1,1}; var y := 2; x == y - 1",
4902 "var x[3] := {1,2,3}; var y := 5; y > x ",
4903 "var x[3] := {1,2,3}; var y := 3; y >= x ",
4904 "var x[3] := {1,2,3}; var y := 5; y + 1 > x ",
4905 "var x[3] := {1,1,1}; var y := 1; y == x ",
4906 "var x[3] := {1,1,1}; var y := 2; y - 1 == x",
4907 "var x[3] := {1,2,3}; var y := 5; equal(true,(x += 1) < y) ",
4908 "var x[3] := {1,2,3}; var y := 3; equal(true,(x -= 1) < y + 1)",
4909 "var x[3] := {1,2,3}; var y := 5; equal(true,(x -= 1) <= y) ",
4910 "var x[3] := {2,2,2}; var y := 1; (x -= 1) == y ",
4911 "var x[3] := {1,2,3}; var y := 5; y > (x += 1) ",
4912 "var x[3] := {1,2,3}; var y := 5; y + 1 > (x += 1) ",
4913 "var x[3] := {2,2,2}; var y := 1; y == (x -= 1) ",
4914 "var x[3] := {2,2,2}; var y := 0; y + 1 == (x -= 1)",
4915 "var x[3] := [1]; var y[4] := {1,2,3,4}; var z[3] := [1]; z := (x + y); z == (x + y)",
4916 "var x[3] := [1]; var y[3] := {1,2,3}; var z[3] := [1]; z := (x - y); z == (x - y)",
4917 "var x[3] := [1]; var y[2] := {1,2}; var z[3] := [1]; z := (x / y); z == (x / y)",
4918 "var x[3] := [1]; var y[1] := {1}; var z[3] := [1]; z := (x * y); z == (x * y)",
4919 "var x[3] := [1]; var y[4] := {1,2,3,4}; var z[3] := [1]; z := 2(x + y); z == (x + y)2",
4920 "var x[3] := [1]; var y[3] := {1,2,3}; var z[3] := [1]; z := 2(x - y); z == (x - y)2",
4921 "var x[3] := [1]; var y[2] := {1,2}; var z[3] := [1]; z := 2(x / y); z == (x / y)2",
4922 "var x[3] := [1]; var y[1] := {1}; var z[3] := [1]; z := 2(x * y); z == (x * y)2",
4923 "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",
4924 "var x[3] := [1]; var y[3] := {1,2,3}; var z[3] := [1]; z := 2(x - y)/3; z == 2(x - y)/3",
4925 "var x[3] := [1]; var y[2] := {1,2}; var z[3] := [1]; z := 2(x / y)/3; z == 2(x / y)/3",
4926 "var x[3] := [1]; var y[1] := {1}; var z[3] := [1]; z := 2(x * y)/3; z == 2(x * y)/3",
4927 "var x[6] := {1,2,3,4,5,6}; equal(sqrt(sum([x - avg(x)]^2) / x[]),1.70782512765993306387017)",
4928 "var x[3] := {-1,-2,-3}; sum(abs(x) ) == 6",
4929 "var x[3] := {0.1,0.2,0.3}; sum(trunc(x)) == 0",
4931 "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)",
4933 "var x := 2; (~{ for (var i := 0; i < 10; i += 1) { for (var j := 0; j <= i; "
4934 "j += 1) { var y := 3; if ((i + j + y + x) < 6) { y += x; continue; } else "
4935 "break[i + j]; } } } + ~{ for (var i := 0; i < 10; i += 1) { for (var j := 0; "
4936 "j <= i; j += 1) { var y := 3; if ((i + j + y + x) < 6) { y += x; continue; } "
4937 " else break[i + j]; } } }) == 18 ",
4939 "var x := 2; var v0[3] := {1,2,3}; ( ~{ for (var i := 0; i < 10; i += 1) { "
4940 "for (var j := 0; j <= i; j += 1) { var y := 3; var v2[3] := {1,2,3}; if ( "
4941 "(i + j + y + x + abs(v0[i % v0[]] - v2[j % v2[]])) < 6) { var v3[3] := "
4942 "{1,2,3}; y += x / v3[j % v3[]]; continue; } else break[i + j]; } } } "
4943 "+ ~{ for (var i := 0; i < 10; i += 1) { for (var j := 0; j <= i; j += 1) "
4944 " { var y := 3; var v2[3] := {1,2,3}; if ((i + j + y + x + abs(v0[i % v0[]] - "
4945 "v2[j % v2[]])) < 6) { var v3[3] := {1,2,3}; y += x / v3[j % v3[]]; "
4946 "continue; } else break[i + j]; } } } ) == 18 ",
4948 "12 == (if (1 > 2) { var x:= 2; } else { var x[3] := {7,2,3}; sum(x); })",
4949 "12 == (if (1 < 2) { var x[3] := {7,2,3}; sum(x); } else { var x:= 2; })",
4950 "12 == (if (1 > 2) { var x:= 2; } else { var x[3] := {7,2,3}; sum(x); })",
4951 "12 == (if (1 < 2) { var x[3] := {7,2,3}; sum(x); } else { var x:= 2; })",
4953 "21 == (for (var i := 0; i < 10; i += 1) { if (i > 2) { break [i * 7]; i += 1;"
4954 "i += 2; i += 3; }; })",
4956 "21 == (for (var i := 0; i < 10; i += 1) { if (i > 2) { break [i * 7]; return "
4957 "[i * 8]; i += 1; i += 2; i += 3; }; })",
4959 "2 == for (var i := 0; i < 10; i += 1) { if (i > 2) { continue; i += 1; i += 2;"
4960 "i += 3; } else i; }",
4962 "2 == for (var i := 0; i < 10; i += 1) { if (i > 2) { continue; return [i * 8];"
4963 "i += 1; i += 2; i += 3; } else i; }",
4965 "var x[10] := [-1]; var y[10] := [-1]; for (var i := 0; i < 10; i += 1) { x[i] := i; "
4966 "y[i] := 2 * x[i]; }; (sum(x) == 45) and (sum(y) == (2 * sum(x)));"
4968 "7 == (for (var i := 0; i < 10; i += 1) { ~{break[7]; continue; i += i} })",
4969 "0 == (for (var i := 0; i < 10; i += 1) { ~{break[i]; continue; i += i} })",
4970 "0 == (for (var i := 0; i < 10; i += 1) { ~{continue; break[7]; i += i} })",
4971 "1 == (for (var i := 0; i < 10; i += 1) { ~{break[i += 1]; continue; i += i} })",
4973 "var s := 'abc'; s == ~{'abc' } ",
4974 "var s := 'abc'; s == ~{s } ",
4975 "var s := 'abc'; s == ~{'ab' + 'c'} ",
4976 "var s := 'abc'; ~{'abc' } == s ",
4977 "var s := 'abc'; ~{s } == s ",
4978 "var s := 'abc'; ~{'ab' + 'c'} == s ",
4979 "var s := 'abc'; ~{1 + 2; 'abc' + s; s} == s ",
4980 "var s := 'abc'; ~{1 + 2; var x := 'ab'; x + 'c'} == s ",
4982 "var x[10^6] := null; var y[10^7] := null; 0 * (min(x) + min(y)) + x[] + y[] == 10^7 + 10^6",
4984 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; if (1 < 2, v0, v1) == v0",
4985 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; if (1 > 2, v0, v1) == v1",
4986 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; if (1 < 2, v0 - v1, v1 - v0) == (v0 - v1)",
4987 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; if (1 > 2, v0 - v1, v1 - 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) == v0",
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",
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) == (v0 - v1)",
4991 "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)",
4993 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; if (1 < 2, v0, v1) == v0",
4994 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; if (1 > 2, v0, v1) == v1",
4995 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; if (1 < 2, v0 - v1, v1 - v0) == (v0 - v1)",
4996 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; if (1 > 2, v0 - v1, v1 - 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) == v0",
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",
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) == (v0 - v1)",
5000 "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)",
5002 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; (if (1 < 2) v0; else v1;) == v0",
5003 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; (if (1 > 2) v0; else v1;) == v1",
5004 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; (if (1 < 2) v0 - v1; else v1 - v0;) == (v0 - v1)",
5005 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; (if (1 > 2) v0 - v1; else v1 - v0;) == (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;) == v0",
5007 "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",
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;) == (v0 - v1)",
5009 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; var x := 1; var y := 2; (if (x > y) v0 - v1; else v1 - v0;) == (v1 - v0)",
5011 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; (if (1 < 2) v0; else v1;) == v0",
5012 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; (if (1 > 2) v0; else v1;) == v1",
5013 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; (if (1 < 2) v0 - v1; else v1 - v0;) == (v0 - v1)",
5014 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; (if (1 > 2) v0 - v1; else v1 - v0;) == (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;) == v0",
5016 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; var x := 1; var y := 2; (if (x > y) v0; else v1;) == 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;) == (v0 - v1)",
5018 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; var x := 1; var y := 2; (if (x > y) v0 - v1; else v1 - v0;) == (v1 - v0)",
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; ((-x / -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) - (1.123 * y)); 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 * 1.123)); 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 / z)); true;",
5030 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) / y); 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); true;",
5033 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) * (2.123 * y)); true;",
5034 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) * (y * 2.123)); 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) / (2.123 / y)); true;",
5037 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) / (y * 2.123)); true;",
5038 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) / (y / 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); true;",
5041 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 + x) + (2.123 + y)); true;",
5042 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 + x) + (y + 2.123)); true;",
5043 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 + x) - (2.123 + y)); true;",
5044 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 + x) - (y + 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); true;",
5047 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 - x) - (2.123 - y)); true;",
5048 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 - x) - (y - 2.123)); true;",
5049 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) * 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); true;",
5051 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) * (2.123 / y)); true;",
5052 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) * (y / 2.123)); true;",
5053 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) / (2.123 * y)); true;",
5054 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) / (2.123 / y)); true;",
5055 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) / (y * 2.123)); true;",
5056 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) / (y / 2.123)); true;",
5057 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) * (2.123 * x)); true;",
5058 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) * (2.123 / x)); true;",
5059 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) * (x * 2.123)); true;",
5060 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) * (x / 2.123)); 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) + (2.123 - x)); 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) + (x - 2.123)); 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) - (2.123 - x)); 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) - (x - 2.123)); 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) / (2.123 / x)); 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; ((1.123) / (x / 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) ^ 2.123); 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) - (1.123 * y)); 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) - (y * 1.123)); true;",
5086 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) * (2.123 * y)); true;",
5087 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) * (y * 2.123)); true;",
5088 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) / (2.123 * y)); true;",
5089 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) / (2.123 / y)); 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 * 1.123) / (y / 2.123)); true;",
5092 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * y) / (z / w)); true;",
5093 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x + 1.123) + (2.123 + y)); true;",
5094 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x + 1.123) + (y + 2.123)); true;",
5095 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x + 1.123) - (2.123 + y)); true;",
5096 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x + 1.123) - (y + 2.123)); true;",
5097 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x + y) / (z / w)); true;",
5098 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x - 1.123) - (2.123 - y)); true;",
5099 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x - 1.123) - (y - 2.123)); true;",
5100 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x - y) / (z / w)); true;",
5101 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) * (y / z)); 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 / 1.123)); true;",
5104 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) / (y / z)); true;",
5105 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) / y); true;",
5106 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) * (2.123 / y)); 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) * (y / 2.123)); 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) / (2.123 / y)); 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 / 1.123) / (y / 2.123)); true;",
5114 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / y) * (1.123 / z)); true;",
5115 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / y) * (z / 1.123)); true;",
5116 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / y) * (z / w)); true;",
5117 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / y) / (1.123 / z)); true;",
5118 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / y) / (z / 1.123)); true;",
5119 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / y) / (z / w)); true;",
5120 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / y) / 1.123); true;",
5121 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / y) / z); true;",
5126 static const std::size_t
rounds = 20;
5137 bool failed =
false;
5139 for (std::size_t r = 0; r <
rounds; ++r)
5143 expression_t expression;
5144 expression.register_symbol_table(symbol_table);
5151 printf(
"run_test10() - swaps[1] Error: %s Expression: %s\n",
5152 parser.
error().c_str(),
5160 const T result = expression.value();
5164 printf(
"run_test10() - swaps[1] evaluation error Expression: %s\n",
5170 expression.release();
5180 for (std::size_t r = 0; r <
rounds; ++r)
5186 expression_t expression;
5187 expression.register_symbol_table(symbol_table);
5191 printf(
"run_test10() - swaps[2] Error: %s Expression: %s\n",
5192 parser.
error().c_str(),
5199 const T result = expression.value();
5203 printf(
"run_test10() - swaps[2] evaluation error Expression: %s\n",
6492 const bool result1 = symbol_table.
add_variable(
"x", x);
6496 if (!result1 || !result2 || result3)
6498 printf(
"run_test18() - Failed sym_tab add/remove [1]\n");
6508 if (!result1 || !result2 || result3)
6510 printf(
"run_test18() - Failed sym_tab add/remove [2]\n");
6515 std::vector<T> x(10,T(0));
6516 const bool result1 = symbol_table.
add_vector(
"x", x);
6520 if (!result1 || !result2 || result3)
6522 printf(
"run_test18() - Failed sym_tab add/remove [3]\n");
6528 const bool result1 = symbol_table.
add_function(
"x", x);
6532 if (!result1 || !result2 || result3)
6534 printf(
"run_test18() - Failed sym_tab add/remove [4]\n");
6540 const bool result1 = symbol_table.
add_function(
"x", x);
6544 if (!result1 || !result2 || result3)
6546 printf(
"run_test18() - Failed sym_tab add/remove [5]\n");
6591 static const std::string expr_str_list[] =
6593 "equal(va_func,(0))",
6594 "equal(va_func(),(0))",
6595 "equal(va_func(1,2,3,4,5,6,7,8,9),(1+2+3+4+5+6+7+8+9))",
6596 "equal(va_func(1,x,3,y,5,z,7,w,9),(1+x+3+y+5+z+7+w+9))",
6597 "equal(va_func(x,2,y,4,z,6,w,8,u),(x+2+y+4+z+6+w+8+u))",
6598 "equal(va_func(x,y,z,w,u,v,t,1,2,3),(x+y+z+w+u+v+t+1+2+3))",
6599 "equal(va_func(x,y,z,w,u,v,t),(x+y+z+w+u+v+t))",
6600 "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))",
6601 "equal(1+va_func(1,x,3,y,5,z,7,w,9),(1+x+3+y+5+z+7+w+9)+1)",
6602 "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))",
6603 "equal(va_func(va_func(x),va_func(y),va_func(z)),va_func(x,y,z))",
6604 "equal(va_func(va_func(va_func(va_func(va_func(va_func(va_func(va_func(x)))))))),x)",
6605 "equal(va_func(va_func(va_func(va_func(va_func(va_func(va_func(va_func(123.456)))))))),123.456)",
6606 "equal(va_func(va_func(va_func(va_func(va_func(va_func(va_func(va_func(x+1)))))))),x+1)",
6607 "equal(va_func(va_func(va_func(va_func(va_func(va_func(va_func(va_func(x+y)))))))),x+y)"
6609 static const std::size_t expr_str_list_size =
sizeof(expr_str_list) /
sizeof(std::string);
6613 for (std::size_t i = 0; i < expr_str_list_size; ++i)
6615 expression_t expression;
6616 expression.register_symbol_table(symbol_table);
6620 if (!parser.
compile(expr_str_list[i],expression))
6622 printf(
"run_test18() - [1] VarArg Error: %s Expression: %s\n",
6623 parser.
error().c_str(),
6624 expr_str_list[i].c_str());
6632 bool error_found =
false;
6638 printf(
"run_test18() - Error in evaluation! (1) Expression: %s\n",
6639 expr_str_list[i].c_str());
6659 T v0[] = { T(1), T(1), T(1), T(1) };
6660 T v1[] = { T(1), T(2), T(3), T(4) };
6669 std::string s0 =
"AbCdEfGhIj";
6673 symbol_table_t symbol_table;
6675 symbol_table.add_constants();
6677 symbol_table.add_variable (
"x" , x);
6678 symbol_table.add_variable (
"y" , y);
6679 symbol_table.add_vector (
"v0" ,v0);
6680 symbol_table.add_vector (
"v1" ,v1);
6681 symbol_table.add_vector (
"v2" ,v2);
6682 symbol_table.add_stringvar(
"s0", s0);
6683 symbol_table.add_function (
"gen_func", f);
6687 "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]);",
6688 "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]);",
6689 "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);",
6690 "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);",
6691 "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]);",
6692 "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);",
6693 "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);",
6694 "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);",
6695 "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);",
6696 "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');"
6701 bool error_found =
false;
6706 expression_t expression;
6708 expression.register_symbol_table(symbol_table);
6712 if (!parser.compile(expression_str,expression))
6714 printf(
"run_test18() - [2] GenFunc Error: %s Expression: %s [2]\n",
6715 parser.error().c_str(),
6716 expression_str.c_str());
6734 printf(
"run_test18() - Error in evaluation! (2) Expression: %s "
6746 expression.release();
6763 T v0[] = { T(1), T(1), T(1), T(1) };
6764 T v1[] = { T(1), T(2), T(3), T(4) };
6765 T v2[] = { T(5), T(6), T(7), T(8) };
6767 std::string s0 =
"AbCdEfGhIj";
6771 symbol_table_t symbol_table;
6773 symbol_table.add_constants();
6775 symbol_table.add_variable (
"x" , x);
6776 symbol_table.add_variable (
"y" , y);
6777 symbol_table.add_vector (
"v0" ,v0);
6778 symbol_table.add_vector (
"v1" ,v1);
6779 symbol_table.add_vector (
"v2" ,v2);
6780 symbol_table.add_stringvar(
"s0", s0);
6781 symbol_table.add_function (
"foo", f);
6785 "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]);",
6786 "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);",
6787 "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);",
6788 "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]);",
6789 "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);",
6790 "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);",
6791 "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);",
6792 "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);",
6793 "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');",
6794 "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');",
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(v0,v1 + v2, v0[2], x, 2x + y, z, 2w / 3, 'abc123',s0[2:5]);",
6797 "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]);",
6798 "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]);",
6799 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x);",
6800 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x);",
6801 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x,x);",
6802 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x,x,x);",
6803 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0);",
6804 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0);",
6805 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0,s0);",
6806 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0,s0,s0);",
6807 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0);",
6808 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0);",
6809 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0,v0);",
6810 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0,v0,v0);",
6811 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x);",
6812 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x);",
6813 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x,x);",
6814 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x,x,x);",
6815 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0);",
6816 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0);",
6817 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0,s0);",
6818 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0,s0,s0);",
6819 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0);",
6820 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0);",
6821 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0,v0);",
6822 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0,v0,v0);",
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]);",
6824 "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]);",
6825 "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]);",
6826 "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]);"
6831 const std::string parameter_type_list[] =
6871 "TTTTTTT|STSTSTS|V*T*VS*" ,
6872 "TTTTTTT|STSTSTS|V*TTTTVSS",
6873 "TTTTTTT|STSTSTS|VVT*VSS" ,
6874 "TTTTTTT|STSTSTS|VVTTTTVS*",
6877 bool error_found =
false;
6882 expression_t expression;
6884 expression.register_symbol_table(symbol_table);
6890 if (!parser.compile(expression_str,expression))
6892 printf(
"run_test18() - [3] GenFunc2 Error: %s Expression: %s Parameter Sequence: %s [3]\n",
6893 parser.error().c_str(),
6894 expression_str.c_str(),
6895 parameter_type_list[i].c_str());
6911 bool error_found =
false;
6915 "foo(v0,v1,v2,x,y,s0);",
6916 "foo(v1,v2,x,y,s0,v0);",
6917 "foo(v2,x,y,s0,v0,v1);",
6918 "foo(x,y,s0,v0,v1,v2);",
6919 "foo(y,s0,v0,v1,v2,x);",
6920 "foo(s0,v0,v1,v2,x,y);"
6925 const std::string parameter_type_list[] =
6944 T v0[] = { T(1), T(1), T(1), T(1) };
6945 T v1[] = { T(1), T(2), T(3), T(4) };
6946 T v2[] = { T(5), T(6), T(7), T(8) };
6948 std::string s0 =
"AbCdEfGhIj";
6953 T v0_inc[] = { T(2), T(2), T(2), T(2) };
6954 T v1_inc[] = { T(2), T(3), T(4), T(5) };
6955 T v2_inc[] = { T(6), T(7), T(8), T(9) };
6957 std::size_t sizeof_vec =
sizeof(v0) /
sizeof(T);
6959 std::string s0_inc =
"BcDeFgHiJk";
6963 symbol_table_t symbol_table;
6965 symbol_table.add_constants();
6967 symbol_table.add_variable (
"x" , x );
6968 symbol_table.add_variable (
"y" , y );
6969 symbol_table.add_vector (
"v0" , v0);
6970 symbol_table.add_vector (
"v1" , v1);
6971 symbol_table.add_vector (
"v2" , v2);
6972 symbol_table.add_stringvar(
"s0", s0);
6973 symbol_table.add_function (
"foo", f );
6975 expression_t expression;
6977 expression.register_symbol_table(symbol_table);
6985 printf(
"run_test18() - [4] IncFunc Error: %s Expression: %s Parameter Sequence: %s [4]\n",
6986 parser.error().c_str(),
6988 parameter_type_list[i].c_str());
6998 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: x\n",
7005 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: y\n",
7012 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: y\n",
7017 if (!std::equal(v0,v0 + sizeof_vec,v0_inc))
7019 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: v0\n",
7024 if (!std::equal(v1,v1 + sizeof_vec,v1_inc))
7026 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: v1\n",
7031 if (!std::equal(v2,v2 + sizeof_vec,v2_inc))
7033 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: v2\n",
7046 bool error_found =
false;
7050 std::string s0 =
"XXXXXXXXXXXXXXX";
7051 std::string s1 =
"XXXXXXXXXXXXXXX";
7052 std::string s2 =
"XXXXXXXXXXXXXXX";
7053 std::string s3 =
"XXXXXXXXXXXXXXX";
7054 std::string s4 =
"XXXXXXXXXXXXXXX";
7060 symbol_table_t symbol_table;
7062 symbol_table.add_constants();
7064 symbol_table.add_stringvar(
"s0", s0);
7065 symbol_table.add_stringvar(
"s1", s1);
7066 symbol_table.add_stringvar(
"s2", s2);
7067 symbol_table.add_stringvar(
"s3", s3);
7068 symbol_table.add_stringvar(
"s4", s4);
7070 symbol_table.add_function(
"remspc_uc", rsauc);
7072 const std::string program =
7073 " s0 := 'How now '; "
7074 " s1 := 'brown cow?'; "
7075 " s2 := remspc_uc(s0 + s1); "
7076 " s3 := remspc_uc(s0) + s1; "
7077 " s4 := s0 + remspc_uc(s1); "
7078 " remspc_uc(s0 + s1) == remspc_uc(s0) + remspc_uc(s1); ";
7080 const std::string parameter_type_list[] =
7090 std::size_t parameter_type_list_size =
sizeof(parameter_type_list) /
sizeof(std::string);
7092 for (std::size_t i = 0; i < parameter_type_list_size; ++i)
7094 expression_t expression;
7096 expression.register_symbol_table(symbol_table);
7102 if (!parser.compile(program,expression))
7104 printf(
"run_test18() - [5] Error: %s\tExpression: %s\n",
7105 parser.error().c_str(),
7111 const T result = expression.value();
7115 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Result <> 1\n",
7122 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s0\n",
7127 if (
"How now " != s0)
7129 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s0\n",
7134 if (
"brown cow?" != s1)
7136 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s1\n",
7141 if (
"HOWNOWBROWNCOW?" != s2)
7143 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s2\n",
7148 if (
"HOWNOWbrown cow?" != s3)
7150 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s3\n",
7155 if (
"How now BROWNCOW?" != s4)
7157 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s4\n",
7170 bool error_found =
false;
7176 symbol_table_t symbol_table;
7178 T v[4] = {T(5), T(6), T(7), T(8)};
7180 symbol_table.add_vector(
"v",v);
7183 symbol_table.add_function(
"vararg_func",vaf);
7185 expression_t expression;
7186 expression.register_symbol_table(symbol_table);
7190 const std::string programs[] =
7192 "equal(0,vararg_func())",
7193 "equal(1,vararg_func() + 1)",
7194 "equal(1,1 + vararg_func())",
7195 "equal(1,vararg_func + 1)",
7196 "equal(1,1 + vararg_func)",
7197 "equal(0,vararg_func() + vararg_func)",
7198 "equal(0,vararg_func + vararg_func())",
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(1,vararg_func() + vararg_func(1))",
7203 "equal(1,vararg_func() + vararg_func(1,2))",
7204 "equal(2,vararg_func() + vararg_func(v))",
7205 "equal(2,vararg_func(v))",
7206 "equal(1,vararg_func(1))",
7207 "equal(1,vararg_func(1,2,3))",
7208 "equal(1,vararg_func(5,6,7,8))",
7209 "equal(5,vararg_func(v) + 3)",
7210 "equal(5,vararg_func(1) + 4)",
7211 "equal(6,vararg_func(1,2,3) + 5)",
7212 "equal(7,vararg_func(5,6,7,8) + 6)"
7215 static const std::size_t programs_size =
sizeof(programs) /
sizeof(std::string);
7217 for (std::size_t i = 0; i < programs_size; ++i)
7219 if (!parser.compile(programs[i],expression))
7221 printf(
"run_test18() - [6] Error: %s\tExpression: %s\n",
7222 parser.error().c_str(),
7223 programs[i].c_str());
7227 else if (T(1) != expression.value())
7229 printf(
"run_test18() - Error in evaluation! (5) Expression: %s\n",
7230 programs[i].c_str());
7243 bool error_found =
false;
7255 v.push_back(T(N)); \
7263 const std::string expr_string =
"sum(v + 1)";
7267 symbol_table_t symbol_table;
7268 symbol_table.add_vector(
"v",v);
7270 expression_t expression;
7271 expression.register_symbol_table(symbol_table);
7275 if (!parser.compile(expr_string,expression))
7277 printf(
"run_test18() - [7] Error: %s\tExpression: %s\n",
7278 parser.error().c_str(),
7279 expr_string.c_str());
7286 sum = expression.value();
7290 printf(
"run_test18() - Error in evaluation! (6) Expression: %s\n",
7291 expr_string.c_str());
7297 sum = expression.value();
7301 printf(
"run_test18() - Error in evaluation! (7) Expression: %s\n",
7302 expr_string.c_str());
7307 sum = expression.value();
7311 printf(
"run_test18() - Error in evaluation! (8) Expression: %s\n",
7312 expr_string.c_str());
7317 sum = expression.value();
7321 printf(
"run_test18() - Error in evaluation! (9) Expression: %s\n",
7322 expr_string.c_str());
7333 bool error_found =
false;
7343 v.push_back(T(N)); \
7348 pb(s, 3)
pb(s, 6)
pb(s, 9)
pb(s,12)
7349 pb(s,15)
pb(s,18)
pb(s,21)
7352 const std::string expr_string =
"v[0] + v[1] + v[2]";
7356 symbol_table_t symbol_table;
7357 symbol_table.add_vector(
"v",v);
7359 expression_t expression;
7360 expression.register_symbol_table(symbol_table);
7364 if (!parser.compile(expr_string,expression))
7366 printf(
"run_test18() - [8] Error: %s\tExpression: %s\n",
7367 parser.error().c_str(),
7368 expr_string.c_str());
7373 for (std::size_t i = 0; i < v0.size() - 4; ++i)
7377 T sum = expression.value();
7381 printf(
"run_test18() - Error in evaluation! (7) Expression: %s Expected: %5.3f Computed: %5.3f\n",
7382 expr_string.c_str(),
7398 bool error_found =
false;
7408 v.push_back(T(N)); \
7413 pb(s, 3)
pb(s, 6)
pb(s, 9)
pb(s,12)
7414 pb(s,15)
pb(s,18)
pb(s,21)
7417 const std::string expr_string =
"var i := 0; var j := 1; var k := 2; v[i] + v[j] + v[k]";
7421 symbol_table_t symbol_table;
7422 symbol_table.add_vector(
"v",v);
7424 expression_t expression;
7425 expression.register_symbol_table(symbol_table);
7429 if (!parser.compile(expr_string,expression))
7431 printf(
"run_test18() - [9] Error: %s\tExpression: %s\n",
7432 parser.error().c_str(),
7433 expr_string.c_str());
7438 for (std::size_t i = 0; i < v0.size() - 4; ++i)
7442 T sum = expression.value();
7446 printf(
"run_test18() - Error in evaluation! (8) Expression: %s Expected: %5.3f Computed: %5.3f\n",
7447 expr_string.c_str(),
7467 const std::string const_folded_expression_list[] =
7469 "(0 * dot(2 * v0,v1 - 1))",
7470 "(0 * dot(2 * v0,v1 - 1)) + (dot(2 * v0,v1 - 1) * 0)",
7471 "(0 * dot(v0 - v1,v1 / v0))",
7472 "(0 * dot(v0 - v1,v1 / v0)) + (dot(v0 - v1,v1 / v0) * 0)",
7474 "(0 * dot(v0,v1)) + (dot(v0,v1) * 0)",
7475 "(0 / dot(2 * v0,v1 - 1))",
7476 "(0 / dot(2 * v0,v1 - 1)) + (dot(2 * v0,v1 - 1) * 0)",
7477 "(0 / dot(v0 - v1,v1 / v0))",
7478 "(0 / dot(v0 - v1,v1 / v0)) + (dot(v0 - v1,v1 / v0) * 0)",
7480 "(0 / dot(v0,v1)) + (dot(v0,v1) * 0)",
7481 "(dot(2 * v0,v1 - 1) * 0)",
7482 "(dot(2 * v0,v1 - 1) * 0) + (0 * dot(2 * v0,v1 - 1))",
7483 "(dot(2 * v0,v1 - 1) * 0) + (0 / dot(2 * v0,v1 - 1))",
7484 "(dot(v0 - v1,v1 / v0) * 0)",
7485 "(dot(v0 - v1,v1 / v0) * 0) + (0 * dot(v0 - v1,v1 / v0))",
7486 "(dot(v0 - v1,v1 / v0) * 0) + (0 / dot(v0 - v1,v1 / v0))",
7488 "(dot(v0,v1) * 0) + (0 * dot(v0,v1))",
7489 "(dot(v0,v1) * 0) + (0 / dot(v0,v1))"
7492 const std::size_t const_folded_expression_list_size =
sizeof(const_folded_expression_list) /
sizeof(std::string);
7494 const std::size_t vector_size = 5;
7495 T v0[vector_size] = { 0, 2, 4, 6, 8 };
7496 T v1[vector_size] = { 1, 3, 5, 7, 9 };
7504 symbol_table_t symbol_table;
7506 symbol_table.add_package( vector_package );
7507 symbol_table.add_package( io_package );
7508 symbol_table.add_vector (
"v0" , vv0 );
7509 symbol_table.add_vector (
"v1" , vv1 );
7511 expression_t expression;
7512 expression.register_symbol_table(symbol_table);
7516 for (std::size_t i = 0; i < const_folded_expression_list_size; ++i)
7518 const std::string& expression_string = const_folded_expression_list[i];
7520 if (!parser.compile(expression_string, expression))
7522 printf(
"run_test18() - [10] Error: %s Expression: %s\n",
7523 parser.error().c_str(),
7524 expression_string.c_str());
7531 printf(
"run_test18() - Error: Expression did not compile to a constant! [1] Expression: %s\n",
7532 expression_string.c_str());
7537 for (std::size_t j = 0; j < 100; ++j)
7550 const T result = expression.value();
7554 printf(
"run_test18() - Error: Expected result of zero, result: %8.4f for Expression: %s\n",
7556 expression_string.c_str());
7562 expression.release();
7571 const std::string rebase_expression_list[] =
7574 "dot(2 * v0,v1 - 1) + dot(2 * v0,v1 - 1)",
7575 "dot(2 * v0,v1 - 1)",
7576 "dot(v0 - v1,v1 / v0) + dot(v0 - v1,v1 / v0)",
7577 "dot(v0 - v1,v1 / v0)",
7578 "dot(v0,v1) + dot(v0,v1)",
7580 "dot(2 * v0,v1 - 1) * x + dot(2 * v0,v1 - 1) * y",
7581 "x / dot(2 * v0,v1 - 1)",
7582 "x / dot(v0 - v1,v1 / v0) + dot(v0 - v1,v1 / v0) / y",
7583 "x * dot(v0 - v1,v1 / v0) / y",
7584 "x - dot(v0,v1) + dot(v0,v1) + y",
7587 const std::size_t rebase_expression_list_size =
sizeof(rebase_expression_list) /
sizeof(std::string);
7592 const std::size_t vector_size = 5;
7593 T v0[vector_size] = { 0, 2, 4, 6, 8 };
7594 T v1[vector_size] = { 1, 3, 5, 7, 9 };
7602 symbol_table_t symbol_table;
7604 symbol_table.add_package ( vector_package );
7605 symbol_table.add_package ( io_package );
7606 symbol_table.add_variable(
"x" , x );
7607 symbol_table.add_variable(
"y" , y );
7608 symbol_table.add_vector (
"v0" , vv0 );
7609 symbol_table.add_vector (
"v1" , vv1 );
7611 expression_t expression;
7612 expression.register_symbol_table(symbol_table);
7616 for (std::size_t i = 0; i < rebase_expression_list_size; ++i)
7618 const std::string& expression_string = rebase_expression_list[i];
7620 if (!parser.compile(expression_string, expression))
7622 printf(
"run_test18() - [11] Error: %s Expression: %s\n",
7623 parser.error().c_str(),
7624 expression_string.c_str());
7629 for (std::size_t j = 0; j < 100; ++j)
7645 expression.release();
7650 bool error_found =
false;
7660 v.push_back(T(N)); \
7665 pb(s, 3)
pb(s, 6)
pb(s, 9)
pb(s,12)
7666 pb(s,15)
pb(s,18)
pb(s,21)
7669 const std::string expr_string =
"var i := 0; v[i + 0] + v[i + 1] + v[i + 2]";
7673 symbol_table_t symbol_table;
7674 symbol_table.add_vector(
"v",v);
7676 expression_t expression;
7677 expression.register_symbol_table(symbol_table);
7681 if (!parser.compile(expr_string,expression))
7683 printf(
"run_test18() - [12] Error: %s\tExpression: %s\n",
7684 parser.error().c_str(),
7685 expr_string.c_str());
7690 for (std::size_t i = 0; i < v0.size() - 4; ++i)
7694 const T sum = expression.value();
7698 printf(
"run_test18() - Error in evaluation! (9) Expression: %s Expected: %5.3f Computed: %5.3f\n",
7699 expr_string.c_str(),
7719 T v0[] = { T(0), T(1), T(2), T(3), T(4) };
7720 T v1[] = { T(5), T(6), T(7), T(8), T(9) };
7722 const std::size_t v0_size =
sizeof(v0) /
sizeof (T);
7723 const std::size_t v1_size =
sizeof(v1) /
sizeof (T);
7729 symbol_table_t symbol_table;
7730 symbol_table.add_vector(
"v",v);
7731 symbol_table.add_function(
"vec_sum",vec_sum);
7733 expression_t expression;
7734 expression.register_symbol_table(symbol_table);
7738 const std::string expr_string =
"vec_sum(v)";
7740 if (!parser.compile(expr_string,expression))
7742 printf(
"run_test18() - [13] Error: %s\tExpression: %s\n",
7743 parser.error().c_str(),
7744 expr_string.c_str());
7749 const T expected_result0 = std::accumulate(v0, v0 + v0_size, T(0));
7751 if (expression.value() != expected_result0)
7753 printf(
"run_test18() - Error in evaluation! (10.1) Expression: %s Expected: %5.3f Computed: %5.3f\n",
7754 expr_string.c_str(),
7755 expected_result0.toDouble(),
7756 expression.value().toDouble());
7763 const T expected_result1 = std::accumulate(v1, v1 + v1_size, T(0));
7765 if (expression.value() != expected_result1)
7767 printf(
"run_test18() - Error in evaluation! (10.2) Expression: %s Expected: %5.3f Computed: %5.3f\n",
7768 expr_string.c_str(),
7769 expected_result1.toDouble(),
7770 expression.value().toDouble());
7777 bool error_found =
false;
7785 symbol_table_t symbol_table;
7786 symbol_table.add_package(vecops_pkg);
7788 const std::string expr_str_list[] =
7790 "var v[9] := {1,2,3,4,5,6,7,8,9}; all_true(v) == true" ,
7791 "var v[6] := {-1,-2,-3,-4,-5,-6}; all_true(v) == true" ,
7792 "var v[8] := {1,2,3,0,0,0,0,0}; all_true(v) == false",
7793 "var v[8] := {-1,-2,-3,0,0,0,0,0}; all_true(v) == false",
7794 "var v[9] := {0,0,0,0,0,0,0,0,0}; all_true(v + 1) == true",
7796 "var v[9] := {0,0,0,0,0,0,0,0,0}; all_false(v) == true" ,
7797 "var v[9] := {0,0,0,0,0,1,2,3,4}; all_false(v) == false" ,
7798 "var v[8] := {0,0,0,0,0,-1,-2,-3}; all_false(v) == false" ,
7799 "var v[9] := {1,1,1,1,1,1,1,1,1}; any_false(v - 1) == true",
7801 "var v[9] := {0,0,0,0,0,0,0,0,1}; any_true(v) == true" ,
7802 "var v[9] := {0,0,0,0,1,0,0,0,0}; any_true(v) == true" ,
7803 "var v[9] := {0,0,0,0,0,0,0,0,0}; any_true(v) == false" ,
7804 "var v[9] := {0,0,0,0,0,0,0,0,0}; any_true(v + 1) == true",
7806 "var v[9] := {1,1,1,1,1,1,1,1,0}; any_false(v) == true" ,
7807 "var v[9] := {1,1,1,1,0,1,1,1,1}; any_false(v) == true" ,
7808 "var v[9] := {1,1,1,1,1,1,1,1,1}; any_false(v) == false" ,
7809 "var v[9] := {1,1,1,1,1,1,1,1,1}; any_false(v - 1) == true",
7811 "var v[9] := {0,0,0,0,0,0,0,0,0}; count(v) == 0" ,
7812 "var v[9] := {0,0,0,0,0,0,0,0,1}; count(v) == 1" ,
7813 "var v[9] := {0,0,0,0,0,0,0,2,1}; count(v) == 2" ,
7814 "var v[9] := {0,0,0,0,0,0,3,2,1}; count(v) == 3" ,
7815 "var v[9] := {0,0,0,0,0,0,0,0,0}; count(v + 1) == v[]",
7816 "var v[9] := {1,1,1,1,1,1,1,1,1}; count(v - 1) == 0",
7818 "var v[9] := {1,2,3,4,5,6,7,8,9}; var r[9] := [0]; copy(v,r); sum(v == r) == v[]",
7819 "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",
7820 "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",
7821 "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",
7823 "var v[5] := {1,2,3,4,5}; var r[5] := {4,5,1,2,3}; rol(v,3); sum(v == r) == v[]",
7824 "var v[5] := {1,2,3,4,5}; var r[5] := {3,4,5,1,2}; ror(v,3); sum(v == r) == v[]",
7826 "var v[5] := {1,2,3,4,5}; var r[5] := {3,4,5,1,2}; rol(v,2); sum(v == r) == v[]",
7827 "var v[5] := {1,2,3,4,5}; var r[5] := {4,5,1,2,3}; ror(v,2); sum(v == r) == v[]",
7829 "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[]",
7830 "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[]",
7832 "var v[5] := {1,2,3,4,5}; var r[5] := {3,4,5,0,0}; shftl(v,2); sum(v == r) == v[]",
7833 "var v[5] := {1,2,3,4,5}; var r[5] := {5,0,0,0,0}; shftl(v,4); sum(v == r) == v[]",
7834 "var v[5] := {1,2,3,4,5}; var r[5] := {0,0,0,0,0}; shftl(v,5); sum(v == r) == v[]",
7836 "var v[5] := {1,2,3,4,5}; var r[5] := {0,0,1,2,3}; shftr(v,2); sum(v == r) == v[]",
7837 "var v[5] := {1,2,3,4,5}; var r[5] := {0,0,0,0,1}; shftr(v,4); sum(v == r) == v[]",
7838 "var v[5] := {1,2,3,4,5}; var r[5] := {0,0,0,0,0}; shftr(v,5); sum(v == r) == v[]",
7840 "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[]",
7841 "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[]",
7843 "var v[5] := {1,3,5,2,4}; var r[5] := {1,2,3,4,5}; sort(v); sum(v == r) == v[]",
7844 "var v[5] := {5,4,3,2,1}; var r[5] := {1,2,3,4,5}; sort(v); sum(v == r) == v[]",
7845 "var v[5] := {1,4,2,3,5}; var r[5] := {1,2,3,4,5}; sort(v,1,3); sum(v == r) == v[]",
7846 "var v[5] := {5,4,2,3,1}; var r[5] := {5,2,3,4,1}; sort(v,1,3); sum(v == r) == v[]",
7847 "var v[5] := {3,1,2,4,5}; var r[5] := {1,2,3,4,5}; sort(v,0,2); sum(v == r) == v[]",
7848 "var v[5] := {1,2,5,3,4}; var r[5] := {1,2,3,4,5}; sort(v,2,4); sum(v == r) == v[]",
7850 "var v[5] := {1,3,5,2,4}; var r[5] := {1,2,3,4,5}; sort(v,'ascending'); sum(v == r) == v[]",
7851 "var v[5] := {1,3,5,2,4}; var r[5] := {1,2,3,4,5}; sort(v,'aScEnDiNg'); sum(v == r) == v[]",
7852 "var v[5] := {5,4,3,2,1}; var r[5] := {1,2,3,4,5}; sort(v,'ascending'); sum(v == r) == v[]",
7853 "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[]",
7854 "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[]",
7855 "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[]",
7857 "var v[5] := {1,3,5,2,4}; var r[5] := {5,4,3,2,1}; sort(v,'descending'); sum(v == r) == v[]",
7858 "var v[5] := {1,3,5,2,4}; var r[5] := {5,4,3,2,1}; sort(v,'DeScEnDiNg'); sum(v == r) == v[]",
7859 "var v[5] := {5,4,3,2,1}; var r[5] := {5,4,3,2,1}; sort(v,'descending'); sum(v == r) == v[]",
7860 "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[]",
7861 "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[]",
7862 "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[]",
7864 "var v[9] := {7,8,9,1,2,3,4,5,6}; nth_element(v,trunc(v[] / 2)); v[v[] / 2] == 5",
7865 "var v[9] := {7,8,9,1,2,3,4,5,6}; nth_element(v,trunc(v[] / 3)); v[v[] / 3] == 4",
7867 "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)",
7868 "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)",
7870 "var v[5]; iota(v, 0,1); var r[5] := { 0, 1, 2, 3, 4}; sum(v == r) == v[]",
7871 "var v[5]; iota(v, 0,2); var r[5] := { 0, 2, 4, 6, 8}; sum(v == r) == v[]",
7872 "var v[5]; iota(v, 1,1); var r[5] := { 1, 2, 3, 4, 5}; sum(v == r) == v[]",
7873 "var v[5]; iota(v, 1,2); var r[5] := { 1, 3, 5, 7, 9}; sum(v == r) == v[]",
7874 "var v[5]; iota(v,-1,1); var r[5] := {-1, 0, 1, 2, 3}; sum(v == r) == v[]",
7875 "var v[5]; iota(v,-1,2); var r[5] := {-1, 1, 3, 5, 7}; sum(v == r) == v[]",
7876 "var v[5]; iota(v,-2,1); var r[5] := {-2,-1, 0, 1, 2}; sum(v == r) == v[]",
7877 "var v[5]; iota(v,-2,2); var r[5] := {-2, 0, 2, 4, 6}; sum(v == r) == v[]",
7878 "var v[5]; iota(v, 0); var r[5] := { 0, 1, 2, 3, 4}; sum(v == r) == v[]",
7879 "var v[5]; iota(v, 1); var r[5] := { 1, 2, 3, 4, 5}; sum(v == r) == v[]",
7880 "var v[5]; iota(v,-1); var r[5] := {-1, 0, 1, 2, 3}; sum(v == r) == v[]",
7881 "var v[5]; iota(v,-2); var r[5] := {-2,-1, 0, 1, 2}; sum(v == r) == v[]",
7882 "var v[5]; iota(v, 0, 0); var r[5] := { 0, 0, 0, 0, 0}; sum(v == r) == v[]",
7883 "var v[5]; iota(v, 1, 0); var r[5] := { 1, 1, 1, 1, 1}; sum(v == r) == v[]",
7885 "var v[5]; iota(v, 0, v[] - 1, 0,1); var r[5] := { 0, 1, 2, 3, 4}; sum(v == r) == v[]",
7886 "var v[5]; iota(v, 0, v[] - 1, 0,2); var r[5] := { 0, 2, 4, 6, 8}; sum(v == r) == v[]",
7887 "var v[5]; iota(v, 0, v[] - 1, 1,1); var r[5] := { 1, 2, 3, 4, 5}; sum(v == r) == v[]",
7888 "var v[5]; iota(v, 0, v[] - 1, 1,2); var r[5] := { 1, 3, 5, 7, 9}; sum(v == r) == v[]",
7889 "var v[5]; iota(v, 0, v[] - 1,-1,1); var r[5] := {-1, 0, 1, 2, 3}; sum(v == r) == v[]",
7890 "var v[5]; iota(v, 0, v[] - 1,-1,2); var r[5] := {-1, 1, 3, 5, 7}; sum(v == r) == v[]",
7891 "var v[5]; iota(v, 0, v[] - 1,-2,1); var r[5] := {-2,-1, 0, 1, 2}; sum(v == r) == v[]",
7892 "var v[5]; iota(v, 0, v[] - 1,-2,2); var r[5] := {-2, 0, 2, 4, 6}; sum(v == r) == v[]",
7893 "var v[5]; iota(v, 0, v[] - 1, 0 ); var r[5] := { 0, 1, 2, 3, 4}; sum(v == r) == v[]",
7894 "var v[5]; iota(v, 0, v[] - 1, 1 ); var r[5] := { 1, 2, 3, 4, 5}; sum(v == r) == v[]",
7895 "var v[5]; iota(v, 0, v[] - 1,-1 ); var r[5] := {-1, 0, 1, 2, 3}; sum(v == r) == v[]",
7896 "var v[5]; iota(v, 0, v[] - 1,-2 ); var r[5] := {-2,-1, 0, 1, 2}; sum(v == r) == v[]",
7897 "var v[5]; iota(v, 0, v[] - 1, 0,0); var r[5] := { 0, 0, 0, 0, 0}; sum(v == r) == v[]",
7898 "var v[5]; iota(v, 0, v[] - 1, 1,0); var r[5] := { 1, 1, 1, 1, 1}; sum(v == r) == v[]",
7900 "var v[5]; iota(v, 1, v[] - 1, 0,1); var r[5] := { 0, 0, 1, 2, 3 }; sum(v == r) == v[]",
7901 "var v[5]; iota(v, 1, v[] - 1, 0,2); var r[5] := { 0, 0, 2, 4, 6 }; sum(v == r) == v[]",
7902 "var v[5]; iota(v, 1, v[] - 1, 1,1); var r[5] := { 0, 1, 2, 3, 4 }; sum(v == r) == v[]",
7903 "var v[5]; iota(v, 1, v[] - 1, 1,2); var r[5] := { 0, 1, 3, 5, 7 }; sum(v == r) == v[]",
7904 "var v[5]; iota(v, 1, v[] - 1,-1,1); var r[5] := { 0, -1, 0, 1, 2 }; sum(v == r) == v[]",
7905 "var v[5]; iota(v, 1, v[] - 1,-1,2); var r[5] := { 0, -1, 1, 3, 5 }; sum(v == r) == v[]",
7906 "var v[5]; iota(v, 1, v[] - 1,-2,1); var r[5] := { 0, -2,-1, 0, 1 }; sum(v == r) == v[]",
7907 "var v[5]; iota(v, 1, v[] - 1,-2,2); var r[5] := { 0, -2, 0, 2, 4 }; sum(v == r) == v[]",
7908 "var v[5]; iota(v, 1, v[] - 1, 0 ); var r[5] := { 0, 0, 1, 2, 3 }; sum(v == r) == v[]",
7909 "var v[5]; iota(v, 1, v[] - 1, 1 ); var r[5] := { 0, 1, 2, 3, 4 }; sum(v == r) == v[]",
7910 "var v[5]; iota(v, 1, v[] - 1,-1 ); var r[5] := { 0, -1, 0, 1, 2 }; sum(v == r) == v[]",
7911 "var v[5]; iota(v, 1, v[] - 1,-2 ); var r[5] := { 0, -2,-1, 0, 1 }; sum(v == r) == v[]",
7913 "var v[5]; iota(v, 1, v[] - 2, 0,1); var r[5] := { 0, 0, 1, 2, 0 }; sum(v == r) == v[]",
7914 "var v[5]; iota(v, 1, v[] - 2, 0,2); var r[5] := { 0, 0, 2, 4, 0 }; sum(v == r) == v[]",
7915 "var v[5]; iota(v, 1, v[] - 2, 1,1); var r[5] := { 0, 1, 2, 3, 0 }; sum(v == r) == v[]",
7916 "var v[5]; iota(v, 1, v[] - 2, 1,2); var r[5] := { 0, 1, 3, 5, 0 }; sum(v == r) == v[]",
7917 "var v[5]; iota(v, 1, v[] - 2,-1,1); var r[5] := { 0, -1, 0, 1, 0 }; sum(v == r) == v[]",
7918 "var v[5]; iota(v, 1, v[] - 2,-1,2); var r[5] := { 0, -1, 1, 3, 0 }; sum(v == r) == v[]",
7919 "var v[5]; iota(v, 1, v[] - 2,-2,1); var r[5] := { 0, -2,-1, 0, 0 }; sum(v == r) == v[]",
7920 "var v[5]; iota(v, 1, v[] - 2,-2,2); var r[5] := { 0, -2, 0, 2, 0 }; sum(v == r) == v[]",
7921 "var v[5]; iota(v, 1, v[] - 2, 0 ); var r[5] := { 0, 0, 1, 2, 0 }; sum(v == r) == v[]",
7922 "var v[5]; iota(v, 1, v[] - 2, 1 ); var r[5] := { 0, 1, 2, 3, 0 }; sum(v == r) == v[]",
7923 "var v[5]; iota(v, 1, v[] - 2,-1 ); var r[5] := { 0, -1, 0, 1, 0 }; sum(v == r) == v[]",
7924 "var v[5]; iota(v, 1, v[] - 2,-2 ); var r[5] := { 0, -2,-1, 0, 0 }; sum(v == r) == v[]",
7926 "var v[5]; iota(v, 0, v[] - 2, 0,1); var r[5] := { 0, 1, 2, 3, 0}; sum(v == r) == v[]",
7927 "var v[5]; iota(v, 0, v[] - 2, 0,2); var r[5] := { 0, 2, 4, 6, 0}; sum(v == r) == v[]",
7928 "var v[5]; iota(v, 0, v[] - 2, 1,1); var r[5] := { 1, 2, 3, 4, 0}; sum(v == r) == v[]",
7929 "var v[5]; iota(v, 0, v[] - 2, 1,2); var r[5] := { 1, 3, 5, 7, 0}; sum(v == r) == v[]",
7930 "var v[5]; iota(v, 0, v[] - 2,-1,1); var r[5] := {-1, 0, 1, 2, 0}; sum(v == r) == v[]",
7931 "var v[5]; iota(v, 0, v[] - 2,-1,2); var r[5] := {-1, 1, 3, 5, 0}; sum(v == r) == v[]",
7932 "var v[5]; iota(v, 0, v[] - 2,-2,1); var r[5] := {-2,-1, 0, 1, 0}; sum(v == r) == v[]",
7933 "var v[5]; iota(v, 0, v[] - 2,-2,2); var r[5] := {-2, 0, 2, 4, 0}; sum(v == r) == v[]",
7934 "var v[5]; iota(v, 0, v[] - 2, 0 ); var r[5] := { 0, 1, 2, 3, 0}; sum(v == r) == v[]",
7935 "var v[5]; iota(v, 0, v[] - 2, 1 ); var r[5] := { 1, 2, 3, 4, 0}; sum(v == r) == v[]",
7936 "var v[5]; iota(v, 0, v[] - 2,-1 ); var r[5] := {-1, 0, 1, 2, 0}; sum(v == r) == v[]",
7937 "var v[5]; iota(v, 0, v[] - 2,-2 ); var r[5] := {-2,-1, 0, 1, 0}; sum(v == r) == v[]",
7939 "var v[5]; iota(v, 0, -1); var r[5] := { 0, -1, -2, -3, -4}; sum(v == r) == v[]",
7940 "var v[5]; iota(v, 0, -2); var r[5] := { 0, -2, -4, -6, -8}; sum(v == r) == v[]",
7941 "var v[5]; iota(v, -1, -2); var r[5] := { -1, -3, -5, -7, -9}; sum(v == r) == v[]",
7943 "var v[5]; iota(v, 0, v[] -1, 0, -1); var r[5] := { 0, -1, -2, -3, -4}; sum(v == r) == v[]",
7944 "var v[5]; iota(v, 0, v[] -1, 0, -2); var r[5] := { 0, -2, -4, -6, -8}; sum(v == r) == v[]",
7945 "var v[5]; iota(v, 0, v[] -1, -1, -2); var r[5] := { -1, -3, -5, -7, -9}; sum(v == r) == v[]",
7947 "var v[5]; iota(v, 0,1); threshold_below(v,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,2, 0); var r[5] := { 0, 1, 2, 0, 0}; sum(v == r) == v[]",
7950 "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[]",
7951 "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[]",
7953 "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[]",
7954 "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[]",
7956 "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[]",
7957 "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[]",
7959 " 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[]",
7960 " 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[]",
7962 " 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[]",
7963 " 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[]",
7964 " 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[]",
7967 const std::size_t expr_str_list_size =
sizeof(expr_str_list) /
sizeof(std::string);
7971 for (std::size_t i = 0; i < expr_str_list_size; ++i)
7973 expression_t expression;
7974 expression.register_symbol_table(symbol_table);
7976 if (!parser.compile(expr_str_list[i], expression))
7978 printf(
"run_test18() - [14] Error: %s Expression: %s\n",
7979 parser.error().c_str(),
7980 expr_str_list[i].c_str());
7987 const T result = expression.value();
7991 printf(
"run_test18() - Error in evaluation! (11) Expression: %s\n",
7992 expr_str_list[i].c_str());
8007 std::string a =
"a";
8008 std::string b =
"b";
8009 std::string c =
"c";
8010 std::string d =
"d";
8019 "T:T|T:TT|T:TTT|T:TTTT|"
8020 "T:S|T:SS|T:SSS|T:SSSS|"
8021 "T:ST|T:STS|T:STST|"
8022 "T:TS|T:TST|T:TSTS|"
8023 "T:TTSS|T:SSTT|T:STTS|T:TSST"
8042 typedef std::pair<std::string, typename overload_func<T>::test_result_t> test_pack_t;
8044 static const test_pack_t test_pack_list[] =
8046 test_pack_t(
"foo(x)" , test_result_t( 0,
"T" )),
8047 test_pack_t(
"foo(x, y)" , test_result_t( 1,
"TT" )),
8048 test_pack_t(
"foo(x, y, z)" , test_result_t( 2,
"TTT" )),
8049 test_pack_t(
"foo(x, y, z, w)" , test_result_t( 3,
"TTTT")),
8050 test_pack_t(
"foo(x + y)" , test_result_t( 0,
"T" )),
8051 test_pack_t(
"foo(x + y, y + z)" , test_result_t( 1,
"TT" )),
8052 test_pack_t(
"foo(x + y, y + z, z + w)" , test_result_t( 2,
"TTT" )),
8053 test_pack_t(
"foo(x + y, y + z, z + w, w)" , test_result_t( 3,
"TTTT")),
8054 test_pack_t(
"foo(a)" , test_result_t( 4,
"S" )),
8055 test_pack_t(
"foo(a, b)" , test_result_t( 5,
"SS" )),
8056 test_pack_t(
"foo(a, b, c)" , test_result_t( 6,
"SSS" )),
8057 test_pack_t(
"foo(a, b, c, d)" , test_result_t( 7,
"SSSS")),
8058 test_pack_t(
"foo(a + b)" , test_result_t( 4,
"S" )),
8059 test_pack_t(
"foo(a + b, b + c)" , test_result_t( 5,
"SS" )),
8060 test_pack_t(
"foo(a + b, b + c, c + d)" , test_result_t( 6,
"SSS" )),
8061 test_pack_t(
"foo(a + b, b + c, c + d, d)" , test_result_t( 7,
"SSSS")),
8062 test_pack_t(
"foo(a, x)" , test_result_t( 8,
"ST" )),
8063 test_pack_t(
"foo(a, x, b)" , test_result_t( 9,
"STS" )),
8064 test_pack_t(
"foo(a, x, b, y)" , test_result_t(10,
"STST")),
8065 test_pack_t(
"foo(a + b, x + y)" , test_result_t( 8,
"ST" )),
8066 test_pack_t(
"foo(a + b, x + y, b + c)" , test_result_t( 9,
"STS" )),
8067 test_pack_t(
"foo(a + b, x + y, b + c, y + z)" , test_result_t(10,
"STST")),
8068 test_pack_t(
"foo(x, a)" , test_result_t(11,
"TS" )),
8069 test_pack_t(
"foo(x, a, y)" , test_result_t(12,
"TST" )),
8070 test_pack_t(
"foo(x, a, y, b)" , test_result_t(13,
"TSTS")),
8071 test_pack_t(
"foo(x + y, a + b)" , test_result_t(11,
"TS" )),
8072 test_pack_t(
"foo(x + y, a + b, y + z)" , test_result_t(12,
"TST" )),
8073 test_pack_t(
"foo(x + y, a + b, y + z, b + c)" , test_result_t(13,
"TSTS")),
8074 test_pack_t(
"foo(x, y, a, b)" , test_result_t(14,
"TTSS")),
8075 test_pack_t(
"foo(a, b, x, y)" , test_result_t(15,
"SSTT")),
8076 test_pack_t(
"foo(a, x, y, b)" , test_result_t(16,
"STTS")),
8077 test_pack_t(
"foo(x, a, b, y)" , test_result_t(17,
"TSST")),
8078 test_pack_t(
"foo(x + y, y + z, a + b, b + c)" , test_result_t(14,
"TTSS")),
8079 test_pack_t(
"foo(a + b, b + c, x + y, y + z)" , test_result_t(15,
"SSTT")),
8080 test_pack_t(
"foo(a + b, x + y, y + z, b + c)" , test_result_t(16,
"STTS")),
8081 test_pack_t(
"foo(x + y, a + b, b + c, y + z)" , test_result_t(17,
"TSST"))
8084 static const std::size_t test_pack_list_size =
sizeof(test_pack_list) /
sizeof(test_pack_t);
8088 for (std::size_t i = 0; i < test_pack_list_size; ++i)
8090 expression_t expression;
8091 expression.register_symbol_table(symbol_table);
8095 if (!parser.
compile(test_pack_list[i].first, expression))
8097 printf(
"run_test18() - [15] Overload VarArg Error: %s Expression: %s\n",
8098 parser.
error().c_str(),
8099 test_pack_list[i].first.c_str());
8107 bool error_found =
false;
8115 printf(
"run_test18() - Error in evaluation! (12) Expression: %s\n",
8116 test_pack_list[i].first.c_str());
8123 printf(
"run_test18() - Error with ps_index (12) Expression: %s Expected: %d Got: %d\n",
8124 test_pack_list[i].first.c_str(),
8125 static_cast<int>(test_pack_list[i].second.ps_index),
8133 printf(
"run_test18() - Error with parameter seq (12) Expression: %s Expected: %s Got: %s\n",
8134 test_pack_list[i].first.c_str(),
8135 test_pack_list[i].second.param_seq.c_str(),
8152 std::string a =
"a";
8153 std::string b =
"b";
8154 std::string c =
"c";
8155 std::string d =
"d";
8156 std::string result =
"";
8165 "S:T|S:TT|S:TTT|S:TTTT|"
8166 "S:S|S:SS|S:SSS|S:SSSS|"
8167 "S:ST|S:STS|S:STST|"
8168 "S:TS|S:TST|S:TSTS|"
8169 "S:TTSS|S:SSTT|S:STTS|S:TSST"
8189 typedef std::pair<std::string, typename overload_func<T>::test_result_t> test_pack_t;
8191 static const test_pack_t test_pack_list[] =
8193 test_pack_t(
"result := foo(x)" , test_result_t( 0,
"T" )),
8194 test_pack_t(
"result := foo(x, y)" , test_result_t( 1,
"TT" )),
8195 test_pack_t(
"result := foo(x, y, z)" , test_result_t( 2,
"TTT" )),
8196 test_pack_t(
"result := foo(x, y, z, w)" , test_result_t( 3,
"TTTT")),
8197 test_pack_t(
"result := foo(x + y)" , test_result_t( 0,
"T" )),
8198 test_pack_t(
"result := foo(x + y, y + z)" , test_result_t( 1,
"TT" )),
8199 test_pack_t(
"result := foo(x + y, y + z, z + w)" , test_result_t( 2,
"TTT" )),
8200 test_pack_t(
"result := foo(x + y, y + z, z + w, w)" , test_result_t( 3,
"TTTT")),
8201 test_pack_t(
"result := foo(a)" , test_result_t( 4,
"S" )),
8202 test_pack_t(
"result := foo(a, b)" , test_result_t( 5,
"SS" )),
8203 test_pack_t(
"result := foo(a, b, c)" , test_result_t( 6,
"SSS" )),
8204 test_pack_t(
"result := foo(a, b, c, d)" , test_result_t( 7,
"SSSS")),
8205 test_pack_t(
"result := foo(a + b)" , test_result_t( 4,
"S" )),
8206 test_pack_t(
"result := foo(a + b, b + c)" , test_result_t( 5,
"SS" )),
8207 test_pack_t(
"result := foo(a + b, b + c, c + d)" , test_result_t( 6,
"SSS" )),
8208 test_pack_t(
"result := foo(a + b, b + c, c + d, d)" , test_result_t( 7,
"SSSS")),
8209 test_pack_t(
"result := foo(a, x)" , test_result_t( 8,
"ST" )),
8210 test_pack_t(
"result := foo(a, x, b)" , test_result_t( 9,
"STS" )),
8211 test_pack_t(
"result := foo(a, x, b, y)" , test_result_t(10,
"STST")),
8212 test_pack_t(
"result := foo(a + b, x + y)" , test_result_t( 8,
"ST" )),
8213 test_pack_t(
"result := foo(a + b, x + y, b + c)" , test_result_t( 9,
"STS" )),
8214 test_pack_t(
"result := foo(a + b, x + y, b + c, y + z)" , test_result_t(10,
"STST")),
8215 test_pack_t(
"result := foo(x, a)" , test_result_t(11,
"TS" )),
8216 test_pack_t(
"result := foo(x, a, y)" , test_result_t(12,
"TST" )),
8217 test_pack_t(
"result := foo(x, a, y, b)" , test_result_t(13,
"TSTS")),
8218 test_pack_t(
"result := foo(x + y, a + b)" , test_result_t(11,
"TS" )),
8219 test_pack_t(
"result := foo(x + y, a + b, y + z)" , test_result_t(12,
"TST" )),
8220 test_pack_t(
"result := foo(x + y, a + b, y + z, b + c)" , test_result_t(13,
"TSTS")),
8221 test_pack_t(
"result := foo(x, y, a, b)" , test_result_t(14,
"TTSS")),
8222 test_pack_t(
"result := foo(a, b, x, y)" , test_result_t(15,
"SSTT")),
8223 test_pack_t(
"result := foo(a, x, y, b)" , test_result_t(16,
"STTS")),
8224 test_pack_t(
"result := foo(x, a, b, y)" , test_result_t(17,
"TSST")),
8225 test_pack_t(
"result := foo(x + y, y + z, a + b, b + c)" , test_result_t(14,
"TTSS")),
8226 test_pack_t(
"result := foo(a + b, b + c, x + y, y + z)" , test_result_t(15,
"SSTT")),
8227 test_pack_t(
"result := foo(a + b, x + y, y + z, b + c)" , test_result_t(16,
"STTS")),
8228 test_pack_t(
"result := foo(x + y, a + b, b + c, y + z)" , test_result_t(17,
"TSST"))
8231 static const std::size_t test_pack_list_size =
sizeof(test_pack_list) /
sizeof(test_pack_t);
8235 for (std::size_t i = 0; i < test_pack_list_size; ++i)
8237 expression_t expression;
8238 expression.register_symbol_table(symbol_table);
8242 if (!parser.
compile(test_pack_list[i].first, expression))
8244 printf(
"run_test18() - [16] Overload VarArg Error: %s Expression: %s\n",
8245 parser.
error().c_str(),
8246 test_pack_list[i].first.c_str());
8254 bool error_found =
false;
8262 if (result !=
"string result")
8264 printf(
"run_test18() - Error in evaluation! (13) Expression: %s\n",
8265 test_pack_list[i].first.c_str());
8272 printf(
"run_test18() - Error with ps_index (13) Expression: %s Expected: %d Got: %d\n",
8273 test_pack_list[i].first.c_str(),
8274 static_cast<int>(test_pack_list[i].second.ps_index),
8282 printf(
"run_test18() - Error with parameter seq (13) Expression: %s Expected: %s Got: %s\n",
8283 test_pack_list[i].first.c_str(),
8284 test_pack_list[i].second.param_seq.c_str(),
8302 typedef std::pair<std::string,std::size_t> rtc_test_t;
8303 static const rtc_test_t rtc_tests[] =
8305 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i + v[]]; } ", 5 ),
8306 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i + 10]; } ", 5 ),
8307 std::make_pair(
" x:= 0; for (var i := 0; i < (2 * v[]); i += 1) { x += (v[i] == vv[i]); } ", 10),
8308 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i + v[]] := i; } ", 5 ),
8309 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i + v[]] <=> v[i]; } ", 5 ),
8310 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i] <=> v[i + v[]]; } ", 10),
8311 std::make_pair(
" var z[5] := [1]; for (var i := 0; i < z[]; i += 1) { z[i + z[]]; } ", 5 ),
8312 std::make_pair(
" var z[5] := [1]; for (var i := 0; i < z[]; i += 1) { z[i + 10]; } ", 5 ),
8313 std::make_pair(
" var z[5] := [1]; for (var i := 0; i < z[]; i += 1) { z[i + z[]] := i; } ", 5 ),
8314 std::make_pair(
" var z[5] := [1]; for (var i := 0; i < z[]; i += 1) { z[i + z[]] <=> z[i]; } ", 5 ),
8315 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v*w)[i + v[]]; } ", 10),
8316 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v*w)[i+w[]]; } ", 10),
8317 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v+w)[i + v[]]; } ", 10),
8318 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v+w)[i+w[]]; } ", 10),
8319 std::make_pair(
" var z[4] := [1]; for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v*z)[i+v[]]; } ", 10),
8320 std::make_pair(
" var z[4] := [1]; for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v*z)[i+w[]]; } ", 9 ),
8321 std::make_pair(
" var z[4] := [1]; for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v+z)[i+v[]]; } ", 10),
8322 std::make_pair(
" var z[4] := [1]; for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v+z)[i+z[]]; } ", 10),
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[i[0]] += xx ", 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[1] + xx) == (xx + qq[1])) ", 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) == xx) ", 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[0] += xx + yy) == (xx + yy)) ", 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[0] -= xx) == -xx) ", 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[0] -= (xx + yy)) == -(xx + yy)) ", 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[1] + qq[2]) == (qq[3 - 1] + qq[2 * 1/2]))", 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[qq[1]] == qq[1]) ", 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[1] += qq[1]) == qq[1 + 1] ", 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[1]] + xx) == (xx + qq[i[1]])) ", 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) == xx) ", 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[0]] += xx + yy) == (xx + yy)) ", 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[i[0]] -= xx) == -xx) ", 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[0]] -= (xx + yy)) == -(xx + yy))", 0 ),
8337 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 ),
8338 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 ),
8339 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 ),
8342 static const std::size_t rtc_tests_size =
sizeof(rtc_tests) /
sizeof(rtc_test_t);
8344 bool error_found =
false;
8346 for (std::size_t i = 0; i < rtc_tests_size; ++i)
8348 const std::string& expression_str = rtc_tests[i].first;
8352 T v[5] = { 0, 1, 2, 3, 4 };
8353 T w[3] = { 0, 1, 2 };
8357 symbol_table_t symbol_table;
8358 expression_t expression;
8361 symbol_table.add_variable(
"x" , x );
8362 symbol_table.add_vector (
"v" , v );
8363 symbol_table.add_vector (
"w" , w );
8364 symbol_table.add_vector (
"vv", vv);
8365 symbol_table.add_vector (
"ww", ww);
8369 expression.register_symbol_table(symbol_table);
8371 parser.register_vector_access_runtime_check(vartc);
8373 if (!parser.compile(expression_str, expression))
8375 printf(
"run_test18() - Error: %s\t [1] Expression: %s\n",
8376 parser.error().c_str(),
8377 expression_str.c_str());
8386 if (vartc.
rtc_count != rtc_tests[i].second)
8388 printf(
"run_test18() - Expected rtc_count: %d got rtc_count: %d [0] Expression: %s\n",
8389 static_cast<unsigned int>(rtc_tests[i].second),
8390 static_cast<unsigned int>(vartc.
rtc_count),
8391 expression_str.c_str());
8398 T v[5] = { 0, 1, 2, 3, 4 };
8399 T w[3] = { 0, 1, 2 };
8400 T v0[5] = { 0, 1, 2, 3, 4 };
8401 T v1[5] = { 0, 1, 2, 3, 4 };
8405 symbol_table_t symbol_table;
8406 expression_t expression;
8409 symbol_table.add_variable(
"x" , x );
8410 symbol_table.add_vector (
"v" , v );
8411 symbol_table.add_vector (
"w" , w );
8412 symbol_table.add_vector (
"vv", vv);
8413 symbol_table.add_vector (
"ww", ww);
8417 expression.register_symbol_table(symbol_table);
8419 parser.register_vector_access_runtime_check(vartc);
8421 if (!parser.compile(expression_str, expression))
8423 printf(
"run_test18() - Error: %s\t [2] Expression: %s\n",
8424 parser.error().c_str(),
8425 expression_str.c_str());
8435 if (vartc.
rtc_count != rtc_tests[i].second)
8437 printf(
"run_test18() - Expected rtc_count: %d got rtc_count: %d [1] Expression: %s\n",
8438 static_cast<unsigned int>(rtc_tests[i].second),
8439 static_cast<unsigned int>(vartc.
rtc_count),
8440 expression_str.c_str());
8448 if (vartc.
rtc_count != rtc_tests[i].second)
8450 printf(
"run_test18() - Expected rtc_count: %d got rtc_count: %d [2] Expression: %s\n",
8451 static_cast<unsigned int>(rtc_tests[i].second),
8452 static_cast<unsigned int>(vartc.
rtc_count),
8453 expression_str.c_str());
8498 typedef typename compositor_t::function function_t;
8503 compositor_t compositor;
8506 compositor.add(function_t(
"f",
"x + 2",
"x"));
8509 compositor.add(function_t(
"g",
"x^2 - 3",
"x"));
8512 compositor.add(function_t(
"fof",
"f(f(x))",
"x"));
8515 compositor.add(function_t(
"gog",
"g(g(x))",
"x"));
8518 compositor.add(function_t(
"fog",
"f(g(x))",
"x"));
8521 compositor.add(function_t(
"gof",
"g(f(x))",
"x"));
8524 compositor.add(function_t(
"fogof",
"f(g(f(x)))",
"x"));
8527 compositor.add(function_t(
"gofog",
"g(f(g(x)))",
"x"));
8529 symbol_table_t& symbol_table = compositor.symbol_table();
8530 symbol_table.add_constants();
8531 symbol_table.add_variable(
"x", x);
8533 static const std::string expr_str_list[] =
8535 "equal(f(x),(x + 2))",
8536 "equal(g(x),(x^2 - 3))",
8537 "equal(fof(x),(x + 4))",
8538 "equal(gog(x),(x^4 - 6x^2 + 6))",
8539 "equal(fog(x),(x^2 - 1))",
8540 "equal(gof(x),(x^2 + 4x + 1))",
8541 "equal(fogof(x),(x^2 + 4x + 3))",
8542 "equal(gofog(x),(x^4 - 2x^2 - 2))"
8544 static const std::size_t expr_str_list_size =
sizeof(expr_str_list) /
sizeof(std::string);
8548 for (std::size_t i = 0; i < expr_str_list_size; ++i)
8550 expression_t expression;
8551 expression.register_symbol_table(symbol_table);
8555 if (!parser.compile(expr_str_list[i], expression))
8557 printf(
"run_test19() - Error: %s Expression: %s\n",
8558 parser.error().c_str(),
8559 expr_str_list[i].c_str());
8567 bool error_found =
false;
8573 printf(
"run_test19() - Error in evaluation! (1) Expression: %s\n",
8574 expr_str_list[i].c_str());
8587 const std::size_t
rounds = 100;
8589 for (std::size_t r = 0; r <
rounds; ++r)
8598 compositor_t compositor;
8604 .expression(
"3 * 2"));
8611 .expression(
"5 * (f0 + x)"));
8618 .expression(
"7 * (f1(x) + f1(y))"));
8624 .var(
"x").var(
"y").var(
"z")
8625 .expression(
"9 * (f2(x,y) + f2(y,z) + f2(x,z))"));
8631 .var(
"x").var(
"y").var(
"z").var(
"w")
8632 .expression(
"11 * (f3(x,y,z) + f3(y,z,w) + f3(z,w,x))"));
8638 .var(
"x").var(
"y").var(
"z").var(
"w").var(
"u")
8639 .expression(
"13 * (f4(x,y,z,w) + f4(y,z,w,u) + f4(z,w,u,x) + f4(w,u,x,y))"));
8645 .var(
"x").var(
"y").var(
"z")
8646 .var(
"w").var(
"u").var(
"v")
8647 .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))"));
8649 symbol_table_t& symbol_table = compositor.symbol_table();
8650 symbol_table.add_constants();
8651 symbol_table.add_variable(
"x", x);
8652 symbol_table.add_variable(
"y", y);
8653 symbol_table.add_variable(
"z", z);
8654 symbol_table.add_variable(
"w", w);
8655 symbol_table.add_variable(
"u", u);
8656 symbol_table.add_variable(
"v", v);
8660 const std::string expr_str_list[] =
8676 const std::size_t expr_str_list_size =
sizeof(expr_str_list) /
sizeof(std::string);
8678 const T result_list[] =
8694 bool error_found =
false;
8696 for (std::size_t i = 0; i < expr_str_list_size; ++i)
8698 expression_t expression;
8699 expression.register_symbol_table(symbol_table);
8701 if (!parser.compile(expr_str_list[i], expression))
8703 printf(
"run_test19() - Error: %s Expression: %s\n",
8704 parser.error().c_str(),
8705 expr_str_list[i].c_str());
8711 const T result = expression.value();
8713 if (result_list[i] != result)
8715 printf(
"run_test19() - Error in evaluation! (2) Expression: %s Expected: %10.1f\tResult: %10.1f\n",
8716 expr_str_list[i].c_str(),
8717 result_list[i].toDouble(),
8735 compositor_t compositor;
8742 " if (0 == (x % y),false, "
8743 " is_prime_impl1(x,y - 1))) ",
8750 "if (frac(x) != 0, false, "
8751 " if (x <= 0, false, "
8752 " is_prime_impl1(x,min(x - 1,trunc(sqrt(x)) + 1)))) ",
8761 " case y == 1 : true; "
8762 " case (x % y) == 0 : false; "
8763 " default : is_prime_impl2(x,y - 1);"
8773 " case x <= 0 : false; "
8774 " case frac(x) != 0 : false; "
8775 " default : is_prime_impl2(x,min(x - 1,trunc(sqrt(x)) + 1));"
8787 " case y == 1 : ~(y := 0, true);"
8788 " case (x % y) == 0 : ~(y := 0,false);"
8789 " default : y := y - 1; "
8800 " case x <= 0 : false; "
8801 " case frac(x) != 0 : false; "
8802 " default : is_prime_impl3(x,min(x - 1,trunc(sqrt(x)) + 1));"
8812 " case 1 == x : false; "
8813 " case 2 == x : true; "
8814 " case 3 == x : true; "
8815 " case 5 == x : true; "
8816 " case 7 == x : true; "
8817 " case 0 == x % 2 : false; "
8820 " for (var i := 3; i < y; i += 2) "
8822 " if ((x % i) == 0) "
8837 " case x <= 0 : false; "
8838 " case frac(x) != 0 : false; "
8839 " default : is_prime_impl4(x,min(x - 1,trunc(sqrt(x)) + 1));"
8843 symbol_table_t& symbol_table = compositor.symbol_table();
8844 symbol_table.add_constants();
8845 symbol_table.add_variable(
"x",x);
8847 const std::string expression_str[] =
8855 const std::size_t expression_count =
sizeof(expression_str) /
sizeof(std::string);
8859 for (std::size_t i = 0; i < expression_count; ++i)
8863 expression_t expression;
8864 expression.register_symbol_table(symbol_table);
8866 if (!parser.compile(expression_str[i],expression))
8868 printf(
"run_test19() - Error: %s Expression%d: %s\n",
8869 parser.error().c_str(),
8870 static_cast<unsigned int>(i),
8871 expression_str[i].c_str());
8879 bool error_found =
false;
8881 const std::size_t prime_list[] =
8883 2, 3, 5, 7, 11, 13, 17, 19,
8884 877, 947, 1087, 1153, 1229, 1297, 1381, 1453,
8885 1523, 1597, 1663, 1741, 1823, 1901, 1993, 2063,
8886 2131, 2221, 2293, 2371, 2437, 2539, 2621, 2689,
8887 2749, 2833, 2909, 3001, 3083, 3187, 3259, 3343,
8888 3433, 3517, 3581, 3659, 3733, 3823, 3911, 4001,
8889 4073, 4153, 4241, 4327, 4421, 4507, 4591, 4663,
8890 4759, 4861, 4943, 5009, 5099, 5189, 5281, 5393,
8891 5449, 5527, 5641, 5701, 5801, 5861, 5953, 6067,
8892 6143, 6229, 6311, 6373, 6481, 6577, 6679, 6763,
8893 6841, 6947, 7001, 7109, 7211, 7307, 7417, 7507,
8894 104309, 104311, 104323, 104327, 104347, 104369, 104381, 104383,
8895 104393, 104399, 104417, 104459, 104471, 104473, 104479, 104491,
8896 104513, 104527, 104537, 104543, 104549, 104551, 104561, 104579,
8897 104593, 104597, 104623, 104639, 104651, 104659, 104677, 104681,
8898 104683, 104693, 104701, 104707, 104711, 104717, 104723, 104729,
8899 1000621, 1000639, 1000651, 1000667, 1000669, 1001023, 1001027, 1001041
8902 const std::size_t prime_list_size =
sizeof(prime_list) /
sizeof(std::size_t);
8904 for (std::size_t i = 0; (i < prime_list_size) && (!error_found); ++i)
8906 x =
static_cast<T
>(prime_list[i]);
8908 std::vector<T> result(expression_count,T(0));
8917 if (result[j] != result[0])
8926 printf(
"run_test19() - Error in evaluation! (3) Results don't match! Prime: %d\n",
8927 static_cast<unsigned int>(prime_list[i]));
8931 printf(
"Expression[%02d]: %s = %d\n",
8932 static_cast<unsigned int>(j),
8933 expression_str[j].c_str(),
8934 static_cast<unsigned int>(result[j].toDouble()));
8939 printf(
"run_test19() - Error in evaluation! (4) Results don't match! Prime: %d\n",
8940 static_cast<unsigned int>(prime_list[i]));
8944 printf(
"Expression[%02d]: %s = %d\n",
8945 static_cast<unsigned int>(j),
8946 expression_str[j].c_str(),
8947 static_cast<unsigned int>(result[j].toDouble()));
8961 compositor_t compositor;
8969 " fibonacci1(x - 1) + fibonacci1(x - 2)))",
8978 " case x == 0 : 0; "
8979 " case x == 1 : 1; "
8980 " default : fibonacci2(x - 1) + fibonacci2(x - 2);"
8990 " case x == 0 : 0; "
8991 " case x == 1 : 1; "
8993 " while ((x := (x - 1)) > 0) "
9007 "fibonacci_impl3(x,0,1,0)",
9016 " case x == 0 : 0; "
9017 " case x == 1 : 1; "
9033 "fibonacci_impl4(x,0,1,0)",
9040 "if ((x == 0) or (x == 1)) "
9043 " fibonacci5(x - 1) + fibonacci5(x - 2); ",
9046 symbol_table_t& symbol_table = compositor.symbol_table();
9048 symbol_table.add_constants();
9049 symbol_table.add_variable(
"x",x);
9051 const std::string expression_str[] =
9060 const std::size_t expression_count =
sizeof(expression_str) /
sizeof(std::string);
9064 for (std::size_t i = 0; i < expression_count; ++i)
9068 expression_t expression;
9069 expression.register_symbol_table(symbol_table);
9071 if (!parser.compile(expression_str[i],expression))
9073 printf(
"run_test19() - Error: %s Expression[%02d]: %s\n",
9074 parser.error().c_str(),
9075 static_cast<unsigned int>(i),
9076 expression_str[i].c_str());
9084 bool error_found =
false;
9086 const std::size_t fibonacci_list[] =
9092 987, 1597, 2584, 4181,
9093 6765, 10946, 17711, 28657,
9094 46368, 75025, 121393, 196418,
9095 317811, 514229, 832040, 1346269
9098 const std::size_t fibonacci_list_size =
sizeof(fibonacci_list) /
sizeof(std::size_t);
9100 for (std::size_t i = 0; (i < fibonacci_list_size) && (!error_found); ++i)
9102 x =
static_cast<T
>(i);
9104 std::vector<T> result(expression_count,T(0));
9113 if (result[j] != result[0])
9122 printf(
"run_test19() - Error in evaluation! (5) Results don't match! fibonacci(%d) = %d\n",
9123 static_cast<unsigned int>(i),
9124 static_cast<unsigned int>(fibonacci_list[i]));
9128 printf(
"Expression[%02d]: %s = %d\n",
9129 static_cast<unsigned int>(j),
9130 expression_str[j].c_str(),
9131 static_cast<unsigned int>(result[j].toDouble()));
9136 printf(
"run_test19() - Error in evaluation! (6) Results don't match! fibonacci(%d) = %d\n",
9137 static_cast<unsigned int>(i),
9138 static_cast<unsigned int>(fibonacci_list[i]));
9142 printf(
"Expression[%02d]: %s = %d\n",
9143 static_cast<unsigned int>(j),
9144 expression_str[j].c_str(),
9145 static_cast<unsigned int>(result[j].toDouble()));
9159 symbol_table_t symbol_table;
9161 symbol_table.add_constants();
9162 symbol_table.add_variable(
"x",x);
9164 compositor_t compositor(symbol_table);
9172 " case x < 0 : -inf; "
9173 " case x == 0 : 0; "
9174 " case x == 1 : 1; "
9180 " y := (1 / 2) * (y + (x / y)); "
9181 " if (equal(y * y,x)) "
9183 " until ((z -= 1) <= 0); "
9192 "newton_sqrt_impl(x,0,0)",
"x"));
9194 std::string expression_str =
"newton_sqrt(x)";
9196 expression_t expression;
9198 expression.register_symbol_table(symbol_table);
9202 if (!parser.compile(expression_str,expression))
9204 printf(
"run_test19() - Error: %s Expression: %s\n",
9205 parser.error().c_str(),
9206 expression_str.c_str());
9211 bool error_found =
false;
9213 for (std::size_t i = 0; i < 100; ++i)
9215 x =
static_cast<T
>(i);
9217 const T result = expression.value();
9219 if (
not_equal(result,mpfr::sqrt(x),T(0.0000001)))
9221 printf(
"run_test19() - Computation Error "
9222 "Expression: [%s]\tExpected: %12.8f\tResult: %12.8f\n",
9223 expression_str.c_str(),
9224 mpfr::sqrt(x).toDouble(),
9238 symbol_table_t symbol_table;
9240 symbol_table.add_constants();
9242 compositor_t compositor(symbol_table);
9248 " var width := 118; "
9249 " var height := 41; "
9250 " var imag_max := +1; "
9251 " var imag_min := -1; "
9252 " var real_max := +1; "
9253 " var real_min := -2.5; "
9254 " var x_step := (real_max - real_min) / width; "
9255 " var y_step := (imag_max - imag_min) / height; "
9256 " for (var y := 0; y < height; y += 1) "
9258 " var imag := imag_min + (y_step * y); "
9259 " for (var x := 0; x < width; x += 1) "
9261 " var real := real_min + x_step * x; "
9262 " var z_real := real; "
9263 " var z_imag := imag; "
9265 " for (var n := 0; n < 30; n += 1) "
9267 " var a := z_real^2; "
9268 " var b := z_imag^2; "
9269 " plot_value := n; "
9270 " if ((a + b) < 4) "
9272 " z_imag := 2 * z_real * z_imag + imag; "
9273 " z_real := a - b + real; "
9281 std::string expression_str =
"mandelbrot()";
9283 expression_t expression;
9285 expression.register_symbol_table(symbol_table);
9289 if (!parser.compile(expression_str,expression))
9291 printf(
"run_test19() - Error: %s Expression: %s\n",
9292 parser.error().c_str(),
9293 expression_str.c_str());
9298 for (std::size_t i = 0; i < 100; ++i)
9307 symbol_table_t symbol_table;
9309 symbol_table.add_variable(
"x",x);
9311 compositor_t compositor(symbol_table);
9319 " fooboo(x - 1) + x; "
9324 std::string expression_str =
"fOoBoO(x)";
9326 expression_t expression;
9328 expression.register_symbol_table(symbol_table);
9332 if (!parser.compile(expression_str,expression))
9334 printf(
"run_test19() - Error: %s Expression: %s\n",
9335 parser.error().c_str(),
9336 expression_str.c_str());
9343 for (std::size_t i = 0; i < 100; ++i)
9349 const T result = expression.value();
9353 printf(
"run_test19() - FooBoo(%5.2f) Expected: %5.2f\tResult: %5.2f\n",
9354 static_cast<double>(x.toDouble()),
9355 static_cast<double>(sum.toDouble()),
9356 static_cast<double>(result.toDouble()));
9364 const std::pair<std::string,std::string> test_funcprog[] =
9368 " var s := depth_to_str(depth); "
9372 " if (recursive(depth - 1) == false) "
9378 " s == depth_to_str(depth); ",
9385 " var v[7] := [ depth ]; "
9389 " if (recursive(depth - 1) == false) "
9395 " return [sum(v == depth) == v[]]; ",
9402 " var v1[ 7] := [ depth ]; "
9403 " var v2[21] := [ depth ]; "
9407 " if (recursive(depth - 1) == false) "
9413 " (sum(v1 == depth) == v1[]) and "
9414 " (sum(v2 == depth) == v2[]) ; "
9422 " var s := depth_to_str(depth); "
9424 " for (var i := 0; i < 2; i += 1) "
9428 " if (recursive(depth - 1) == false) "
9435 " s == depth_to_str(depth); ",
9442 " var s := depth_to_str(depth); "
9444 " for (var i := 0; i < 2; i += 1) "
9446 " for (var j := 0; j < 2; j += 1) "
9450 " if (recursive(depth - 1) == false) "
9458 " s == depth_to_str(depth); ",
9465 " var v[7] := [ depth ]; "
9467 " for (var i := 0; i < 2; i += 1) "
9469 " var w[21] := [ depth + 1 ]; "
9473 " if (recursive(depth - 1) == false) "
9479 " if (sum(w == (depth + 1)) != w[]) "
9485 " return [sum(v == depth) == v[]]; ",
9492 " var v[7] := [ depth ]; "
9494 " for (var i := 0; i < 2; i += 1) "
9496 " var u[21] := [ depth + 1 ]; "
9498 " for (var j := 0; j < 2; j += 1) "
9500 " var w[35] := [ depth + 2 ]; "
9504 " if (recursive(depth - 1) == false) "
9510 " if (sum(w == (depth + 2)) != w[]) "
9516 " if (sum(u == (depth + 1)) != u[]) "
9522 " return [sum(v == depth) == v[]]; ",
9529 " var s := depth_to_str(depth); "
9530 " var v[7] := [ depth ]; "
9534 " if (recursive(depth - 1) == false) "
9542 " (s == depth_to_str(depth)) and "
9543 " (sum(v == depth) == v[]) "
9551 " var s0 := depth_to_str(depth); "
9552 " var v0[7] := [ depth ]; "
9553 " var s1 := depth_to_str(depth); "
9554 " var v1[42] := [ depth ]; "
9558 " if (recursive(depth - 1) == false) "
9566 " (s0 == depth_to_str(depth)) and "
9567 " (sum(v0 == depth) == v0[]) and "
9568 " (s1 == depth_to_str(depth)) and "
9569 " (sum(v1 == depth) == v1[]) "
9577 " var s := depth_to_str(depth); "
9578 " var v[7] := [ depth ]; "
9580 " for (var i := 0; i < 2; i += 1) "
9584 " if (recursive(depth - 1) == false) "
9593 " (s == depth_to_str(depth)) and "
9594 " (sum(v == depth) == v[]) "
9602 " var s0 := depth_to_str(depth); "
9603 " var v0[7] := [ depth ]; "
9604 " var s1 := depth_to_str(depth); "
9605 " var v1[42] := [ depth ]; "
9607 " for (var i := 0; i < 2; i += 1) "
9611 " if (recursive(depth - 1) == false) "
9620 " (s0 == depth_to_str(depth)) and "
9621 " (sum(v0 == depth) == v0[]) and "
9622 " (s1 == depth_to_str(depth)) and "
9623 " (sum(v1 == depth) == v1[]) "
9631 " var s0 := depth_to_str(depth); "
9632 " var v0[7] := [ depth ]; "
9634 " for (var i := 0; i < 2; i += 1) "
9636 " var s1 := depth_to_str(depth); "
9637 " var v1[21] := [ depth + 1 ]; "
9641 " if (recursive(depth - 1) == false) "
9647 " if (s1 != depth_to_str(depth)) "
9652 " if (sum(v1 == (depth + 1)) != v1[]) "
9660 " (s0 == depth_to_str(depth)) and "
9661 " (sum(v0 == depth) == v0[]) "
9672 " recursive(depth - 1) + "
9673 " recursive(depth - 2) ; ",
9678 " for (var i := 0; i < n; i += 1) "
9680 " total += recursive(i); "
9687 const std::size_t test_funcprog_size =
sizeof(test_funcprog) /
sizeof(std::pair<std::string,std::string>);
9688 const std::size_t
rounds = 5;
9692 for (std::size_t r = 0; r <
rounds; ++r)
9694 for (std::size_t i = 0; i < test_funcprog_size; ++i)
9698 symbol_table_t symbol_table;
9699 symbol_table.add_function(
"depth_to_str",dts);
9701 compositor_t compositor(symbol_table);
9703 const bool comp_result = compositor.add(
9704 function_t(
"recursive")
9707 ( test_funcprog[i].first ));
9711 printf(
"run_test19() - Compositor Error: %s\nfunction: %s\n",
9712 compositor.error().c_str(),
9713 test_funcprog[i].first.c_str());
9719 expression_t expression;
9720 expression.register_symbol_table(symbol_table);
9724 if (!parser.compile(test_funcprog[i].second, expression))
9726 printf(
"run_test19() - Error: %s Expression: %s\n",
9727 parser.error().c_str(),
9728 test_funcprog[i].second.c_str());
9734 if (T(1) != expression.value())
9736 printf(
"run_test19() - Evaluation Error: test_funcprog %d function: %s\n",
9737 static_cast<int>(i),
9738 test_funcprog[i].second.c_str());
9753 symbol_table_t symbol_table;
9755 symbol_table.add_constants();
9757 const std::string expression_string =
9758 " var sieve[10^7] := [false]; "
9759 " var m := trunc(sqrt(sieve[])); "
9761 " sieve[0] := true; "
9762 " sieve[1] := true; "
9764 " for (var i := 0; i <= m; i += 1) "
9766 " if (false == sieve[i]) "
9768 " for (var j := (i * i); j < sieve[]; j += i) "
9770 " sieve[j] := true; "
9775 " var prime_count := 0; "
9776 " for (var i := 0; i < sieve[]; i += 1) "
9778 " if (false == sieve[i]) "
9780 " prime_count += 1; "
9784 " prime_count == 664579; ";
9786 expression_t expression;
9788 expression.register_symbol_table(symbol_table);
9792 if (!parser.compile(expression_string,expression))
9794 printf(
"run_test19() - Error: %s Expression: %s\n",
9795 parser.error().c_str(),
9796 expression_string.c_str());
9801 if (T(1) != expression.value())
9803 printf(
"run_test19() - Prime Sieve Computation Error");
9810 symbol_table_t symbol_table;
9812 symbol_table.add_constants();
9814 const std::string expression_str[] =
9816 "var delta := 10^-7; var total := 0; for (var i := 0; i <= 3; i += delta) { total += "
9817 "erf(i) }; abs((delta * total) - (3 * erf(3) + (1 / exp(9) - 1) / sqrt(pi))) < 0.000001",
9819 "var delta := 10^-7; var total := 0; for (var i := 0; i <= 3; i += delta) { total += "
9820 "erfc(i) }; abs((delta * total) - (3 * erfc(3) + ((1 - 1 / exp(9)) / sqrt(pi)))) < 0.000001"
9827 for (std::size_t i = 0; i < 2; ++i)
9829 e[i].register_symbol_table(symbol_table);
9831 if (!parser.compile(expression_str[i],e[i]))
9833 printf(
"run_test19() - Error: %s Expression: %s\n",
9834 parser.error().c_str(),
9835 expression_str[i].c_str());
9840 if (T(1) != e[i].value())
9842 printf(
"run_test19() - erf/erfc computation error %d",
9843 static_cast<unsigned int>(i));
10386 symbol_table_t symbol_table;
10387 symbol_table.add_constants();
10388 symbol_table.add_variable(
"x",x);
10389 symbol_table.add_variable(
"y",y);
10390 symbol_table.add_variable(
"z",z);
10397 "return[x + y,y - x]; x;",
10398 "return[x + y,y - x,'abc']; x;",
10399 "if (x < y) return [1,'abc1']; else return [2,'abc2',x];" ,
10400 "if (x > y) return [1,'abc1']; else return [2,'abc2',x];" ,
10401 "if (x < y) { return [1,'abc1'];} else { return [2,'abc2',x];}",
10402 "if (x > y) { return [1,'abc1'];} else { return [2,'abc2',x];}",
10403 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [1]; } ",
10404 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [1,'abc']; } ",
10405 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [1,'abc',x]; }",
10406 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [1,'abc',x,y]; }",
10407 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [1,'abc',x,y,z]; }",
10408 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [2,'abc2',x]; else x += 1; }",
10409 "for(var i := 0; i < 10; i += 1) { if (i == 5) { return [1,'abc1'];} else x += 1; }"
10412 static const std::string result_list[] =
10434 bool error_found =
false;
10438 expression_t expression;
10439 expression.register_symbol_table(symbol_table);
10445 printf(
"run_test21() - Error: %s Expression: %s [1]\n",
10446 parser.error().c_str(),
10449 error_found =
true;
10452 else if (!parser.dec().return_present())
10454 printf(
"run_test21() - Expected a return statement Expression: %s [1]\n",
10457 error_found =
true;
10461 expression.value();
10463 std::string pattern = results_to_string<T>(expression.results());
10465 if (!expression.return_invoked())
10467 printf(
"run_test21() - Invalid return invoke state [1] Expression: %s\n",
10470 error_found =
true;
10473 else if (result_list[i] != pattern)
10475 printf(
"run_test21() - Invalid return results [1] Expected %s Got: %s Expression: %s\n",
10476 result_list[i].c_str(),
10480 error_found =
true;
10496 symbol_table_t symbol_table;
10497 symbol_table.add_constants();
10498 symbol_table.add_variable(
"x",x);
10499 symbol_table.add_variable(
"y",y);
10500 symbol_table.add_variable(
"z",z);
10504 "x := 1; x + 1; x + 2; x + 3; x + 5; x + 7; return [x + 1]; ",
10505 "x := 1; x + 1; x + 2; x + 3; x + 5; return [x + 1]; x := 7; ",
10506 "x := 1; x + 1; x + 2; x + 3; return [x + 1]; x + 5; x := 7; ",
10507 "x := 1; x + 1; x + 2; return [x + 1]; x + 3; x + 5; x := 7; ",
10508 "x := 1; x + 1; return [x + 1]; x + 2; x + 3; x + 5; x := 7; ",
10509 "x := 1; return [x + 1]; x + 1; x + 2; x + 3; x + 5; x := 7; ",
10510 "return [x + 1]; x := 1; x + 1; x + 2; x + 3; x + 5; x := 7; ",
10511 "~{x := 1; x + 1; x + 2; x + 3; x + 5; x + 7; return [x + 1]}",
10512 "~{x := 1; x + 1; x + 2; x + 3; x + 5; return [x + 1]; x := 7}",
10513 "~{x := 1; x + 1; x + 2; x + 3; return [x + 1]; x + 5; x := 7}",
10514 "~{x := 1; x + 1; x + 2; return [x + 1]; x + 3; x + 5; x := 7}",
10515 "~{x := 1; x + 1; return [x + 1]; x + 2; x + 3; x + 5; x := 7}",
10516 "~{x := 1; return [x + 1]; x + 1; x + 2; x + 3; x + 5; x := 7}",
10517 "~{return [x + 1]; x := 1; x + 1; x + 2; x + 3; x + 5; x := 7}"
10520 static const std::string result_list[] =
10522 "T",
"T",
"T",
"T",
"T",
"T",
"T",
10523 "T",
"T",
"T",
"T",
"T",
"T",
"T",
10528 bool error_found =
false;
10532 expression_t expression;
10533 expression.register_symbol_table(symbol_table);
10539 printf(
"run_test21() - Error: %s Expression: %s [2]\n",
10540 parser.error().c_str(),
10543 error_found =
true;
10546 else if (!parser.dec().return_present())
10548 printf(
"run_test21() - Expected a return statement Expression: %s [2]\n",
10551 error_found =
true;
10555 expression.value();
10557 std::string pattern = results_to_string<T>(expression.results());
10559 if (!expression.return_invoked())
10561 printf(
"run_test21() - Invalid return invoke state [2] Expression: %s\n",
10564 error_found =
true;
10567 else if (result_list[i] != pattern)
10569 printf(
"run_test21() - Invalid return results [2] Expected %s Got: %s Expression: %s\n",
10570 result_list[i].c_str(),
10574 error_found =
true;
10577 else if (!
result_equal(expression.results(), x + T(1)))
10579 printf(
"run_test21() - Invalid return results [2] Expected %s Got: %s Expression: %s\n",
10580 result_list[i].c_str(),
10584 error_found =
true;
10600 T v[] = {0 , 1, 2, 3 };
10601 std::string s =
"Hello ";
10605 symbol_table_t symbol_table;
10606 expression_t expression;
10609 symbol_table.add_variable (
"x", x);
10610 symbol_table.add_variable (
"y", y);
10611 symbol_table.add_variable (
"z", z);
10612 symbol_table.add_vector (
"v", v);
10613 symbol_table.add_stringvar(
"s", s);
10615 expression.register_symbol_table(symbol_table);
10617 const std::string expression_str =
10621 " return [ x, x + y, 2 * v, s + 'world' ]; ";
10623 if (!parser.compile(expression_str, expression))
10625 printf(
"run_test21() - ERROR: %s\tExpression: %s\n",
10626 parser.error().c_str(),
10627 expression_str.c_str());
10631 expression.value();
10634 const results_context_t& results = expression.results();
10636 if (results.count() != 4)
10638 printf(
"run_test21() - ERROR Expected 4 return results, instead got: %d\n",
10639 static_cast<unsigned int>(results.count()));
10645 std::string result_s;
10646 std::vector<T> result_v;
10648 const T expected_result_v[] = {0 , 2, 4, 6 };
10649 const std::string expected_result_s =
"Hello world";
10651 if (!results.get_scalar(0,result_x0))
10653 printf(
"run_test21() - ERROR Failed to get scalar index0 from return result!\n");
10656 else if (result_x0 != T(1))
10658 printf(
"run_test21() - ERROR result_x0 is not expected value!\n");
10661 else if (!results.get_scalar(1,result_x1))
10663 printf(
"run_test21() - ERROR Failed to get scalar index1 from return result!\n");
10666 else if (result_x1 != T(3))
10668 printf(
"run_test21() - ERROR result_x1 is not expected value!\n");
10671 else if (!results.get_vector(2,result_v))
10673 printf(
"run_test21() - ERROR Failed to get vector from return result!\n");
10677 (result_v.size() != (
sizeof(expected_result_v) /
sizeof(T))) ||
10678 !std::equal(result_v.begin(),result_v.end(),expected_result_v)
10681 printf(
"run_test21() - ERROR result_v is not expected value!\n");
10684 else if (!results.get_string(3,result_s))
10686 printf(
"run_test21() - ERROR Failed to get string from return result!\n");
10689 else if (result_s != expected_result_s)
10691 printf(
"run_test21() - ERROR result_s is not expected value!\n");
10697 const std::string invalid_expressions[] =
10710 "var i := 2; v[i] := x",
10711 "var i := 2; v[i] += x",
10717 "var i := 2; aa[i:3] := bb",
10718 "var i := 2; aa[i+1:3] := bb",
10719 "var i := 2; aa[0:i] := bb",
10720 "var i := 2; aa[0:i+1] := bb",
10721 "var i := 1; var j := 3; aa[i:j] := bb",
10722 "var i := 1; var j := 3; aa[i+1:j] := bb",
10723 "var i := 1; var j := 3; aa[i:j+1] := bb",
10724 "var i := 1; var j := 3; aa[i+1:j+1] := bb",
10727 const std::size_t invalid_expressions_size =
sizeof(invalid_expressions) /
sizeof(std::string);
10729 for (std::size_t i = 0; i < invalid_expressions_size; ++i)
10731 symbol_table_t mutable_symbol_table;
10732 symbol_table_t immutable_symbol_table(symbol_table_t::e_immutable);
10736 std::string s =
"xyz";
10737 std::string aa =
"0123456789";
10738 std::string bb =
"A";
10742 std::string s_ =
"xyz";
10744 std::string a_ =
"0123456789";
10745 std::string b_ =
"A";
10747 immutable_symbol_table.add_variable (
"x" , x );
10748 immutable_symbol_table.add_vector (
"v" , v );
10749 immutable_symbol_table.add_stringvar(
"s" , s );
10750 immutable_symbol_table.add_stringvar(
"aa", aa);
10751 immutable_symbol_table.add_stringvar(
"bb", bb);
10753 mutable_symbol_table.add_variable (
"x_", x_);
10754 mutable_symbol_table.add_vector (
"v_", v_);
10755 mutable_symbol_table.add_stringvar (
"s_", s_);
10756 mutable_symbol_table.add_stringvar (
"a_", a_);
10757 mutable_symbol_table.add_stringvar (
"b_", b_);
10759 const std::string& expression_str = invalid_expressions[i];
10760 expression_t expression;
10761 expression.register_symbol_table(immutable_symbol_table);
10762 expression.register_symbol_table(mutable_symbol_table );
10765 const bool compile_result = parser.compile(expression_str, expression);
10767 if (compile_result)
10769 expression.value();
10770 printf(
"run_test21() - Invalid expression due to immutability was successfully compiled. Expression: %s\n",
10771 expression_str.c_str());
10782 symbol_table_t mutable_symbol_table;
10783 symbol_table_t immutable_symbol_table(symbol_table_t::e_immutable);
10785 mutable_symbol_table.add_variable(
"x", x);
10786 mutable_symbol_table.add_variable(
"y", y);
10788 immutable_symbol_table.add_variable(
"w", w);
10789 immutable_symbol_table.add_variable(
"z", z);
10791 expression_t expression;
10792 expression.register_symbol_table(mutable_symbol_table );
10793 expression.register_symbol_table(immutable_symbol_table);
10797 typedef std::pair<std::string,bool> local_test_t;
10799 const local_test_t expressions[] =
10801 std::make_pair<std::string,bool>(
"x := y + (z / w)" ,
true ),
10802 std::make_pair<std::string,bool>(
"y := y / x + (z / w)" ,
true ),
10803 std::make_pair<std::string,bool>(
"z := y + x - w" ,
false),
10804 std::make_pair<std::string,bool>(
"z == (w += y / x)" ,
false)
10807 const std::size_t expressions_size =
sizeof(expressions) /
sizeof(local_test_t);
10809 bool error_found =
false;
10811 for (std::size_t i = 0; i < expressions_size; ++i)
10813 const std::string expression_str = expressions[i].first;
10814 const bool expected_compile_result = expressions[i].second;
10816 if (expected_compile_result != parser.compile(expression_str, expression))
10818 printf(
"run_test21() - Invalid compilation of expression. Expected compile result: %c Expression: %s\n",
10819 expected_compile_result ?
'T' :
'F',
10820 expression_str.c_str());
10822 error_found =
true;
10830 expression.value();
10840 typedef typename parser_t::settings_store settings_t;
10842 const std::string invalid_expressions[] =
10844 "var result := 0; if (true) { result := 2 } if (true) { result := 3 }; result",
10845 "var result := 0; if (true) { result := 2 }; if (true) { result := 3 } result",
10846 "var result := 0; if (true) { result := 2 } if (true) { result := 3 } result",
10847 "var result := 0; var x:=1; if (x > 0) { result := 2 } else if (x > 0) { result := 3 } result",
10848 "var result := 0; var x := 1; if (x > 0) { result := 2 } if (x > 0) { result := 3 }; result",
10849 "var result := 0; var x := 1; if (x > 0) { result := 2 }; if (x > 0) { result := 3 } result",
10850 "var result := 0; var x := 1; if (x > 0) { result := 2 } if (x > 0) { result := 3 } result",
10851 "var result := 0; var x := 1; if (x > 0) { result := 2 } else if (x > 0) { result := 3 } result",
10852 "var result := 0; var x := 1; if (x > 0) result := 2 else if (x > 0) { result := 3 } result",
10853 "var result := 0; var x := 1; if (x > 0) {result := 2 } else if (x > 0) result := 3 result",
10854 "var x := 2; var y := 0; x y ",
10855 "var x := 2; x var y := 0; ",
10856 "var x := 2; var y := 0; while (y < 3) { x := x * x; y += 1; } x ",
10857 "var x := 2; var y := 0; for (var i := 0; i < 2; i += 1) { x := x * x; y += 1; } x ",
10858 "var x := 2; var y := 0; while (y < 3) { x := x * x; y += 1; } 1 ",
10859 "var x := 2; var y := 0; for (var i := 0; i < 2; i += 1) { x := x * x; y += 1; } 1 ",
10860 "var x := 2; var y := 0; x while (y < 3) { x := x * x; y += 1; } ",
10861 "var x := 2; var y := 0; x for (var i := 0; i < 2; i += 1) { x := x * x; y += 1; } ",
10862 "var x := 2; var y := 0; for (var i := 0; i < 2; i += 1) { x := x * x; y += 1; } (1 + x)",
10863 "var x := 2; var y := 0; for (var i := 0; i < 2; i += 1) { x := x * x; y += 1; } (x + 1)",
10864 "var x := 2; var y := 0; (1 + x) for (var i := 0; i < 2; i += 1) { x := x * x; y += 1; }",
10865 "var x := 2; var y := 0; (x + 1) for (var i := 0; i < 2; i += 1) { x := x * x; y += 1; }",
10866 "var x := 2; var y := 0; (x + y) for (var i := 0; i < 2; i += 1) { x := x * x; y += 1; }",
10874 "var x := 2; 1 2 ",
10875 "var x := 2; 1 x ",
10876 "var x := 2; x 1 ",
10877 "var x := 2; a 1 ",
10878 "var x := 2; x a ",
10879 "var x := 2; x a b ",
10880 "var x := 2; x a b c ",
10881 "var x := 2; a x ",
10882 "var x := 2; a x b ",
10883 "var x := 2; a x b c ",
10884 "var x := 2; 'hello' 1",
10885 "var x := 2; 1 'hello'",
10886 "var x := 2; 'hello' x",
10887 "var x := 2; x 'hello'",
10888 "var x := 2; (x 1) ",
10889 "var x := 2; (1 x) ",
10890 "var x := 2; 2 + (x 1) ",
10891 "var x := 2; 2 + (1 x) ",
10892 "var x := 2; x + (x 1) ",
10893 "var x := 2; x + (1 x) ",
10894 "var x := 2; (x 1) + 2 ",
10895 "var x := 2; (1 x) + 2 ",
10896 "var x := 2; (x 1) + x ",
10897 "var x := 2; (1 x) + x ",
10898 "var x := 2; var y := 3; (x y) ",
10899 "var x := 2; var y := 3; (y x) ",
10900 "var x := 2; var y := 3; 2 + (x y) ",
10901 "var x := 2; var y := 3; 2 + (y x) ",
10902 "var x := 2; var y := 3; x + (x y) ",
10903 "var x := 2; var y := 3; x + (y x) ",
10904 "var x := 2; var y := 3; (x y) + 2 ",
10905 "var x := 2; var y := 3; (y x) + 2 ",
10906 "var x := 2; var y := 3; (x y) + x ",
10907 "var x := 2; var y := 3; (y x) + x ",
10908 "var x := 2; 2 + x 1 ",
10909 "var x := 2; 2 + 1 x ",
10910 "var x := 2; x + x 1 ",
10911 "var x := 2; x + 1 x ",
10912 "var x := 2; var y := 3; 2 + x y ",
10913 "var x := 2; var y := 3; 2 + y x ",
10914 "var x := 2; var y := 3; x + x y ",
10915 "var x := 2; var y := 3; x + y x ",
10918 "var x := 2; x ~{x; 1; 2} ",
10919 "var x := 2; 1 ~{x; 1; 2} ",
10920 "var x := 2; ~{x; 1; 2} x ",
10921 "var x := 2; ~{x; 1; 2} 1 ",
10924 "var x := 2; x ~(x; 1; 2) ",
10925 "var x := 2; 1 ~(x; 1; 2) ",
10926 "var x := 2; ~(x; 1; 2) x ",
10927 "var x := 2; ~(x; 1; 2) 1 ",
10928 "var x := 2; (x + 1) ~{x; 1; 2} ",
10929 "var x := 2; (1 + x) ~{x; 1; 2} ",
10930 "var x := 2; ~{x; 1; 2} (x + 1) ",
10931 "var x := 2; ~{x; 1; 2} (1 + x) ",
10932 "var x := 2; x + 1 ~{x; 1; 2} ",
10933 "var x := 2; 1 + x ~{x; 1; 2} ",
10934 "var x := 2; ~{x; 1; 2} x + 1 ",
10935 "var x := 2; ~{x; 1; 2} 1 + x ",
10938 "var x := 2; x ~(x, 1, 2) ",
10939 "var x := 2; 1 ~(x, 1, 2) ",
10940 "var x := 2; ~(x, 1, 2) x ",
10941 "var x := 2; ~(x, 1, 2) 1 ",
10942 "var x := 2; 1 switch { case x > 1 : 1; case x < 3 : 2; default : 3; } ",
10943 "var x := 2; x switch { case x > 1 : 1; case x < 3 : 2; default : 3; } ",
10944 "var x := 2; switch { case x > 1 : 1; case x < 3 : 2; default : 3; } x ",
10945 "var x := 2; 1 [*] { case x > 1 : 1; case x < 3 : 2; } ",
10946 "var x := 2; x [*] { case x > 1 : 1; case x < 3 : 2; } ",
10947 "var x := 2; [*] { case x > 1 : 1; case x < 3 : 2; } x ",
10948 "var x := 2; (x + 1) switch { case x > 1 : 1; case x < 3 : 2; default : 3; } ",
10949 "var x := 2; switch { case x > 1 : 1; case x < 3 : 2; default : 3; } (x + 1) ",
10950 "var x := 2; (x + 1) [*] { case x > 1 : 1; case x < 3 : 2; } ",
10951 "var x := 2; [*] { case x > 1 : 1; case x < 3 : 2; } (x + 1) ",
10952 "var x := 2; for (var i := 0; i < 2; i += 1) { return [i] 1; } ",
10953 "var x := 2; for (var i := 0; i < 2; i += 1) { 1 return [i]; } ",
10954 "var x := 2; for (var i := 0; i < 2; i += 1) { return [i] i; } ",
10955 "var x := 2; for (var i := 0; i < 2; i += 1) { i return [i]; } ",
10956 "var x := 2; for (var i := 0; i < 2; i += 1) { return [i] 1 + i; } ",
10957 "var x := 2; for (var i := 0; i < 2; i += 1) { 1 + i return [i]; } ",
10958 "var x := 2; for (var i := 0; i < 2; i += 1) { return [i] i + 1; } ",
10959 "var x := 2; for (var i := 0; i < 2; i += 1) { i + 1 return [i]; } ",
10960 "var x := 2; for (var i := 0; i < 2; i += 1) { 1 if (i > 3) return [i]; } ",
10961 "var x := 2; for (var i := 0; i < 2; i += 1) { if (i > 3) return [i] 1; } ",
10962 "var x := 2; for (var i := 0; i < 2; i += 1) { x if (i > 3) return [i]; } ",
10963 "var x := 2; for (var i := 0; i < 2; i += 1) { if (i > 3) return [i] x; } ",
10964 "var x := 2; for (var i := 0; i < 2; i += 1) { x + 1 if (i > 3) return [i]; }",
10965 "var x := 2; for (var i := 0; i < 2; i += 1) { if (i > 3) return [i] x + 1; }",
10966 "var x := 2; for (var i := 0; i < 2; i += 1) { 1 + x if (i > 3) return [i]; }",
10967 "var x := 2; for (var i := 0; i < 2; i += 1) { if (i > 3) return [i] 1 + x; }",
10968 "var x := 2; for (var i := 0; i < 2; i += 1) { 1 for (var j := 0; j < 2; j += 1){} } ",
10969 "var x := 2; for (var i := 0; i < 2; i += 1) { for (var j := 0; j < 2; j += 1){} 1 } ",
10970 "var x := 2; for (var i := 0; i < 2; i += 1) { x for (var j := 0; j < 2; j += 1){} } ",
10971 "var x := 2; for (var i := 0; i < 2; i += 1) { for (var j := 0; j < 2; j += 1){} x } ",
10972 "var x := 2; for (var i := 0; i < 2; i += 1) { x + 1 for (var j := 0; j < 2; j += 1){} } ",
10973 "var x := 2; for (var i := 0; i < 2; i += 1) { for (var j := 0; j < 2; j += 1){} x + 1 } ",
10974 "var x := 2; for (var i := 0; i < 2; i += 1) { 1 + x for (var j := 0; j < 2; j += 1){} } ",
10975 "var x := 2; for (var i := 0; i < 2; i += 1) { for (var j := 0; j < 2; j += 1){} 1 + x } "
10978 const std::size_t expressions_size =
sizeof(invalid_expressions) /
sizeof(std::string);
10980 static const std::size_t compile_options =
10981 settings_t::e_replacer +
10982 settings_t::e_joiner +
10983 settings_t::e_numeric_check +
10984 settings_t::e_bracket_check +
10985 settings_t::e_sequence_check +
10986 settings_t::e_strength_reduction;
10988 const settings_t settings(compile_options);
10989 parser_t parser(settings);
10995 symbol_table_t symbol_table;
10996 symbol_table.add_variable(
"a", a);
10997 symbol_table.add_variable(
"b", b);
10998 symbol_table.add_variable(
"c", c);
11000 bool error_found =
false;
11002 for (std::size_t e = 0; e < expressions_size; ++e)
11004 const std::string& expression_string = invalid_expressions[e];
11006 expression_t expression;
11007 expression.register_symbol_table(symbol_table);
11009 if (parser.compile(expression_string,expression))
11011 printf(
"run_test21() - Expected compilation error for expression: %s\n",
11012 expression_string.c_str());
11013 error_found =
true;
11017 expression.value();
11027 const std::string expressions[] =
11030 "var x := 2; sum(if (x > 1) { vv8 } else { vv7 }) == sum(vv8)",
11031 "var x := 2; sum(if (x > 1) { vv8 + 1 } else { vv8 + 2 }) == sum(vv8 + 1)",
11034 "var v[8] := {1,1,1,1,1,1,1,1}; vv8 += 1; sgn(vv8) == v",
11035 "abs(-1 * vv8) == vv8",
11036 "abs(vv8 * -1) == vv8",
11037 "var x := -1; abs(x * vv8) == vv8",
11038 "var x := -1; abs(vv8 * x) == vv8",
11039 "var x := 1; abs(-x * vv8) == vv8",
11040 "var x := 1; abs(vv8 * -x) == vv8",
11041 "var x := -2; abs(x * vv8) == 2vv8",
11042 "var x := -2; abs(vv8 * x) == 2vv8",
11043 "var x := 2; abs(-x * vv8) == 2vv8",
11044 "var x := 2; abs(vv8 * -x) == 2vv8",
11045 "var x := -2; abs(x * vv8) == -x * vv8",
11046 "var x := -2; abs(vv8 * x) == -x * vv8",
11047 "var x := 2; abs(-x * vv8) == x * vv8",
11048 "var x := 2; abs(vv8 * -x) == x * vv8",
11049 "var x := -2; abs(x * vv8) == vv8 * -x",
11050 "var x := -2; abs(vv8 * x) == vv8 * -x",
11051 "var x := 2; abs(-x * vv8) == vv8 * x",
11052 "var x := 2; abs(vv8 * -x) == vv8 * x",
11053 "var x := -2; abs(x * vv8) == abs(x) * vv8",
11054 "var x := -2; abs(vv8 * x) == abs(x) * vv8",
11055 "var x := -2; abs(x * vv8) == vv8 * abs(x)",
11056 "var x := -2; abs(vv8 * x) == vv8 * abs(x)",
11059 "var v[8] := {1,2,3,4,5,6,7,8}; var x := 1; (vv8 + x) == v",
11060 "var v[7] := {1,2,3,4,5,6,7}; var x := 1; (vv8 + x) == v",
11061 "var v[6] := {1,2,3,4,5,6}; var x := 1; (vv8 + x) == v",
11062 "var v[5] := {1,2,3,4,5}; var x := 1; (vv8 + x) == v",
11063 "var v[4] := {1,2,3,4}; var x := 1; (vv8 + x) == v",
11064 "var v[3] := {1,2,3}; var x := 1; (vv8 + x) == v",
11065 "var v[2] := {1,2}; var x := 1; (vv8 + x) == v",
11066 "var v[1] := {1}; var x := 1; (vv8 + x) == v",
11067 "var v[8] := {1,2,3,4,5,6,7,8}; var x := 1; (x + vv8) == v",
11068 "var v[7] := {1,2,3,4,5,6,7}; var x := 1; (x + vv8) == v",
11069 "var v[6] := {1,2,3,4,5,6}; var x := 1; (x + vv8) == v",
11070 "var v[5] := {1,2,3,4,5}; var x := 1; (x + vv8) == v",
11071 "var v[4] := {1,2,3,4}; var x := 1; (x + vv8) == v",
11072 "var v[3] := {1,2,3}; var x := 1; (x + vv8) == v",
11073 "var v[2] := {1,2}; var x := 1; (x + vv8) == v",
11074 "var v[1] := {1}; var x := 1; (x + vv8) == v",
11077 "var v[8] := [-1]; v < vv8",
11078 "var v[7] := [-1]; v < vv8",
11079 "var v[3] := [-1]; v < vv8",
11080 "var v[2] := [-1]; v < vv8",
11081 "var v[1] := [-1]; v < vv8",
11084 "var vv8sum := sum(vv8); vv8 += (vv8 + 1); sum(vv8) == (2 * sum(vv8sum) + vv8[] * 1)",
11085 "var vv8sum := sum(vv8); vv8 += (vv8 - 1); sum(vv8) == (2 * sum(vv8sum) - vv8[] * 1)",
11086 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 + x); sum(vv8) == (2 * sum(vv8sum) + vv8[] * 1)",
11087 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 - x); sum(vv8) == (2 * sum(vv8sum) - vv8[] * 1)",
11088 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 + (vv8 + x)); sum(vv8) == (3 * sum(vv8sum) + vv8[] * 1)",
11089 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 + (vv8 - x)); sum(vv8) == (3 * sum(vv8sum) - vv8[] * 1)",
11090 "var vv8sum := sum(vv8); vv8 += (vv8 += 1); sum(vv8) == (2 * vv8sum + 2 * (vv8[] * 1))",
11091 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 += x); sum(vv8) == (2 * vv8sum + 2 * (vv8[] * x))",
11092 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 -= x); sum(vv8) == (2 * vv8sum - 2 * (vv8[] * x))",
11093 "var vv8sum := sum(vv8); vv8 += (vv8 + 1); sum(vv8) == (2 * sum(vv8sum) + vv8[] * 1);",
11094 "var vv8sum := sum(vv8); vv8 += (vv8 - 1); sum(vv8) == (2 * sum(vv8sum) - vv8[] * 1);",
11095 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 + x); sum(vv8) == (2 * sum(vv8sum) + vv8[] * 1);",
11096 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 - x); sum(vv8) == (2 * sum(vv8sum) - vv8[] * 1);",
11097 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 + (vv8 + x)); sum(vv8) == (3 * sum(vv8sum) + vv8[] * 1);",
11098 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 + (vv8 - x)); sum(vv8) == (3 * sum(vv8sum) - vv8[] * 1);",
11099 "var vv8sum := sum(vv8); vv8 += (vv8 += 1); sum(vv8) == (2 * vv8sum + 2 * (vv8[] * 1));",
11100 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 += x); sum(vv8) == (2 * vv8sum + 2 * (vv8[] * x));",
11101 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 -= x); sum(vv8) == (2 * vv8sum - 2 * (vv8[] * x));",
11102 "var vv3sum := sum(vv3); vv3 += (vv3 + 1); sum(vv3) == (2 * sum(vv3sum) + vv3[] * 1)",
11103 "var vv3sum := sum(vv3); vv3 += (vv3 - 1); sum(vv3) == (2 * sum(vv3sum) - vv3[] * 1)",
11104 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 + x); sum(vv3) == (2 * sum(vv3sum) + vv3[] * 1)",
11105 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 - x); sum(vv3) == (2 * sum(vv3sum) - vv3[] * 1)",
11106 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 + (vv3 + x)); sum(vv3) == (3 * sum(vv3sum) + vv3[] * 1)",
11107 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 + (vv3 - x)); sum(vv3) == (3 * sum(vv3sum) - vv3[] * 1)",
11108 "var vv3sum := sum(vv3); vv3 += (vv3 += 1); sum(vv3) == (2 * vv3sum + 2 * (vv3[] * 1))",
11109 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 += x); sum(vv3) == (2 * vv3sum + 2 * (vv3[] * x))",
11110 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 -= x); sum(vv3) == (2 * vv3sum - 2 * (vv3[] * x))",
11111 "var vv3sum := sum(vv3); vv3 += (vv3 + 1); sum(vv3) == (2 * sum(vv3sum) + vv3[] * 1);",
11112 "var vv3sum := sum(vv3); vv3 += (vv3 - 1); sum(vv3) == (2 * sum(vv3sum) - vv3[] * 1);",
11113 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 + x); sum(vv3) == (2 * sum(vv3sum) + vv3[] * 1);",
11114 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 - x); sum(vv3) == (2 * sum(vv3sum) - vv3[] * 1);",
11115 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 + (vv3 + x)); sum(vv3) == (3 * sum(vv3sum) + vv3[] * 1);",
11116 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 + (vv3 - x)); sum(vv3) == (3 * sum(vv3sum) - vv3[] * 1);",
11117 "var vv3sum := sum(vv3); vv3 += (vv3 += 1); sum(vv3) == (2 * vv3sum + 2 * (vv3[] * 1));",
11118 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 += x); sum(vv3) == (2 * vv3sum + 2 * (vv3[] * x));",
11119 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 -= x); sum(vv3) == (2 * vv3sum - 2 * (vv3[] * x));",
11122 "var vv8sum := sum(vv8); vv8 += 1; sum(vv8) == (vv8sum + vv8[] * 1)",
11123 "var vv7sum := sum(vv7); vv7 += 1; sum(vv7) == (vv7sum + vv7[] * 1)",
11124 "var vv6sum := sum(vv6); vv6 += 1; sum(vv6) == (vv6sum + vv6[] * 1)",
11125 "var vv5sum := sum(vv5); vv5 += 1; sum(vv5) == (vv5sum + vv5[] * 1)",
11126 "var vv4sum := sum(vv4); vv4 += 1; sum(vv4) == (vv4sum + vv4[] * 1)",
11127 "var vv3sum := sum(vv3); vv3 += 1; sum(vv3) == (vv3sum + vv3[] * 1)",
11128 "var vv2sum := sum(vv2); vv2 += 1; sum(vv2) == (vv2sum + vv2[] * 1)",
11129 "var vv1sum := sum(vv1); vv1 += 1; sum(vv1) == (vv1sum + vv1[] * 1)",
11130 "var vv8sum := sum(vv8); var x := 7; vv8 += (x - 1) / 2; sum(vv8) == (vv8sum + vv8[] * 3)",
11131 "var vv7sum := sum(vv7); var x := 7; vv7 += (x - 1) / 2; sum(vv7) == (vv7sum + vv7[] * 3)",
11132 "var vv6sum := sum(vv6); var x := 7; vv6 += (x - 1) / 2; sum(vv6) == (vv6sum + vv6[] * 3)",
11133 "var vv5sum := sum(vv5); var x := 7; vv5 += (x - 1) / 2; sum(vv5) == (vv5sum + vv5[] * 3)",
11134 "var vv4sum := sum(vv4); var x := 7; vv4 += (x - 1) / 2; sum(vv4) == (vv4sum + vv4[] * 3)",
11135 "var vv3sum := sum(vv3); var x := 7; vv3 += (x - 1) / 2; sum(vv3) == (vv3sum + vv3[] * 3)",
11136 "var vv2sum := sum(vv2); var x := 7; vv2 += (x - 1) / 2; sum(vv2) == (vv2sum + vv2[] * 3)",
11137 "var vv1sum := sum(vv1); var x := 7; vv1 += (x - 1) / 2; sum(vv1) == (vv1sum + vv1[] * 3)",
11140 "var v[8] := [-1]; vv8 := v; sum(vv8) == (-1 * 8 + 0)",
11141 "var v[7] := [-1]; vv8 := v; sum(vv8) == (-1 * 7 + (7))",
11142 "var v[6] := [-1]; vv8 := v; sum(vv8) == (-1 * 6 + (6+7))",
11143 "var v[5] := [-1]; vv8 := v; sum(vv8) == (-1 * 5 + (5+6+7))",
11144 "var v[4] := [-1]; vv8 := v; sum(vv8) == (-1 * 4 + (4+5+6+7))",
11145 "var v[3] := [-1]; vv8 := v; sum(vv8) == (-1 * 3 + (3+4+5+6+7))",
11146 "var v[2] := [-1]; vv8 := v; sum(vv8) == (-1 * 2 + (2+3+4+5+6+7))",
11147 "var v[1] := [-1]; vv8 := v; sum(vv8) == (-1 * 1 + (1+2+3+4+5+6+7))",
11148 "var v[8] := [-1]; vv8 := v; var x[8] := { -1, -1, -1, -1, -1, -1, -1, -1 }; x == vv8",
11149 "var v[7] := [-1]; vv8 := v; var x[8] := { -1, -1, -1, -1, -1, -1, -1, 7 }; x == vv8",
11150 "var v[6] := [-1]; vv8 := v; var x[8] := { -1, -1, -1, -1, -1, -1, 6, 7 }; x == vv8",
11151 "var v[5] := [-1]; vv8 := v; var x[8] := { -1, -1, -1, -1, -1, 5, 6, 7 }; x == vv8",
11152 "var v[4] := [-1]; vv8 := v; var x[8] := { -1, -1, -1, -1, 4, 5, 6, 7 }; x == vv8",
11153 "var v[3] := [-1]; vv8 := v; var x[8] := { -1, -1, -1, 3, 4, 5, 6, 7 }; x == vv8",
11154 "var v[2] := [-1]; vv8 := v; var x[8] := { -1, -1, 2, 3, 4, 5, 6, 7 }; x == vv8",
11155 "var v[1] := [-1]; vv8 := v; var x[8] := { -1, 1, 2, 3, 4, 5, 6, 7 }; x == vv8",
11156 "var v[3] := [-1]; vv3 := v; sum(vv3) == (-1 * 3 + (0))",
11157 "var v[2] := [-1]; vv3 := v; sum(vv3) == (-1 * 2 + (2))",
11158 "var v[1] := [-1]; vv3 := v; sum(vv3) == (-1 * 1 + (1+2))",
11159 "var v[3] := [-1]; vv3 := v; var x[3] := { -1, -1, -1}; x == vv3",
11160 "var v[2] := [-1]; vv3 := v; var x[3] := { -1, -1, 2}; x == vv3",
11161 "var v[1] := [-1]; vv3 := v; var x[3] := { -1, 1, 2}; x == vv3",
11162 "vv8 := vv7; sum(vv8) == (sum(vv7) + 7)",
11163 "vv8 := vv6; sum(vv8) == (sum(vv6) + 6+ 7)",
11164 "vv8 := vv5; sum(vv8) == (sum(vv5) + 5 + 6 + 7)",
11165 "vv8 := vv4; sum(vv8) == (sum(vv4) + 4 + 5 + 6 + 7)",
11166 "vv8 := vv3; sum(vv8) == (sum(vv3) + 3 + 4 + 5 + 6 + 7)",
11167 "vv8 := vv2; sum(vv8) == (sum(vv2) + 2 + 3 + 4 + 5 + 6 + 7)",
11168 "vv8 := vv1; sum(vv8) == (sum(vv1) + 1 + 2 + 3 + 4 + 5 + 6 + 7)",
11169 "vv8 := vv7 + vv7; sum(vv8) == (2 * sum(vv7) + 7)",
11170 "vv8 := vv6 + vv6; sum(vv8) == (2 * sum(vv6) + 6+ 7)",
11171 "vv8 := vv5 + vv5; sum(vv8) == (2 * sum(vv5) + 5 + 6 + 7)",
11172 "vv8 := vv4 + vv4; sum(vv8) == (2 * sum(vv4) + 4 + 5 + 6 + 7)",
11173 "vv8 := vv3 + vv3; sum(vv8) == (2 * sum(vv3) + 3 + 4 + 5 + 6 + 7)",
11174 "vv8 := vv2 + vv2; sum(vv8) == (2 * sum(vv2) + 2 + 3 + 4 + 5 + 6 + 7)",
11175 "vv8 := vv1 + vv1; sum(vv8) == (2 * sum(vv1) + 1 + 2 + 3 + 4 + 5 + 6 + 7)",
11178 "var x := 3; vv8 := 2*x+1; sum(vv8) == (vv8[] * 7)",
11179 "var x := 3; vv7 := 2*x+1; sum(vv7) == (vv7[] * 7)",
11180 "var x := 3; vv6 := 2*x+1; sum(vv6) == (vv6[] * 7)",
11181 "var x := 3; vv5 := 2*x+1; sum(vv5) == (vv5[] * 7)",
11182 "var x := 3; vv4 := 2*x+1; sum(vv4) == (vv4[] * 7)",
11183 "var x := 3; vv3 := 2*x+1; sum(vv3) == (vv3[] * 7)",
11184 "var x := 3; vv2 := 2*x+1; sum(vv2) == (vv2[] * 7)",
11185 "var x := 3; vv1 := 2*x+1; sum(vv1) == (vv1[] * 7)",
11186 "var x[3] := [3]; vv8 := 2x[0]+1; sum(vv8) == (vv8[] * 7)",
11187 "var x[3] := [3]; vv7 := 2x[1]+1; sum(vv7) == (vv7[] * 7)",
11188 "var x[3] := [3]; vv6 := 2x[2]+1; sum(vv6) == (vv6[] * 7)",
11189 "var x[3] := [3]; vv5 := 2x[0]+1; sum(vv5) == (vv5[] * 7)",
11190 "var x[3] := [3]; vv4 := 2x[1]+1; sum(vv4) == (vv4[] * 7)",
11191 "var x[3] := [3]; vv3 := 2x[2]+1; sum(vv3) == (vv3[] * 7)",
11192 "var x[3] := [3]; vv2 := 2x[0]+1; sum(vv2) == (vv2[] * 7)",
11193 "var x[3] := [3]; vv1 := 2x[1]+1; sum(vv1) == (vv1[] * 7)",
11194 "var x[3] := [3]; var y[3] := [1]; vv8 := 2x[0]+y[0]; sum(vv8) == (vv8[] * 7)",
11195 "var x[3] := [3]; var y[3] := [1]; vv7 := 2x[1]+y[1]; sum(vv7) == (vv7[] * 7)",
11196 "var x[3] := [3]; var y[3] := [1]; vv6 := 2x[2]+y[2]; sum(vv6) == (vv6[] * 7)",
11197 "var x[3] := [3]; var y[3] := [1]; vv5 := 2x[0]+y[0]; sum(vv5) == (vv5[] * 7)",
11198 "var x[3] := [3]; var y[3] := [1]; vv4 := 2x[1]+y[1]; sum(vv4) == (vv4[] * 7)",
11199 "var x[3] := [3]; var y[3] := [1]; vv3 := 2x[2]+y[2]; sum(vv3) == (vv3[] * 7)",
11200 "var x[3] := [3]; var y[3] := [1]; vv2 := 2x[0]+y[0]; sum(vv2) == (vv2[] * 7)",
11201 "var x[3] := [3]; var y[3] := [1]; vv1 := 2x[1]+y[1]; sum(vv1) == (vv1[] * 7)",
11204 "var v[8] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 8 + 0)",
11205 "var v[7] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 7 + (7))",
11206 "var v[6] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 6 + (6+7))",
11207 "var v[5] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 5 + (5+6+7))",
11208 "var v[4] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 4 + (4+5+6+7))",
11209 "var v[3] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 3 + (3+4+5+6+7))",
11210 "var v[2] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 2 + (2+3+4+5+6+7))",
11211 "var v[1] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 1 + (1+2+3+4+5+6+7))",
11212 "var v[8] := [-1]; vv8 <=> v; var x[8] := { -1, -1, -1, -1, -1, -1, -1, -1 }; x == vv8",
11213 "var v[7] := [-1]; vv8 <=> v; var x[8] := { -1, -1, -1, -1, -1, -1, -1, 7 }; x == vv8",
11214 "var v[6] := [-1]; vv8 <=> v; var x[8] := { -1, -1, -1, -1, -1, -1, 6, 7 }; x == vv8",
11215 "var v[5] := [-1]; vv8 <=> v; var x[8] := { -1, -1, -1, -1, -1, 5, 6, 7 }; x == vv8",
11216 "var v[4] := [-1]; vv8 <=> v; var x[8] := { -1, -1, -1, -1, 4, 5, 6, 7 }; x == vv8",
11217 "var v[3] := [-1]; vv8 <=> v; var x[8] := { -1, -1, -1, 3, 4, 5, 6, 7 }; x == vv8",
11218 "var v[2] := [-1]; vv8 <=> v; var x[8] := { -1, -1, 2, 3, 4, 5, 6, 7 }; x == vv8",
11219 "var v[1] := [-1]; vv8 <=> v; var x[8] := { -1, 1, 2, 3, 4, 5, 6, 7 }; x == vv8",
11220 "var v[3] := [-1]; vv3 <=> v; sum(vv3) == (-1 * 3 + (0))",
11221 "var v[2] := [-1]; vv3 <=> v; sum(vv3) == (-1 * 2 + (2))",
11222 "var v[1] := [-1]; vv3 <=> v; sum(vv3) == (-1 * 1 + (1+2))",
11223 "var v[3] := [-1]; vv3 <=> v; var x[3] := { -1, -1, -1}; x == vv3",
11224 "var v[2] := [-1]; vv3 <=> v; var x[3] := { -1, -1, 2}; x == vv3",
11225 "var v[1] := [-1]; vv3 <=> v; var x[3] := { -1, 1, 2}; x == vv3",
11230 "vv8[vv8[] - 1] == vv8[] - 1",
11231 "var vec_sum := 0; for (var i := 0; i < vv8[]; i +=1) { vec_sum += vv8[i]; }; vec_sum == (vv8[] - 1) * vv8[] / 2",
11232 "var vec_sum := 0; for (var i := 0; i < vv8[]; i +=1) { vec_sum += vv8[2i / 2]; }; vec_sum == (vv8[] - 1) * vv8[] / 2",
11233 "var x:= 1; var y:= 1; (vv8 + x)[y / x] == 2",
11234 "var x:= 1; var y:= 1; (vv8 + x - y)[y / x] == 1",
11235 "var x:= 1; (x + vv8)[1] == 2",
11236 "var x:= 1; var y:= 1; (x + vv8)[y / x] == 2",
11237 "var x:= 1; var y:= 1; (x + vv8 - y)[y / x] == 1",
11238 "var successes := 0; for(var i:=0; i < vv8[]; i += 1) { successes += (vv8 + 1)[i] == i + 1; }; successes == vv8[]",
11239 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (vv8 + x)[i] == i + x; }; successes == vv8[]",
11240 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (x + vv8)[i] == i + x; }; successes == vv8[]",
11241 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (vv8 + x)[i / x] == i + x; }; successes == vv8[]",
11242 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (x + vv8)[i / x] == i + x; }; successes == vv8[]",
11243 "(1 + vv8)[1] == 2",
11244 "(vv8 + 1)[1] == 2",
11245 "(vv8 + 1)[2 / 2] == 2",
11246 "(1 + vv8)[2 / 2] == 2",
11247 "var x:= 1; (x + vv8)[1] == 2",
11248 "var x:= 1; (vv8 + x)[1] == 2",
11249 "var x:= 1; var y:= 1; (x + vv8)[y] == 2",
11250 "var x:= 1; var y:= 1; (vv8 + x)[y] == 2",
11251 "var x:= 1; var y:= 1; (vv8 + x)[y / x] == 2",
11252 "var x:= 1; var y:= 1; (vv8 + x - y)[y / x] == 1",
11253 "var x:= 1; var y:= 1; (x + vv8)[y / x] == 2",
11254 "var x:= 1; var y:= 1; (x + vv8 - y)[y / x] == 1",
11255 "(abs(vv8 + 1))[1] == 2",
11256 "(abs(1 + vv8))[1] == 2",
11257 "(abs(vv8 + 1))[2 / 2] == 2",
11258 "(abs(1 + vv8))[2 / 2] == 2",
11259 "(abs(vv8 + 1)/2)[1] == 1",
11260 "(abs(1 + vv8)/2)[1] == 1",
11261 "(abs(vv8 + 1)/2)[2 / 2] == 1",
11262 "(abs(1 + vv8)/2)[2 / 2] == 1",
11263 "(abs(abs(vv8 + 1)) - 1)[1] == 1",
11264 "(abs(2 * abs(vv8 + 1)) - 1)[1] == 3",
11265 "(abs(abs(vv8 + 1) * 2) - 1)[1] == 3",
11266 "(abs(2abs(vv8 + 1)) - 1)[1] == 3",
11267 "(abs(abs(vv8 + 1)2) - 1)[1] == 3",
11268 "var x:= 1; (abs(x + vv8))[1] == 2",
11269 "var x:= 1; (abs(vv8 + x))[1] == 2",
11270 "var x:= 1; var y:= 1; (abs(x + vv8))[y] == 2",
11271 "var x:= 1; var y:= 1; (abs(vv8 + x))[y] == 2",
11272 "var x:= 1; var y:= 1; (abs(vv8 + x))[y / x] == 2",
11273 "var x:= 1; var y:= 1; (abs(vv8 + x - y))[y / x] == 1",
11274 "var x:= 1; var y:= 1; (abs(x + vv8))[y / x] == 2",
11275 "var x:= 1; var y:= 1; (abs(x + vv8 - y))[y / x] == 1",
11276 "var x:= 1; (abs(x + vv8)/2)[1] == 1",
11277 "var x:= 1; (abs(vv8 + x)/2)[1] == 1",
11278 "var x:= 1; var y:= 1; (abs(x + vv8)/2)[y] == 1",
11279 "var x:= 1; var y:= 1; (abs(vv8 + x)/2)[y] == 1",
11280 "var x:= 1; var y:= 1; (abs(vv8 + x)/2)[y / x] == 1",
11281 "var x:= 1; var y:= 1; (abs(x + vv8)/2)[y / x] == 1",
11282 "var x := 1; (abs(abs(vv8 + x)) - x)[1] == 1",
11283 "var x := 1; (abs(2 * abs(vv8 + x)) - x)[1] == 3",
11284 "var x := 1; (abs(abs(vv8 + x) * 2) - x)[1] == 3",
11285 "var x := 1; (abs(2abs(vv8 + x)) - x)[1] == 3",
11286 "var x := 1; (abs(abs(vv8 + x)2) - x)[1] == 3",
11287 "var x := 1; var y := 1; (abs(abs(vv8 + x)) - x)[y] == 1",
11288 "var x := 1; var y := 1; (abs(2 * abs(vv8 + x)) - x)[y] == 3",
11289 "var x := 1; var y := 1; (abs(abs(vv8 + x) * 2) - x)[y] == 3",
11290 "var x := 1; var y := 1; (abs(2abs(vv8 + x)) - x)[y] == 3",
11291 "var x := 1; var y := 1; (abs(abs(vv8 + x)2) - x)[y] == 3",
11292 "var x := 1; var y := 1; (abs(abs(vv8 + x)) - x)[x / y] == 1",
11293 "var x := 1; var y := 1; (abs(2 * abs(vv8 + x)) - x)[x / y] == 3",
11294 "var x := 1; var y := 1; (abs(abs(vv8 + x) * 2) - x)[x / y] == 3",
11295 "var x := 1; var y := 1; (abs(2abs(vv8 + x)) - x)[x / y] == 3",
11296 "var x := 1; var y := 1; (abs(abs(vv8 + x)2) - x)[x / y] == 3",
11297 "var successes := 0; for(var i:=0; i < vv8[]; i += 1) { successes += (vv8 + 1)[i] == i + 1; }; successes == vv8[]",
11298 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (vv8 + x)[i] == i + x; }; successes == vv8[]",
11299 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (x + vv8)[i] == i + x; }; successes == vv8[]",
11300 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (vv8 + x)[i / x] == i + x; }; successes == vv8[]",
11301 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (x + vv8)[i / x] == i + x; }; successes == vv8[]",
11302 "var successes := 0; for(var i:=0; i < vv8[]; i += 1) { successes += (abs(vv8 + 1))[i] == i + 1; }; successes == vv8[]",
11303 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (abs(vv8 + x))[i] == i + x; }; successes == vv8[]",
11304 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (abs(x + vv8))[i] == i + x; }; successes == vv8[]",
11305 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (abs(vv8 + x))[i / x] == i + x; }; successes == vv8[]",
11306 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (abs(x + vv8))[i / x] == i + x; }; successes == vv8[]",
11309 bool error_found =
false;
11311 for (std::size_t e = 0; e <
sizeof(expressions)/
sizeof(std::string); ++e)
11313 T vs8[] = { 0, 1, 2, 3, 4, 5, 6, 7 };
11314 T vs7[] = { 0, 1, 2, 3, 4, 5, 6 };
11315 T vs6[] = { 0, 1, 2, 3, 4, 5 };
11316 T vs5[] = { 0, 1, 2, 3, 4 };
11317 T vs4[] = { 0, 1, 2, 3 };
11318 T vs3[] = { 0, 1, 2 };
11319 T vs2[] = { 0, 1 };
11331 symbol_table_t symbol_table;
11333 symbol_table.add_vector(
"vv1", vv1);
11334 symbol_table.add_vector(
"vv2", vv2);
11335 symbol_table.add_vector(
"vv3", vv3);
11336 symbol_table.add_vector(
"vv4", vv4);
11337 symbol_table.add_vector(
"vv5", vv5);
11338 symbol_table.add_vector(
"vv6", vv6);
11339 symbol_table.add_vector(
"vv7", vv7);
11340 symbol_table.add_vector(
"vv8", vv8);
11344 const std::string& expression_string = expressions[e];
11345 expression_t expression;
11346 expression.register_symbol_table(symbol_table);
11348 if (!parser.compile(expression_string,expression))
11350 printf(
"run_test21() - vector_veiw expression compilation error. Expression: %s\n",
11351 expression_string.c_str());
11353 for (std::size_t i = 0; i < parser.error_count(); ++i)
11355 error_type error = parser.get_error(i);
11358 printf(
"run_test21() - Exp[%02d] Error[%02d] Position: %02d line: %d column: %d Type: [%14s] Msg: %s\n",
11359 static_cast<unsigned int>(e),
11360 static_cast<unsigned int>(i),
11361 static_cast<unsigned int>(error.token.position),
11362 static_cast<unsigned int>(error.line_no),
11363 static_cast<unsigned int>(error.column_no),
11365 error.diagnostic.c_str());
11368 error_found =
true;
11373 const T result = expression.value();
11375 if (result != T(1.0))
11377 error_found =
true;
11379 printf(
"run_test21() - Error: Exp[%02d] Expression result: %5.3f expected: 1 expression: %s\n",
11380 static_cast<unsigned int>(e),
11381 static_cast<double>(result),
11382 expression_string.c_str());
11393 const std::string expressions[] =
11395 "vv0[] == vv0_size",
11396 "sum(vv0) == (vv0[] * (vv0[] + 1) / 2) and (vv0[] == vv0_size)",
11397 "(min(vv0) == 1) and (vv0[] == vv0_size)",
11398 "(max(vv0) == vv0[]) and (vv0[] == vv0_size)",
11399 "(avg(vv0) == (min(vv0) + max(vv0)) / 2) and (vv0[] == vv0_size)",
11400 "(sum(vv0 + 1) == (vv0[] * (vv0[] + 1) / 2 + (vv0[] * 1))) and (vv0[] == vv0_size)",
11401 "(sum(vv0 - 1) == (vv0[] * (vv0[] + 1) / 2 - (vv0[] * 1))) and (vv0[] == vv0_size)",
11402 "(sum(1 + vv0) == (vv0[] * (vv0[] + 1) / 2 + (vv0[] * 1))) and (vv0[] == vv0_size)",
11403 "(sum(-1 + vv0) == (vv0[] * (vv0[] + 1) / 2 - (vv0[] * 1))) and (vv0[] == vv0_size)",
11404 "var x:= 1; sum(vv0 + x) == (vv0[] * (vv0[] + 1) / 2 + (vv0[] * x)) and (vv0[] == vv0_size)",
11405 "var x:= 1; sum(vv0 - x) == (vv0[] * (vv0[] + 1) / 2 - (vv0[] * x)) and (vv0[] == vv0_size)",
11406 "sum(2vv0) == (vv0[] * (vv0[] + 1)) and (vv0[] == vv0_size)",
11407 "sum(vv0 * 2) == (vv0[] * (vv0[] + 1)) and (vv0[] == vv0_size)",
11408 "sum(2vv0 + 1) == (vv0[] * (vv0[] + 1) + vv0[]) and (vv0[] == vv0_size)",
11409 "sum(1 + 2vv0) == (vv0[] * (vv0[] + 1) + vv0[]) and (vv0[] == vv0_size)",
11410 "var x := 1; sum(2vv0 + x) == (vv0[] * (vv0[] + 1) + x * vv0[]) and (vv0[] == vv0_size)",
11411 "var x := 1; sum(x + 2vv0) == (vv0[] * (vv0[] + 1) + x * vv0[]) and (vv0[] == vv0_size)",
11412 "sum(vv0 += 1) == (vv0[] * (vv0[] + 1) / 2 + vv0[]) and (vv0[] == vv0_size)",
11413 "var x:= 1; sum(vv0 += x) == (vv0[] * (vv0[] + 1) / 2 + x * vv0[]) and (vv0[] == vv0_size)",
11414 "var x:= 1; sum(vv0 -= x) == (vv0[] * (vv0[] + 1 - 2x) / 2) and (vv0[] == vv0_size)",
11415 "(sum(2vv0) == 2 * sum(vv0)) and (vv0[] == vv0_size)",
11416 "(sum(vv0 * 2) == 2 * sum(vv0)) and (vv0[] == vv0_size)",
11417 "var x:= 1; sum(2vv0) == (vv0[] * (vv0[] + 1)) and (vv0[] == vv0_size)",
11418 "var x := 2; sum(if (x > 1) { vv0 } else { vv1 }) == sum(vv0)",
11419 "dot(2 * vv0,vv1 - 1) + dot(2 * vv0,vv1 - 1) == 2sum(2vv0 * (vv1 - 1))",
11420 "(0 * dot(2 * vv0,vv1 - 1)) == 0"
11423 bool error_found =
false;
11425 for (std::size_t e = 0; e <
sizeof(expressions) /
sizeof(std::string); ++e)
11427 const T vanilla[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
11428 const std::size_t vanilla_size =
sizeof(vanilla) /
sizeof(T);
11430 std::vector<T> v0(vanilla, vanilla + vanilla_size);
11433 std::vector<T> v1(vanilla, vanilla + vanilla_size);
11436 T vv0_size = T(0.0);
11438 symbol_table_t symbol_table;
11439 symbol_table.add_variable(
"vv0_size", vv0_size);
11440 symbol_table.add_vector (
"vv0" , vv0 );
11441 symbol_table.add_vector (
"vv1" , vv1 );
11446 symbol_table.add_package( vector_package );
11447 symbol_table.add_package( io_package );
11449 const std::string& expression_string = expressions[e];
11450 expression_t expression;
11451 expression.register_symbol_table(symbol_table);
11455 if (!parser.compile(expression_string, expression))
11457 printf(
"run_test21() - Error: %s\tExpression: %s\n",
11458 parser.error().c_str(),
11459 expression_string.c_str());
11461 for (std::size_t i = 0; i < parser.error_count(); ++i)
11463 error_type error = parser.get_error(i);
11466 printf(
"run_test21() - Exp[%02d] Error[%02d] Position: %02d line: %d column: %d Type: [%14s] Msg: %s\n",
11467 static_cast<unsigned int>(e),
11468 static_cast<unsigned int>(i),
11469 static_cast<unsigned int>(error.token.position),
11470 static_cast<unsigned int>(error.line_no),
11471 static_cast<unsigned int>(error.column_no),
11473 error.diagnostic.c_str());
11479 for (std::size_t i = 1; i <= vv0.
base_size(); ++i)
11481 v0.assign(vanilla, vanilla + vanilla_size);
11482 v1.assign(vanilla, vanilla + vanilla_size);
11487 const T result = expression.value();
11491 printf(
"run_test21() - Exp[%02d] Error: size: %d expected 1 instead got: %f expr:%s\n",
11492 static_cast<unsigned int>(e),
11493 static_cast<unsigned int>(i),
11494 static_cast<double>(result),
11495 expression_string.c_str());
11501 expression.value();
11505 expression.value();
11507 expression.release();
11517 const T vanilla[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
11518 const std::size_t vanilla_size =
sizeof(vanilla) /
sizeof(T);
11520 std::vector<T> v0(vanilla, vanilla + vanilla_size);
11521 std::vector<T> v1(vanilla, vanilla + vanilla_size);
11528 symbol_table_t symbol_table;
11529 symbol_table.add_vector(
"v", vv);
11534 symbol_table.add_package( vector_package );
11535 symbol_table.add_package( io_package );
11536 symbol_table.add_function(
"resize", vv_size_handler);
11538 expression_t expression;
11539 expression.register_symbol_table(symbol_table);
11543 const std::string resize_expression =
11544 " var vec_original_size := v[]; "
11545 " var success_count := 0; "
11547 " for (var i := 1; i <= vec_original_size; i += 1) "
11549 " if (resize(v,i) == true and v[] == i) "
11551 " success_count += 1; "
11555 " success_count == vec_original_size ";
11557 if (!parser.compile(resize_expression, expression))
11559 printf(
"run_test21() - Error: %s\tExpression: %s\n",
11560 parser.error().c_str(),
11561 resize_expression.c_str());
11563 for (std::size_t i = 0; i < parser.error_count(); ++i)
11565 error_type error = parser.get_error(i);
11568 printf(
"run_test21() - Error[%02d] Position: %02d line: %d column: %d Type: [%14s] Msg: %s\n",
11569 static_cast<unsigned int>(i),
11570 static_cast<unsigned int>(error.token.position),
11571 static_cast<unsigned int>(error.line_no),
11572 static_cast<unsigned int>(error.column_no),
11574 error.diagnostic.c_str());
11580 const T value0 = expression.value();
11582 if (expression.value() != T(1))
11584 printf(
"run_test21() - Error: Failed evaluation Expected 1 got: %f (1)\n",
static_cast<double>(value0));
11590 const T value1 = expression.value();
11592 if (expression.value() != T(1))
11594 printf(
"run_test21() - Error: Failed evaluation Expected 1 got: %f (1)\n",
static_cast<double>(value1));
11600 expression.release();
11604 const T vanilla[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
11605 const std::size_t vanilla_size =
sizeof(vanilla) /
sizeof(T);
11607 std::vector<T> v0(vanilla, vanilla + vanilla_size);
11608 std::vector<T> v1(vanilla, vanilla + vanilla_size);
11615 symbol_table_t symbol_table;
11616 symbol_table.add_vector(
"v", vv);
11621 symbol_table.add_package( vector_package );
11622 symbol_table.add_package( io_package );
11623 symbol_table.add_function(
"resize", vv_size_handler);
11625 expression_t expression;
11626 expression.register_symbol_table(symbol_table);
11630 const std::string resize_expression =
11631 " var vec_original_size := v[]; "
11632 " var failure_count := 0; "
11634 " for (var i := vec_original_size + 1; i <= 2 * vec_original_size; i += 1) "
11636 " if (resize(v,i) == false or v[] != i) "
11638 " failure_count += 1 "
11642 " failure_count == vec_original_size ";
11644 if (!parser.compile(resize_expression, expression))
11646 printf(
"run_test21() - Error: %s\tExpression: %s\n",
11647 parser.error().c_str(),
11648 resize_expression.c_str());
11650 for (std::size_t i = 0; i < parser.error_count(); ++i)
11652 error_type error = parser.get_error(i);
11655 printf(
"run_test21() - Error[%02d] Position: %02d line: %d column: %d Type: [%14s] Msg: %s\n",
11656 static_cast<unsigned int>(i),
11657 static_cast<unsigned int>(error.token.position),
11658 static_cast<unsigned int>(error.line_no),
11659 static_cast<unsigned int>(error.column_no),
11661 error.diagnostic.c_str());
11667 const T value0 = expression.value();
11669 if (expression.value() != T(1))
11671 printf(
"run_test21() - Error: Failed evaluation Expected 1 got: %f (2)\n",
static_cast<double>(value0));
11677 const T value1 = expression.value();
11679 if (expression.value() != T(1))
11681 printf(
"run_test21() - Error: Failed evaluation Expected 1 got: %f (2)\n",
static_cast<double>(value1));
11687 expression.release();
11709 bool result =
true;
11712 const std::string expressions[] =
11714 " assert(1 > 1); ",
11715 " assert(1 > 2, 'assert statement 2'); ",
11716 " assert(1 > 3, 'assert ' + 'statement 3'); ",
11717 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); ",
11718 " assert(1 > 5, 'assert ' + 'statement 5'); ",
11719 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); "
11722 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
11724 for (std::size_t i = 0; i < expression_count; ++i)
11726 expression_t expression;
11729 if (!parser.compile(expressions[i], expression))
11731 printf(
"run_test22() - Error: %s\tExpression: %s [1]\n",
11732 parser.error().c_str(),
11733 expressions[i].c_str());
11739 printf(
"run_test22() - Error: Expression is not null! expression: %s [1]\n",
11740 expressions[i].c_str());
11745 expression.value();
11750 const std::string expressions[] =
11752 " assert(1 > 1); 1 + 0 ",
11753 " assert(1 > 2, 'assert statement 2'); 2 + 0 ",
11754 " assert(1 > 3, 'assert ' + 'statement 3'); 3 + 0 ",
11755 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 4 + 0 ",
11756 " assert(1 > 5, 'assert ' + 'statement 5'); 5 + 0 ",
11757 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 6 + 0 "
11760 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
11762 for (std::size_t i = 0; i < expression_count; ++i)
11764 expression_t expression;
11767 if (!parser.compile(expressions[i], expression))
11769 printf(
"run_test22() - Error: %s\tExpression: %s [2]\n",
11770 parser.error().c_str(),
11771 expressions[i].c_str());
11777 printf(
"run_test22() - Error: Expression is not constant! expression: %s [2]\n",
11778 expressions[i].c_str());
11782 expression.value();
11787 const std::string expressions[] =
11790 " assert(1 > 2, 'assert statement 2'); "
11791 " assert(1 > 3, 'assert ' + 'statement 3'); "
11792 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); "
11793 " assert(1 > 5, 'assert ' + 'statement 5'); "
11794 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); "
11797 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
11799 for (std::size_t i = 0; i < expression_count; ++i)
11801 expression_t expression;
11807 parser.register_assert_check(handler);
11809 if (!parser.compile(expressions[i], expression))
11811 printf(
"run_test22() - Error: %s\tExpression: %s [3]\n",
11812 parser.error().c_str(),
11813 expressions[i].c_str());
11818 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
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);
11824 type_sequence.push_back(et_t::e_assert);
11825 type_sequence.push_back(et_t::e_assert);
11826 type_sequence.push_back(et_t::e_assert);
11830 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [3]\n",
11831 expressions[i].c_str());
11836 expression.value();
11840 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [3]\n",
11842 expressions[i].c_str());
11850 const std::string expressions[] =
11852 " assert(1 > 1); 1 ",
11853 " assert(1 > 2, 'assert statement 2'); 2 ",
11854 " assert(1 > 3, 'assert ' + 'statement 3'); 3 ",
11855 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 4 ",
11856 " assert(1 > 5, 'assert ' + 'statement 5'); 5 ",
11857 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 6 "
11860 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
11862 for (std::size_t i = 0; i < expression_count; ++i)
11864 expression_t expression;
11870 parser.register_assert_check(handler);
11872 if (!parser.compile(expressions[i], expression))
11874 printf(
"run_test22() - Error: %s\tExpression: %s [4]\n",
11875 parser.error().c_str(),
11876 expressions[i].c_str());
11881 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
11884 type_sequence.push_back(et_t::e_assert );
11885 type_sequence.push_back(et_t::e_literal);
11889 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [4]\n",
11890 expressions[i].c_str());
11895 expression.value();
11899 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [4]\n",
11901 expressions[i].c_str());
11909 const std::string expressions[] =
11911 " assert(1 > 1); 1 + 0 ",
11912 " assert(1 > 2, 'assert statement 2'); 2 + 0 ",
11913 " assert(1 > 3, 'assert ' + 'statement 3'); 3 + 0 ",
11914 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 4 + 0 ",
11915 " assert(1 > 5, 'assert ' + 'statement 5'); 5 + 0 ",
11916 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 6 + 0 "
11919 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
11921 for (std::size_t i = 0; i < expression_count; ++i)
11923 expression_t expression;
11929 parser.register_assert_check(handler);
11931 if (!parser.compile(expressions[i], expression))
11933 printf(
"run_test22() - Error: %s\tExpression: %s [5]\n",
11934 parser.error().c_str(),
11935 expressions[i].c_str());
11940 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
11943 type_sequence.push_back(et_t::e_assert );
11944 type_sequence.push_back(et_t::e_literal);
11948 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [5]\n",
11949 expressions[i].c_str());
11954 expression.value();
11958 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [5]\n",
11960 expressions[i].c_str());
11968 const std::string expressions[] =
11970 " assert(1 > 1); 'assert statement 0001' ",
11971 " assert(1 > 2, 'assert statement 2'); 'assert statement 0002' ",
11972 " assert(1 > 3, 'assert ' + 'statement 3'); 'assert statement 0003' ",
11973 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 'assert statement 0004' ",
11974 " assert(1 > 5, 'assert ' + 'statement 5'); 'assert statement 0005' ",
11975 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 'assert statement 0006' "
11978 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
11980 for (std::size_t i = 0; i < expression_count; ++i)
11982 expression_t expression;
11988 parser.register_assert_check(handler);
11990 if (!parser.compile(expressions[i], expression))
11992 printf(
"run_test22() - Error: %s\tExpression: %s [6]\n",
11993 parser.error().c_str(),
11994 expressions[i].c_str());
11999 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12002 type_sequence.push_back(et_t::e_assert);
12003 type_sequence.push_back(et_t::e_string);
12007 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [6]\n",
12008 expressions[i].c_str());
12013 expression.value();
12017 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [6]\n",
12019 expressions[i].c_str());
12027 const std::string expressions[] =
12029 " assert(1 > 1); 'assert statement' + '0001' ",
12030 " assert(1 > 2, 'assert statement 2'); 'assert statement' + '0002' ",
12031 " assert(1 > 3, 'assert ' + 'statement 3'); 'assert statement' + '0003' ",
12032 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 'assert statement' + '0004' ",
12033 " assert(1 > 5, 'assert ' + 'statement 5'); 'assert statement' + '0005' ",
12034 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 'assert statement' + '0006' "
12037 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12039 for (std::size_t i = 0; i < expression_count; ++i)
12041 expression_t expression;
12047 parser.register_assert_check(handler);
12049 if (!parser.compile(expressions[i], expression))
12051 printf(
"run_test22() - Error: %s\tExpression: %s [7]\n",
12052 parser.error().c_str(),
12053 expressions[i].c_str());
12058 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12061 type_sequence.push_back(et_t::e_assert);
12062 type_sequence.push_back(et_t::e_string);
12066 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [7]\n",
12067 expressions[i].c_str());
12072 expression.value();
12076 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [7]\n",
12078 expressions[i].c_str());
12086 const std::string expressions[] =
12088 " assert(x > y); ",
12089 " assert(x > y, 'assert statement 2'); ",
12090 " assert(x > y, 'assert ' + 'statement 3'); ",
12091 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); ",
12092 " assert(x > y, 'assert ' + 'statement 5'); ",
12093 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); "
12096 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12098 for (std::size_t i = 0; i < expression_count; ++i)
12103 symbol_table_t symbol_table;
12104 expression_t expression;
12107 symbol_table.add_variable(
"x", x);
12108 symbol_table.add_variable(
"y", y);
12109 expression.register_symbol_table(symbol_table);
12111 if (!parser.compile(expressions[i], expression))
12113 printf(
"run_test22() - Error: %s\tExpression: %s [8]\n",
12114 parser.error().c_str(),
12115 expressions[i].c_str());
12121 printf(
"run_test22() - Error: Expression is not null! expression: %s [8]\n",
12122 expressions[i].c_str());
12127 expression.value();
12132 const std::string expressions[] =
12134 " assert(x > y); 1 + 0 ",
12135 " assert(x > y, 'assert statement 2'); 2 + 0 ",
12136 " assert(x > y, 'assert ' + 'statement 3'); 3 + 0 ",
12137 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); 4 + 0 ",
12138 " assert(x > y, 'assert ' + 'statement 5'); 5 + 0 ",
12139 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); 6 + 0 "
12142 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12144 for (std::size_t i = 0; i < expression_count; ++i)
12149 symbol_table_t symbol_table;
12150 expression_t expression;
12153 symbol_table.add_variable(
"x", x);
12154 symbol_table.add_variable(
"y", y);
12155 expression.register_symbol_table(symbol_table);
12157 if (!parser.compile(expressions[i], expression))
12159 printf(
"run_test22() - Error: %s\tExpression: %s [9]\n",
12160 parser.error().c_str(),
12161 expressions[i].c_str());
12167 printf(
"run_test22() - Error: Expression is not constant! expression: %s [9]\n",
12168 expressions[i].c_str());
12172 expression.value();
12177 const std::string expressions[] =
12180 " assert(x > y, 'assert statement 2'); "
12181 " assert(x > y, 'assert ' + 'statement 3'); "
12182 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); "
12183 " assert(x > y, 'assert ' + 'statement 5'); "
12184 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); "
12187 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12189 for (std::size_t i = 0; i < expression_count; ++i)
12194 symbol_table_t symbol_table;
12195 expression_t expression;
12201 symbol_table.add_variable(
"x", x);
12202 symbol_table.add_variable(
"y", y);
12203 expression.register_symbol_table(symbol_table);
12205 parser.register_assert_check(handler);
12207 if (!parser.compile(expressions[i], expression))
12209 printf(
"run_test22() - Error: %s\tExpression: %s [10]\n",
12210 parser.error().c_str(),
12211 expressions[i].c_str());
12216 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
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);
12222 type_sequence.push_back(et_t::e_assert);
12223 type_sequence.push_back(et_t::e_assert);
12224 type_sequence.push_back(et_t::e_assert);
12228 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [10]\n",
12229 expressions[i].c_str());
12234 expression.value();
12238 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [10]\n",
12240 expressions[i].c_str());
12248 const std::string expressions[] =
12250 " assert(x > y); 1 ",
12251 " assert(x > y, 'assert statement 2'); 2 ",
12252 " assert(x > y, 'assert ' + 'statement 3'); 3 ",
12253 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); 4 ",
12254 " assert(x > y, 'assert ' + 'statement 5'); 5 ",
12255 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); 6 "
12258 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12260 for (std::size_t i = 0; i < expression_count; ++i)
12265 symbol_table_t symbol_table;
12266 expression_t expression;
12272 symbol_table.add_variable(
"x", x);
12273 symbol_table.add_variable(
"y", y);
12274 expression.register_symbol_table(symbol_table);
12276 parser.register_assert_check(handler);
12278 if (!parser.compile(expressions[i], expression))
12280 printf(
"run_test22() - Error: %s\tExpression: %s [11]\n",
12281 parser.error().c_str(),
12282 expressions[i].c_str());
12287 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12290 type_sequence.push_back(et_t::e_assert );
12291 type_sequence.push_back(et_t::e_literal);
12295 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [11]\n",
12296 expressions[i].c_str());
12301 expression.value();
12305 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [11]\n",
12307 expressions[i].c_str());
12316 const std::string expressions[] =
12318 " assert(x > y); 1 + 0 ",
12319 " assert(x > y, 'assert statement 2'); 2 + 0 ",
12320 " assert(x > y, 'assert ' + 'statement 3'); 3 + 0 ",
12321 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); 4 + 0 ",
12322 " assert(x > y, 'assert ' + 'statement 5'); 5 + 0 ",
12323 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); 6 + 0 "
12326 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12328 for (std::size_t i = 0; i < expression_count; ++i)
12333 symbol_table_t symbol_table;
12334 expression_t expression;
12340 symbol_table.add_variable(
"x", x);
12341 symbol_table.add_variable(
"y", y);
12342 expression.register_symbol_table(symbol_table);
12344 parser.register_assert_check(handler);
12346 if (!parser.compile(expressions[i], expression))
12348 printf(
"run_test22() - Error: %s\tExpression: %s [12]\n",
12349 parser.error().c_str(),
12350 expressions[i].c_str());
12355 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12358 type_sequence.push_back(et_t::e_assert );
12359 type_sequence.push_back(et_t::e_literal);
12363 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [12]\n",
12364 expressions[i].c_str());
12369 expression.value();
12373 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [12]\n",
12375 expressions[i].c_str());
12383 const std::string expressions[] =
12385 " assert(x > y); 'assert statement 0001' ",
12386 " assert(x > y, 'assert statement 2'); 'assert statement 0002' ",
12387 " assert(x > y, 'assert ' + 'statement 3'); 'assert statement 0003' ",
12388 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); 'assert statement 0004' ",
12389 " assert(x > y, 'assert ' + 'statement 5'); 'assert statement 0005' ",
12390 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); 'assert statement 0006' "
12393 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12395 for (std::size_t i = 0; i < expression_count; ++i)
12400 symbol_table_t symbol_table;
12401 expression_t expression;
12407 symbol_table.add_variable(
"x", x);
12408 symbol_table.add_variable(
"y", y);
12409 expression.register_symbol_table(symbol_table);
12411 parser.register_assert_check(handler);
12413 if (!parser.compile(expressions[i], expression))
12415 printf(
"run_test22() - Error: %s\tExpression: %s [13]\n",
12416 parser.error().c_str(),
12417 expressions[i].c_str());
12422 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12425 type_sequence.push_back(et_t::e_assert);
12426 type_sequence.push_back(et_t::e_string);
12430 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [13]\n",
12431 expressions[i].c_str());
12436 expression.value();
12440 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [13]\n",
12442 expressions[i].c_str());
12450 const std::string expressions[] =
12452 " assert(x > y); 'assert statement' + '0001' ",
12453 " assert(x > y, 'assert statement 2'); 'assert statement' + '0002' ",
12454 " assert(x > y, 'assert ' + 'statement 3'); 'assert statement' + '0003' ",
12455 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); 'assert statement' + '0004' ",
12456 " assert(x > y, 'assert ' + 'statement 5'); 'assert statement' + '0005' ",
12457 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); 'assert statement' + '0006' "
12460 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12462 for (std::size_t i = 0; i < expression_count; ++i)
12467 symbol_table_t symbol_table;
12468 expression_t expression;
12474 symbol_table.add_variable(
"x", x);
12475 symbol_table.add_variable(
"y", y);
12476 expression.register_symbol_table(symbol_table);
12478 parser.register_assert_check(handler);
12480 if (!parser.compile(expressions[i], expression))
12482 printf(
"run_test22() - Error: %s\tExpression: %s [14]\n",
12483 parser.error().c_str(),
12484 expressions[i].c_str());
12489 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12492 type_sequence.push_back(et_t::e_assert);
12493 type_sequence.push_back(et_t::e_string);
12497 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [14]\n",
12498 expressions[i].c_str());
12503 expression.value();
12507 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [14]\n",
12509 expressions[i].c_str());
12517 const std::string expressions[] =
12519 " assert(1 > 1); 1 + 0; "
12520 " assert(1 > 2, 'assert statement 2'); 2 + 0; "
12521 " assert(1 > 3, 'assert ' + 'statement 3'); 3 + 0; "
12522 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 4 + 0; "
12523 " assert(1 > 5, 'assert ' + 'statement 5'); 5 + 0 "
12524 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 6 + 0; "
12527 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12529 for (std::size_t i = 0; i < expression_count; ++i)
12531 expression_t expression;
12537 parser.register_assert_check(handler);
12539 if (!parser.compile(expressions[i], expression))
12541 printf(
"run_test22() - Error: %s\tExpression: %s [15]\n",
12542 parser.error().c_str(),
12543 expressions[i].c_str());
12548 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
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_assert );
12555 type_sequence.push_back(et_t::e_assert );
12556 type_sequence.push_back(et_t::e_assert );
12557 type_sequence.push_back(et_t::e_literal);
12561 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [15]\n",
12562 expressions[i].c_str());
12567 expression.value();
12571 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [15]\n",
12573 expressions[i].c_str());
12581 const std::string expressions[] =
12583 " assert(1 > 1); 'assert' + '01'; "
12584 " assert(1 > 2, 'assert statement 2'); 'assert' + '02'; "
12585 " assert(1 > 3, 'assert ' + 'statement 3'); 'assert' + '03'; "
12586 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 'assert' + '04'; "
12587 " assert(1 > 5, 'assert ' + 'statement 5'); 'assert' + '05'; "
12588 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 'assert' + '06'; "
12591 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12593 for (std::size_t i = 0; i < expression_count; ++i)
12595 expression_t expression;
12601 parser.register_assert_check(handler);
12603 if (!parser.compile(expressions[i], expression))
12605 printf(
"run_test22() - Error: %s\tExpression: %s [16]\n",
12606 parser.error().c_str(),
12607 expressions[i].c_str());
12612 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
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_assert);
12619 type_sequence.push_back(et_t::e_assert);
12620 type_sequence.push_back(et_t::e_assert);
12621 type_sequence.push_back(et_t::e_string);
12625 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [16]\n",
12626 expressions[i].c_str());
12631 expression.value();
12635 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [16]\n",
12637 expressions[i].c_str());
12645 const std::string expressions[] =
12647 " assert(x > y); x + y + 1; "
12648 " assert(x > y, 'assert statement 2'); x + y + 1; "
12649 " assert(x > y, 'assert ' + 'statement 3'); x + y + 1; "
12650 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); x + y + 1; "
12651 " assert(x > y, 'assert ' + 'statement 5'); x + y + 1; "
12652 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); x + y + 1; "
12655 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12657 for (std::size_t i = 0; i < expression_count; ++i)
12662 symbol_table_t symbol_table;
12663 expression_t expression;
12669 symbol_table.add_variable(
"x", x);
12670 symbol_table.add_variable(
"y", y);
12671 expression.register_symbol_table(symbol_table);
12673 parser.register_assert_check(handler);
12675 if (!parser.compile(expressions[i], expression))
12677 printf(
"run_test22() - Error: %s\tExpression: %s [17]\n",
12678 parser.error().c_str(),
12679 expressions[i].c_str());
12684 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
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_assert);
12691 type_sequence.push_back(et_t::e_assert);
12692 type_sequence.push_back(et_t::e_assert);
12693 type_sequence.push_back(et_t::e_sf3ext);
12697 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [17]\n",
12698 expressions[i].c_str());
12703 expression.value();
12707 printf(
"run_test22() - Error: Invalid assert count of %d expected 6. Expression: %s [17]\n",
12709 expressions[i].c_str());
12717 const std::string expressions[] =
12719 " assert(x > y); 'assert' + ((x < y) ? '01' : 'XYZ'); "
12720 " assert(x > y, 'assert statement 2'); 'assert' + ((x < y) ? '02' : 'XYZ'); "
12721 " assert(x > y, 'assert ' + 'statement 3'); 'assert' + ((x < y) ? '03' : 'XYZ'); "
12722 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); 'assert' + ((x < y) ? '04' : 'XYZ'); "
12723 " assert(x > y, 'assert ' + 'statement 5'); 'assert' + ((x < y) ? '05' : 'XYZ'); "
12724 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); 'assert' + ((x < y) ? '06' : 'XYZ'); "
12727 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12729 for (std::size_t i = 0; i < expression_count; ++i)
12734 symbol_table_t symbol_table;
12735 expression_t expression;
12741 symbol_table.add_variable(
"x", x);
12742 symbol_table.add_variable(
"y", y);
12743 expression.register_symbol_table(symbol_table);
12745 parser.register_assert_check(handler);
12747 if (!parser.compile(expressions[i], expression))
12749 printf(
"run_test22() - Error: %s\tExpression: %s [18]\n",
12750 parser.error().c_str(),
12751 expressions[i].c_str());
12756 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
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_assert);
12763 type_sequence.push_back(et_t::e_assert);
12764 type_sequence.push_back(et_t::e_assert);
12765 type_sequence.push_back(et_t::e_string);
12769 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [18]\n",
12770 expressions[i].c_str());
12775 expression.value();
12779 printf(
"run_test22() - Error: Invalid assert count of %d expected 6. Expression: %s [18]\n",
12781 expressions[i].c_str());