1326 test_xy<T>(
"x + y" ,T(
"2.2"),T(
"3.3"),T(
"5.5")),
1327 test_xy<T>(
"x - y" ,T(
"3.3"),T(
"2.2"),T(
"1.1")),
1328 test_xy<T>(
"x * y" ,T(
"3.3"),T(
"2.2"),T(
"7.26")),
1329 test_xy<T>(
"x / y" ,T(
"3.3"),T(
"2.2"),T(
"1.5")),
1330 test_xy<T>(
"(x + y) * (x + y)" ,T(
"2.2"),T(
"3.3"),T(
"30.25")),
1331 test_xy<T>(
"(x + y) / (x + y)" ,T(
"2.2"),T(
"3.3"),T(
"1.0")),
1332 test_xy<T>(
"x + y > x and x + y > y" ,T(
"2.2"),T(
"3.3"),T(
"1.0")),
1333 test_xy<T>(
"1 + (x + y)" ,T(
"2.2"),T(
"3.3"),T(
"6.5")),
1334 test_xy<T>(
"(x + y) - 1" ,T(
"2.2"),T(
"3.3"),T(
"4.5")),
1335 test_xy<T>(
"1 + (x + y) * 2" ,T(
"2.2"),T(
"3.3"),T(
"12.0")),
1336 test_xy<T>(
"2 * (x + y) - 1" ,T(
"2.2"),T(
"3.3"),T(
"10.0")),
1337 test_xy<T>(
"y + (x + 1)" ,T(
"2.2"),T(
"3.3"),T(
"6.5")),
1338 test_xy<T>(
"(x + 1) + y" ,T(
"2.2"),T(
"3.3"),T(
"6.5")),
1339 test_xy<T>(
"2 * x" ,T(
"2.2"),T(
"0.0"),T(
"4.4")),
1340 test_xy<T>(
"x * 2" ,T(
"2.2"),T(
"0.0"),T(
"4.4")),
1341 test_xy<T>(
"1.1 + x" ,T(
"2.2"),T(
"0.0"),T(
"3.3")),
1342 test_xy<T>(
"x + 1.1" ,T(
"2.2"),T(
"0.0"),T(
"3.3")),
1343 test_xy<T>(
"x - -1 " ,T(
"1.0"),T(
"0.0"),T(
"2")),
1344 test_xy<T>(
"x --1 " ,T(
"1.0"),T(
"0.0"),T(
"2")),
1345 test_xy<T>(
"x-- 1 " ,T(
"1.0"),T(
"0.0"),T(
"2")),
1346 test_xy<T>(
"x--1 " ,T(
"1.0"),T(
"0.0"),T(
"2")),
1347 test_xy<T>(
"x -- -1" ,T(
"1.0"),T(
"0.0"),T(
"0")),
1348 test_xy<T>(
"x + -1 " ,T(
"1.0"),T(
"0.0"),T(
"0")),
1349 test_xy<T>(
"x +-1 " ,T(
"1.0"),T(
"0.0"),T(
"0")),
1350 test_xy<T>(
"x+- 1 " ,T(
"1.0"),T(
"0.0"),T(
"0")),
1351 test_xy<T>(
"x+-1 " ,T(
"1.0"),T(
"0.0"),T(
"0")),
1352 test_xy<T>(
"x +- -1" ,T(
"1.0"),T(
"0.0"),T(
"2")),
1353 test_xy<T>(
"x + +1 " ,T(
"1.0"),T(
"0.0"),T(
"2")),
1354 test_xy<T>(
"x ++1 " ,T(
"1.0"),T(
"0.0"),T(
"2")),
1355 test_xy<T>(
"1 - -x " ,T(
"1.0"),T(
"0.0"),T(
"2")),
1356 test_xy<T>(
"1 --x " ,T(
"1.0"),T(
"0.0"),T(
"2")),
1357 test_xy<T>(
"1-- x " ,T(
"1.0"),T(
"0.0"),T(
"2")),
1358 test_xy<T>(
"1--x " ,T(
"1.0"),T(
"0.0"),T(
"2")),
1359 test_xy<T>(
"1 -- -x" ,T(
"1.0"),T(
"0.0"),T(
"0")),
1360 test_xy<T>(
"1 + -x " ,T(
"1.0"),T(
"0.0"),T(
"0")),
1361 test_xy<T>(
"1 +-x " ,T(
"1.0"),T(
"0.0"),T(
"0")),
1362 test_xy<T>(
"1+- x " ,T(
"1.0"),T(
"0.0"),T(
"0")),
1363 test_xy<T>(
"1+-x " ,T(
"1.0"),T(
"0.0"),T(
"0")),
1364 test_xy<T>(
"1 +- -x" ,T(
"1.0"),T(
"0.0"),T(
"2")),
1365 test_xy<T>(
"1 + +x " ,T(
"1.0"),T(
"0.0"),T(
"2")),
1366 test_xy<T>(
"1 ++x " ,T(
"1.0"),T(
"0.0"),T(
"2")),
1367 test_xy<T>(
"(x - -1 + 1)" ,T(
"1.0"),T(
"0.0"),T(
"3")),
1368 test_xy<T>(
"(x --1 + 1)" ,T(
"1.0"),T(
"0.0"),T(
"3")),
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(
"1")),
1372 test_xy<T>(
"(x + -1 + 1)" ,T(
"1.0"),T(
"0.0"),T(
"1")),
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(
"3")),
1377 test_xy<T>(
"(x + +1 + 1)" ,T(
"1.0"),T(
"0.0"),T(
"3")),
1378 test_xy<T>(
"(x ++1 + 1)" ,T(
"1.0"),T(
"0.0"),T(
"3")),
1379 test_xy<T>(
"(1 - -x + 1)" ,T(
"1.0"),T(
"0.0"),T(
"3")),
1380 test_xy<T>(
"(1 --x + 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(
"1")),
1384 test_xy<T>(
"(1 + -x + 1)" ,T(
"1.0"),T(
"0.0"),T(
"1")),
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(
"3")),
1389 test_xy<T>(
"(1 + +x + 1)" ,T(
"1.0"),T(
"0.0"),T(
"3")),
1390 test_xy<T>(
"(1 ++x + 1)" ,T(
"1.0"),T(
"0.0"),T(
"3")),
1391 test_xy<T>(
"(x - -1 - 1)" ,T(
"1.0"),T(
"0.0"),T(
"1")),
1392 test_xy<T>(
"(x --1 - 1)" ,T(
"1.0"),T(
"0.0"),T(
"1")),
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>(
"(1 - -x - 1)" ,T(
"1.0"),T(
"0.0"),T(
"1")),
1404 test_xy<T>(
"(1 --x - 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>(
"x * 1 == x" ,T(
"2.0"),T(
"3.0"),T(
"1.0")),
1416 test_xy<T>(
"1 * x == x" ,T(
"2.0"),T(
"3.0"),T(
"1.0")),
1417 test_xy<T>(
"y * 1 == y" ,T(
"2.0"),T(
"3.0"),T(
"1.0")),
1418 test_xy<T>(
"1 * y == y" ,T(
"2.0"),T(
"3.0"),T(
"1.0")),
1419 test_xy<T>(
"x * 0 == 0" ,T(
"2.0"),T(
"3.0"),T(
"1.0")),
1420 test_xy<T>(
"0 * x == 0" ,T(
"2.0"),T(
"3.0"),T(
"1.0")),
1421 test_xy<T>(
"y * 0 == 0" ,T(
"2.0"),T(
"3.0"),T(
"1.0")),
1422 test_xy<T>(
"0 * y == 0" ,T(
"2.0"),T(
"3.0"),T(
"1.0")),
1423 test_xy<T>(
"x + 1 == 1 + x" ,T(
"2.0"),T(
"3.0"),T(
"1.0")),
1424 test_xy<T>(
"y + 1 == 1 + y" ,T(
"2.0"),T(
"3.0"),T(
"1.0")),
1425 test_xy<T>(
"x + y == y + x" ,T(
"2.0"),T(
"3.0"),T(
"1.0")),
1426 test_xy<T>(
"x * y == y * x" ,T(
"2.0"),T(
"3.0"),T(
"1.0")),
1427 test_xy<T>(
"x < y" ,T(
"2.0"),T(
"3.0"),T(
"1.0")),
1428 test_xy<T>(
"y > x" ,T(
"2.0"),T(
"3.0"),T(
"1.0")),
1429 test_xy<T>(
"x <= y" ,T(
"2.0"),T(
"3.0"),T(
"1.0")),
1430 test_xy<T>(
"y >= x" ,T(
"2.0"),T(
"3.0"),T(
"1.0")),
1431 test_xy<T>(
"x + y > y" ,T(
"2.0"),T(
"3.0"),T(
"1.0")),
1432 test_xy<T>(
"x + 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>(
"(2x + 3y) == (2*x + 3*y)" ,T(
"2.0"),T(
"3.0"),T(
"1.0")),
1440 test_xy<T>(
"2(x + y) == (2*x + 2*y)" ,T(
"2.0"),T(
"3.0"),T(
"1.0")),
1441 test_xy<T>(
" (x + y)3 == (3*x + 3*y)" ,T(
"2.0"),T(
"3.0"),T(
"1.0")),
1442 test_xy<T>(
"2x + 3y == 2*x + 3*y" ,T(
"2.0"),T(
"3.0"),T(
"1.0")),
1443 test_xy<T>(
"2(x + y) == 2*x + 2*y" ,T(
"2.0"),T(
"3.0"),T(
"1.0")),
1444 test_xy<T>(
" (x + y)3 == 3*x + 3*y" ,T(
"2.0"),T(
"3.0"),T(
"1.0")),
1445 test_xy<T>(
" (x)y == (x*y)" ,T(
"2.0"),T(
"3.0"),T(
"1.0")),
1446 test_xy<T>(
" x(y) == (x*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)3 == (x*3)" ,T(
"2.0"),T(
"3.0"),T(
"1.0")),
1452 test_xy<T>(
" x(3) == (x*3)" ,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>(
" (2)y == (2*y)" ,T(
"2.0"),T(
"3.0"),T(
"1.0")),
1458 test_xy<T>(
" 2(y) == (2*y)" ,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>(
"var a := 2; (a)(3) == 6" ,T(
"2.0"),T(
"3.0"),T(
"1.0")),
1464 test_xy<T>(
"var a := 2; (A){3} == 6" ,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; var b := 3; (a)(b) == 6" ,T(
"2.0"),T(
"3.0"),T(
"1.0")),
1470 test_xy<T>(
"var a := 2; var b := 3; (a){B} == 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; (a)(a+1) == 6" ,T(
"2.0"),T(
"3.0"),T(
"1.0")),
1476 test_xy<T>(
"var a := 2; (a){a+1} == 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; var b := 3; (b-1)(b) == 6" ,T(
"2.0"),T(
"3.0"),T(
"1.0")),
1482 test_xy<T>(
"var a := 2; var b := 3; (b-1){b} == 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>(
"abs(x^2.2^1.1 - 17.15193942371376191362472354210675542022)" ,T(
"3.3"),T(
"0.0"),T(
"0.0")),
1488 test_xy<T>(
"equal(x^2.2^1.1,17.15193942371376191362472354210675542022)" ,T(
"3.3"),T(
"0.0"),T(
"1.0")),
1489 test_xy<T>(
"equal(3.3^x^1.1,17.15193942371376191362472354210675542022)" ,T(
"2.2"),T(
"0.0"),T(
"1.0")),
1490 test_xy<T>(
"equal(3.3^2.2^x,17.15193942371376191362472354210675542022)" ,T(
"1.1"),T(
"0.0"),T(
"1.0")),
1491 test_xy<T>(
"equal(x^2.2^y,17.15193942371376191362472354210675542022)" ,T(
"3.3"),T(
"1.1"),T(
"1.0")),
1492 test_xy<T>(
"equal(x^y^1.1,17.15193942371376191362472354210675542022)" ,T(
"3.3"),T(
"2.2"),T(
"1.0")),
1493 test_xy<T>(
"equal(3.3^x^y,17.15193942371376191362472354210675542022)" ,T(
"2.2"),T(
"1.1"),T(
"1.0")),
1494 test_xy<T>(
"equal(x+y^3/7,x+(y*y*y)/7)",T(
"2.0"),T(
"3.0"),T(
"1.0")),
1495 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")),
1496 test_xy<T>(
"equal( x^0,1)",T(
"12.34"),T(
"0.0"),T(
"1.0")),
1497 test_xy<T>(
"equal( x^1,x)",T(
"12.34"),T(
"0.0"),T(
"1.0")),
1498 test_xy<T>(
"equal( x^2,x*x)",T(
"12.34"),T(
"0.0"),T(
"1.0")),
1499 test_xy<T>(
"equal( x^3,x*x*x)",T(
"12.34"),T(
"0.0"),T(
"1.0")),
1500 test_xy<T>(
"equal( x^4,x*x*x*x)",T(
"12.34"),T(
"0.0"),T(
"1.0")),
1501 test_xy<T>(
"equal( x^5,x*x*x*x*x)",T(
"12.34"),T(
"0.0"),T(
"1.0")),
1502 test_xy<T>(
"equal( x^6,x*x*x*x*x*x)",T(
"12.34"),T(
"0.0"),T(
"1.0")),
1503 test_xy<T>(
"equal( x^7,x*x*x*x*x*x*x)",T(
"12.34"),T(
"0.0"),T(
"1.0")),
1504 test_xy<T>(
"equal( x^8,x*x*x*x*x*x*x*x)",T(
"12.34"),T(
"0.0"),T(
"1.0")),
1505 test_xy<T>(
"equal( x^9,x*x*x*x*x*x*x*x*x)",T(
"12.34"),T(
"0.0"),T(
"1.0")),
1506 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")),
1507 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")),
1508 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")),
1509 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")),
1510 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")),
1511 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")),
1512 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")),
1513 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")),
1514 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")),
1515 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")),
1516 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")),
1517 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")),
1518 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")),
1519 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")),
1520 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")),
1521 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")),
1522 test_xy<T>(
"equal( y^0,1)",T(
"0.0"),T(
"12.34"),T(
"1.0")),
1523 test_xy<T>(
"equal( y^1,y)",T(
"0.0"),T(
"12.34"),T(
"1.0")),
1524 test_xy<T>(
"equal( y^2,y*y)",T(
"0.0"),T(
"12.34"),T(
"1.0")),
1525 test_xy<T>(
"equal( y^3,y*y*y)",T(
"0.0"),T(
"12.34"),T(
"1.0")),
1526 test_xy<T>(
"equal( y^4,y*y*y*y)",T(
"0.0"),T(
"12.34"),T(
"1.0")),
1527 test_xy<T>(
"equal( y^5,y*y*y*y*y)",T(
"0.0"),T(
"12.34"),T(
"1.0")),
1528 test_xy<T>(
"equal( y^6,y*y*y*y*y*y)",T(
"0.0"),T(
"12.34"),T(
"1.0")),
1529 test_xy<T>(
"equal( y^7,y*y*y*y*y*y*y)",T(
"0.0"),T(
"12.34"),T(
"1.0")),
1530 test_xy<T>(
"equal( y^8,y*y*y*y*y*y*y*y)",T(
"0.0"),T(
"12.34"),T(
"1.0")),
1531 test_xy<T>(
"equal( y^9,y*y*y*y*y*y*y*y*y)",T(
"0.0"),T(
"12.34"),T(
"1.0")),
1532 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")),
1533 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")),
1534 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")),
1535 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")),
1536 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")),
1537 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")),
1538 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")),
1539 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")),
1540 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")),
1541 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")),
1542 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")),
1543 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")),
1544 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")),
1545 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")),
1546 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")),
1547 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")),
1548 test_xy<T>(
"equal( x^-0,1/1)",T(
"12.34"),T(
"0.0"),T(
"1.0")),
1549 test_xy<T>(
"equal( x^-1,1/(x))",T(
"12.34"),T(
"0.0"),T(
"1.0")),
1550 test_xy<T>(
"equal( x^-2,1/(x*x))",T(
"12.34"),T(
"0.0"),T(
"1.0")),
1551 test_xy<T>(
"equal( x^-3,1/(x*x*x))",T(
"12.34"),T(
"0.0"),T(
"1.0")),
1552 test_xy<T>(
"equal( x^-4,1/(x*x*x*x))",T(
"12.34"),T(
"0.0"),T(
"1.0")),
1553 test_xy<T>(
"equal( x^-5,1/(x*x*x*x*x))",T(
"12.34"),T(
"0.0"),T(
"1.0")),
1554 test_xy<T>(
"equal( x^-6,1/(x*x*x*x*x*x))",T(
"12.34"),T(
"0.0"),T(
"1.0")),
1555 test_xy<T>(
"equal( x^-7,1/(x*x*x*x*x*x*x))",T(
"12.34"),T(
"0.0"),T(
"1.0")),
1556 test_xy<T>(
"equal( x^-8,1/(x*x*x*x*x*x*x*x))",T(
"12.34"),T(
"0.0"),T(
"1.0")),
1557 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")),
1558 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")),
1559 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")),
1560 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")),
1561 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")),
1562 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")),
1563 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")),
1564 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")),
1565 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")),
1566 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")),
1567 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")),
1568 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")),
1569 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")),
1570 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")),
1571 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")),
1572 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")),
1573 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")),
1574 test_xy<T>(
"equal( y^-0,1/1)",T(
"0.0"),T(
"12.34"),T(
"1.0")),
1575 test_xy<T>(
"equal( y^-1,1/(y))",T(
"0.0"),T(
"12.34"),T(
"1.0")),
1576 test_xy<T>(
"equal( y^-2,1/(y*y))",T(
"0.0"),T(
"12.34"),T(
"1.0")),
1577 test_xy<T>(
"equal( y^-3,1/(y*y*y))",T(
"0.0"),T(
"12.34"),T(
"1.0")),
1578 test_xy<T>(
"equal( y^-4,1/(y*y*y*y))",T(
"0.0"),T(
"12.34"),T(
"1.0")),
1579 test_xy<T>(
"equal( y^-5,1/(y*y*y*y*y))",T(
"0.0"),T(
"12.34"),T(
"1.0")),
1580 test_xy<T>(
"equal( y^-6,1/(y*y*y*y*y*y))",T(
"0.0"),T(
"12.34"),T(
"1.0")),
1581 test_xy<T>(
"equal( y^-7,1/(y*y*y*y*y*y*y))",T(
"0.0"),T(
"12.34"),T(
"1.0")),
1582 test_xy<T>(
"equal( y^-8,1/(y*y*y*y*y*y*y*y))",T(
"0.0"),T(
"12.34"),T(
"1.0")),
1583 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")),
1584 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")),
1585 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")),
1586 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")),
1587 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")),
1588 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")),
1589 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")),
1590 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")),
1591 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")),
1592 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")),
1593 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")),
1594 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")),
1595 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")),
1596 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")),
1597 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")),
1598 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")),
1599 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")),
1600 test_xy<T>(
"(2 + x) + 7",T(
"3.0"),T(
"0.0"),T((2.0 + 3.0) + 7.0)),
1601 test_xy<T>(
"(2 + x) - 7",T(
"3.0"),T(
"0.0"),T((2.0 + 3.0) - 7.0)),
1602 test_xy<T>(
"(2 - x) + 7",T(
"3.0"),T(
"0.0"),T((2.0 - 3.0) + 7.0)),
1603 test_xy<T>(
"(2 - x) - 7",T(
"3.0"),T(
"0.0"),T((2.0 - 3.0) - 7.0)),
1604 test_xy<T>(
"(2 * x) * 7",T(
"3.0"),T(
"0.0"),T((2.0 * 3.0) * 7.0)),
1605 test_xy<T>(
"(2 * x) / 7",T(
"3.0"),T(
"0.0"),T((2.0 * 3.0) / 7.0)),
1606 test_xy<T>(
"(2 / x) * 7",T(
"3.0"),T(
"0.0"),T((2.0 / 3.0) * 7.0)),
1607 test_xy<T>(
"(2 / x) / 7",T(
"3.0"),T(
"0.0"),T((2.0 / 3.0) / 7.0)),
1608 test_xy<T>(
"2 + (x + 7)",T(
"3.0"),T(
"0.0"),T(2.0 + (3.0 + 7.0))),
1609 test_xy<T>(
"2 + (x - 7)",T(
"3.0"),T(
"0.0"),T(2.0 + (3.0 - 7.0))),
1610 test_xy<T>(
"2 - (x + 7)",T(
"3.0"),T(
"0.0"),T(2.0 - (3.0 + 7.0))),
1611 test_xy<T>(
"2 - (x - 7)",T(
"3.0"),T(
"0.0"),T(2.0 - (3.0 - 7.0))),
1612 test_xy<T>(
"2 * (x * 7)",T(
"3.0"),T(
"0.0"),T(2.0 * (3.0 * 7.0))),
1613 test_xy<T>(
"2 * (x / 7)",T(
"3.0"),T(
"0.0"),T(2.0 * (3.0 / 7.0))),
1614 test_xy<T>(
"2 / (x * 7)",T(
"3.0"),T(
"0.0"),T(2.0 / (3.0 * 7.0))),
1615 test_xy<T>(
"2 / (x / 7)",T(
"3.0"),T(
"0.0"),T(2.0 / (3.0 / 7.0))),
1616 test_xy<T>(
"2 + (7 + x)",T(
"3.0"),T(
"0.0"),T(2.0 + (7.0 + 3.0))),
1617 test_xy<T>(
"2 + (7 - x)",T(
"3.0"),T(
"0.0"),T(2.0 + (7.0 - 3.0))),
1618 test_xy<T>(
"2 - (7 + x)",T(
"3.0"),T(
"0.0"),T(2.0 - (7.0 + 3.0))),
1619 test_xy<T>(
"2 - (7 - x)",T(
"3.0"),T(
"0.0"),T(2.0 - (7.0 - 3.0))),
1620 test_xy<T>(
"2 * (7 * x)",T(
"3.0"),T(
"0.0"),T(2.0 * (7.0 * 3.0))),
1621 test_xy<T>(
"2 * (7 / x)",T(
"3.0"),T(
"0.0"),T(2.0 * (7.0 / 3.0))),
1622 test_xy<T>(
"2 / (7 * x)",T(
"3.0"),T(
"0.0"),T(2.0 / (7.0 * 3.0))),
1623 test_xy<T>(
"2 / (7 / x)",T(
"3.0"),T(
"0.0"),T(2.0 / (7.0 / 3.0))),
1624 test_xy<T>(
"(x + 2) + 7",T(
"3.0"),T(
"0.0"),T((3.0 + 2.0) + 7.0)),
1625 test_xy<T>(
"(x + 2) - 7",T(
"3.0"),T(
"0.0"),T((3.0 + 2.0) - 7.0)),
1626 test_xy<T>(
"(x - 2) + 7",T(
"3.0"),T(
"0.0"),T((3.0 - 2.0) + 7.0)),
1627 test_xy<T>(
"(x - 2) - 7",T(
"3.0"),T(
"0.0"),T((3.0 - 2.0) - 7.0)),
1628 test_xy<T>(
"(x * 2) * 7",T(
"3.0"),T(
"0.0"),T((3.0 * 2.0) * 7.0)),
1629 test_xy<T>(
"(x * 2) / 7",T(
"3.0"),T(
"0.0"),T((3.0 * 2.0) / 7.0)),
1630 test_xy<T>(
"(x / 2) * 7",T(
"3.0"),T(
"0.0"),T((3.0 / 2.0) * 7.0)),
1631 test_xy<T>(
"(x / 2) / 7",T(
"3.0"),T(
"0.0"),T((3.0 / 2.0) / 7.0)),
1632 test_xy<T>(
"((2 + x) + (3 + y))",T(
"7.0"),T(
"9.0"),T(((2.0 + 7.0) + (3.0 + 9.0)))),
1633 test_xy<T>(
"((2 + x) - (3 + y))",T(
"7.0"),T(
"9.0"),T(((2.0 + 7.0) - (3.0 + 9.0)))),
1634 test_xy<T>(
"((2 - x) - (3 - y))",T(
"7.0"),T(
"9.0"),T(((2.0 - 7.0) - (3.0 - 9.0)))),
1635 test_xy<T>(
"((2 * x) * (3 * y))",T(
"7.0"),T(
"9.0"),T(((2.0 * 7.0) * (3.0 * 9.0)))),
1636 test_xy<T>(
"((x + 2) + (y + 3))",T(
"7.0"),T(
"9.0"),T(((7.0 + 2.0) + (9.0 + 3.0)))),
1637 test_xy<T>(
"((x + 2) - (y + 3))",T(
"7.0"),T(
"9.0"),T(((7.0 + 2.0) - (9.0 + 3.0)))),
1638 test_xy<T>(
"((x - 2) - (y - 3))",T(
"7.0"),T(
"9.0"),T(((7.0 - 2.0) - (9.0 - 3.0)))),
1639 test_xy<T>(
"((2 * x) * (3 * y))",T(
"7.0"),T(
"9.0"),T(((2.0 * 7.0) * (3.0 * 9.0)))),
1640 test_xy<T>(
"((2 + x) + (y + 3))",T(
"7.0"),T(
"9.0"),T(((2.0 + 7.0) + (9.0 + 3.0)))),
1641 test_xy<T>(
"((2 + x) - (y + 3))",T(
"7.0"),T(
"9.0"),T(((2.0 + 7.0) - (9.0 + 3.0)))),
1642 test_xy<T>(
"((2 - x) - (y - 3))",T(
"7.0"),T(
"9.0"),T(((2.0 - 7.0) - (9.0 - 3.0)))),
1643 test_xy<T>(
"((2 * x) * (3 * y))",T(
"7.0"),T(
"9.0"),T(((2.0 * 7.0) * (3.0 * 9.0)))),
1644 test_xy<T>(
"((x + 2) + (3 + y))",T(
"7.0"),T(
"9.0"),T(((7.0 + 2.0) + (3.0 + 9.0)))),
1645 test_xy<T>(
"((x + 2) - (3 + y))",T(
"7.0"),T(
"9.0"),T(((7.0 + 2.0) - (3.0 + 9.0)))),
1646 test_xy<T>(
"((x - 2) - (3 - y))",T(
"7.0"),T(
"9.0"),T(((7.0 - 2.0) - (3.0 - 9.0)))),
1647 test_xy<T>(
"((2 * x) * (3 * y))",T(
"7.0"),T(
"9.0"),T(((2.0 * 7.0) * (3.0 * 9.0)))),
1648 test_xy<T>(
"((2 * x) / (3 * y))",T(
"7.0"),T(
"9.0"),T(((2.0 * 7.0) / (3.0 * 9.0)))),
1649 test_xy<T>(
"((2 / x) * (3 / y))",T(
"7.0"),T(
"9.0"),T(((2.0 / 7.0) * (3.0 / 9.0)))),
1650 test_xy<T>(
"((2 * x) / (3 / y))",T(
"7.0"),T(
"9.0"),T(((2.0 * 7.0) / (3.0 / 9.0)))),
1651 test_xy<T>(
"((2 / x) / (3 * y))",T(
"7.0"),T(
"9.0"),T(((2.0 / 7.0) / (3.0 * 9.0)))),
1652 test_xy<T>(
"((x * 2) / (y * 3))",T(
"7.0"),T(
"9.0"),T(((7.0 * 2.0) / (9.0 * 3.0)))),
1653 test_xy<T>(
"((x / 2) * (y / 3))",T(
"7.0"),T(
"9.0"),T(((7.0 / 2.0) * (9.0 / 3.0)))),
1654 test_xy<T>(
"((x * 2) / (y / 3))",T(
"7.0"),T(
"9.0"),T(((7.0 * 2.0) / (9.0 / 3.0)))),
1655 test_xy<T>(
"((x / 2) / (y * 3))",T(
"7.0"),T(
"9.0"),T(((7.0 / 2.0) / (9.0 * 3.0)))),
1656 test_xy<T>(
"((2 * x) / (y * 3))",T(
"7.0"),T(
"9.0"),T(((2.0 * 7.0) / (9.0 * 3.0)))),
1657 test_xy<T>(
"((2 / x) * (y / 3))",T(
"7.0"),T(
"9.0"),T(((2.0 / 7.0) * (9.0 / 3.0)))),
1658 test_xy<T>(
"((2 * x) / (y / 3))",T(
"7.0"),T(
"9.0"),T(((2.0 * 7.0) / (9.0 / 3.0)))),
1659 test_xy<T>(
"((2 / x) / (y * 3))",T(
"7.0"),T(
"9.0"),T(((2.0 / 7.0) / (9.0 * 3.0)))),
1660 test_xy<T>(
"((x * 2) / (3 * y))",T(
"7.0"),T(
"9.0"),T(((7.0 * 2.0) / (3.0 * 9.0)))),
1661 test_xy<T>(
"((x / 2) * (3 / y))",T(
"7.0"),T(
"9.0"),T(((7.0 / 2.0) * (3.0 / 9.0)))),
1662 test_xy<T>(
"((x * 2) / (3 / y))",T(
"7.0"),T(
"9.0"),T(((7.0 * 2.0) / (3.0 / 9.0)))),
1663 test_xy<T>(
"((x / 2) / (3 * y))",T(
"7.0"),T(
"9.0"),T(((7.0 / 2.0) / (3.0 * 9.0)))),
1664 test_xy<T>(
"([(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))),
1665 test_xy<T>(
"([(min(x,8) + y) + 3] + 4)",T(
"7.0"),T(
"9.0"),T((((std::min(7.0,8.0) + 9.0) + 3.0) + 4.0))),
1666 test_xy<T>(
"([(min(x,8) + y) + 3] * 4)",T(
"7.0"),T(
"9.0"),T((((std::min(7.0,8.0) + 9.0) + 3.0) * 4.0))),
1667 test_xy<T>(
"([(min(x,8) + y) + 3] / 4)",T(
"7.0"),T(
"9.0"),T((((std::min(7.0,8.0) + 9.0) + 3.0) / 4.0))),
1668 test_xy<T>(
"([(min(x,8) + y) - 3] - 4)",T(
"7.0"),T(
"9.0"),T((((std::min(7.0,8.0) + 9.0) - 3.0) - 4.0))),
1669 test_xy<T>(
"([(min(x,8) + y) - 3] + 4)",T(
"7.0"),T(
"9.0"),T((((std::min(7.0,8.0) + 9.0) - 3.0) + 4.0))),
1670 test_xy<T>(
"([(min(x,8) + y) - 3] * 4)",T(
"7.0"),T(
"9.0"),T((((std::min(7.0,8.0) + 9.0) - 3.0) * 4.0))),
1671 test_xy<T>(
"([(min(x,8) + y) - 3] / 4)",T(
"7.0"),T(
"9.0"),T((((std::min(7.0,8.0) + 9.0) - 3.0) / 4.0))),
1672 test_xy<T>(
"([(min(x,8) + y) * 3] - 4)",T(
"7.0"),T(
"9.0"),T((((std::min(7.0,8.0) + 9.0) * 3.0) - 4.0))),
1673 test_xy<T>(
"([(min(x,8) + y) * 3] + 4)",T(
"7.0"),T(
"9.0"),T((((std::min(7.0,8.0) + 9.0) * 3.0) + 4.0))),
1674 test_xy<T>(
"([(min(x,8) + y) * 3] * 4)",T(
"7.0"),T(
"9.0"),T((((std::min(7.0,8.0) + 9.0) * 3.0) * 4.0))),
1675 test_xy<T>(
"([(min(x,8) + y) * 3] / 4)",T(
"7.0"),T(
"9.0"),T((((std::min(7.0,8.0) + 9.0) * 3.0) / 4.0))),
1676 test_xy<T>(
"([(min(x,8) + y) / 3] - 4)",T(
"7.0"),T(
"9.0"),T((((std::min(7.0,8.0) + 9.0) / 3.0) - 4.0))),
1677 test_xy<T>(
"([(min(x,8) + y) / 3] + 4)",T(
"7.0"),T(
"9.0"),T((((std::min(7.0,8.0) + 9.0) / 3.0) + 4.0))),
1678 test_xy<T>(
"([(min(x,8) + y) / 3] * 4)",T(
"7.0"),T(
"9.0"),T((((std::min(7.0,8.0) + 9.0) / 3.0) * 4.0))),
1679 test_xy<T>(
"([(min(x,8) + y) / 3] / 4)",T(
"7.0"),T(
"9.0"),T((((std::min(7.0,8.0) + 9.0) / 3.0) / 4.0))),
1680 test_xy<T>(
"(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))))),
1681 test_xy<T>(
"(4 + [3 + (min(x,8) + y)])",T(
"7.0"),T(
"9.0"),T((4.0 + (3.0 + (std::min(7.0,8.0) + 9.0))))),
1682 test_xy<T>(
"(4 * [3 + (min(x,8) + y)])",T(
"7.0"),T(
"9.0"),T((4.0 * (3.0 + (std::min(7.0,8.0) + 9.0))))),
1683 test_xy<T>(
"(4 / [3 + (min(x,8) + y)])",T(
"7.0"),T(
"9.0"),T((4.0 / (3.0 + (std::min(7.0,8.0) + 9.0))))),
1684 test_xy<T>(
"(4 - [3 - (min(x,8) + y)])",T(
"7.0"),T(
"9.0"),T((4.0 - (3.0 - (std::min(7.0,8.0) + 9.0))))),
1685 test_xy<T>(
"(4 + [3 - (min(x,8) + y)])",T(
"7.0"),T(
"9.0"),T((4.0 + (3.0 - (std::min(7.0,8.0) + 9.0))))),
1686 test_xy<T>(
"(4 * [3 - (min(x,8) + y)])",T(
"7.0"),T(
"9.0"),T((4.0 * (3.0 - (std::min(7.0,8.0) + 9.0))))),
1687 test_xy<T>(
"(4 / [3 - (min(x,8) + y)])",T(
"7.0"),T(
"9.0"),T((4.0 / (3.0 - (std::min(7.0,8.0) + 9.0))))),
1688 test_xy<T>(
"(4 - [3 * (min(x,8) + y)])",T(
"7.0"),T(
"9.0"),T((4.0 - (3.0 * (std::min(7.0,8.0) + 9.0))))),
1689 test_xy<T>(
"(4 + [3 * (min(x,8) + y)])",T(
"7.0"),T(
"9.0"),T((4.0 + (3.0 * (std::min(7.0,8.0) + 9.0))))),
1690 test_xy<T>(
"(4 * [3 * (min(x,8) + y)])",T(
"7.0"),T(
"9.0"),T((4.0 * (3.0 * (std::min(7.0,8.0) + 9.0))))),
1691 test_xy<T>(
"(4 / [3 * (min(x,8) + y)])",T(
"7.0"),T(
"9.0"),T((4.0 / (3.0 * (std::min(7.0,8.0) + 9.0))))),
1692 test_xy<T>(
"(4 - [3 / (min(x,8) + y)])",T(
"7.0"),T(
"9.0"),T((4.0 - (3.0 / (std::min(7.0,8.0) + 9.0))))),
1693 test_xy<T>(
"(4 + [3 / (min(x,8) + y)])",T(
"7.0"),T(
"9.0"),T((4.0 + (3.0 / (std::min(7.0,8.0) + 9.0))))),
1694 test_xy<T>(
"(4 * [3 / (min(x,8) + y)])",T(
"7.0"),T(
"9.0"),T((4.0 * (3.0 / (std::min(7.0,8.0) + 9.0))))),
1695 test_xy<T>(
"(4 / [3 / (min(x,8) + y)])",T(
"7.0"),T(
"9.0"),T((4.0 / (3.0 / (std::min(7.0,8.0) + 9.0))))),
1696 test_xy<T>(
"((2 * x) + (2 * y))",T(
"7.0"),T(
"9.0"),T(((2.0 * 7.0) + (2.0 * 9.0)))),
1697 test_xy<T>(
"((2 * x) - (2 * y))",T(
"7.0"),T(
"9.0"),T(((2.0 * 7.0) - (2.0 * 9.0)))),
1698 test_xy<T>(
"((2 * x) + (y * 2))",T(
"7.0"),T(
"9.0"),T(((2.0 * 7.0) + (9.0 * 2.0)))),
1699 test_xy<T>(
"((x * 2) - (y * 2))",T(
"7.0"),T(
"9.0"),T(((7.0 * 2.0) - (9.0 * 2.0)))),
1700 test_xy<T>(
"0 * (abs (x) + acos (y) + asin (x) + atan (y))",T(
"1.0"),T(
"1.0"),T(
"0.0")),
1701 test_xy<T>(
"0 * (ceil (x) + cos (y) + cosh (x) + exp (y))",T(
"1.0"),T(
"1.0"),T(
"0.0")),
1702 test_xy<T>(
"0 * (floor(x) + log (y) + log10(x) + round(y))",T(
"1.0"),T(
"1.0"),T(
"0.0")),
1703 test_xy<T>(
"0 * (sin (x) + sinh (y) + sqrt (x) + tan (y))",T(
"1.0"),T(
"1.0"),T(
"0.0")),
1704 test_xy<T>(
"0 * (sec (x) + csc (y) + tanh (x) + cot (y))",T(
"1.0"),T(
"1.0"),T(
"0.0")),
1705 test_xy<T>(
"0 * (erf (x) + erfc (y) + sgn (y) + frac (y))",T(
"1.0"),T(
"1.0"),T(
"0.0")),
1706 test_xy<T>(
"0 * (log1p(x) + expm1(y) + acosh(x) + asinh(y))",T(
"1.0"),T(
"1.0"),T(
"0.0")),
1707 test_xy<T>(
"0 * (deg2grad(x) + grad2deg(y) + rad2deg(x) + deg2rad(y))",T(
"1.0"),T(
"1.0"),T(
"0.0")),
1708 test_xy<T>(
"switch { case (x <= y) : (y - x); default: 1.12345; }",T(
"1.0"),T(
"2.0"),T(
"1.0")),
1709 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")),
1710 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")),
1711 test_xy<T>(
"switch { case [x <= y] : [y - x]; default: 1.12345; }",T(
"1.0"),T(
"2.0"),T(
"1.0")),
1712 test_xy<T>(
"switch { case [x > y] : 0; case [x <= y] : [y - x]; default: 1.12345; }",T(
"1.0"),T(
"2.0"),T(
"1.0")),
1713 test_xy<T>(
"switch { case [x <= y] : switch { case [x <= y] : {y - x}; default: 1.12345; }; default: 1.12345; }",T(
"1.0"),T(
"2.0"),T(
"1.0")),
1714 test_xy<T>(
"switch { case {x <= y} : x; default: 1.12345; }",T(
"1.0"),T(
"2.0"),T(
"1.0")),
1715 test_xy<T>(
"switch { case {x > y} : 0; case {x <= y} : {y - x}; default: 1.12345; }",T(
"1.0"),T(
"2.0"),T(
"1.0")),
1716 test_xy<T>(
"switch { case {x <= y} : switch { case {x <= y} : x; default: 1.12345; }; default: 1.12345; }",T(
"1.0"),T(
"2.0"),T(
"1.0")),
1717 test_xy<T>(
"switch { 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]) : [0]; case ([x <= y]) : [y - x]; default: 1.12345; }",T(
"1.0"),T(
"2.0"),T(
"1.0")),
1719 test_xy<T>(
"switch { case {(x <= y)} : switch { case ({x <= y}) : x; default: 1.12345; }; default: 1.12345; }",T(
"1.0"),T(
"2.0"),T(
"1.0")),
1720 test_xy<T>(
"[*]{ case x < y : x + y; case y < x : y - x; }",T(
"2.0"),T(
"3.0"),T(
"5.0")),
1721 test_xy<T>(
"[*]{ case x > y : x + y; case y > x : y - x; }",T(
"2.0"),T(
"3.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(
"0.0")),
1723 test_xy<T>(
"0 ? x : y" ,T(
"1.0"),T(
"2.0"),T(
" 2.0")),
1724 test_xy<T>(
"1 ? x : y" ,T(
"1.0"),T(
"2.0"),T(
" 1.0")),
1725 test_xy<T>(
"x ? x : y" ,T(
"1.0"),T(
"2.0"),T(
" 1.0")),
1726 test_xy<T>(
"x ? x : y" ,T(
"0.0"),T(
"2.0"),T(
" 2.0")),
1727 test_xy<T>(
"(x + y < 4) ? 1 : 2" ,T(
"1.0"),T(
"2.0"),T(
" 1.0")),
1728 test_xy<T>(
"(x + y > 4) ? 1 : 2" ,T(
"1.0"),T(
"2.0"),T(
" 2.0")),
1729 test_xy<T>(
"x < y ? x + y : x - y" ,T(
"1.0"),T(
"2.0"),T(
" 3.0")),
1730 test_xy<T>(
"x > y ? x + y : x - y" ,T(
"1.0"),T(
"2.0"),T(
"-1.0")),
1731 test_xy<T>(
"(x + x < y ? 7 : 9) == 7" ,T(
"1.0"),T(
"3.0"),T(
" 1.0")),
1732 test_xy<T>(
"(x + x < y + y ? 7 : 9) == 7" ,T(
"1.0"),T(
"3.0"),T(
" 1.0")),
1733 test_xy<T>(
"(x > y + y ? 7 : 9) == 9" ,T(
"1.0"),T(
"3.0"),T(
" 1.0")),
1734 test_xy<T>(
"(x + x > y ? 7 : 9) == 9" ,T(
"1.0"),T(
"3.0"),T(
" 1.0")),
1735 test_xy<T>(
"(x + x > y + 3 ? 7 : 9) == 9" ,T(
"1.0"),T(
"3.0"),T(
" 1.0")),
1736 test_xy<T>(
"(x < (y + y) ? 7 : 9) == 7" ,T(
"1.0"),T(
"3.0"),T(
" 1.0")),
1737 test_xy<T>(
"((x + x) < y ? 7 : 9) == 7" ,T(
"1.0"),T(
"3.0"),T(
" 1.0")),
1738 test_xy<T>(
"((x + x) < (y + y) ? 7 : 9) == 7",T(
"1.0"),T(
"3.0"),T(
" 1.0")),
1739 test_xy<T>(
"(x += 2 ) == 3 " ,T(
"1"),T(
"3"),T(
"1")),
1740 test_xy<T>(
"(x += 2y) == 7 " ,T(
"1"),T(
"3"),T(
"1")),
1741 test_xy<T>(
"(x -= 2 ) == -1 " ,T(
"1"),T(
"3"),T(
"1")),
1742 test_xy<T>(
"(x -= 2y) == -5 " ,T(
"1"),T(
"3"),T(
"1")),
1743 test_xy<T>(
"(x *= 2 ) == 2 " ,T(
"1"),T(
"3"),T(
"1")),
1744 test_xy<T>(
"(x *= 2y) == 6 " ,T(
"1"),T(
"3"),T(
"1")),
1745 test_xy<T>(
"(x /= 2 ) == (1/2)" ,T(
"1"),T(
"3"),T(
"1")),
1746 test_xy<T>(
"(x /= 2y) == (1/6)" ,T(
"1"),T(
"3"),T(
"1")),
1747 test_xy<T>(
"for(var i := 0; (i < 10);) { i += 1; }; x;" ,T(
"1"),T(
"20"),T(
" 1")),
1748 test_xy<T>(
"for(var i := 0; (i < 10) and (i != y); i+=2) { x += i; }; x;" ,T(
"1"),T(
"20"),T(
"21")),
1749 test_xy<T>(
"for(var i := 0; (i < 10) and (i != y);) { x += i; i+=2; }; x;",T(
"1"),T(
"20"),T(
"21")),
1750 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")),
1751 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")),
1752 test_xy<T>(
"var a := 2; (0 * a) == 0",T(
"0"),T(
"0"),T(
"1")),
1753 test_xy<T>(
"var a := 2; (0 / a) == 0",T(
"0"),T(
"0"),T(
"1")),
1754 test_xy<T>(
"var a := 2; (a * 0) == 0",T(
"0"),T(
"0"),T(
"1")),
1755 test_xy<T>(
"var a := 2; (a / 1) == a",T(
"0"),T(
"0"),T(
"1")),
1756 test_xy<T>(
"var a := 2; (0 + a) == a",T(
"0"),T(
"0"),T(
"1")),
1757 test_xy<T>(
"var a := 2; (a + 0) == a",T(
"0"),T(
"0"),T(
"1")),
1758 test_xy<T>(
"var a := 2; (1 * a) == a",T(
"0"),T(
"0"),T(
"1")),
1759 test_xy<T>(
"var a.b := 3; (2 * a.b ) == 6",T(
"0"),T(
"0"),T(
"1")),
1760 test_xy<T>(
"var aa.bb := 3; (2 * aa.bb ) == 6",T(
"0"),T(
"0"),T(
"1")),
1761 test_xy<T>(
"var aaa.bbb := 3; (2 * aAa.BbB) == 6",T(
"0"),T(
"0"),T(
"1")),
1762 test_xy<T>(
"var a1.b2 := 3; (2 * a1.b2 ) == 6",T(
"0"),T(
"0"),T(
"1"))
1765 static const std::size_t test_list_size =
sizeof(test_list) /
sizeof(
test_xy<T>);
1767 const std::size_t
rounds = 60;
1769 for (std::size_t r = 0; r <
rounds; ++r)
1771 bool loop_result =
true;
1773 for (std::size_t i = 0; i < test_list_size; ++i)
1792 printf(
"run_test01() - Error: %s Expression: %s\n",
1793 parser.
error().c_str(),
1796 loop_result =
false;
1802 const T result = expression.
value();
1806 printf(
"run_test01() - Computation Error: Expression: [%s]\tExpected: %25.20f\tResult: %25.20f\n",
1811 loop_result =
false;
1825 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 ))),
1826 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 ))),
1827 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 ))),
1828 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 ))),
1829 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)))),
1830 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)))),
1831 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)))),
1832 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)))),
1833 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))),
1834 test_xyzw<T>(
"([(min(x,y) + z) + 3] + 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((std::min(5.0,7.0) + 9.0) + 3.0) + 4.0))),
1835 test_xyzw<T>(
"([(min(x,y) + z) + 3] * 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((std::min(5.0,7.0) + 9.0) + 3.0) * 4.0))),
1836 test_xyzw<T>(
"([(min(x,y) + z) + 3] / 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((std::min(5.0,7.0) + 9.0) + 3.0) / 4.0))),
1837 test_xyzw<T>(
"([(min(x,y) + z) - 3] - 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((std::min(5.0,7.0) + 9.0) - 3.0) - 4.0))),
1838 test_xyzw<T>(
"([(min(x,y) + z) - 3] + 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((std::min(5.0,7.0) + 9.0) - 3.0) + 4.0))),
1839 test_xyzw<T>(
"([(min(x,y) + z) - 3] * 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((std::min(5.0,7.0) + 9.0) - 3.0) * 4.0))),
1840 test_xyzw<T>(
"([(min(x,y) + z) - 3] / 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((std::min(5.0,7.0) + 9.0) - 3.0) / 4.0))),
1841 test_xyzw<T>(
"([(min(x,y) + z) * 3] - 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((std::min(5.0,7.0) + 9.0) * 3.0) - 4.0))),
1842 test_xyzw<T>(
"([(min(x,y) + z) * 3] + 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((std::min(5.0,7.0) + 9.0) * 3.0) + 4.0))),
1843 test_xyzw<T>(
"([(min(x,y) + z) * 3] * 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((std::min(5.0,7.0) + 9.0) * 3.0) * 4.0))),
1844 test_xyzw<T>(
"([(min(x,y) + z) * 3] / 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((std::min(5.0,7.0) + 9.0) * 3.0) / 4.0))),
1845 test_xyzw<T>(
"([(min(x,y) + z) / 3] - 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((std::min(5.0,7.0) + 9.0) / 3.0) - 4.0))),
1846 test_xyzw<T>(
"([(min(x,y) + z) / 3] + 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((std::min(5.0,7.0) + 9.0) / 3.0) + 4.0))),
1847 test_xyzw<T>(
"([(min(x,y) + z) / 3] * 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((std::min(5.0,7.0) + 9.0) / 3.0) * 4.0))),
1848 test_xyzw<T>(
"([(min(x,y) + z) / 3] / 4)",T(5.0),T(7.0),T(9.0),T(0.0),T((((std::min(5.0,7.0) + 9.0) / 3.0) / 4.0))),
1849 test_xyzw<T>(
"(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))))),
1850 test_xyzw<T>(
"(4 + [3 + (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 + (3.0 + (std::min(5.0,7.0) + 9.0))))),
1851 test_xyzw<T>(
"(4 * [3 + (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 * (3.0 + (std::min(5.0,7.0) + 9.0))))),
1852 test_xyzw<T>(
"(4 / [3 + (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 / (3.0 + (std::min(5.0,7.0) + 9.0))))),
1853 test_xyzw<T>(
"(4 - [3 - (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 - (3.0 - (std::min(5.0,7.0) + 9.0))))),
1854 test_xyzw<T>(
"(4 + [3 - (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 + (3.0 - (std::min(5.0,7.0) + 9.0))))),
1855 test_xyzw<T>(
"(4 * [3 - (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 * (3.0 - (std::min(5.0,7.0) + 9.0))))),
1856 test_xyzw<T>(
"(4 / [3 - (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 / (3.0 - (std::min(5.0,7.0) + 9.0))))),
1857 test_xyzw<T>(
"(4 - [3 * (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 - (3.0 * (std::min(5.0,7.0) + 9.0))))),
1858 test_xyzw<T>(
"(4 + [3 * (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 + (3.0 * (std::min(5.0,7.0) + 9.0))))),
1859 test_xyzw<T>(
"(4 * [3 * (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 * (3.0 * (std::min(5.0,7.0) + 9.0))))),
1860 test_xyzw<T>(
"(4 / [3 * (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 / (3.0 * (std::min(5.0,7.0) + 9.0))))),
1861 test_xyzw<T>(
"(4 - [3 / (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 - (3.0 / (std::min(5.0,7.0) + 9.0))))),
1862 test_xyzw<T>(
"(4 + [3 / (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 + (3.0 / (std::min(5.0,7.0) + 9.0))))),
1863 test_xyzw<T>(
"(4 * [3 / (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 * (3.0 / (std::min(5.0,7.0) + 9.0))))),
1864 test_xyzw<T>(
"(4 / [3 / (min(x,y) + z)])",T(5.0),T(7.0),T(9.0),T(0.0),T((4.0 / (3.0 / (std::min(5.0,7.0) + 9.0))))),
1865 test_xyzw<T>(
"if (x < y) { z+2; z;} == z" ,T(1.0),T(2.0),T(3.0),T(4.0),T(1.0)),
1866 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)),
1867 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)),
1868 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)),
1869 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)),
1870 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)),
1871 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)),
1872 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)),
1873 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)),
1874 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)),
1875 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)),
1876 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))
1879 static const std::size_t test_list_size =
sizeof(test_list) /
sizeof(
test_xyzw<T>);
1881 const std::size_t
rounds = 60;
1883 for (std::size_t r = 0; r <
rounds; ++r)
1885 bool loop_result =
true;
1886 for (std::size_t i = 0; i < test_list_size; ++i)
1891 symbol_table.add_variable(
"x",test.
x);
1892 symbol_table.add_variable(
"y",test.
y);
1893 symbol_table.add_variable(
"z",test.
z);
1894 symbol_table.add_variable(
"w",test.
w);
1904 printf(
"run_test01() - Error: %s Expression: %s\n",
1905 parser.
error().c_str(),
1908 loop_result =
false;
1914 const T result = expression.
value();
1918 printf(
"run_test01() - Computation Error: Expression: [%s]\tExpected: %19.15f\tResult: %19.15f\n",
1923 loop_result =
false;
1935 const std::string expr_list[] =
1937 "((v[1] + x) == (x + v[1]))",
1938 "((v[0] += x) == x)",
1939 "((v[0] += x + y) == (x + y))",
1940 "((v[0] -= x) == -x)",
1941 "((v[0] -= (x + y)) == -(x + y))",
1942 "((v[1] + v[2]) == (v[3 - 1] + v[2 * 1/2]))",
1943 "(v[v[1]] == v[1])",
1944 "(v[1] += v[1]) == v[1 + 1]",
1945 "((v[i[1]] + x) == (x + v[i[1]]))",
1946 "((v[i[0]] += x) == x)",
1947 "((v[i[0]] += x + y) == (x + y))",
1948 "((v[i[0]] -= x) == -x)",
1949 "((v[i[0]] -= (x + y)) == -(x + y))",
1950 "((v[i[1]] + v[2]) == (v[i[3] - i[1]] + v[i[2] * 1/2]))",
1951 "(v[v[i[1]]] == v[i[1]])",
1952 "(v[i[1]] += v[i[1]]) == v[i[1] + 1]"
1955 const std::size_t expr_list_size =
sizeof(expr_list) /
sizeof(std::string);
1957 const std::size_t
rounds = 60;
1959 for (std::size_t r = 0; r <
rounds; ++r)
1961 bool loop_result =
true;
1963 for (std::size_t i = 0; i < expr_list_size; ++i)
1965 T v[] = { T(0.0), T(1.1), T(2.2), T(3.3), T(4.4), T(5.5) };
1966 T index[] = { T(0) , T(1) , T(2) , T(3) , T(4) , T(5) };
1985 if (!parser.
compile(expr_list[i],expression))
1987 printf(
"run_test01() - Error: %s Expression: %s\n",
1988 parser.
error().c_str(),
1989 expr_list[i].c_str());
1991 loop_result =
false;
1997 const T result = expression.
value();
2001 printf(
"run_test01() - Computation Error: Expression: [%s]\tExpected: %19.15f\tResult: %19.15f\n",
2002 expr_list[i].c_str(),
2003 static_cast<double>(1.0),
2006 loop_result =
false;
2016 for (std::size_t r = 0; r <
rounds; ++r)
2018 bool loop_result =
true;
2020 for (std::size_t i = 0; i < expr_list_size; ++i)
2022 T v_[] = { T(0.0), T(1.1), T(2.2), T(3.3), T(4.4), T(5.5) };
2023 T index_[] = { T(0) , T(1) , T(2) , T(3) , T(4) , T(5) };
2045 if (!parser.
compile(expr_list[i],expression))
2047 printf(
"run_test01() - Error: %s Expression: %s\n",
2048 parser.
error().c_str(),
2049 expr_list[i].c_str());
2051 loop_result =
false;
2057 const T result = expression.
value();
2061 printf(
"run_test01() - Computation Error: Expression: [%s]\tExpected: %19.15f\tResult: %19.15f\n",
2062 expr_list[i].c_str(),
2063 static_cast<double>(1.0),
2065 loop_result =
false;
3890 std::string i_s =
"A String";
3891 std::string j_s =
"Another String";
3892 std::string ii_s =
"A String";
3893 std::string jj_s =
"Another String";
3897 static inline bool variable(
exprtk::symbol_table<T>& symbol_table,
const std::string& variable_name,
const T& value)
3907 static inline bool string(
exprtk::symbol_table<T>& symbol_table,
const std::string& string_name,
const std::string& str)
3912 return (str_node->
ref() == str);
3919 static const std::size_t
rounds = 10;
3923 for (std::size_t r = 0; r <
rounds; ++r)
3932 printf(
"run_test10() - Symbol 'x' does not exist!\n");
3937 printf(
"run_test10() - Symbol 'y' does not exist!\n");
3942 printf(
"run_test10() - Symbol 'xx' does not exist!\n");
3947 printf(
"run_test10() - Symbol 'yy' does not exist!\n");
3950 else if (!test::variable(symbol_table,
"x", x))
3952 printf(
"run_test10() - Symbol 'x' value failure!\n");
3955 else if (!test::variable(symbol_table,
"y", y))
3957 printf(
"run_test10() - Symbol 'y' value failure!\n");
3960 else if (!test::variable(symbol_table,
"xx", xx))
3962 printf(
"run_test10() - Symbol 'xx' value failure!\n");
3965 else if (!test::variable(symbol_table,
"yy", yy))
3967 printf(
"run_test10() - Symbol 'yy' value failure!\n");
3973 printf(
"run_test10() - Failed to remove symbol 'x'!\n");
3978 printf(
"run_test10() - Failed to remove symbol 'y'!\n");
3983 printf(
"run_test10() - Failed to remove symbol 'xx'!\n");
3988 printf(
"run_test10() - Failed to remove symbol 'yy'!\n");
3993 for (std::size_t r = 0; r <
rounds; ++r)
4002 printf(
"run_test10() - function 'f' does not exist!\n");
4007 printf(
"run_test10() - function 'f1' does not exist!\n");
4013 printf(
"run_test10() - Failed to remove function 'f'!\n");
4018 printf(
"run_test10() - Failed to remove function 'f1'!\n");
4023 for (std::size_t r = 0; r <
rounds; ++r)
4033 printf(
"run_test10() - String 'i' does not exist!\n");
4038 printf(
"run_test10() - String 'j' does not exist!\n");
4043 printf(
"run_test10() - String 'ii' does not exist!\n");
4048 printf(
"run_test10() - String 'jj' does not exist!\n");
4051 else if (!test::string(symbol_table,
"i", i_s))
4053 printf(
"run_test10() - String 'i' value failure!\n");
4056 else if (!test::string(symbol_table,
"j", j_s))
4058 printf(
"run_test10() - String 'j' value failure!\n");
4061 else if (!test::string(symbol_table,
"ii", ii_s))
4063 printf(
"run_test10() - String 'ii' value failure!\n");
4066 else if (!test::string(symbol_table,
"jj", jj_s))
4068 printf(
"run_test10() - String 'jj' value failure!\n");
4073 printf(
"run_test10() - Failed to remove String 'i'!\n");
4078 printf(
"run_test10() - Failed to remove String 'j'!\n");
4083 printf(
"run_test10() - Failed to remove String 'ii'!\n");
4088 printf(
"run_test10() - Failed to remove String 'jj'!\n");
4093 for (std::size_t r = 0; r <
rounds; ++r)
4100 std::vector<std::string> expected_var_list;
4102 expected_var_list.push_back(
"x" );
4103 expected_var_list.push_back(
"y" );
4104 expected_var_list.push_back(
"xx");
4105 expected_var_list.push_back(
"yy");
4107 std::deque<std::pair<std::string, T> > variable_list;
4111 if (variable_list.size() != expected_var_list.size())
4113 printf(
"run_test10() - Failed to get variable list (1)\n");
4117 std::size_t found_count = 0;
4119 for (std::size_t i = 0; i < variable_list.size(); ++i)
4121 for (std::size_t j = 0; j < expected_var_list.size(); ++j)
4123 if (variable_list[i].first == expected_var_list[j])
4131 if (found_count != expected_var_list.size())
4133 printf(
"run_test10() - Failed to get variable list (2)\n");
4138 for (std::size_t r = 0; r <
rounds; ++r)
4145 std::vector<std::string> expected_var_list;
4147 expected_var_list.push_back(
"x" );
4148 expected_var_list.push_back(
"y" );
4149 expected_var_list.push_back(
"xx");
4150 expected_var_list.push_back(
"yy");
4152 std::deque<std::string> variable_list;
4156 if (variable_list.size() != expected_var_list.size())
4158 printf(
"run_test10() - Failed to get variable list (3)\n");
4162 std::size_t found_count = 0;
4164 for (std::size_t i = 0; i < variable_list.size(); ++i)
4166 for (std::size_t j = 0; j < expected_var_list.size(); ++j)
4168 if (variable_list[i] == expected_var_list[j])
4176 if (found_count != expected_var_list.size())
4178 printf(
"run_test10() - Failed to get variable list (4)\n");
4183 for (std::size_t r = 0; r <
rounds; ++r)
4190 std::vector<std::string> expected_var_list;
4192 expected_var_list.push_back(
"i" );
4193 expected_var_list.push_back(
"j" );
4194 expected_var_list.push_back(
"ii");
4195 expected_var_list.push_back(
"jj");
4197 std::deque<std::pair<std::string, std::string> > stringvar_list;
4201 if (stringvar_list.size() != expected_var_list.size())
4203 printf(
"run_test10() - Failed to get stringvar list (1)\n");
4207 std::size_t found_count = 0;
4209 for (std::size_t i = 0; i < stringvar_list.size(); ++i)
4211 for (std::size_t j = 0; j < expected_var_list.size(); ++j)
4213 if (stringvar_list[i].first == expected_var_list[j])
4221 if (found_count != expected_var_list.size())
4223 printf(
"run_test10() - Failed to get stringvar list (2)\n");
4228 for (std::size_t r = 0; r <
rounds; ++r)
4235 std::vector<std::string> expected_var_list;
4237 expected_var_list.push_back(
"i" );
4238 expected_var_list.push_back(
"j" );
4239 expected_var_list.push_back(
"ii");
4240 expected_var_list.push_back(
"jj");
4242 std::deque<std::string> stringvar_list;
4246 if (stringvar_list.size() != expected_var_list.size())
4248 printf(
"run_test10() - Failed to get stringvar list (3.0)\n");
4254 printf(
"run_test10() - Failed to get stringvar list (3.1)\n");
4258 std::size_t found_count = 0;
4260 for (std::size_t i = 0; i < stringvar_list.size(); ++i)
4262 for (std::size_t j = 0; j < expected_var_list.size(); ++j)
4264 if (stringvar_list[i] == expected_var_list[j])
4272 if (found_count != expected_var_list.size())
4274 printf(
"run_test10() - Failed to get stringvar list (4)\n");
4285 std::string expression_string =
"(x0 + y0) / z0";
4287 static const std::size_t
rounds = 100;
4289 for (std::size_t i = 0; i <
rounds; ++i)
4291 expression_t expression0;
4303 expression0.register_symbol_table(st0);
4308 if (!parser.
compile(expression_string,expression0))
4310 printf(
"run_test10() - Error: %s Expression: %s\n",
4311 parser.
error().c_str(),
4312 expression_string.c_str());
4319 expression_t expression1;
4321 expression1.register_symbol_table(st1);
4326 if (!parser.
compile(expression_string,expression1))
4328 printf(
"run_test10() - Error: %s Expression: %s\n",
4329 parser.
error().c_str(),
4330 expression_string.c_str());
4349 std::string e =
"string";
4359 expression_t expression;
4360 expression.register_symbol_table(symbol_table);
4362 std::string expression_string =
"(E == '1234') and (sin(a) + C) / b";
4365 typedef typename parser_t::dependent_entity_collector::symbol_t symbol_t;
4367 std::deque<symbol_t> symbol_list;
4373 parser.dec().collect_functions() =
true;
4375 if (!parser.compile(expression_string,expression))
4377 printf(
"run_test10() - Error: %s Expression: %s\n",
4378 parser.error().c_str(),
4379 expression_string.c_str());
4384 parser.dec().symbols(symbol_list);
4387 std::deque<symbol_t> expected_symbol_list;
4389 expected_symbol_list.push_back(symbol_t(
"a" ,parser_t::e_st_variable));
4390 expected_symbol_list.push_back(symbol_t(
"b" ,parser_t::e_st_variable));
4391 expected_symbol_list.push_back(symbol_t(
"c" ,parser_t::e_st_variable));
4392 expected_symbol_list.push_back(symbol_t(
"e" ,parser_t::e_st_string ));
4393 expected_symbol_list.push_back(symbol_t(
"sin",parser_t::e_st_function));
4395 bool result = (symbol_list.size() == expected_symbol_list.size()) &&
4396 std::equal(symbol_list.begin(),
4398 expected_symbol_list.begin());
4401 printf(
"run_test10() - Failed variable list comparison.(5)\n");
4412 std::string e =
"string";
4422 expression_t expression;
4423 expression.register_symbol_table(symbol_table);
4425 const std::string expression_string =
4432 typedef typename parser_t::dependent_entity_collector::symbol_t symbol_t;
4434 std::deque<symbol_t> variable_list;
4441 if (!parser.compile(expression_string,expression))
4443 printf(
"run_test10() - Error: %s Expression: %s\n",
4444 parser.error().c_str(),
4445 expression_string.c_str());
4450 parser.dec().assignment_symbols(variable_list);
4453 std::deque<symbol_t> expected_assignment_list;
4455 expected_assignment_list.push_back(symbol_t(
"a",parser_t::e_st_variable));
4456 expected_assignment_list.push_back(symbol_t(
"b",parser_t::e_st_variable));
4457 expected_assignment_list.push_back(symbol_t(
"c",parser_t::e_st_variable));
4458 expected_assignment_list.push_back(symbol_t(
"e",parser_t::e_st_string ));
4460 bool result = (variable_list.size() == expected_assignment_list.size()) &&
4461 std::equal(variable_list.begin(),
4462 variable_list.end(),
4463 expected_assignment_list.begin());
4466 printf(
"run_test10() - Failed variable list comparison.(6)\n");
4475 if (symbol_table0 == symbol_table1)
4477 printf(
"run_test10() - Error symbol_table0 and symbol_table1 are equal\n");
4481 symbol_table0 = symbol_table1;
4482 symbol_table1 = symbol_table0;
4484 if (!(symbol_table0 == symbol_table1))
4486 printf(
"run_test10() - Error symbol_table0 and symbol_table1 are not equal\n");
4497 std::string e =
"a string";
4501 expression_t expression;
4503 for (std::size_t i = 0; i < 10000; ++i)
4505 symbol_table0.
clear();
4506 symbol_table1.
clear();
4522 expression.register_symbol_table(symbol_table0);
4523 expression.register_symbol_table(symbol_table1);
4528 const std::string expression =
4529 "for (var i := 0; i < min(x[],y[],z[]); i += 1)"
4530 "{ z[i] := 3sin(x[i]) + 2log(y[i]); }";
4532 std::vector<std::string> var_symbol_list;
4533 std::vector<std::string> func_symbol_list;
4537 printf(
"run_test10() - Failed to collect variables.\n");
4543 printf(
"run_test10() - Failed to collect functions.\n");
4547 std::sort(var_symbol_list .begin(), var_symbol_list .end());
4548 std::sort(func_symbol_list.begin(), func_symbol_list.end());
4550 std::vector<std::string> expected_var_symbol_list;
4551 std::vector<std::string> expected_func_symbol_list;
4553 expected_var_symbol_list.push_back(
"i");
4554 expected_var_symbol_list.push_back(
"x");
4555 expected_var_symbol_list.push_back(
"y");
4556 expected_var_symbol_list.push_back(
"z");
4558 expected_func_symbol_list.push_back(
"log");
4559 expected_func_symbol_list.push_back(
"min");
4560 expected_func_symbol_list.push_back(
"sin");
4562 const bool var_result = (var_symbol_list.size() == expected_var_symbol_list.size()) &&
4563 std::equal(var_symbol_list.begin(),
4564 var_symbol_list.end(),
4565 expected_var_symbol_list.begin());
4568 printf(
"run_test10() - Failed collected variable comparison between received and expected variables\n");
4572 const bool func_result = (func_symbol_list.size() == expected_func_symbol_list.size()) &&
4573 std::equal(func_symbol_list.begin(),
4574 func_symbol_list.end(),
4575 expected_func_symbol_list.begin());
4578 printf(
"run_test10() - Failed collected functions comparison between received and expected functions\n");
4588 "var x:= 1; x - -1 == 2",
4589 "var x:= 1; x --1 == 2",
4590 "var x:= 1; x-- 1 == 2",
4591 "var x:= 1; x--1 == 2",
4592 "var x:= 1; x -- -1== 0",
4593 "var x:= 1; x + -1 == 0",
4594 "var x:= 1; x +-1 == 0",
4595 "var x:= 1; x+- 1 == 0",
4596 "var x:= 1; x+-1 == 0",
4597 "var x:= 1; x +- -1== 2",
4598 "var x:= 1; x + +1 == 2",
4599 "var x:= 1; x ++1 == 2",
4600 "var x:= 1; 1 - -x == 2",
4601 "var x:= 1; 1 --x == 2",
4602 "var x:= 1; 1-- x == 2",
4603 "var x:= 1; 1--x == 2",
4604 "var x:= 1; 1 -- -x== 0",
4605 "var x:= 1; 1 + -x == 0",
4606 "var x:= 1; 1 +-x == 0",
4607 "var x:= 1; 1+- x == 0",
4608 "var x:= 1; 1+-x == 0",
4609 "var x:= 1; 1 +- -x== 2",
4610 "var x:= 1; 1 + +x == 2",
4611 "var x:= 1; 1 ++x == 2",
4612 "var x:= 1; (x - -1 + 1) == 3",
4613 "var x:= 1; (x --1 + 1) == 3",
4614 "var x:= 1; (x-- 1 + 1) == 3",
4615 "var x:= 1; (x--1 + 1) == 3",
4616 "var x:= 1; (x -- -1 + 1) == 1",
4617 "var x:= 1; (x + -1 + 1) == 1",
4618 "var x:= 1; (x +-1 + 1) == 1",
4619 "var x:= 1; (x+- 1 + 1) == 1",
4620 "var x:= 1; (x+-1 + 1) == 1",
4621 "var x:= 1; (x +- -1 + 1) == 3",
4622 "var x:= 1; (x + +1 + 1) == 3",
4623 "var x:= 1; (x ++1 + 1) == 3",
4624 "var x:= 1; (1 - -x + 1) == 3",
4625 "var x:= 1; (1 --x + 1) == 3",
4626 "var x:= 1; (1-- x + 1) == 3",
4627 "var x:= 1; (1--x + 1) == 3",
4628 "var x:= 1; (1 -- -x + 1) == 1",
4629 "var x:= 1; (1 + -x + 1) == 1",
4630 "var x:= 1; (1 +-x + 1) == 1",
4631 "var x:= 1; (1+- x + 1) == 1",
4632 "var x:= 1; (1+-x + 1) == 1",
4633 "var x:= 1; (1 +- -x + 1) == 3",
4634 "var x:= 1; (1 + +x + 1) == 3",
4635 "var x:= 1; (1 ++x + 1) == 3",
4636 "var x:= 1; (x - -1 - 1) == 1",
4637 "var x:= 1; (x --1 - 1) == 1",
4638 "var x:= 1; (x-- 1 - 1) == 1",
4639 "var x:= 1; (x--1 - 1) == 1",
4640 "var x:= 1; (x -- -1 - 1) == -1",
4641 "var x:= 1; (x + -1 - 1) == -1",
4642 "var x:= 1; (x +-1 - 1) == -1",
4643 "var x:= 1; (x+- 1 - 1) == -1",
4644 "var x:= 1; (x+-1 - 1) == -1",
4645 "var x:= 1; (x +- -1 - 1) == 1",
4646 "var x:= 1; (x + +1 - 1) == 1",
4647 "var x:= 1; (x ++1 - 1) == 1",
4648 "var x:= 1; (1 - -x - 1) == 1",
4649 "var x:= 1; (1 --x - 1) == 1",
4650 "var x:= 1; (1-- x - 1) == 1",
4651 "var x:= 1; (1--x - 1) == 1",
4652 "var x:= 1; (1 -- -x - 1) == -1",
4653 "var x:= 1; (1 + -x - 1) == -1",
4654 "var x:= 1; (1 +-x - 1) == -1",
4655 "var x:= 1; (1+- x - 1) == -1",
4656 "var x:= 1; (1+-x - 1) == -1",
4657 "var x:= 1; (1 +- -x - 1) == 1",
4658 "var x:= 1; (1 + +x - 1) == 1",
4659 "var x:= 1; (1 ++x - 1) == 1",
4660 "var x := 1; var y := 2; 1",
4661 "var x := 1; var y := 2; x",
4662 "var x:=6; var y:=4; x + -3 == 3",
4663 "var x:=6; var y:=4; x - -3 == 9",
4664 "var x:=6; var y:=4; x * -3 == -18",
4665 "var x:=6; var y:=4; x / -3 == -2",
4666 "var x:=6; var y:=4; -x + -3 == -9",
4667 "var x:=6; var y:=4; -x - -3 == -3",
4668 "var x:=6; var y:=4; -x * -3 == 18",
4669 "var x:=6; var y:=4; -x / -3 == 2",
4670 "var x:=6; var y:=4; -3 + -x == -9",
4671 "var x:=6; var y:=4; -3 - -x == 3",
4672 "var x:=6; var y:=4; -3 * -x == 18",
4673 "var x:=6; var y:=4; -3 / -x == 0.5",
4674 "var x:=6; var y:=4; 3 + -x == -3",
4675 "var x:=6; var y:=4; 3 - -x == 9",
4676 "var x:=6; var y:=4; 3 * -x == -18",
4677 "var x:=6; var y:=4; 3 / -x == -0.5",
4678 "var x := 3; var y := 6; x + -y == -3",
4679 "var x := 3; var y := 6; x - -y == 9",
4680 "var x := 3; var y := 6; -x + -y == -9",
4681 "var x := 3; var y := 6; -x - -y == 3",
4682 "var x := 3; var y := 6; -x * -y == 18",
4683 "var x := 6; var y := 3; -x / -y == 2",
4684 "var x := 3; var y := 6; -(-x * -y) == -18",
4685 "var x := 6; var y := 3; -(-x / -y) == -2",
4686 "var x:=1; 2+(3+abs(x)) == 6 ",
4687 "var x:=1; (3+abs(x))+2 == 6 ",
4688 "var x:=1; 2+(abs(x)+3) == 6 ",
4689 "var x:=1; (abs(x)+3)+2 == 6 ",
4690 "var x:=1; 2+(3-abs(x)) == 4 ",
4691 "var x:=1; (3-abs(x))+2 == 4 ",
4692 "var x:=1; 2+(abs(x)-3) == 0 ",
4693 "var x:=1; (abs(x)-3)+2 == 0 ",
4694 "var x:=1; 2-(3+abs(x)) == -2 ",
4695 "var x:=1; (3+abs(x))-2 == 2 ",
4696 "var x:=1; 2-(abs(x)+3) == -2 ",
4697 "var x:=1; (abs(x)+3)-2 == 2 ",
4698 "var x:=1; 2*(3*abs(x)) == 6 ",
4699 "var x:=1; (3*abs(x))*2 == 6 ",
4700 "var x:=1; 2*(abs(x)*3) == 6 ",
4701 "var x:=1; (abs(x)*3)*2 == 6 ",
4702 "var x:=1; 2*(3/abs(x)) == 6 ",
4703 "var x:=1; (3/abs(x))*2 == 6 ",
4704 "var x:=1; 2*(abs(x)/3) == (2/3)",
4705 "var x:=1; (abs(x)/3)*2 == (2/3)",
4706 "var x:=1; 2/(3*abs(x)) == (2/3)",
4707 "var x:=1; (3*abs(x))/2 == (3/2)",
4708 "var x:=1; 2/(abs(x)*3) == (2/3)",
4709 "var x:=1; (abs(x)*3)/2 == (3/2)",
4710 "var x:=1; 2/(3/abs(x)) == (2/3)",
4711 "var x:=1; (3/abs(x))/2 == (3/2)",
4712 "var x:=1; 2/(abs(x)/3) == 6 ",
4713 "var x:=1; (abs(x)/3)/2 == (1/6)",
4714 "var x:=3; var y:=6; -(-x)*-(-y) == 18",
4715 "var x:=3; var y:=6; -(-x)*-(-(-y)) == -18",
4716 "var x:=3; var y:=6; -(-(-x))*-(-y) == -18",
4717 "var x:=3; var y:=6; -(-(-x))*-(-(-y)) == 18",
4718 "var x:=3; var y:=6; -(-(x+y))*-(-(y+x)) == 81",
4719 "var x:=3; var y:=6; -(-(-(x+y)))*-(-(y+x)) == -81",
4720 "var x:=3; var y:=6; -(-(x+y))*-(-(-(y+x))) == -81",
4721 "var x:=3; var y:=6; -(-(-(x+y)))*-(-(-(y+x))) == 81",
4722 "var x:= 2; var y := 3; (-abs(x)+-abs(y)) == -5 ",
4723 "var x:= 2; var y := 3; (-abs(x)--abs(y)) == 1 ",
4724 "var x:= 2; var y := 3; (-abs(x)*-abs(y)) == 6 ",
4725 "var x:= 2; var y := 3; (-abs(x)/-abs(y)) == (2/3) ",
4726 "var x:= 2; var y := 3; (-abs(x)+abs(y)) == 1 ",
4727 "var x:= 2; var y := 3; (-abs(x)-abs(y)) == -5 ",
4728 "var x:= 2; var y := 3; (-abs(x)*abs(y)) == -6 ",
4729 "var x:= 2; var y := 3; (-abs(x)/abs(y)) == -(2/3) ",
4730 "var x:= 2; var y := 3; (abs(x)+-abs(y)) == -1 ",
4731 "var x:= 2; var y := 3; (abs(x)--abs(y)) == 5 ",
4732 "var x:= 2; var y := 3; (abs(x)*-abs(y)) == -6 ",
4733 "var x:= 2; var y := 3; (abs(x)/-abs(y)) == -(2/3) ",
4734 "var x:= 2; var y := 3; (-abs(x + 0)+-abs(y - 0)) == -5 ",
4735 "var x:= 2; var y := 3; (-abs(x + 0)--abs(y - 0)) == 1 ",
4736 "var x:= 2; var y := 3; (-abs(x + 0)*-abs(y - 0)) == 6 ",
4737 "var x:= 2; var y := 3; (-abs(x + 0)/-abs(y - 0)) == (2/3) ",
4738 "var x:= 2; var y := 3; (-abs(x + 0)+abs(y - 0)) == 1 ",
4739 "var x:= 2; var y := 3; (-abs(x + 0)-abs(y - 0)) == -5 ",
4740 "var x:= 2; var y := 3; (-abs(x + 0)*abs(y - 0)) == -6 ",
4741 "var x:= 2; var y := 3; (-abs(x + 0)/abs(y - 0)) == -(2/3) ",
4742 "var x:= 2; var y := 3; (abs(x + 0)+-abs(y - 0)) == -1 ",
4743 "var x:= 2; var y := 3; (abs(x + 0)--abs(y - 0)) == 5 ",
4744 "var x:= 2; var y := 3; (abs(x + 0)*-abs(y - 0)) == -6 ",
4745 "var x:= 2; var y := 3; (abs(x + 0)/-abs(y - 0)) == -(2/3) ",
4746 "var x := 1; var y := 2; swap(x,y); (x == 2) and (y == 1)",
4747 "var x := 1; var y := 2; x <=> y ; (x == 2) and (y == 1)",
4748 "var x := 'abc'; x == 'abc' ",
4749 "var x := 'abc'; var y := '123'; x != y ",
4750 "var x := 'abc'; var y := x + '123'; y == 'abc123' ",
4751 "var x := 'abc'; var y := '123' + x; y == '123abc' ",
4752 "~{var x := '123'; x[]} + ~{var x := '1234'; x[]} == 7",
4753 "~{var x := '123'; x[]} + ~{~{var x := '1234'; x[]}} == 7",
4754 "~{~{var x := '123'; x[]}} + ~{var x := '1234'; x[]} == 7",
4755 "~{var x := '123'; x[]} + ~{var x := 4} == 7",
4756 "~{var x := 3} + ~{var x := '1234'; x[]} == 7",
4757 "~{var x := '123'; x[]} + ~{~{var x := 4}} == 7",
4758 "~{~{var x := 3}} + ~{var x := '1234'; x[]} == 7",
4759 "var v[2] := {1,2}; swap(v[0],v[1]); (v[0] == 2) and (v[1] == 1)",
4760 "var v[2] := {1,2}; v[0] <=> v[1] ; (v[0] == 2) and (v[1] == 1)",
4761 "var x := 1; var y := 2; ~(swap(x,y),(x == 2) and (y == 1))",
4762 "var x := 1; var y := 2; ~(x <=> y , (x == 2) and (y == 1))",
4763 "var v[2] := {1,2}; ~(swap(v[0],v[1]), (v[0] == 2) and (v[1] == 1))",
4764 "var v[2] := {1,2}; ~(v[0] <=> v[1] , (v[0] == 2) and (v[1] == 1))",
4765 "var v[2] := {1,2}; swap(v[zero],v[one]); (v[zero] == 2) and (v[one] == 1)",
4766 "var v[2] := {1,2}; v[zero] <=> v[one] ; (v[zero] == 2) and (v[one] == 1)",
4767 "var v[2] := {1,2}; ~(swap(v[zero],v[one]), (v[zero] == 2) and (v[one] == 1))",
4768 "var v[2] := {1,2}; ~(v[zero] <=> v[one] , (v[zero] == 2) and (v[one] == 1))",
4769 "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)",
4770 "var v[2] := {1,2}; v[2 * zero] <=> v[(2*one)/(1+1)] ; (v[2 * zero] == 2) and (v[(2 * one) / (1 + 1)] == 1)",
4771 "var v[2] := {1,2}; ~(swap(v[2 * zero],v[(2 * one) / (1 + 1)]), (v[2 * zero] == 2) and (v[(2 * one) / (1 + 1)] == 1))",
4772 "var v[2] := {1,2}; ~(v[2 * zero] <=> v[(2 * one) / (1 + 1)] , (v[2 * zero] == 2) and (v[(2 * one) / (1 + 1)] == 1))",
4773 "var x := 1; var y := 2; var v[2] := {3,4}; swap(x,v[0]); swap(v[1],y); (x == 3) and (y == 4)",
4774 "var x := 1; var y := 2; var v[2] := {3,4}; x <=> v[0]; v[1] <=> y; (x == 3) and (y == 4)",
4775 "var x := 1; var y := 2; var v[2] := {3,4}; swap(x,v[zero]); swap(v[one],y); (x == 3) and (y == 4)",
4776 "var x := 1; var y := 2; var v[2] := {3,4}; x <=> v[zero]; v[one] <=> y; (x == 3) and (y == 4)",
4777 "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)",
4778 "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)",
4779 "~{ var x := 1 } + ~{ var x := 2 } == 3",
4780 "(~{ var x := 1 } + ~{ var x := 2 }) == (~{ var x := 2 } + ~{ var x := 1 })",
4781 "(~{ var x := 1 } + ~{ var x := 2 } + ~{~{ var x := 1 } + ~{ var x := 2 }}) == 6",
4782 "(~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{~{ var x[1] := [1] } + ~{ var x[1] := [2] }}) == 6",
4783 "(~{ var x := [1] } + ~{ var x[1] := [2] } + ~{~{ var x[1] := [1] } + ~{ var x[1] := [2] }}) == 6",
4784 "(~{ var x[1] := [1] } + ~{ var x := [2] } + ~{~{ var x[1] := [1] } + ~{ var x[1] := [2] }}) == 6",
4785 "(~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{~{ var x := [1] } + ~{ var x[1] := [2] }}) == 6",
4786 "(~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{~{ var x[1] := [1] } + ~{ var x := [2] }}) == 6",
4787 "(~{~{ var x[1] := [1] } + ~{ var x[1] := [2] }} + ~{ var x[1] := [1] } + ~{ var x[1] := [2] }) == 6",
4788 "(~{~{ var x := [1] } + ~{ var x[1] := [2] }} + ~{ var x[1] := [1] } + ~{ var x[1] := [2] }) == 6",
4789 "(~{~{ var x[1] := [1] } + ~{ var x := [2] }} + ~{ var x[1] := [1] } + ~{ var x[1] := [2] }) == 6",
4790 "(~{~{ var x[1] := [1] } + ~{ var x[1] := [2] }} + ~{ var x := [1] } + ~{ var x[1] := [2] }) == 6",
4791 "(~{~{ var x[1] := [1] } + ~{ var x[1] := [2] }} + ~{ var x[1] := [1] } + ~{ var x := [2] }) == 6",
4792 "(~{~{ var x[1] := [1] }} + ~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{{ var x[1] := [2] }}) == 6",
4793 "(~{~{ var x := [1] }} + ~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{{ var x[1] := [2] }}) == 6",
4794 "(~{~{ var x[1] := [1] }} + ~{ var x := [1] } + ~{ var x[1] := [2] } + ~{{ var x[1] := [2] }}) == 6",
4795 "(~{~{ var x[1] := [1] }} + ~{ var x[1] := [1] } + ~{ var x := [2] } + ~{{ var x[1] := [2] }}) == 6",
4796 "(~{~{ var x[1] := [1] }} + ~{ var x[1] := [1] } + ~{ var x[1] := [2] } + ~{{ var x := [2] }}) == 6",
4797 "(~{~{~{var x[1] := [1]}}} + ~{~{var x[1] := [2]}} + ~{var x[1] := [3]}) == 6",
4798 "(~{var x[1] := [1]} + ~{~{var x[1] := [2]}} + ~{~{~{var x[1] := [3]}}}) == 6",
4799 "(~{ var x[3] := [1] } + ~{ var x[6] := {6,5,4,3,2,1}}) == 7",
4800 "(~{ var x[6] := {6,5,4,3,2,1} } + ~{ var x := 1 }) == 7",
4801 "(~{ var x := 1 } + ~{ var x[6] := {6,5,4,3,2,1} }) == 7",
4802 "var x[3] := {}; (x[0] == 0) and (x[1] == 0) and (x[2] == 0)",
4803 "var x[3] := {1,2}; (x[0] == 1) and (x[1] == 2) and (x[2] == 0)",
4804 "var x[3] := {1,2,3}; (x[0] == 1) and (x[1] == 2) and (x[2] == 3)",
4805 "var x[3] := [1]; (x[0] == 1) and (x[1] == 1) and (x[2] == 1)",
4806 "var v[3] := [1]; v += 1; (v[0] == v[1]) and (v[0] == v[2]) and (v[0] == 2)",
4807 "var v[3] := [1]; v -= 1; (v[0] == v[1]) and (v[0] == v[2]) and (v[0] == 0)",
4808 "var v[3] := [1]; v *= 2; (v[0] == v[1]) and (v[0] == v[2]) and (v[0] == 2)",
4809 "var v[3] := [3]; v /= 3; (v[0] == v[1]) and (v[0] == v[2]) and (v[0] == 1)",
4810 "var v[3] := {1,2, 3}; v += 1; (v[0] == 2) and (v[1] == 3) and (v[2] == 4)",
4811 "var v[3] := {1,2, 3}; v -= 1; (v[0] == 0) and (v[1] == 1) and (v[2] == 2)",
4812 "var v[3] := {1,2, 3}; v *= 2; (v[0] == 2) and (v[1] == 4) and (v[2] == 6)",
4813 "var v[3] := {3,9,15}; v /= 3; (v[0] == 1) and (v[1] == 3) and (v[2] == 5)",
4814 "var v0[3] := [1]; var v1[3] := [1]; v0 += v1; (v0[0] == v0[1]) and (v0[0] == v0[2]) and (v0[0] == 2)",
4815 "var v0[3] := [1]; var v1[3] := [1]; v0 -= v1; (v0[0] == v0[1]) and (v0[0] == v0[2]) and (v0[0] == 0)",
4816 "var v0[3] := [1]; var v1[3] := [2]; v0 *= v1; (v0[0] == v0[1]) and (v0[0] == v0[2]) and (v0[0] == 2)",
4817 "var v0[3] := [3]; var v1[3] := [3]; v0 /= v1; (v0[0] == v0[1]) and (v0[0] == v0[2]) and (v0[0] == 1)",
4818 "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)",
4819 "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)",
4820 "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)",
4821 "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)",
4822 "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])",
4823 "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])",
4824 "var x[3] := {}; var y[2] := {1,2}; x := y; (x[0] == y[0]) and (x[1] == y[1]) and (x[2] == 0)",
4825 "var x[3] := {}; var y[1] := {1}; x := y; (x[0] == y[0]) and (x[1] == 0) and (x[2] == 0)",
4826 "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])",
4827 "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])",
4828 "var x[3] := {}; var y[2] := {1,2}; x := (y+=1); (x[0] == y[0]) and (x[1] == y[1]) and (x[2] == 0)",
4829 "var x[3] := {}; var y[1] := {1}; x := (y+=1); (x[0] == y[0]) and (x[1] == 0) and (x[2] == 0)",
4830 "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])",
4831 "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])",
4832 "var x[3] := {}; var y[2] := {1,2}; x += (y+=1); (x[0] == y[0]) ",
4833 "var x[3] := {}; var y[2] := {1,2}; x += (y+=1); (x[0] == y[0]) and (x[1] == y[1]) ",
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]) ",
4836 "var x[3] := {}; var y[1] := {1}; x += (y+=1); (x[0] == y[0]) and (x[1] == 0) ",
4837 "var x[3] := {}; var y[1] := {1}; x += (y+=1); (x[0] == y[0]) and (x[1] == 0) and (x[2] == 0)",
4838 "var x[3] := [9]; var y[4] := {1,2,3,4}; x <=> y; (x[0] == 1) and (x[1] == 2) and (x[2] == 3)",
4839 "var x[3] := [9]; var y[3] := {1,2,3}; x <=> y; (x[0] == 1) and (x[1] == 2) and (x[2] == 3)",
4840 "var x[3] := [9]; var y[2] := {1,2}; x <=> y; (x[0] == 1) and (x[1] == 2) and (x[2] == 9)",
4841 "var x[3] := [9]; var y[1] := {1}; x <=> y; (x[0] == 1) and (x[1] == 9) and (x[2] == 9)",
4842 "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)",
4843 "var x[3] := [9]; var y[3] := {1,2,3}; x <=> (y += 1); (x[0] == 2) and (x[1] == 3) and (x[2] == 4)",
4844 "var x[3] := [9]; var y[2] := {1,2}; x <=> (y += 1); (x[0] == 2) and (x[1] == 3) and (x[2] == 9)",
4845 "var x[3] := [9]; var y[1] := {1}; x <=> (y += 1); (x[0] == 2) and (x[1] == 9) and (x[2] == 9)",
4846 "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)",
4847 "var x[3] := [8]; var y[3] := {1,2,3}; (x += 1) <=> y; (x[0] == 1) and (x[1] == 2) and (x[2] == 3)",
4848 "var x[3] := [8]; var y[2] := {1,2}; (x += 1) <=> y; (x[0] == 1) and (x[1] == 2) and (x[2] == 9)",
4849 "var x[3] := [8]; var y[1] := {1}; (x += 1) <=> y; (x[0] == 1) and (x[1] == 9) and (x[2] == 9)",
4850 "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)",
4851 "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)",
4852 "var x[3] := [8]; var y[2] := {1,2}; (x += 1) <=> (y += 1); (x[0] == 2) and (x[1] == 3) and (x[2] == 9)",
4853 "var x[3] := [8]; var y[1] := {1}; (x += 1) <=> (y += 1); (x[0] == 2) and (x[1] == 9) and (x[2] == 9)",
4854 "var x[3] := [0]; var y[4] := {1,2,3,4}; X < y",
4855 "var x[3] := [0]; var y[3] := {1,2,3}; x < Y",
4856 "var x[3] := [0]; var y[2] := {1,2}; X < y",
4857 "var x[3] := [0]; var y[1] := {1}; x < Y",
4858 "var x[3] := [0]; var y[4] := {1,2,3,4}; x <= y",
4859 "var x[3] := [0]; var y[3] := {1,2,3}; x <= y",
4860 "var x[3] := [0]; var y[2] := {1,2}; x <= y",
4861 "var x[3] := [0]; var y[1] := {1}; x <= y",
4862 "var x[3] := [5]; var y[4] := {1,2,3,4}; x > y",
4863 "var x[3] := [5]; var y[3] := {1,2,3}; x > y",
4864 "var x[3] := [5]; var y[2] := {1,2}; x > y",
4865 "var x[3] := [5]; var y[1] := {1}; x > y",
4866 "var x[3] := [5]; var y[4] := {1,2,3,4}; x >= y",
4867 "var x[3] := [5]; var y[3] := {1,2,3}; x >= y",
4868 "var x[3] := [5]; var y[2] := {1,2}; x >= y",
4869 "var x[3] := [5]; var y[1] := {1}; x >= y",
4870 "var x[3] := [1]; var y[4] := [1]; x == y",
4871 "var x[3] := [1]; var y[3] := [1]; x == y",
4872 "var x[3] := [1]; var y[2] := [1]; x == y",
4873 "var x[3] := [1]; var y[1] := [1]; x == y",
4874 "var x[3] := [1]; var y[4] := [2]; x != y",
4875 "var x[3] := [1]; var y[3] := [2]; x != y",
4876 "var x[3] := [1]; var y[2] := [2]; x != y",
4877 "var x[3] := [1]; var y[1] := [2]; x != y",
4878 "var x[3] := [0]; var y[4] := {5,6,7,8}; (x += 1) < y",
4879 "var x[3] := [0]; var y[3] := {5,6,7}; (x += 1) < y",
4880 "var x[3] := [0]; var y[2] := {5,6}; (x += 1) < y",
4881 "var x[3] := [0]; var y[1] := {5}; (x += 1) < y",
4882 "var x[3] := [0]; var y[4] := {1,2,3,4}; x < (y += 1)",
4883 "var x[3] := [0]; var y[3] := {1,2,3}; x < (y += 1)",
4884 "var x[3] := [0]; var y[2] := {1,2}; x < (y += 1)",
4885 "var x[3] := [0]; var y[1] := {1}; x < (y += 1)",
4886 "var x[3] := [0]; var y[4] := {5,6,7,8}; (x += 1) < (y += 1)",
4887 "var x[3] := [0]; var y[3] := {5,6,7}; (x += 1) < (y += 1)",
4888 "var x[3] := [0]; var y[2] := {5,6}; (x += 1) < (y += 1)",
4889 "var x[3] := [0]; var y[1] := {5}; (x += 1) < (y += 1)",
4890 "var x[3] := {1,2,3}; var y := 5; x < y ",
4891 "var x[3] := {1,2,3}; var y := 3; x < y + 1 ",
4892 "var x[3] := {1,2,3}; var y := 5; x <= y ",
4893 "var x[3] := {1,2,3}; var y := 3; x <= y + 1",
4894 "var x[3] := {1,1,1}; var y := 1; x == y ",
4895 "var x[3] := {1,1,1}; var y := 2; x == y - 1",
4896 "var x[3] := {1,2,3}; var y := 5; y > x ",
4897 "var x[3] := {1,2,3}; var y := 3; y >= x ",
4898 "var x[3] := {1,2,3}; var y := 5; y + 1 > x ",
4899 "var x[3] := {1,1,1}; var y := 1; y == x ",
4900 "var x[3] := {1,1,1}; var y := 2; y - 1 == x",
4901 "var x[3] := {1,2,3}; var y := 5; equal(true,(x += 1) < y) ",
4902 "var x[3] := {1,2,3}; var y := 3; equal(true,(x -= 1) < y + 1)",
4903 "var x[3] := {1,2,3}; var y := 5; equal(true,(x -= 1) <= y) ",
4904 "var x[3] := {2,2,2}; var y := 1; (x -= 1) == y ",
4905 "var x[3] := {1,2,3}; var y := 5; y > (x += 1) ",
4906 "var x[3] := {1,2,3}; var y := 5; y + 1 > (x += 1) ",
4907 "var x[3] := {2,2,2}; var y := 1; y == (x -= 1) ",
4908 "var x[3] := {2,2,2}; var y := 0; y + 1 == (x -= 1)",
4909 "var x[3] := [1]; var y[4] := {1,2,3,4}; var z[3] := [1]; z := (x + y); z == (x + y)",
4910 "var x[3] := [1]; var y[3] := {1,2,3}; var z[3] := [1]; z := (x - y); z == (x - y)",
4911 "var x[3] := [1]; var y[2] := {1,2}; var z[3] := [1]; z := (x / y); z == (x / y)",
4912 "var x[3] := [1]; var y[1] := {1}; var z[3] := [1]; z := (x * y); z == (x * y)",
4913 "var x[3] := [1]; var y[4] := {1,2,3,4}; var z[3] := [1]; z := 2(x + y); z == (x + y)2",
4914 "var x[3] := [1]; var y[3] := {1,2,3}; var z[3] := [1]; z := 2(x - y); z == (x - y)2",
4915 "var x[3] := [1]; var y[2] := {1,2}; var z[3] := [1]; z := 2(x / y); z == (x / y)2",
4916 "var x[3] := [1]; var y[1] := {1}; var z[3] := [1]; z := 2(x * y); z == (x * y)2",
4917 "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",
4918 "var x[3] := [1]; var y[3] := {1,2,3}; var z[3] := [1]; z := 2(x - y)/3; z == 2(x - y)/3",
4919 "var x[3] := [1]; var y[2] := {1,2}; var z[3] := [1]; z := 2(x / y)/3; z == 2(x / y)/3",
4920 "var x[3] := [1]; var y[1] := {1}; var z[3] := [1]; z := 2(x * y)/3; z == 2(x * y)/3",
4921 "var x[6] := {1,2,3,4,5,6}; equal(sqrt(sum([x - avg(x)]^2) / x[]),1.70782512765993306387017)",
4922 "var x[3] := {-1,-2,-3}; sum(abs(x) ) == 6",
4923 "var x[3] := {0.1,0.2,0.3}; sum(trunc(x)) == 0",
4925 "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)",
4927 "var x := 2; (~{ for (var i := 0; i < 10; i += 1) { for (var j := 0; j <= i; "
4928 "j += 1) { var y := 3; if ((i + j + y + x) < 6) { y += x; continue; } else "
4929 "break[i + j]; } } } + ~{ for (var i := 0; i < 10; i += 1) { for (var j := 0; "
4930 "j <= i; j += 1) { var y := 3; if ((i + j + y + x) < 6) { y += x; continue; } "
4931 " else break[i + j]; } } }) == 18 ",
4933 "var x := 2; var v0[3] := {1,2,3}; ( ~{ for (var i := 0; i < 10; i += 1) { "
4934 "for (var j := 0; j <= i; j += 1) { var y := 3; var v2[3] := {1,2,3}; if ( "
4935 "(i + j + y + x + abs(v0[i % v0[]] - v2[j % v2[]])) < 6) { var v3[3] := "
4936 "{1,2,3}; y += x / v3[j % v3[]]; continue; } else break[i + j]; } } } "
4937 "+ ~{ for (var i := 0; i < 10; i += 1) { for (var j := 0; j <= i; j += 1) "
4938 " { var y := 3; var v2[3] := {1,2,3}; if ((i + j + y + x + abs(v0[i % v0[]] - "
4939 "v2[j % v2[]])) < 6) { var v3[3] := {1,2,3}; y += x / v3[j % v3[]]; "
4940 "continue; } else break[i + j]; } } } ) == 18 ",
4942 "12 == (if (1 > 2) { var x:= 2; } else { var x[3] := {7,2,3}; sum(x); })",
4943 "12 == (if (1 < 2) { var x[3] := {7,2,3}; sum(x); } else { var x:= 2; })",
4944 "12 == (if (1 > 2) { var x:= 2; } else { var x[3] := {7,2,3}; sum(x); })",
4945 "12 == (if (1 < 2) { var x[3] := {7,2,3}; sum(x); } else { var x:= 2; })",
4947 "21 == (for (var i := 0; i < 10; i += 1) { if (i > 2) { break [i * 7]; i += 1;"
4948 "i += 2; i += 3; }; })",
4950 "21 == (for (var i := 0; i < 10; i += 1) { if (i > 2) { break [i * 7]; return "
4951 "[i * 8]; i += 1; i += 2; i += 3; }; })",
4953 "2 == for (var i := 0; i < 10; i += 1) { if (i > 2) { continue; i += 1; i += 2;"
4954 "i += 3; } else i; }",
4956 "2 == for (var i := 0; i < 10; i += 1) { if (i > 2) { continue; return [i * 8];"
4957 "i += 1; i += 2; i += 3; } else i; }",
4959 "var x[10] := [-1]; var y[10] := [-1]; for (var i := 0; i < 10; i += 1) { x[i] := i; "
4960 "y[i] := 2 * x[i]; }; (sum(x) == 45) and (sum(y) == (2 * sum(x)));"
4962 "7 == (for (var i := 0; i < 10; i += 1) { ~{break[7]; continue; i += i} })",
4963 "0 == (for (var i := 0; i < 10; i += 1) { ~{break[i]; continue; i += i} })",
4964 "0 == (for (var i := 0; i < 10; i += 1) { ~{continue; break[7]; i += i} })",
4965 "1 == (for (var i := 0; i < 10; i += 1) { ~{break[i += 1]; continue; i += i} })",
4967 "var s := 'abc'; s == ~{'abc' } ",
4968 "var s := 'abc'; s == ~{s } ",
4969 "var s := 'abc'; s == ~{'ab' + 'c'} ",
4970 "var s := 'abc'; ~{'abc' } == s ",
4971 "var s := 'abc'; ~{s } == s ",
4972 "var s := 'abc'; ~{'ab' + 'c'} == s ",
4973 "var s := 'abc'; ~{1 + 2; 'abc' + s; s} == s ",
4974 "var s := 'abc'; ~{1 + 2; var x := 'ab'; x + 'c'} == s ",
4976 "var x[10^6] := null; var y[10^7] := null; 0 * (min(x) + min(y)) + x[] + y[] == 10^7 + 10^6",
4978 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; if (1 < 2, v0, v1) == v0",
4979 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; if (1 > 2, v0, v1) == v1",
4980 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; if (1 < 2, v0 - v1, v1 - v0) == (v0 - v1)",
4981 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; if (1 > 2, v0 - v1, v1 - v0) == (v1 - v0)",
4982 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; var x := 1; var y := 2; if (x < y, v0, v1) == v0",
4983 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; var x := 1; var y := 2; if (x > y, v0, v1) == v1",
4984 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; var x := 1; var y := 2; if (x < y, v0 - v1, v1 - v0) == (v0 - v1)",
4985 "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)",
4987 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; if (1 < 2, v0, v1) == v0",
4988 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; if (1 > 2, v0, v1) == v1",
4989 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; if (1 < 2, v0 - v1, v1 - v0) == (v0 - v1)",
4990 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; if (1 > 2, v0 - v1, v1 - v0) == (v1 - v0)",
4991 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; var x := 1; var y := 2; if (x < y, v0, v1) == v0",
4992 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; var x := 1; var y := 2; if (x > y, v0, v1) == v1",
4993 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; var x := 1; var y := 2; if (x < y, v0 - v1, v1 - v0) == (v0 - v1)",
4994 "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)",
4996 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; (if (1 < 2) v0; else v1;) == v0",
4997 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; (if (1 > 2) v0; else v1;) == v1",
4998 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; (if (1 < 2) v0 - v1; else v1 - v0;) == (v0 - v1)",
4999 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; (if (1 > 2) v0 - v1; else v1 - v0;) == (v1 - v0)",
5000 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; var x := 1; var y := 2; (if (x < y) v0; else v1;) == v0",
5001 "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",
5002 "var v0[3] := {1,2,3}; var v1[3] := {7,8,9}; var x := 1; var y := 2; (if (x < y) v0 - v1; else v1 - v0;) == (v0 - v1)",
5003 "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)",
5005 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; (if (1 < 2) v0; else v1;) == v0",
5006 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; (if (1 > 2) v0; else v1;) == v1",
5007 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; (if (1 < 2) v0 - v1; else v1 - v0;) == (v0 - v1)",
5008 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; (if (1 > 2) v0 - v1; else v1 - v0;) == (v1 - v0)",
5009 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; var x := 1; var y := 2; (if (x < y) v0; else v1;) == v0",
5010 "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",
5011 "var v0[3] := {1,2,3}; var v1[4] := {6,7,8,9}; var x := 1; var y := 2; (if (x < y) v0 - v1; else v1 - v0;) == (v0 - v1)",
5012 "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)",
5014 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((-x * -y)); true;",
5015 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((-x + -y)); true;",
5016 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((-x - -y)); true;",
5017 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((-x / -y)); true;",
5018 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) + (1.123 * y)); true;",
5019 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) - (1.123 * y)); true;",
5020 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) + (y * 1.123)); true;",
5021 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) - (y * 1.123)); true;",
5022 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) * (y / z)); true;",
5023 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) / (y / z)); true;",
5024 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) / y); true;",
5025 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) * 2.123); true;",
5026 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) / 2.123); true;",
5027 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) * (2.123 * y)); true;",
5028 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) * (y * 2.123)); true;",
5029 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) / (2.123 * y)); true;",
5030 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) / (2.123 / y)); true;",
5031 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) / (y * 2.123)); true;",
5032 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 * x) / (y / 2.123)); true;",
5033 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 + x) + 2.123); true;",
5034 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 + x) - 2.123); true;",
5035 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 + x) + (2.123 + y)); true;",
5036 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 + x) + (y + 2.123)); true;",
5037 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 + x) - (2.123 + y)); 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); true;",
5044 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) / 2.123); true;",
5045 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) * (2.123 / y)); true;",
5046 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) * (y / 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) / (2.123 / y)); true;",
5049 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) / (y * 2.123)); true;",
5050 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123 / x) / (y / 2.123)); true;",
5051 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) * (2.123 * x)); true;",
5052 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) * (2.123 / x)); true;",
5053 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) * (x * 2.123)); true;",
5054 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) * (x / 2.123)); true;",
5055 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) + (2.123 + x)); true;",
5056 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) + (2.123 - x)); true;",
5057 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) + (x + 2.123)); true;",
5058 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) + (x - 2.123)); true;",
5059 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) - (2.123 + x)); true;",
5060 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) - (2.123 - x)); true;",
5061 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) - (x + 2.123)); true;",
5062 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) - (x - 2.123)); true;",
5063 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) / (2.123 * x)); true;",
5064 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) / (2.123 / x)); true;",
5065 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) / (x * 2.123)); true;",
5066 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((1.123) / (x / 2.123)); true;",
5067 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) * 2.123); true;",
5068 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) / 2.123); true;",
5069 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x + 1.123) + 2.123); true;",
5070 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x + 1.123) - 2.123); true;",
5071 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x - 1.123) + 2.123); true;",
5072 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x - 1.123) - 2.123); true;",
5073 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) * 2.123); true;",
5074 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) / 2.123); true;",
5075 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x ^ 1.123) ^ 2.123); true;",
5076 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) + (1.123 * y)); true;",
5077 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) - (1.123 * y)); true;",
5078 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) + (y * 1.123)); true;",
5079 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) - (y * 1.123)); true;",
5080 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) * (2.123 * y)); true;",
5081 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) * (y * 2.123)); true;",
5082 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) / (2.123 * y)); true;",
5083 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) / (2.123 / y)); true;",
5084 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) / (y * 2.123)); true;",
5085 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * 1.123) / (y / 2.123)); true;",
5086 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x * y) / (z / w)); true;",
5087 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x + 1.123) + (2.123 + y)); true;",
5088 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x + 1.123) + (y + 2.123)); 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 + y) / (z / w)); true;",
5092 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x - 1.123) - (2.123 - y)); true;",
5093 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x - 1.123) - (y - 2.123)); true;",
5094 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x - y) / (z / w)); true;",
5095 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) * (y / z)); true;",
5096 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) + (y / 1.123)); true;",
5097 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) - (y / 1.123)); true;",
5098 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) / (y / z)); true;",
5099 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) / y); true;",
5100 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) * (2.123 / y)); true;",
5101 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) * (y + 2.123)); true;",
5102 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) * (y - 2.123)); true;",
5103 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) * (y / 2.123)); true;",
5104 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) / (2.123 * y)); true;",
5105 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) / (2.123 / y)); true;",
5106 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) / (y * 2.123)); true;",
5107 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / 1.123) / (y / 2.123)); true;",
5108 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / y) * (1.123 / z)); true;",
5109 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / y) * (z / 1.123)); true;",
5110 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / y) * (z / w)); true;",
5111 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / y) / (1.123 / z)); true;",
5112 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / y) / (z / 1.123)); true;",
5113 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / y) / (z / w)); true;",
5114 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / y) / 1.123); true;",
5115 "var x := 1.111; var y := 2.222; var z := 3.333; var w := 4.444; ((x / y) / z); true;",
5120 static const std::size_t
rounds = 20;
5131 bool failed =
false;
5133 for (std::size_t r = 0; r <
rounds; ++r)
5137 expression_t expression;
5138 expression.register_symbol_table(symbol_table);
5145 printf(
"run_test10() - swaps[1] Error: %s Expression: %s\n",
5146 parser.
error().c_str(),
5154 const T result = expression.value();
5158 printf(
"run_test10() - swaps[1] evaluation error Expression: %s\n",
5164 expression.release();
5174 for (std::size_t r = 0; r <
rounds; ++r)
5180 expression_t expression;
5181 expression.register_symbol_table(symbol_table);
5185 printf(
"run_test10() - swaps[2] Error: %s Expression: %s\n",
5186 parser.
error().c_str(),
5193 const T result = expression.value();
5197 printf(
"run_test10() - swaps[2] evaluation error Expression: %s\n",
6443 const bool result1 = symbol_table.
add_variable(
"x", x);
6447 if (!result1 || !result2 || result3)
6449 printf(
"run_test18() - Failed sym_tab add/remove [1]\n");
6459 if (!result1 || !result2 || result3)
6461 printf(
"run_test18() - Failed sym_tab add/remove [2]\n");
6466 std::vector<T> x(10,T(0));
6467 const bool result1 = symbol_table.
add_vector(
"x", x);
6471 if (!result1 || !result2 || result3)
6473 printf(
"run_test18() - Failed sym_tab add/remove [3]\n");
6479 const bool result1 = symbol_table.
add_function(
"x", x);
6483 if (!result1 || !result2 || result3)
6485 printf(
"run_test18() - Failed sym_tab add/remove [4]\n");
6491 const bool result1 = symbol_table.
add_function(
"x", x);
6495 if (!result1 || !result2 || result3)
6497 printf(
"run_test18() - Failed sym_tab add/remove [5]\n");
6542 static const std::string expr_str_list[] =
6544 "equal(va_func,(0))",
6545 "equal(va_func(),(0))",
6546 "equal(va_func(1,2,3,4,5,6,7,8,9),(1+2+3+4+5+6+7+8+9))",
6547 "equal(va_func(1,x,3,y,5,z,7,w,9),(1+x+3+y+5+z+7+w+9))",
6548 "equal(va_func(x,2,y,4,z,6,w,8,u),(x+2+y+4+z+6+w+8+u))",
6549 "equal(va_func(x,y,z,w,u,v,t,1,2,3),(x+y+z+w+u+v+t+1+2+3))",
6550 "equal(va_func(x,y,z,w,u,v,t),(x+y+z+w+u+v+t))",
6551 "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))",
6552 "equal(1+va_func(1,x,3,y,5,z,7,w,9),(1+x+3+y+5+z+7+w+9)+1)",
6553 "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))",
6554 "equal(va_func(va_func(x),va_func(y),va_func(z)),va_func(x,y,z))",
6555 "equal(va_func(va_func(va_func(va_func(va_func(va_func(va_func(va_func(x)))))))),x)",
6556 "equal(va_func(va_func(va_func(va_func(va_func(va_func(va_func(va_func(123.456)))))))),123.456)",
6557 "equal(va_func(va_func(va_func(va_func(va_func(va_func(va_func(va_func(x+1)))))))),x+1)",
6558 "equal(va_func(va_func(va_func(va_func(va_func(va_func(va_func(va_func(x+y)))))))),x+y)"
6560 static const std::size_t expr_str_list_size =
sizeof(expr_str_list) /
sizeof(std::string);
6564 for (std::size_t i = 0; i < expr_str_list_size; ++i)
6566 expression_t expression;
6567 expression.register_symbol_table(symbol_table);
6571 if (!parser.
compile(expr_str_list[i],expression))
6573 printf(
"run_test18() - [1] VarArg Error: %s Expression: %s\n",
6574 parser.
error().c_str(),
6575 expr_str_list[i].c_str());
6583 bool error_found =
false;
6589 printf(
"run_test18() - Error in evaluation! (1) Expression: %s\n",
6590 expr_str_list[i].c_str());
6610 T v0[] = { T(1), T(1), T(1), T(1) };
6611 T v1[] = { T(1), T(2), T(3), T(4) };
6620 std::string s0 =
"AbCdEfGhIj";
6624 symbol_table_t symbol_table;
6626 symbol_table.add_constants();
6628 symbol_table.add_variable (
"x" , x);
6629 symbol_table.add_variable (
"y" , y);
6630 symbol_table.add_vector (
"v0" ,v0);
6631 symbol_table.add_vector (
"v1" ,v1);
6632 symbol_table.add_vector (
"v2" ,v2);
6633 symbol_table.add_stringvar(
"s0", s0);
6634 symbol_table.add_function (
"gen_func", f);
6638 "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]);",
6639 "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]);",
6640 "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);",
6641 "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);",
6642 "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]);",
6643 "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);",
6644 "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);",
6645 "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);",
6646 "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);",
6647 "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');"
6652 bool error_found =
false;
6657 expression_t expression;
6659 expression.register_symbol_table(symbol_table);
6663 if (!parser.compile(expression_str,expression))
6665 printf(
"run_test18() - [2] GenFunc Error: %s Expression: %s [2]\n",
6666 parser.error().c_str(),
6667 expression_str.c_str());
6685 printf(
"run_test18() - Error in evaluation! (2) Expression: %s "
6697 expression.release();
6714 T v0[] = { T(1), T(1), T(1), T(1) };
6715 T v1[] = { T(1), T(2), T(3), T(4) };
6716 T v2[] = { T(5), T(6), T(7), T(8) };
6718 std::string s0 =
"AbCdEfGhIj";
6722 symbol_table_t symbol_table;
6724 symbol_table.add_constants();
6726 symbol_table.add_variable (
"x" , x);
6727 symbol_table.add_variable (
"y" , y);
6728 symbol_table.add_vector (
"v0" ,v0);
6729 symbol_table.add_vector (
"v1" ,v1);
6730 symbol_table.add_vector (
"v2" ,v2);
6731 symbol_table.add_stringvar(
"s0", s0);
6732 symbol_table.add_function (
"foo", f);
6736 "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]);",
6737 "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);",
6738 "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);",
6739 "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]);",
6740 "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);",
6741 "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);",
6742 "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);",
6743 "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);",
6744 "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');",
6745 "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');",
6746 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v1 + v2, v0[2], x, 2x + y, z, 2w / 3, 'abc123',s0[2:5]);",
6747 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v1 + v2, v0[2], x, 2x + y, z, 2w / 3, 'abc123',s0[2:5]);",
6748 "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]);",
6749 "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]);",
6750 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x);",
6751 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x);",
6752 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x,x);",
6753 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x,x,x);",
6754 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0);",
6755 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0);",
6756 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0,s0);",
6757 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0,s0,s0);",
6758 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0);",
6759 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0);",
6760 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0,v0);",
6761 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0,v0,v0);",
6762 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x);",
6763 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x);",
6764 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x,x);",
6765 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(x,x,x,x);",
6766 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0);",
6767 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0);",
6768 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0,s0);",
6769 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(s0,s0,s0,s0);",
6770 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0);",
6771 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0);",
6772 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0,v0);",
6773 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v0,v0,v0);",
6774 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v1 + v2, v0[2], x, 2x + y, z, 2w / 3, 'abc123',s0[2:5]);",
6775 "var z := 3; var w[3] := { 1/3, 1/5, 1/7 }; foo(v0,v1 + v2, v0[2], x, 2x + y, z, 2w / 3, 'abc123',s0[2:5]);",
6776 "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]);",
6777 "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]);"
6782 const std::string parameter_type_list[] =
6822 "TTTTTTT|STSTSTS|V*T*VS*" ,
6823 "TTTTTTT|STSTSTS|V*TTTTVSS",
6824 "TTTTTTT|STSTSTS|VVT*VSS" ,
6825 "TTTTTTT|STSTSTS|VVTTTTVS*",
6828 bool error_found =
false;
6833 expression_t expression;
6835 expression.register_symbol_table(symbol_table);
6841 if (!parser.compile(expression_str,expression))
6843 printf(
"run_test18() - [3] GenFunc2 Error: %s Expression: %s Parameter Sequence: %s [3]\n",
6844 parser.error().c_str(),
6845 expression_str.c_str(),
6846 parameter_type_list[i].c_str());
6862 bool error_found =
false;
6866 "foo(v0,v1,v2,x,y,s0);",
6867 "foo(v1,v2,x,y,s0,v0);",
6868 "foo(v2,x,y,s0,v0,v1);",
6869 "foo(x,y,s0,v0,v1,v2);",
6870 "foo(y,s0,v0,v1,v2,x);",
6871 "foo(s0,v0,v1,v2,x,y);"
6876 const std::string parameter_type_list[] =
6895 T v0[] = { T(1), T(1), T(1), T(1) };
6896 T v1[] = { T(1), T(2), T(3), T(4) };
6897 T v2[] = { T(5), T(6), T(7), T(8) };
6899 std::string s0 =
"AbCdEfGhIj";
6904 T v0_inc[] = { T(2), T(2), T(2), T(2) };
6905 T v1_inc[] = { T(2), T(3), T(4), T(5) };
6906 T v2_inc[] = { T(6), T(7), T(8), T(9) };
6908 std::size_t sizeof_vec =
sizeof(v0) /
sizeof(T);
6910 std::string s0_inc =
"BcDeFgHiJk";
6914 symbol_table_t symbol_table;
6916 symbol_table.add_constants();
6918 symbol_table.add_variable (
"x" , x );
6919 symbol_table.add_variable (
"y" , y );
6920 symbol_table.add_vector (
"v0" , v0);
6921 symbol_table.add_vector (
"v1" , v1);
6922 symbol_table.add_vector (
"v2" , v2);
6923 symbol_table.add_stringvar(
"s0", s0);
6924 symbol_table.add_function (
"foo", f );
6926 expression_t expression;
6928 expression.register_symbol_table(symbol_table);
6936 printf(
"run_test18() - [4] IncFunc Error: %s Expression: %s Parameter Sequence: %s [4]\n",
6937 parser.error().c_str(),
6939 parameter_type_list[i].c_str());
6949 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: x\n",
6956 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: y\n",
6963 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: y\n",
6968 if (!std::equal(v0,v0 + sizeof_vec,v0_inc))
6970 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: v0\n",
6975 if (!std::equal(v1,v1 + sizeof_vec,v1_inc))
6977 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: v1\n",
6982 if (!std::equal(v2,v2 + sizeof_vec,v2_inc))
6984 printf(
"run_test18() - Error in evaluation! (3) Expression: %s Check: v2\n",
6997 bool error_found =
false;
7001 std::string s0 =
"XXXXXXXXXXXXXXX";
7002 std::string s1 =
"XXXXXXXXXXXXXXX";
7003 std::string s2 =
"XXXXXXXXXXXXXXX";
7004 std::string s3 =
"XXXXXXXXXXXXXXX";
7005 std::string s4 =
"XXXXXXXXXXXXXXX";
7011 symbol_table_t symbol_table;
7013 symbol_table.add_constants();
7015 symbol_table.add_stringvar(
"s0", s0);
7016 symbol_table.add_stringvar(
"s1", s1);
7017 symbol_table.add_stringvar(
"s2", s2);
7018 symbol_table.add_stringvar(
"s3", s3);
7019 symbol_table.add_stringvar(
"s4", s4);
7021 symbol_table.add_function(
"remspc_uc", rsauc);
7023 const std::string program =
7024 " s0 := 'How now '; "
7025 " s1 := 'brown cow?'; "
7026 " s2 := remspc_uc(s0 + s1); "
7027 " s3 := remspc_uc(s0) + s1; "
7028 " s4 := s0 + remspc_uc(s1); "
7029 " remspc_uc(s0 + s1) == remspc_uc(s0) + remspc_uc(s1); ";
7031 const std::string parameter_type_list[] =
7041 std::size_t parameter_type_list_size =
sizeof(parameter_type_list) /
sizeof(std::string);
7043 for (std::size_t i = 0; i < parameter_type_list_size; ++i)
7045 expression_t expression;
7047 expression.register_symbol_table(symbol_table);
7053 if (!parser.compile(program,expression))
7055 printf(
"run_test18() - [5] Error: %s\tExpression: %s\n",
7056 parser.error().c_str(),
7062 const T result = expression.value();
7066 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Result <> 1\n",
7073 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s0\n",
7078 if (
"How now " != s0)
7080 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s0\n",
7085 if (
"brown cow?" != s1)
7087 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s1\n",
7092 if (
"HOWNOWBROWNCOW?" != s2)
7094 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s2\n",
7099 if (
"HOWNOWbrown cow?" != s3)
7101 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s3\n",
7106 if (
"How now BROWNCOW?" != s4)
7108 printf(
"run_test18() - Error in evaluation! (4) Expression: %s Check: s4\n",
7121 bool error_found =
false;
7127 symbol_table_t symbol_table;
7129 T v[4] = {T(5), T(6), T(7), T(8)};
7131 symbol_table.add_vector(
"v",v);
7134 symbol_table.add_function(
"vararg_func",vaf);
7136 expression_t expression;
7137 expression.register_symbol_table(symbol_table);
7141 const std::string programs[] =
7143 "equal(0,vararg_func())",
7144 "equal(1,vararg_func() + 1)",
7145 "equal(1,1 + vararg_func())",
7146 "equal(1,vararg_func + 1)",
7147 "equal(1,1 + vararg_func)",
7148 "equal(0,vararg_func() + vararg_func)",
7149 "equal(0,vararg_func + vararg_func())",
7150 "equal(1,vararg_func + vararg_func(1))",
7151 "equal(1,vararg_func + vararg_func(1,2))",
7152 "equal(2,vararg_func + vararg_func(v))",
7153 "equal(1,vararg_func() + vararg_func(1))",
7154 "equal(1,vararg_func() + vararg_func(1,2))",
7155 "equal(2,vararg_func() + vararg_func(v))",
7156 "equal(2,vararg_func(v))",
7157 "equal(1,vararg_func(1))",
7158 "equal(1,vararg_func(1,2,3))",
7159 "equal(1,vararg_func(5,6,7,8))",
7160 "equal(5,vararg_func(v) + 3)",
7161 "equal(5,vararg_func(1) + 4)",
7162 "equal(6,vararg_func(1,2,3) + 5)",
7163 "equal(7,vararg_func(5,6,7,8) + 6)"
7166 static const std::size_t programs_size =
sizeof(programs) /
sizeof(std::string);
7168 for (std::size_t i = 0; i < programs_size; ++i)
7170 if (!parser.compile(programs[i],expression))
7172 printf(
"run_test18() - [6] Error: %s\tExpression: %s\n",
7173 parser.error().c_str(),
7174 programs[i].c_str());
7178 else if (T(1) != expression.value())
7180 printf(
"run_test18() - Error in evaluation! (5) Expression: %s\n",
7181 programs[i].c_str());
7194 bool error_found =
false;
7206 v.push_back(T(N)); \
7214 const std::string expr_string =
"sum(v + 1)";
7218 symbol_table_t symbol_table;
7219 symbol_table.add_vector(
"v",v);
7221 expression_t expression;
7222 expression.register_symbol_table(symbol_table);
7226 if (!parser.compile(expr_string,expression))
7228 printf(
"run_test18() - [7] Error: %s\tExpression: %s\n",
7229 parser.error().c_str(),
7230 expr_string.c_str());
7237 sum = expression.value();
7241 printf(
"run_test18() - Error in evaluation! (6) Expression: %s\n",
7242 expr_string.c_str());
7248 sum = expression.value();
7252 printf(
"run_test18() - Error in evaluation! (7) Expression: %s\n",
7253 expr_string.c_str());
7258 sum = expression.value();
7262 printf(
"run_test18() - Error in evaluation! (8) Expression: %s\n",
7263 expr_string.c_str());
7268 sum = expression.value();
7272 printf(
"run_test18() - Error in evaluation! (9) Expression: %s\n",
7273 expr_string.c_str());
7284 bool error_found =
false;
7294 v.push_back(T(N)); \
7299 pb(s, 3)
pb(s, 6)
pb(s, 9)
pb(s,12)
7300 pb(s,15)
pb(s,18)
pb(s,21)
7303 const std::string expr_string =
"v[0] + v[1] + v[2]";
7307 symbol_table_t symbol_table;
7308 symbol_table.add_vector(
"v",v);
7310 expression_t expression;
7311 expression.register_symbol_table(symbol_table);
7315 if (!parser.compile(expr_string,expression))
7317 printf(
"run_test18() - [8] Error: %s\tExpression: %s\n",
7318 parser.error().c_str(),
7319 expr_string.c_str());
7324 for (std::size_t i = 0; i < v0.size() - 4; ++i)
7328 T sum = expression.value();
7332 printf(
"run_test18() - Error in evaluation! (7) Expression: %s Expected: %5.3f Computed: %5.3f\n",
7333 expr_string.c_str(),
7349 bool error_found =
false;
7359 v.push_back(T(N)); \
7364 pb(s, 3)
pb(s, 6)
pb(s, 9)
pb(s,12)
7365 pb(s,15)
pb(s,18)
pb(s,21)
7368 const std::string expr_string =
"var i := 0; var j := 1; var k := 2; v[i] + v[j] + v[k]";
7372 symbol_table_t symbol_table;
7373 symbol_table.add_vector(
"v",v);
7375 expression_t expression;
7376 expression.register_symbol_table(symbol_table);
7380 if (!parser.compile(expr_string,expression))
7382 printf(
"run_test18() - [9] Error: %s\tExpression: %s\n",
7383 parser.error().c_str(),
7384 expr_string.c_str());
7389 for (std::size_t i = 0; i < v0.size() - 4; ++i)
7393 T sum = expression.value();
7397 printf(
"run_test18() - Error in evaluation! (8) Expression: %s Expected: %5.3f Computed: %5.3f\n",
7398 expr_string.c_str(),
7418 const std::string const_folded_expression_list[] =
7420 "(0 * dot(2 * v0,v1 - 1))",
7421 "(0 * dot(2 * v0,v1 - 1)) + (dot(2 * v0,v1 - 1) * 0)",
7422 "(0 * dot(v0 - v1,v1 / v0))",
7423 "(0 * dot(v0 - v1,v1 / v0)) + (dot(v0 - v1,v1 / v0) * 0)",
7425 "(0 * dot(v0,v1)) + (dot(v0,v1) * 0)",
7426 "(0 / dot(2 * v0,v1 - 1))",
7427 "(0 / dot(2 * v0,v1 - 1)) + (dot(2 * v0,v1 - 1) * 0)",
7428 "(0 / dot(v0 - v1,v1 / v0))",
7429 "(0 / dot(v0 - v1,v1 / v0)) + (dot(v0 - v1,v1 / v0) * 0)",
7431 "(0 / dot(v0,v1)) + (dot(v0,v1) * 0)",
7432 "(dot(2 * v0,v1 - 1) * 0)",
7433 "(dot(2 * v0,v1 - 1) * 0) + (0 * dot(2 * v0,v1 - 1))",
7434 "(dot(2 * v0,v1 - 1) * 0) + (0 / dot(2 * v0,v1 - 1))",
7435 "(dot(v0 - v1,v1 / v0) * 0)",
7436 "(dot(v0 - v1,v1 / v0) * 0) + (0 * dot(v0 - v1,v1 / v0))",
7437 "(dot(v0 - v1,v1 / v0) * 0) + (0 / dot(v0 - v1,v1 / v0))",
7439 "(dot(v0,v1) * 0) + (0 * dot(v0,v1))",
7440 "(dot(v0,v1) * 0) + (0 / dot(v0,v1))"
7443 const std::size_t const_folded_expression_list_size =
sizeof(const_folded_expression_list) /
sizeof(std::string);
7445 const std::size_t vector_size = 5;
7446 T v0[vector_size] = { 0, 2, 4, 6, 8 };
7447 T v1[vector_size] = { 1, 3, 5, 7, 9 };
7455 symbol_table_t symbol_table;
7457 symbol_table.add_package( vector_package );
7458 symbol_table.add_package( io_package );
7459 symbol_table.add_vector (
"v0" , vv0 );
7460 symbol_table.add_vector (
"v1" , vv1 );
7462 expression_t expression;
7463 expression.register_symbol_table(symbol_table);
7467 for (std::size_t i = 0; i < const_folded_expression_list_size; ++i)
7469 const std::string& expression_string = const_folded_expression_list[i];
7471 if (!parser.compile(expression_string, expression))
7473 printf(
"run_test18() - [10] Error: %s Expression: %s\n",
7474 parser.error().c_str(),
7475 expression_string.c_str());
7482 printf(
"run_test18() - Error: Expression did not compile to a constant! [1] Expression: %s\n",
7483 expression_string.c_str());
7488 for (std::size_t j = 0; j < 100; ++j)
7501 const T result = expression.value();
7505 printf(
"run_test18() - Error: Expected result of zero, result: %8.4f for Expression: %s\n",
7507 expression_string.c_str());
7513 expression.release();
7522 const std::string rebase_expression_list[] =
7525 "dot(2 * v0,v1 - 1) + dot(2 * v0,v1 - 1)",
7526 "dot(2 * v0,v1 - 1)",
7527 "dot(v0 - v1,v1 / v0) + dot(v0 - v1,v1 / v0)",
7528 "dot(v0 - v1,v1 / v0)",
7529 "dot(v0,v1) + dot(v0,v1)",
7531 "dot(2 * v0,v1 - 1) * x + dot(2 * v0,v1 - 1) * y",
7532 "x / dot(2 * v0,v1 - 1)",
7533 "x / dot(v0 - v1,v1 / v0) + dot(v0 - v1,v1 / v0) / y",
7534 "x * dot(v0 - v1,v1 / v0) / y",
7535 "x - dot(v0,v1) + dot(v0,v1) + y",
7538 const std::size_t rebase_expression_list_size =
sizeof(rebase_expression_list) /
sizeof(std::string);
7543 const std::size_t vector_size = 5;
7544 T v0[vector_size] = { 0, 2, 4, 6, 8 };
7545 T v1[vector_size] = { 1, 3, 5, 7, 9 };
7553 symbol_table_t symbol_table;
7555 symbol_table.add_package ( vector_package );
7556 symbol_table.add_package ( io_package );
7557 symbol_table.add_variable(
"x" , x );
7558 symbol_table.add_variable(
"y" , y );
7559 symbol_table.add_vector (
"v0" , vv0 );
7560 symbol_table.add_vector (
"v1" , vv1 );
7562 expression_t expression;
7563 expression.register_symbol_table(symbol_table);
7567 for (std::size_t i = 0; i < rebase_expression_list_size; ++i)
7569 const std::string& expression_string = rebase_expression_list[i];
7571 if (!parser.compile(expression_string, expression))
7573 printf(
"run_test18() - [11] Error: %s Expression: %s\n",
7574 parser.error().c_str(),
7575 expression_string.c_str());
7580 for (std::size_t j = 0; j < 100; ++j)
7596 expression.release();
7601 bool error_found =
false;
7611 v.push_back(T(N)); \
7616 pb(s, 3)
pb(s, 6)
pb(s, 9)
pb(s,12)
7617 pb(s,15)
pb(s,18)
pb(s,21)
7620 const std::string expr_string =
"var i := 0; v[i + 0] + v[i + 1] + v[i + 2]";
7624 symbol_table_t symbol_table;
7625 symbol_table.add_vector(
"v",v);
7627 expression_t expression;
7628 expression.register_symbol_table(symbol_table);
7632 if (!parser.compile(expr_string,expression))
7634 printf(
"run_test18() - [12] Error: %s\tExpression: %s\n",
7635 parser.error().c_str(),
7636 expr_string.c_str());
7641 for (std::size_t i = 0; i < v0.size() - 4; ++i)
7645 const T sum = expression.value();
7649 printf(
"run_test18() - Error in evaluation! (9) Expression: %s Expected: %5.3f Computed: %5.3f\n",
7650 expr_string.c_str(),
7670 T v0[] = { T(0), T(1), T(2), T(3), T(4) };
7671 T v1[] = { T(5), T(6), T(7), T(8), T(9) };
7673 const std::size_t v0_size =
sizeof(v0) /
sizeof (T);
7674 const std::size_t v1_size =
sizeof(v1) /
sizeof (T);
7680 symbol_table_t symbol_table;
7681 symbol_table.add_vector(
"v",v);
7682 symbol_table.add_function(
"vec_sum",vec_sum);
7684 expression_t expression;
7685 expression.register_symbol_table(symbol_table);
7689 const std::string expr_string =
"vec_sum(v)";
7691 if (!parser.compile(expr_string,expression))
7693 printf(
"run_test18() - [13] Error: %s\tExpression: %s\n",
7694 parser.error().c_str(),
7695 expr_string.c_str());
7700 const T expected_result0 = std::accumulate(v0, v0 + v0_size, T(0));
7702 if (expression.value() != expected_result0)
7704 printf(
"run_test18() - Error in evaluation! (10.1) Expression: %s Expected: %5.3f Computed: %5.3f\n",
7705 expr_string.c_str(),
7706 expected_result0.toDouble(),
7707 expression.value().toDouble());
7714 const T expected_result1 = std::accumulate(v1, v1 + v1_size, T(0));
7716 if (expression.value() != expected_result1)
7718 printf(
"run_test18() - Error in evaluation! (10.2) Expression: %s Expected: %5.3f Computed: %5.3f\n",
7719 expr_string.c_str(),
7720 expected_result1.toDouble(),
7721 expression.value().toDouble());
7728 bool error_found =
false;
7736 symbol_table_t symbol_table;
7737 symbol_table.add_package(vecops_pkg);
7739 const std::string expr_str_list[] =
7741 "var v[9] := {1,2,3,4,5,6,7,8,9}; all_true(v) == true" ,
7742 "var v[6] := {-1,-2,-3,-4,-5,-6}; all_true(v) == true" ,
7743 "var v[8] := {1,2,3,0,0,0,0,0}; all_true(v) == false",
7744 "var v[8] := {-1,-2,-3,0,0,0,0,0}; all_true(v) == false",
7745 "var v[9] := {0,0,0,0,0,0,0,0,0}; all_true(v + 1) == true",
7747 "var v[9] := {0,0,0,0,0,0,0,0,0}; all_false(v) == true" ,
7748 "var v[9] := {0,0,0,0,0,1,2,3,4}; all_false(v) == false" ,
7749 "var v[8] := {0,0,0,0,0,-1,-2,-3}; all_false(v) == false" ,
7750 "var v[9] := {1,1,1,1,1,1,1,1,1}; any_false(v - 1) == true",
7752 "var v[9] := {0,0,0,0,0,0,0,0,1}; any_true(v) == true" ,
7753 "var v[9] := {0,0,0,0,1,0,0,0,0}; any_true(v) == true" ,
7754 "var v[9] := {0,0,0,0,0,0,0,0,0}; any_true(v) == false" ,
7755 "var v[9] := {0,0,0,0,0,0,0,0,0}; any_true(v + 1) == true",
7757 "var v[9] := {1,1,1,1,1,1,1,1,0}; any_false(v) == true" ,
7758 "var v[9] := {1,1,1,1,0,1,1,1,1}; any_false(v) == true" ,
7759 "var v[9] := {1,1,1,1,1,1,1,1,1}; any_false(v) == false" ,
7760 "var v[9] := {1,1,1,1,1,1,1,1,1}; any_false(v - 1) == true",
7762 "var v[9] := {0,0,0,0,0,0,0,0,0}; count(v) == 0" ,
7763 "var v[9] := {0,0,0,0,0,0,0,0,1}; count(v) == 1" ,
7764 "var v[9] := {0,0,0,0,0,0,0,2,1}; count(v) == 2" ,
7765 "var v[9] := {0,0,0,0,0,0,3,2,1}; count(v) == 3" ,
7766 "var v[9] := {0,0,0,0,0,0,0,0,0}; count(v + 1) == v[]",
7767 "var v[9] := {1,1,1,1,1,1,1,1,1}; count(v - 1) == 0",
7769 "var v[9] := {1,2,3,4,5,6,7,8,9}; var r[9] := [0]; copy(v,r); sum(v == r) == v[]",
7770 "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",
7771 "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",
7772 "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",
7774 "var v[5] := {1,2,3,4,5}; var r[5] := {4,5,1,2,3}; rol(v,3); sum(v == r) == v[]",
7775 "var v[5] := {1,2,3,4,5}; var r[5] := {3,4,5,1,2}; ror(v,3); sum(v == r) == v[]",
7777 "var v[5] := {1,2,3,4,5}; var r[5] := {3,4,5,1,2}; rol(v,2); sum(v == r) == v[]",
7778 "var v[5] := {1,2,3,4,5}; var r[5] := {4,5,1,2,3}; ror(v,2); sum(v == r) == v[]",
7780 "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[]",
7781 "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[]",
7783 "var v[5] := {1,2,3,4,5}; var r[5] := {3,4,5,0,0}; shftl(v,2); sum(v == r) == v[]",
7784 "var v[5] := {1,2,3,4,5}; var r[5] := {5,0,0,0,0}; shftl(v,4); sum(v == r) == v[]",
7785 "var v[5] := {1,2,3,4,5}; var r[5] := {0,0,0,0,0}; shftl(v,5); sum(v == r) == v[]",
7787 "var v[5] := {1,2,3,4,5}; var r[5] := {0,0,1,2,3}; shftr(v,2); sum(v == r) == v[]",
7788 "var v[5] := {1,2,3,4,5}; var r[5] := {0,0,0,0,1}; shftr(v,4); sum(v == r) == v[]",
7789 "var v[5] := {1,2,3,4,5}; var r[5] := {0,0,0,0,0}; shftr(v,5); sum(v == r) == v[]",
7791 "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[]",
7792 "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[]",
7794 "var v[5] := {1,3,5,2,4}; var r[5] := {1,2,3,4,5}; sort(v); sum(v == r) == v[]",
7795 "var v[5] := {5,4,3,2,1}; var r[5] := {1,2,3,4,5}; sort(v); sum(v == r) == v[]",
7796 "var v[5] := {1,4,2,3,5}; var r[5] := {1,2,3,4,5}; sort(v,1,3); sum(v == r) == v[]",
7797 "var v[5] := {5,4,2,3,1}; var r[5] := {5,2,3,4,1}; sort(v,1,3); sum(v == r) == v[]",
7798 "var v[5] := {3,1,2,4,5}; var r[5] := {1,2,3,4,5}; sort(v,0,2); sum(v == r) == v[]",
7799 "var v[5] := {1,2,5,3,4}; var r[5] := {1,2,3,4,5}; sort(v,2,4); sum(v == r) == v[]",
7801 "var v[5] := {1,3,5,2,4}; var r[5] := {1,2,3,4,5}; sort(v,'ascending'); sum(v == r) == v[]",
7802 "var v[5] := {1,3,5,2,4}; var r[5] := {1,2,3,4,5}; sort(v,'aScEnDiNg'); sum(v == r) == v[]",
7803 "var v[5] := {5,4,3,2,1}; var r[5] := {1,2,3,4,5}; sort(v,'ascending'); sum(v == r) == v[]",
7804 "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[]",
7805 "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[]",
7806 "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[]",
7808 "var v[5] := {1,3,5,2,4}; var r[5] := {5,4,3,2,1}; sort(v,'descending'); sum(v == r) == v[]",
7809 "var v[5] := {1,3,5,2,4}; var r[5] := {5,4,3,2,1}; sort(v,'DeScEnDiNg'); sum(v == r) == v[]",
7810 "var v[5] := {5,4,3,2,1}; var r[5] := {5,4,3,2,1}; sort(v,'descending'); sum(v == r) == v[]",
7811 "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[]",
7812 "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[]",
7813 "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[]",
7815 "var v[9] := {7,8,9,1,2,3,4,5,6}; nth_element(v,trunc(v[] / 2)); v[v[] / 2] == 5",
7816 "var v[9] := {7,8,9,1,2,3,4,5,6}; nth_element(v,trunc(v[] / 3)); v[v[] / 3] == 4",
7818 "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)",
7819 "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)",
7821 "var v[5]; iota(v, 0,1); var r[5] := { 0, 1, 2, 3, 4}; sum(v == r) == v[]",
7822 "var v[5]; iota(v, 0,2); var r[5] := { 0, 2, 4, 6, 8}; sum(v == r) == v[]",
7823 "var v[5]; iota(v, 1,1); var r[5] := { 1, 2, 3, 4, 5}; sum(v == r) == v[]",
7824 "var v[5]; iota(v, 1,2); var r[5] := { 1, 3, 5, 7, 9}; sum(v == r) == v[]",
7825 "var v[5]; iota(v,-1,1); var r[5] := {-1, 0, 1, 2, 3}; sum(v == r) == v[]",
7826 "var v[5]; iota(v,-1,2); var r[5] := {-1, 1, 3, 5, 7}; sum(v == r) == v[]",
7827 "var v[5]; iota(v,-2,1); var r[5] := {-2,-1, 0, 1, 2}; sum(v == r) == v[]",
7828 "var v[5]; iota(v,-2,2); var r[5] := {-2, 0, 2, 4, 6}; sum(v == r) == v[]",
7829 "var v[5]; iota(v, 0); var r[5] := { 0, 1, 2, 3, 4}; sum(v == r) == v[]",
7830 "var v[5]; iota(v, 1); var r[5] := { 1, 2, 3, 4, 5}; sum(v == r) == v[]",
7831 "var v[5]; iota(v,-1); var r[5] := {-1, 0, 1, 2, 3}; sum(v == r) == v[]",
7832 "var v[5]; iota(v,-2); var r[5] := {-2,-1, 0, 1, 2}; sum(v == r) == v[]",
7833 "var v[5]; iota(v, 0, 0); var r[5] := { 0, 0, 0, 0, 0}; sum(v == r) == v[]",
7834 "var v[5]; iota(v, 1, 0); var r[5] := { 1, 1, 1, 1, 1}; sum(v == r) == v[]",
7836 "var v[5]; iota(v, 0, v[] - 1, 0,1); var r[5] := { 0, 1, 2, 3, 4}; sum(v == r) == v[]",
7837 "var v[5]; iota(v, 0, v[] - 1, 0,2); var r[5] := { 0, 2, 4, 6, 8}; sum(v == r) == v[]",
7838 "var v[5]; iota(v, 0, v[] - 1, 1,1); var r[5] := { 1, 2, 3, 4, 5}; sum(v == r) == v[]",
7839 "var v[5]; iota(v, 0, v[] - 1, 1,2); var r[5] := { 1, 3, 5, 7, 9}; sum(v == r) == v[]",
7840 "var v[5]; iota(v, 0, v[] - 1,-1,1); var r[5] := {-1, 0, 1, 2, 3}; sum(v == r) == v[]",
7841 "var v[5]; iota(v, 0, v[] - 1,-1,2); var r[5] := {-1, 1, 3, 5, 7}; sum(v == r) == v[]",
7842 "var v[5]; iota(v, 0, v[] - 1,-2,1); var r[5] := {-2,-1, 0, 1, 2}; sum(v == r) == v[]",
7843 "var v[5]; iota(v, 0, v[] - 1,-2,2); var r[5] := {-2, 0, 2, 4, 6}; sum(v == r) == v[]",
7844 "var v[5]; iota(v, 0, v[] - 1, 0 ); var r[5] := { 0, 1, 2, 3, 4}; sum(v == r) == v[]",
7845 "var v[5]; iota(v, 0, v[] - 1, 1 ); var r[5] := { 1, 2, 3, 4, 5}; sum(v == r) == v[]",
7846 "var v[5]; iota(v, 0, v[] - 1,-1 ); var r[5] := {-1, 0, 1, 2, 3}; sum(v == r) == v[]",
7847 "var v[5]; iota(v, 0, v[] - 1,-2 ); var r[5] := {-2,-1, 0, 1, 2}; sum(v == r) == v[]",
7848 "var v[5]; iota(v, 0, v[] - 1, 0,0); var r[5] := { 0, 0, 0, 0, 0}; sum(v == r) == v[]",
7849 "var v[5]; iota(v, 0, v[] - 1, 1,0); var r[5] := { 1, 1, 1, 1, 1}; sum(v == r) == v[]",
7851 "var v[5]; iota(v, 1, v[] - 1, 0,1); var r[5] := { 0, 0, 1, 2, 3 }; sum(v == r) == v[]",
7852 "var v[5]; iota(v, 1, v[] - 1, 0,2); var r[5] := { 0, 0, 2, 4, 6 }; sum(v == r) == v[]",
7853 "var v[5]; iota(v, 1, v[] - 1, 1,1); var r[5] := { 0, 1, 2, 3, 4 }; sum(v == r) == v[]",
7854 "var v[5]; iota(v, 1, v[] - 1, 1,2); var r[5] := { 0, 1, 3, 5, 7 }; sum(v == r) == v[]",
7855 "var v[5]; iota(v, 1, v[] - 1,-1,1); var r[5] := { 0, -1, 0, 1, 2 }; sum(v == r) == v[]",
7856 "var v[5]; iota(v, 1, v[] - 1,-1,2); var r[5] := { 0, -1, 1, 3, 5 }; sum(v == r) == v[]",
7857 "var v[5]; iota(v, 1, v[] - 1,-2,1); var r[5] := { 0, -2,-1, 0, 1 }; sum(v == r) == v[]",
7858 "var v[5]; iota(v, 1, v[] - 1,-2,2); var r[5] := { 0, -2, 0, 2, 4 }; sum(v == r) == v[]",
7859 "var v[5]; iota(v, 1, v[] - 1, 0 ); var r[5] := { 0, 0, 1, 2, 3 }; sum(v == r) == v[]",
7860 "var v[5]; iota(v, 1, v[] - 1, 1 ); var r[5] := { 0, 1, 2, 3, 4 }; sum(v == r) == v[]",
7861 "var v[5]; iota(v, 1, v[] - 1,-1 ); var r[5] := { 0, -1, 0, 1, 2 }; sum(v == r) == v[]",
7862 "var v[5]; iota(v, 1, v[] - 1,-2 ); var r[5] := { 0, -2,-1, 0, 1 }; sum(v == r) == v[]",
7864 "var v[5]; iota(v, 1, v[] - 2, 0,1); var r[5] := { 0, 0, 1, 2, 0 }; sum(v == r) == v[]",
7865 "var v[5]; iota(v, 1, v[] - 2, 0,2); var r[5] := { 0, 0, 2, 4, 0 }; sum(v == r) == v[]",
7866 "var v[5]; iota(v, 1, v[] - 2, 1,1); var r[5] := { 0, 1, 2, 3, 0 }; sum(v == r) == v[]",
7867 "var v[5]; iota(v, 1, v[] - 2, 1,2); var r[5] := { 0, 1, 3, 5, 0 }; sum(v == r) == v[]",
7868 "var v[5]; iota(v, 1, v[] - 2,-1,1); var r[5] := { 0, -1, 0, 1, 0 }; sum(v == r) == v[]",
7869 "var v[5]; iota(v, 1, v[] - 2,-1,2); var r[5] := { 0, -1, 1, 3, 0 }; sum(v == r) == v[]",
7870 "var v[5]; iota(v, 1, v[] - 2,-2,1); var r[5] := { 0, -2,-1, 0, 0 }; sum(v == r) == v[]",
7871 "var v[5]; iota(v, 1, v[] - 2,-2,2); var r[5] := { 0, -2, 0, 2, 0 }; sum(v == r) == v[]",
7872 "var v[5]; iota(v, 1, v[] - 2, 0 ); var r[5] := { 0, 0, 1, 2, 0 }; sum(v == r) == v[]",
7873 "var v[5]; iota(v, 1, v[] - 2, 1 ); var r[5] := { 0, 1, 2, 3, 0 }; sum(v == r) == v[]",
7874 "var v[5]; iota(v, 1, v[] - 2,-1 ); var r[5] := { 0, -1, 0, 1, 0 }; sum(v == r) == v[]",
7875 "var v[5]; iota(v, 1, v[] - 2,-2 ); var r[5] := { 0, -2,-1, 0, 0 }; sum(v == r) == v[]",
7877 "var v[5]; iota(v, 0, v[] - 2, 0,1); var r[5] := { 0, 1, 2, 3, 0}; sum(v == r) == v[]",
7878 "var v[5]; iota(v, 0, v[] - 2, 0,2); var r[5] := { 0, 2, 4, 6, 0}; sum(v == r) == v[]",
7879 "var v[5]; iota(v, 0, v[] - 2, 1,1); var r[5] := { 1, 2, 3, 4, 0}; sum(v == r) == v[]",
7880 "var v[5]; iota(v, 0, v[] - 2, 1,2); var r[5] := { 1, 3, 5, 7, 0}; sum(v == r) == v[]",
7881 "var v[5]; iota(v, 0, v[] - 2,-1,1); var r[5] := {-1, 0, 1, 2, 0}; sum(v == r) == v[]",
7882 "var v[5]; iota(v, 0, v[] - 2,-1,2); var r[5] := {-1, 1, 3, 5, 0}; sum(v == r) == v[]",
7883 "var v[5]; iota(v, 0, v[] - 2,-2,1); var r[5] := {-2,-1, 0, 1, 0}; sum(v == r) == v[]",
7884 "var v[5]; iota(v, 0, v[] - 2,-2,2); var r[5] := {-2, 0, 2, 4, 0}; sum(v == r) == v[]",
7885 "var v[5]; iota(v, 0, v[] - 2, 0 ); var r[5] := { 0, 1, 2, 3, 0}; sum(v == r) == v[]",
7886 "var v[5]; iota(v, 0, v[] - 2, 1 ); var r[5] := { 1, 2, 3, 4, 0}; sum(v == r) == v[]",
7887 "var v[5]; iota(v, 0, v[] - 2,-1 ); var r[5] := {-1, 0, 1, 2, 0}; sum(v == r) == v[]",
7888 "var v[5]; iota(v, 0, v[] - 2,-2 ); var r[5] := {-2,-1, 0, 1, 0}; sum(v == r) == v[]",
7890 "var v[5]; iota(v, 0, -1); var r[5] := { 0, -1, -2, -3, -4}; sum(v == r) == v[]",
7891 "var v[5]; iota(v, 0, -2); var r[5] := { 0, -2, -4, -6, -8}; sum(v == r) == v[]",
7892 "var v[5]; iota(v, -1, -2); var r[5] := { -1, -3, -5, -7, -9}; sum(v == r) == v[]",
7894 "var v[5]; iota(v, 0, v[] -1, 0, -1); var r[5] := { 0, -1, -2, -3, -4}; sum(v == r) == v[]",
7895 "var v[5]; iota(v, 0, v[] -1, 0, -2); var r[5] := { 0, -2, -4, -6, -8}; sum(v == r) == v[]",
7896 "var v[5]; iota(v, 0, v[] -1, -1, -2); var r[5] := { -1, -3, -5, -7, -9}; sum(v == r) == v[]",
7898 "var v[5]; iota(v, 0,1); threshold_below(v,2, 0) var r[5] := { 0, 0, 2, 3, 4}; sum(v == r) == v[]",
7899 "var v[5]; iota(v, 0,1); threshold_above(v,2, 0) var r[5] := { 0, 1, 2, 0, 0}; sum(v == r) == v[]",
7901 "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[]",
7902 "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[]",
7904 "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[]",
7905 "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[]",
7907 "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[]",
7908 "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[]",
7910 " 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[]",
7911 " 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[]",
7913 " 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[]",
7914 " 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[]",
7915 " 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[]",
7918 const std::size_t expr_str_list_size =
sizeof(expr_str_list) /
sizeof(std::string);
7922 for (std::size_t i = 0; i < expr_str_list_size; ++i)
7924 expression_t expression;
7925 expression.register_symbol_table(symbol_table);
7927 if (!parser.compile(expr_str_list[i], expression))
7929 printf(
"run_test18() - [14] Error: %s Expression: %s\n",
7930 parser.error().c_str(),
7931 expr_str_list[i].c_str());
7938 const T result = expression.value();
7942 printf(
"run_test18() - Error in evaluation! (11) Expression: %s\n",
7943 expr_str_list[i].c_str());
7958 std::string a =
"a";
7959 std::string b =
"b";
7960 std::string c =
"c";
7961 std::string d =
"d";
7970 "T:T|T:TT|T:TTT|T:TTTT|"
7971 "T:S|T:SS|T:SSS|T:SSSS|"
7972 "T:ST|T:STS|T:STST|"
7973 "T:TS|T:TST|T:TSTS|"
7974 "T:TTSS|T:SSTT|T:STTS|T:TSST"
7993 typedef std::pair<std::string, typename overload_func<T>::test_result_t> test_pack_t;
7995 static const test_pack_t test_pack_list[] =
7997 test_pack_t(
"foo(x)" , test_result_t( 0,
"T" )),
7998 test_pack_t(
"foo(x, y)" , test_result_t( 1,
"TT" )),
7999 test_pack_t(
"foo(x, y, z)" , test_result_t( 2,
"TTT" )),
8000 test_pack_t(
"foo(x, y, z, w)" , test_result_t( 3,
"TTTT")),
8001 test_pack_t(
"foo(x + y)" , test_result_t( 0,
"T" )),
8002 test_pack_t(
"foo(x + y, y + z)" , test_result_t( 1,
"TT" )),
8003 test_pack_t(
"foo(x + y, y + z, z + w)" , test_result_t( 2,
"TTT" )),
8004 test_pack_t(
"foo(x + y, y + z, z + w, w)" , test_result_t( 3,
"TTTT")),
8005 test_pack_t(
"foo(a)" , test_result_t( 4,
"S" )),
8006 test_pack_t(
"foo(a, b)" , test_result_t( 5,
"SS" )),
8007 test_pack_t(
"foo(a, b, c)" , test_result_t( 6,
"SSS" )),
8008 test_pack_t(
"foo(a, b, c, d)" , test_result_t( 7,
"SSSS")),
8009 test_pack_t(
"foo(a + b)" , test_result_t( 4,
"S" )),
8010 test_pack_t(
"foo(a + b, b + c)" , test_result_t( 5,
"SS" )),
8011 test_pack_t(
"foo(a + b, b + c, c + d)" , test_result_t( 6,
"SSS" )),
8012 test_pack_t(
"foo(a + b, b + c, c + d, d)" , test_result_t( 7,
"SSSS")),
8013 test_pack_t(
"foo(a, x)" , test_result_t( 8,
"ST" )),
8014 test_pack_t(
"foo(a, x, b)" , test_result_t( 9,
"STS" )),
8015 test_pack_t(
"foo(a, x, b, y)" , test_result_t(10,
"STST")),
8016 test_pack_t(
"foo(a + b, x + y)" , test_result_t( 8,
"ST" )),
8017 test_pack_t(
"foo(a + b, x + y, b + c)" , test_result_t( 9,
"STS" )),
8018 test_pack_t(
"foo(a + b, x + y, b + c, y + z)" , test_result_t(10,
"STST")),
8019 test_pack_t(
"foo(x, a)" , test_result_t(11,
"TS" )),
8020 test_pack_t(
"foo(x, a, y)" , test_result_t(12,
"TST" )),
8021 test_pack_t(
"foo(x, a, y, b)" , test_result_t(13,
"TSTS")),
8022 test_pack_t(
"foo(x + y, a + b)" , test_result_t(11,
"TS" )),
8023 test_pack_t(
"foo(x + y, a + b, y + z)" , test_result_t(12,
"TST" )),
8024 test_pack_t(
"foo(x + y, a + b, y + z, b + c)" , test_result_t(13,
"TSTS")),
8025 test_pack_t(
"foo(x, y, a, b)" , test_result_t(14,
"TTSS")),
8026 test_pack_t(
"foo(a, b, x, y)" , test_result_t(15,
"SSTT")),
8027 test_pack_t(
"foo(a, x, y, b)" , test_result_t(16,
"STTS")),
8028 test_pack_t(
"foo(x, a, b, y)" , test_result_t(17,
"TSST")),
8029 test_pack_t(
"foo(x + y, y + z, a + b, b + c)" , test_result_t(14,
"TTSS")),
8030 test_pack_t(
"foo(a + b, b + c, x + y, y + z)" , test_result_t(15,
"SSTT")),
8031 test_pack_t(
"foo(a + b, x + y, y + z, b + c)" , test_result_t(16,
"STTS")),
8032 test_pack_t(
"foo(x + y, a + b, b + c, y + z)" , test_result_t(17,
"TSST"))
8035 static const std::size_t test_pack_list_size =
sizeof(test_pack_list) /
sizeof(test_pack_t);
8039 for (std::size_t i = 0; i < test_pack_list_size; ++i)
8041 expression_t expression;
8042 expression.register_symbol_table(symbol_table);
8046 if (!parser.
compile(test_pack_list[i].first, expression))
8048 printf(
"run_test18() - [15] Overload VarArg Error: %s Expression: %s\n",
8049 parser.
error().c_str(),
8050 test_pack_list[i].first.c_str());
8058 bool error_found =
false;
8066 printf(
"run_test18() - Error in evaluation! (12) Expression: %s\n",
8067 test_pack_list[i].first.c_str());
8074 printf(
"run_test18() - Error with ps_index (12) Expression: %s Expected: %d Got: %d\n",
8075 test_pack_list[i].first.c_str(),
8076 static_cast<int>(test_pack_list[i].second.ps_index),
8084 printf(
"run_test18() - Error with parameter seq (12) Expression: %s Expected: %s Got: %s\n",
8085 test_pack_list[i].first.c_str(),
8086 test_pack_list[i].second.param_seq.c_str(),
8103 std::string a =
"a";
8104 std::string b =
"b";
8105 std::string c =
"c";
8106 std::string d =
"d";
8107 std::string result =
"";
8116 "S:T|S:TT|S:TTT|S:TTTT|"
8117 "S:S|S:SS|S:SSS|S:SSSS|"
8118 "S:ST|S:STS|S:STST|"
8119 "S:TS|S:TST|S:TSTS|"
8120 "S:TTSS|S:SSTT|S:STTS|S:TSST"
8140 typedef std::pair<std::string, typename overload_func<T>::test_result_t> test_pack_t;
8142 static const test_pack_t test_pack_list[] =
8144 test_pack_t(
"result := foo(x)" , test_result_t( 0,
"T" )),
8145 test_pack_t(
"result := foo(x, y)" , test_result_t( 1,
"TT" )),
8146 test_pack_t(
"result := foo(x, y, z)" , test_result_t( 2,
"TTT" )),
8147 test_pack_t(
"result := foo(x, y, z, w)" , test_result_t( 3,
"TTTT")),
8148 test_pack_t(
"result := foo(x + y)" , test_result_t( 0,
"T" )),
8149 test_pack_t(
"result := foo(x + y, y + z)" , test_result_t( 1,
"TT" )),
8150 test_pack_t(
"result := foo(x + y, y + z, z + w)" , test_result_t( 2,
"TTT" )),
8151 test_pack_t(
"result := foo(x + y, y + z, z + w, w)" , test_result_t( 3,
"TTTT")),
8152 test_pack_t(
"result := foo(a)" , test_result_t( 4,
"S" )),
8153 test_pack_t(
"result := foo(a, b)" , test_result_t( 5,
"SS" )),
8154 test_pack_t(
"result := foo(a, b, c)" , test_result_t( 6,
"SSS" )),
8155 test_pack_t(
"result := foo(a, b, c, d)" , test_result_t( 7,
"SSSS")),
8156 test_pack_t(
"result := foo(a + b)" , test_result_t( 4,
"S" )),
8157 test_pack_t(
"result := foo(a + b, b + c)" , test_result_t( 5,
"SS" )),
8158 test_pack_t(
"result := foo(a + b, b + c, c + d)" , test_result_t( 6,
"SSS" )),
8159 test_pack_t(
"result := foo(a + b, b + c, c + d, d)" , test_result_t( 7,
"SSSS")),
8160 test_pack_t(
"result := foo(a, x)" , test_result_t( 8,
"ST" )),
8161 test_pack_t(
"result := foo(a, x, b)" , test_result_t( 9,
"STS" )),
8162 test_pack_t(
"result := foo(a, x, b, y)" , test_result_t(10,
"STST")),
8163 test_pack_t(
"result := foo(a + b, x + y)" , test_result_t( 8,
"ST" )),
8164 test_pack_t(
"result := foo(a + b, x + y, b + c)" , test_result_t( 9,
"STS" )),
8165 test_pack_t(
"result := foo(a + b, x + y, b + c, y + z)" , test_result_t(10,
"STST")),
8166 test_pack_t(
"result := foo(x, a)" , test_result_t(11,
"TS" )),
8167 test_pack_t(
"result := foo(x, a, y)" , test_result_t(12,
"TST" )),
8168 test_pack_t(
"result := foo(x, a, y, b)" , test_result_t(13,
"TSTS")),
8169 test_pack_t(
"result := foo(x + y, a + b)" , test_result_t(11,
"TS" )),
8170 test_pack_t(
"result := foo(x + y, a + b, y + z)" , test_result_t(12,
"TST" )),
8171 test_pack_t(
"result := foo(x + y, a + b, y + z, b + c)" , test_result_t(13,
"TSTS")),
8172 test_pack_t(
"result := foo(x, y, a, b)" , test_result_t(14,
"TTSS")),
8173 test_pack_t(
"result := foo(a, b, x, y)" , test_result_t(15,
"SSTT")),
8174 test_pack_t(
"result := foo(a, x, y, b)" , test_result_t(16,
"STTS")),
8175 test_pack_t(
"result := foo(x, a, b, y)" , test_result_t(17,
"TSST")),
8176 test_pack_t(
"result := foo(x + y, y + z, a + b, b + c)" , test_result_t(14,
"TTSS")),
8177 test_pack_t(
"result := foo(a + b, b + c, x + y, y + z)" , test_result_t(15,
"SSTT")),
8178 test_pack_t(
"result := foo(a + b, x + y, y + z, b + c)" , test_result_t(16,
"STTS")),
8179 test_pack_t(
"result := foo(x + y, a + b, b + c, y + z)" , test_result_t(17,
"TSST"))
8182 static const std::size_t test_pack_list_size =
sizeof(test_pack_list) /
sizeof(test_pack_t);
8186 for (std::size_t i = 0; i < test_pack_list_size; ++i)
8188 expression_t expression;
8189 expression.register_symbol_table(symbol_table);
8193 if (!parser.
compile(test_pack_list[i].first, expression))
8195 printf(
"run_test18() - [16] Overload VarArg Error: %s Expression: %s\n",
8196 parser.
error().c_str(),
8197 test_pack_list[i].first.c_str());
8205 bool error_found =
false;
8213 if (result !=
"string result")
8215 printf(
"run_test18() - Error in evaluation! (13) Expression: %s\n",
8216 test_pack_list[i].first.c_str());
8223 printf(
"run_test18() - Error with ps_index (13) Expression: %s Expected: %d Got: %d\n",
8224 test_pack_list[i].first.c_str(),
8225 static_cast<int>(test_pack_list[i].second.ps_index),
8233 printf(
"run_test18() - Error with parameter seq (13) Expression: %s Expected: %s Got: %s\n",
8234 test_pack_list[i].first.c_str(),
8235 test_pack_list[i].second.param_seq.c_str(),
8253 typedef std::pair<std::string,std::size_t> rtc_test_t;
8254 static const rtc_test_t rtc_tests[] =
8256 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i + v[]]; } ", 5 ),
8257 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i + 10]; } ", 5 ),
8258 std::make_pair(
" x:= 0; for (var i := 0; i < (2 * v[]); i += 1) { x += (v[i] == vv[i]); } ", 10),
8259 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i + v[]] := i; } ", 5 ),
8260 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i + v[]] <=> v[i]; } ", 5 ),
8261 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i] <=> v[i + v[]]; } ", 10),
8262 std::make_pair(
" var z[5] := [1]; for (var i := 0; i < z[]; i += 1) { z[i + z[]]; } ", 5 ),
8263 std::make_pair(
" var z[5] := [1]; for (var i := 0; i < z[]; i += 1) { z[i + 10]; } ", 5 ),
8264 std::make_pair(
" var z[5] := [1]; for (var i := 0; i < z[]; i += 1) { z[i + z[]] := i; } ", 5 ),
8265 std::make_pair(
" var z[5] := [1]; for (var i := 0; i < z[]; i += 1) { z[i + z[]] <=> z[i]; } ", 5 ),
8266 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v*w)[i + v[]]; } ", 10),
8267 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v*w)[i+w[]]; } ", 10),
8268 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v+w)[i + v[]]; } ", 10),
8269 std::make_pair(
" for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v+w)[i+w[]]; } ", 10),
8270 std::make_pair(
" var z[4] := [1]; for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v*z)[i+v[]]; } ", 10),
8271 std::make_pair(
" var z[4] := [1]; for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v*z)[i+w[]]; } ", 9 ),
8272 std::make_pair(
" var z[4] := [1]; for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v+z)[i+v[]]; } ", 10),
8273 std::make_pair(
" var z[4] := [1]; for (var i := 0; i < v[]; i += 1) { v[i+v[]] := (v+z)[i+z[]]; } ", 10),
8274 std::make_pair(
" var xx := 1; var yy := 1; var qq[5] := {0,1,2,3,4}; var i[5] := {0,1,2,3,4}; qq[i[0]] += xx ", 0 ),
8275 std::make_pair(
" var xx := 1; var yy := 1; var qq[5] := {0,1,2,3,4}; var i[5] := {0,1,2,3,4}; ((qq[1] + xx) == (xx + qq[1])) ", 0 ),
8276 std::make_pair(
" var xx := 1; var yy := 1; var qq[5] := {0,1,2,3,4}; var i[5] := {0,1,2,3,4}; ((qq[0] += xx) == xx) ", 0 ),
8277 std::make_pair(
" var xx := 1; var yy := 1; var qq[5] := {0,1,2,3,4}; var i[5] := {0,1,2,3,4}; ((qq[0] += xx + yy) == (xx + yy)) ", 0 ),
8278 std::make_pair(
" var xx := 1; var yy := 1; var qq[5] := {0,1,2,3,4}; var i[5] := {0,1,2,3,4}; ((qq[0] -= xx) == -xx) ", 0 ),
8279 std::make_pair(
" var xx := 1; var yy := 1; var qq[5] := {0,1,2,3,4}; var i[5] := {0,1,2,3,4}; ((qq[0] -= (xx + yy)) == -(xx + yy)) ", 0 ),
8280 std::make_pair(
" var xx := 1; var yy := 1; var qq[5] := {0,1,2,3,4}; var i[5] := {0,1,2,3,4}; ((qq[1] + qq[2]) == (qq[3 - 1] + qq[2 * 1/2]))", 0 ),
8281 std::make_pair(
" var xx := 1; var yy := 1; var qq[5] := {0,1,2,3,4}; var i[5] := {0,1,2,3,4}; (qq[qq[1]] == qq[1]) ", 0 ),
8282 std::make_pair(
" var xx := 1; var yy := 1; var qq[5] := {0,1,2,3,4}; var i[5] := {0,1,2,3,4}; (qq[1] += qq[1]) == qq[1 + 1] ", 0 ),
8283 std::make_pair(
" var xx := 1; var yy := 1; var qq[5] := {0,1,2,3,4}; var i[5] := {0,1,2,3,4}; ((qq[i[1]] + xx) == (xx + qq[i[1]])) ", 0 ),
8284 std::make_pair(
" var xx := 1; var yy := 1; var qq[5] := {0,1,2,3,4}; var i[5] := {0,1,2,3,4}; ((qq[i[0]] += xx) == xx) ", 0 ),
8285 std::make_pair(
" var xx := 1; var yy := 1; var qq[5] := {0,1,2,3,4}; var i[5] := {0,1,2,3,4}; ((qq[i[0]] += xx + yy) == (xx + yy)) ", 0 ),
8286 std::make_pair(
" var xx := 1; var yy := 1; var qq[5] := {0,1,2,3,4}; var i[5] := {0,1,2,3,4}; ((qq[i[0]] -= xx) == -xx) ", 0 ),
8287 std::make_pair(
" var xx := 1; var yy := 1; var qq[5] := {0,1,2,3,4}; var i[5] := {0,1,2,3,4}; ((qq[i[0]] -= (xx + yy)) == -(xx + yy))", 0 ),
8288 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 ),
8289 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 ),
8290 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 ),
8293 static const std::size_t rtc_tests_size =
sizeof(rtc_tests) /
sizeof(rtc_test_t);
8295 bool error_found =
false;
8297 for (std::size_t i = 0; i < rtc_tests_size; ++i)
8299 const std::string& expression_str = rtc_tests[i].first;
8303 T v[5] = { 0, 1, 2, 3, 4 };
8304 T w[3] = { 0, 1, 2 };
8308 symbol_table_t symbol_table;
8309 expression_t expression;
8312 symbol_table.add_variable(
"x" , x );
8313 symbol_table.add_vector (
"v" , v );
8314 symbol_table.add_vector (
"w" , w );
8315 symbol_table.add_vector (
"vv", vv);
8316 symbol_table.add_vector (
"ww", ww);
8320 expression.register_symbol_table(symbol_table);
8322 parser.register_vector_access_runtime_check(vartc);
8324 if (!parser.compile(expression_str, expression))
8326 printf(
"run_test18() - Error: %s\t [1] Expression: %s\n",
8327 parser.error().c_str(),
8328 expression_str.c_str());
8337 if (vartc.
rtc_count != rtc_tests[i].second)
8339 printf(
"run_test18() - Expected rtc_count: %d got rtc_count: %d [0] Expression: %s\n",
8340 static_cast<unsigned int>(rtc_tests[i].second),
8341 static_cast<unsigned int>(vartc.
rtc_count),
8342 expression_str.c_str());
8349 T v[5] = { 0, 1, 2, 3, 4 };
8350 T w[3] = { 0, 1, 2 };
8351 T v0[5] = { 0, 1, 2, 3, 4 };
8352 T v1[5] = { 0, 1, 2, 3, 4 };
8356 symbol_table_t symbol_table;
8357 expression_t expression;
8360 symbol_table.add_variable(
"x" , x );
8361 symbol_table.add_vector (
"v" , v );
8362 symbol_table.add_vector (
"w" , w );
8363 symbol_table.add_vector (
"vv", vv);
8364 symbol_table.add_vector (
"ww", ww);
8368 expression.register_symbol_table(symbol_table);
8370 parser.register_vector_access_runtime_check(vartc);
8372 if (!parser.compile(expression_str, expression))
8374 printf(
"run_test18() - Error: %s\t [2] Expression: %s\n",
8375 parser.error().c_str(),
8376 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 [1] 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());
8399 if (vartc.
rtc_count != rtc_tests[i].second)
8401 printf(
"run_test18() - Expected rtc_count: %d got rtc_count: %d [2] Expression: %s\n",
8402 static_cast<unsigned int>(rtc_tests[i].second),
8403 static_cast<unsigned int>(vartc.
rtc_count),
8404 expression_str.c_str());
8449 typedef typename compositor_t::function function_t;
8454 compositor_t compositor;
8457 compositor.add(function_t(
"f",
"x + 2",
"x"));
8460 compositor.add(function_t(
"g",
"x^2 - 3",
"x"));
8463 compositor.add(function_t(
"fof",
"f(f(x))",
"x"));
8466 compositor.add(function_t(
"gog",
"g(g(x))",
"x"));
8469 compositor.add(function_t(
"fog",
"f(g(x))",
"x"));
8472 compositor.add(function_t(
"gof",
"g(f(x))",
"x"));
8475 compositor.add(function_t(
"fogof",
"f(g(f(x)))",
"x"));
8478 compositor.add(function_t(
"gofog",
"g(f(g(x)))",
"x"));
8480 symbol_table_t& symbol_table = compositor.symbol_table();
8481 symbol_table.add_constants();
8482 symbol_table.add_variable(
"x", x);
8484 static const std::string expr_str_list[] =
8486 "equal(f(x),(x + 2))",
8487 "equal(g(x),(x^2 - 3))",
8488 "equal(fof(x),(x + 4))",
8489 "equal(gog(x),(x^4 - 6x^2 + 6))",
8490 "equal(fog(x),(x^2 - 1))",
8491 "equal(gof(x),(x^2 + 4x + 1))",
8492 "equal(fogof(x),(x^2 + 4x + 3))",
8493 "equal(gofog(x),(x^4 - 2x^2 - 2))"
8495 static const std::size_t expr_str_list_size =
sizeof(expr_str_list) /
sizeof(std::string);
8499 for (std::size_t i = 0; i < expr_str_list_size; ++i)
8501 expression_t expression;
8502 expression.register_symbol_table(symbol_table);
8506 if (!parser.compile(expr_str_list[i], expression))
8508 printf(
"run_test19() - Error: %s Expression: %s\n",
8509 parser.error().c_str(),
8510 expr_str_list[i].c_str());
8518 bool error_found =
false;
8524 printf(
"run_test19() - Error in evaluation! (1) Expression: %s\n",
8525 expr_str_list[i].c_str());
8538 const std::size_t
rounds = 100;
8540 for (std::size_t r = 0; r <
rounds; ++r)
8549 compositor_t compositor;
8555 .expression(
"3 * 2"));
8562 .expression(
"5 * (f0 + x)"));
8569 .expression(
"7 * (f1(x) + f1(y))"));
8575 .var(
"x").var(
"y").var(
"z")
8576 .expression(
"9 * (f2(x,y) + f2(y,z) + f2(x,z))"));
8582 .var(
"x").var(
"y").var(
"z").var(
"w")
8583 .expression(
"11 * (f3(x,y,z) + f3(y,z,w) + f3(z,w,x))"));
8589 .var(
"x").var(
"y").var(
"z").var(
"w").var(
"u")
8590 .expression(
"13 * (f4(x,y,z,w) + f4(y,z,w,u) + f4(z,w,u,x) + f4(w,u,x,y))"));
8596 .var(
"x").var(
"y").var(
"z")
8597 .var(
"w").var(
"u").var(
"v")
8598 .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))"));
8600 symbol_table_t& symbol_table = compositor.symbol_table();
8601 symbol_table.add_constants();
8602 symbol_table.add_variable(
"x", x);
8603 symbol_table.add_variable(
"y", y);
8604 symbol_table.add_variable(
"z", z);
8605 symbol_table.add_variable(
"w", w);
8606 symbol_table.add_variable(
"u", u);
8607 symbol_table.add_variable(
"v", v);
8611 const std::string expr_str_list[] =
8627 const std::size_t expr_str_list_size =
sizeof(expr_str_list) /
sizeof(std::string);
8629 const T result_list[] =
8645 bool error_found =
false;
8647 for (std::size_t i = 0; i < expr_str_list_size; ++i)
8649 expression_t expression;
8650 expression.register_symbol_table(symbol_table);
8652 if (!parser.compile(expr_str_list[i], expression))
8654 printf(
"run_test19() - Error: %s Expression: %s\n",
8655 parser.error().c_str(),
8656 expr_str_list[i].c_str());
8662 const T result = expression.value();
8664 if (result_list[i] != result)
8666 printf(
"run_test19() - Error in evaluation! (2) Expression: %s Expected: %10.1f\tResult: %10.1f\n",
8667 expr_str_list[i].c_str(),
8668 result_list[i].toDouble(),
8686 compositor_t compositor;
8693 " if (0 == (x % y),false, "
8694 " is_prime_impl1(x,y - 1))) ",
8701 "if (frac(x) != 0, false, "
8702 " if (x <= 0, false, "
8703 " is_prime_impl1(x,min(x - 1,trunc(sqrt(x)) + 1)))) ",
8712 " case y == 1 : true; "
8713 " case (x % y) == 0 : false; "
8714 " default : is_prime_impl2(x,y - 1);"
8724 " case x <= 0 : false; "
8725 " case frac(x) != 0 : false; "
8726 " default : is_prime_impl2(x,min(x - 1,trunc(sqrt(x)) + 1));"
8738 " case y == 1 : ~(y := 0, true);"
8739 " case (x % y) == 0 : ~(y := 0,false);"
8740 " default : y := y - 1; "
8751 " case x <= 0 : false; "
8752 " case frac(x) != 0 : false; "
8753 " default : is_prime_impl3(x,min(x - 1,trunc(sqrt(x)) + 1));"
8763 " case 1 == x : false; "
8764 " case 2 == x : true; "
8765 " case 3 == x : true; "
8766 " case 5 == x : true; "
8767 " case 7 == x : true; "
8768 " case 0 == x % 2 : false; "
8771 " for (var i := 3; i < y; i += 2) "
8773 " if ((x % i) == 0) "
8788 " case x <= 0 : false; "
8789 " case frac(x) != 0 : false; "
8790 " default : is_prime_impl4(x,min(x - 1,trunc(sqrt(x)) + 1));"
8794 symbol_table_t& symbol_table = compositor.symbol_table();
8795 symbol_table.add_constants();
8796 symbol_table.add_variable(
"x",x);
8798 const std::string expression_str[] =
8806 const std::size_t expression_count =
sizeof(expression_str) /
sizeof(std::string);
8810 for (std::size_t i = 0; i < expression_count; ++i)
8814 expression_t expression;
8815 expression.register_symbol_table(symbol_table);
8817 if (!parser.compile(expression_str[i],expression))
8819 printf(
"run_test19() - Error: %s Expression%d: %s\n",
8820 parser.error().c_str(),
8821 static_cast<unsigned int>(i),
8822 expression_str[i].c_str());
8830 bool error_found =
false;
8832 const std::size_t prime_list[] =
8834 2, 3, 5, 7, 11, 13, 17, 19,
8835 877, 947, 1087, 1153, 1229, 1297, 1381, 1453,
8836 1523, 1597, 1663, 1741, 1823, 1901, 1993, 2063,
8837 2131, 2221, 2293, 2371, 2437, 2539, 2621, 2689,
8838 2749, 2833, 2909, 3001, 3083, 3187, 3259, 3343,
8839 3433, 3517, 3581, 3659, 3733, 3823, 3911, 4001,
8840 4073, 4153, 4241, 4327, 4421, 4507, 4591, 4663,
8841 4759, 4861, 4943, 5009, 5099, 5189, 5281, 5393,
8842 5449, 5527, 5641, 5701, 5801, 5861, 5953, 6067,
8843 6143, 6229, 6311, 6373, 6481, 6577, 6679, 6763,
8844 6841, 6947, 7001, 7109, 7211, 7307, 7417, 7507,
8845 104309, 104311, 104323, 104327, 104347, 104369, 104381, 104383,
8846 104393, 104399, 104417, 104459, 104471, 104473, 104479, 104491,
8847 104513, 104527, 104537, 104543, 104549, 104551, 104561, 104579,
8848 104593, 104597, 104623, 104639, 104651, 104659, 104677, 104681,
8849 104683, 104693, 104701, 104707, 104711, 104717, 104723, 104729,
8850 1000621, 1000639, 1000651, 1000667, 1000669, 1001023, 1001027, 1001041
8853 const std::size_t prime_list_size =
sizeof(prime_list) /
sizeof(std::size_t);
8855 for (std::size_t i = 0; (i < prime_list_size) && (!error_found); ++i)
8857 x =
static_cast<T
>(prime_list[i]);
8859 std::vector<T> result(expression_count,T(0));
8868 if (result[j] != result[0])
8877 printf(
"run_test19() - Error in evaluation! (3) Results don't match! Prime: %d\n",
8878 static_cast<unsigned int>(prime_list[i]));
8882 printf(
"Expression[%02d]: %s = %d\n",
8883 static_cast<unsigned int>(j),
8884 expression_str[j].c_str(),
8885 static_cast<unsigned int>(result[j].toDouble()));
8890 printf(
"run_test19() - Error in evaluation! (4) Results don't match! Prime: %d\n",
8891 static_cast<unsigned int>(prime_list[i]));
8895 printf(
"Expression[%02d]: %s = %d\n",
8896 static_cast<unsigned int>(j),
8897 expression_str[j].c_str(),
8898 static_cast<unsigned int>(result[j].toDouble()));
8912 compositor_t compositor;
8920 " fibonacci1(x - 1) + fibonacci1(x - 2)))",
8929 " case x == 0 : 0; "
8930 " case x == 1 : 1; "
8931 " default : fibonacci2(x - 1) + fibonacci2(x - 2);"
8941 " case x == 0 : 0; "
8942 " case x == 1 : 1; "
8944 " while ((x := (x - 1)) > 0) "
8958 "fibonacci_impl3(x,0,1,0)",
8967 " case x == 0 : 0; "
8968 " case x == 1 : 1; "
8984 "fibonacci_impl4(x,0,1,0)",
8991 "if ((x == 0) or (x == 1)) "
8994 " fibonacci5(x - 1) + fibonacci5(x - 2); ",
8997 symbol_table_t& symbol_table = compositor.symbol_table();
8999 symbol_table.add_constants();
9000 symbol_table.add_variable(
"x",x);
9002 const std::string expression_str[] =
9011 const std::size_t expression_count =
sizeof(expression_str) /
sizeof(std::string);
9015 for (std::size_t i = 0; i < expression_count; ++i)
9019 expression_t expression;
9020 expression.register_symbol_table(symbol_table);
9022 if (!parser.compile(expression_str[i],expression))
9024 printf(
"run_test19() - Error: %s Expression[%02d]: %s\n",
9025 parser.error().c_str(),
9026 static_cast<unsigned int>(i),
9027 expression_str[i].c_str());
9035 bool error_found =
false;
9037 const std::size_t fibonacci_list[] =
9043 987, 1597, 2584, 4181,
9044 6765, 10946, 17711, 28657,
9045 46368, 75025, 121393, 196418,
9046 317811, 514229, 832040, 1346269
9049 const std::size_t fibonacci_list_size =
sizeof(fibonacci_list) /
sizeof(std::size_t);
9051 for (std::size_t i = 0; (i < fibonacci_list_size) && (!error_found); ++i)
9053 x =
static_cast<T
>(i);
9055 std::vector<T> result(expression_count,T(0));
9064 if (result[j] != result[0])
9073 printf(
"run_test19() - Error in evaluation! (5) Results don't match! fibonacci(%d) = %d\n",
9074 static_cast<unsigned int>(i),
9075 static_cast<unsigned int>(fibonacci_list[i]));
9079 printf(
"Expression[%02d]: %s = %d\n",
9080 static_cast<unsigned int>(j),
9081 expression_str[j].c_str(),
9082 static_cast<unsigned int>(result[j].toDouble()));
9087 printf(
"run_test19() - Error in evaluation! (6) Results don't match! fibonacci(%d) = %d\n",
9088 static_cast<unsigned int>(i),
9089 static_cast<unsigned int>(fibonacci_list[i]));
9093 printf(
"Expression[%02d]: %s = %d\n",
9094 static_cast<unsigned int>(j),
9095 expression_str[j].c_str(),
9096 static_cast<unsigned int>(result[j].toDouble()));
9110 symbol_table_t symbol_table;
9112 symbol_table.add_constants();
9113 symbol_table.add_variable(
"x",x);
9115 compositor_t compositor(symbol_table);
9123 " case x < 0 : -inf; "
9124 " case x == 0 : 0; "
9125 " case x == 1 : 1; "
9131 " y := (1 / 2) * (y + (x / y)); "
9132 " if (equal(y * y,x)) "
9134 " until ((z -= 1) <= 0); "
9143 "newton_sqrt_impl(x,0,0)",
"x"));
9145 std::string expression_str =
"newton_sqrt(x)";
9147 expression_t expression;
9149 expression.register_symbol_table(symbol_table);
9153 if (!parser.compile(expression_str,expression))
9155 printf(
"run_test19() - Error: %s Expression: %s\n",
9156 parser.error().c_str(),
9157 expression_str.c_str());
9162 bool error_found =
false;
9164 for (std::size_t i = 0; i < 100; ++i)
9166 x =
static_cast<T
>(i);
9168 const T result = expression.value();
9170 if (
not_equal(result,mpfr::sqrt(x),T(0.0000001)))
9172 printf(
"run_test19() - Computation Error "
9173 "Expression: [%s]\tExpected: %12.8f\tResult: %12.8f\n",
9174 expression_str.c_str(),
9175 mpfr::sqrt(x).toDouble(),
9189 symbol_table_t symbol_table;
9191 symbol_table.add_constants();
9193 compositor_t compositor(symbol_table);
9199 " var width := 118; "
9200 " var height := 41; "
9201 " var imag_max := +1; "
9202 " var imag_min := -1; "
9203 " var real_max := +1; "
9204 " var real_min := -2.5; "
9205 " var x_step := (real_max - real_min) / width; "
9206 " var y_step := (imag_max - imag_min) / height; "
9207 " for (var y := 0; y < height; y += 1) "
9209 " var imag := imag_min + (y_step * y); "
9210 " for (var x := 0; x < width; x += 1) "
9212 " var real := real_min + x_step * x; "
9213 " var z_real := real; "
9214 " var z_imag := imag; "
9216 " for (var n := 0; n < 30; n += 1) "
9218 " var a := z_real^2; "
9219 " var b := z_imag^2; "
9220 " plot_value := n; "
9221 " if ((a + b) < 4) "
9223 " z_imag := 2 * z_real * z_imag + imag; "
9224 " z_real := a - b + real; "
9232 std::string expression_str =
"mandelbrot()";
9234 expression_t expression;
9236 expression.register_symbol_table(symbol_table);
9240 if (!parser.compile(expression_str,expression))
9242 printf(
"run_test19() - Error: %s Expression: %s\n",
9243 parser.error().c_str(),
9244 expression_str.c_str());
9249 for (std::size_t i = 0; i < 100; ++i)
9258 symbol_table_t symbol_table;
9260 symbol_table.add_variable(
"x",x);
9262 compositor_t compositor(symbol_table);
9270 " fooboo(x - 1) + x; "
9275 std::string expression_str =
"fOoBoO(x)";
9277 expression_t expression;
9279 expression.register_symbol_table(symbol_table);
9283 if (!parser.compile(expression_str,expression))
9285 printf(
"run_test19() - Error: %s Expression: %s\n",
9286 parser.error().c_str(),
9287 expression_str.c_str());
9294 for (std::size_t i = 0; i < 100; ++i)
9300 const T result = expression.value();
9304 printf(
"run_test19() - FooBoo(%5.2f) Expected: %5.2f\tResult: %5.2f\n",
9305 static_cast<double>(x.toDouble()),
9306 static_cast<double>(sum.toDouble()),
9307 static_cast<double>(result.toDouble()));
9315 const std::pair<std::string,std::string> test_funcprog[] =
9319 " var s := depth_to_str(depth); "
9323 " if (recursive(depth - 1) == false) "
9329 " s == depth_to_str(depth); ",
9336 " var v[7] := [ depth ]; "
9340 " if (recursive(depth - 1) == false) "
9346 " return [sum(v == depth) == v[]]; ",
9353 " var v1[ 7] := [ depth ]; "
9354 " var v2[21] := [ depth ]; "
9358 " if (recursive(depth - 1) == false) "
9364 " (sum(v1 == depth) == v1[]) and "
9365 " (sum(v2 == depth) == v2[]) ; "
9373 " var s := depth_to_str(depth); "
9375 " for (var i := 0; i < 2; i += 1) "
9379 " if (recursive(depth - 1) == false) "
9386 " s == depth_to_str(depth); ",
9393 " var s := depth_to_str(depth); "
9395 " for (var i := 0; i < 2; i += 1) "
9397 " for (var j := 0; j < 2; j += 1) "
9401 " if (recursive(depth - 1) == false) "
9409 " s == depth_to_str(depth); ",
9416 " var v[7] := [ depth ]; "
9418 " for (var i := 0; i < 2; i += 1) "
9420 " var w[21] := [ depth + 1 ]; "
9424 " if (recursive(depth - 1) == false) "
9430 " if (sum(w == (depth + 1)) != w[]) "
9436 " return [sum(v == depth) == v[]]; ",
9443 " var v[7] := [ depth ]; "
9445 " for (var i := 0; i < 2; i += 1) "
9447 " var u[21] := [ depth + 1 ]; "
9449 " for (var j := 0; j < 2; j += 1) "
9451 " var w[35] := [ depth + 2 ]; "
9455 " if (recursive(depth - 1) == false) "
9461 " if (sum(w == (depth + 2)) != w[]) "
9467 " if (sum(u == (depth + 1)) != u[]) "
9473 " return [sum(v == depth) == v[]]; ",
9480 " var s := depth_to_str(depth); "
9481 " var v[7] := [ depth ]; "
9485 " if (recursive(depth - 1) == false) "
9493 " (s == depth_to_str(depth)) and "
9494 " (sum(v == depth) == v[]) "
9502 " var s0 := depth_to_str(depth); "
9503 " var v0[7] := [ depth ]; "
9504 " var s1 := depth_to_str(depth); "
9505 " var v1[42] := [ depth ]; "
9509 " if (recursive(depth - 1) == false) "
9517 " (s0 == depth_to_str(depth)) and "
9518 " (sum(v0 == depth) == v0[]) and "
9519 " (s1 == depth_to_str(depth)) and "
9520 " (sum(v1 == depth) == v1[]) "
9528 " var s := depth_to_str(depth); "
9529 " var v[7] := [ depth ]; "
9531 " for (var i := 0; i < 2; i += 1) "
9535 " if (recursive(depth - 1) == false) "
9544 " (s == depth_to_str(depth)) and "
9545 " (sum(v == depth) == v[]) "
9553 " var s0 := depth_to_str(depth); "
9554 " var v0[7] := [ depth ]; "
9555 " var s1 := depth_to_str(depth); "
9556 " var v1[42] := [ depth ]; "
9558 " for (var i := 0; i < 2; i += 1) "
9562 " if (recursive(depth - 1) == false) "
9571 " (s0 == depth_to_str(depth)) and "
9572 " (sum(v0 == depth) == v0[]) and "
9573 " (s1 == depth_to_str(depth)) and "
9574 " (sum(v1 == depth) == v1[]) "
9582 " var s0 := depth_to_str(depth); "
9583 " var v0[7] := [ depth ]; "
9585 " for (var i := 0; i < 2; i += 1) "
9587 " var s1 := depth_to_str(depth); "
9588 " var v1[21] := [ depth + 1 ]; "
9592 " if (recursive(depth - 1) == false) "
9598 " if (s1 != depth_to_str(depth)) "
9603 " if (sum(v1 == (depth + 1)) != v1[]) "
9611 " (s0 == depth_to_str(depth)) and "
9612 " (sum(v0 == depth) == v0[]) "
9623 " recursive(depth - 1) + "
9624 " recursive(depth - 2) ; ",
9629 " for (var i := 0; i < n; i += 1) "
9631 " total += recursive(i); "
9637 const std::size_t test_funcprog_size =
sizeof(test_funcprog) /
sizeof(std::pair<std::string,std::string>);
9638 const std::size_t
rounds = 5;
9642 for (std::size_t r = 0; r <
rounds; ++r)
9644 for (std::size_t i = 0; i < test_funcprog_size; ++i)
9648 symbol_table_t symbol_table;
9649 symbol_table.add_function(
"depth_to_str",dts);
9651 compositor_t compositor(symbol_table);
9653 const bool comp_result = compositor.add(
9654 function_t(
"recursive")
9657 ( test_funcprog[i].first ));
9661 printf(
"run_test19() - Compositor Error: %s\nfunction: %s\n",
9662 compositor.error().c_str(),
9663 test_funcprog[i].first.c_str());
9669 expression_t expression;
9670 expression.register_symbol_table(symbol_table);
9674 if (!parser.compile(test_funcprog[i].second, expression))
9676 printf(
"run_test19() - Error: %s Expression: %s\n",
9677 parser.error().c_str(),
9678 test_funcprog[i].second.c_str());
9684 if (T(1) != expression.value())
9686 printf(
"run_test19() - Evaluation Error: test_funcprog %d function: %s\n",
9687 static_cast<int>(i),
9688 test_funcprog[i].second.c_str());
9703 symbol_table_t symbol_table;
9705 symbol_table.add_constants();
9707 const std::string expression_string =
9708 " var sieve[10^7] := [false]; "
9709 " var m := trunc(sqrt(sieve[])); "
9711 " sieve[0] := true; "
9712 " sieve[1] := true; "
9714 " for (var i := 0; i <= m; i += 1) "
9716 " if (false == sieve[i]) "
9718 " for (var j := (i * i); j < sieve[]; j += i) "
9720 " sieve[j] := true; "
9725 " var prime_count := 0; "
9726 " for (var i := 0; i < sieve[]; i += 1) "
9728 " if (false == sieve[i]) "
9730 " prime_count += 1; "
9734 " prime_count == 664579; ";
9736 expression_t expression;
9738 expression.register_symbol_table(symbol_table);
9742 if (!parser.compile(expression_string,expression))
9744 printf(
"run_test19() - Error: %s Expression: %s\n",
9745 parser.error().c_str(),
9746 expression_string.c_str());
9751 if (T(1) != expression.value())
9753 printf(
"run_test19() - Prime Sieve Computation Error");
9760 symbol_table_t symbol_table;
9762 symbol_table.add_constants();
9764 const std::string expression_str[] =
9766 "var delta := 10^-7; var total := 0; for (var i := 0; i <= 3; i += delta) { total += "
9767 "erf(i) }; abs((delta * total) - (3 * erf(3) + (1 / exp(9) - 1) / sqrt(pi))) < 0.000001",
9769 "var delta := 10^-7; var total := 0; for (var i := 0; i <= 3; i += delta) { total += "
9770 "erfc(i) }; abs((delta * total) - (3 * erfc(3) + ((1 - 1 / exp(9)) / sqrt(pi)))) < 0.000001"
9777 for (std::size_t i = 0; i < 2; ++i)
9779 e[i].register_symbol_table(symbol_table);
9781 if (!parser.compile(expression_str[i],e[i]))
9783 printf(
"run_test19() - Error: %s Expression: %s\n",
9784 parser.error().c_str(),
9785 expression_str[i].c_str());
9790 if (T(1) != e[i].value())
9792 printf(
"run_test19() - erf/erfc computation error %d",
9793 static_cast<unsigned int>(i));
10336 symbol_table_t symbol_table;
10337 symbol_table.add_constants();
10338 symbol_table.add_variable(
"x",x);
10339 symbol_table.add_variable(
"y",y);
10340 symbol_table.add_variable(
"z",z);
10347 "return[x + y,y - x]; x;",
10348 "return[x + y,y - x,'abc']; x;",
10349 "if (x < y) return [1,'abc1']; else return [2,'abc2',x];" ,
10350 "if (x > y) return [1,'abc1']; else return [2,'abc2',x];" ,
10351 "if (x < y) { return [1,'abc1'];} else { return [2,'abc2',x];}",
10352 "if (x > y) { return [1,'abc1'];} else { return [2,'abc2',x];}",
10353 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [1]; } ",
10354 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [1,'abc']; } ",
10355 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [1,'abc',x]; }",
10356 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [1,'abc',x,y]; }",
10357 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [1,'abc',x,y,z]; }",
10358 "for(var i := 0; i < 10; i += 1) { if (i == 5) return [2,'abc2',x]; else x += 1; }",
10359 "for(var i := 0; i < 10; i += 1) { if (i == 5) { return [1,'abc1'];} else x += 1; }"
10362 static const std::string result_list[] =
10384 bool error_found =
false;
10388 expression_t expression;
10389 expression.register_symbol_table(symbol_table);
10395 printf(
"run_test21() - Error: %s Expression: %s [1]\n",
10396 parser.error().c_str(),
10399 error_found =
true;
10402 else if (!parser.dec().return_present())
10404 printf(
"run_test21() - Expected a return statement Expression: %s [1]\n",
10407 error_found =
true;
10411 expression.value();
10413 std::string pattern = results_to_string<T>(expression.results());
10415 if (!expression.return_invoked())
10417 printf(
"run_test21() - Invalid return invoke state [1] Expression: %s\n",
10420 error_found =
true;
10423 else if (result_list[i] != pattern)
10425 printf(
"run_test21() - Invalid return results [1] Expected %s Got: %s Expression: %s\n",
10426 result_list[i].c_str(),
10430 error_found =
true;
10446 symbol_table_t symbol_table;
10447 symbol_table.add_constants();
10448 symbol_table.add_variable(
"x",x);
10449 symbol_table.add_variable(
"y",y);
10450 symbol_table.add_variable(
"z",z);
10454 "x := 1; x + 1; x + 2; x + 3; x + 5; x + 7; return [x + 1]; ",
10455 "x := 1; x + 1; x + 2; x + 3; x + 5; return [x + 1]; x := 7; ",
10456 "x := 1; x + 1; x + 2; x + 3; return [x + 1]; x + 5; x := 7; ",
10457 "x := 1; x + 1; x + 2; return [x + 1]; x + 3; x + 5; x := 7; ",
10458 "x := 1; x + 1; return [x + 1]; x + 2; x + 3; x + 5; x := 7; ",
10459 "x := 1; return [x + 1]; x + 1; x + 2; x + 3; x + 5; x := 7; ",
10460 "return [x + 1]; x := 1; x + 1; x + 2; x + 3; x + 5; x := 7; ",
10461 "~{x := 1; x + 1; x + 2; x + 3; x + 5; x + 7; return [x + 1]}",
10462 "~{x := 1; x + 1; x + 2; x + 3; x + 5; return [x + 1]; x := 7}",
10463 "~{x := 1; x + 1; x + 2; x + 3; return [x + 1]; x + 5; x := 7}",
10464 "~{x := 1; x + 1; x + 2; return [x + 1]; x + 3; x + 5; x := 7}",
10465 "~{x := 1; x + 1; return [x + 1]; x + 2; x + 3; x + 5; x := 7}",
10466 "~{x := 1; return [x + 1]; x + 1; x + 2; x + 3; x + 5; x := 7}",
10467 "~{return [x + 1]; x := 1; x + 1; x + 2; x + 3; x + 5; x := 7}"
10470 static const std::string result_list[] =
10472 "T",
"T",
"T",
"T",
"T",
"T",
"T",
10473 "T",
"T",
"T",
"T",
"T",
"T",
"T",
10478 bool error_found =
false;
10482 expression_t expression;
10483 expression.register_symbol_table(symbol_table);
10489 printf(
"run_test21() - Error: %s Expression: %s [2]\n",
10490 parser.error().c_str(),
10493 error_found =
true;
10496 else if (!parser.dec().return_present())
10498 printf(
"run_test21() - Expected a return statement Expression: %s [2]\n",
10501 error_found =
true;
10505 expression.value();
10507 std::string pattern = results_to_string<T>(expression.results());
10509 if (!expression.return_invoked())
10511 printf(
"run_test21() - Invalid return invoke state [2] Expression: %s\n",
10514 error_found =
true;
10517 else if (result_list[i] != pattern)
10519 printf(
"run_test21() - Invalid return results [2] Expected %s Got: %s Expression: %s\n",
10520 result_list[i].c_str(),
10524 error_found =
true;
10527 else if (!
result_equal(expression.results(), x + T(1)))
10529 printf(
"run_test21() - Invalid return results [2] Expected %s Got: %s Expression: %s\n",
10530 result_list[i].c_str(),
10534 error_found =
true;
10550 T v[] = {0 , 1, 2, 3 };
10551 std::string s =
"Hello ";
10555 symbol_table_t symbol_table;
10556 expression_t expression;
10559 symbol_table.add_variable (
"x", x);
10560 symbol_table.add_variable (
"y", y);
10561 symbol_table.add_variable (
"z", z);
10562 symbol_table.add_vector (
"v", v);
10563 symbol_table.add_stringvar(
"s", s);
10565 expression.register_symbol_table(symbol_table);
10567 const std::string expression_str =
10571 " return [ x, x + y, 2 * v, s + 'world' ]; ";
10573 if (!parser.compile(expression_str, expression))
10575 printf(
"run_test21() - ERROR: %s\tExpression: %s\n",
10576 parser.error().c_str(),
10577 expression_str.c_str());
10581 expression.value();
10584 const results_context_t& results = expression.results();
10586 if (results.count() != 4)
10588 printf(
"run_test21() - ERROR Expected 4 return results, instead got: %d\n",
10589 static_cast<unsigned int>(results.count()));
10595 std::string result_s;
10596 std::vector<T> result_v;
10598 const T expected_result_v[] = {0 , 2, 4, 6 };
10599 const std::string expected_result_s =
"Hello world";
10601 if (!results.get_scalar(0,result_x0))
10603 printf(
"run_test21() - ERROR Failed to get scalar index0 from return result!\n");
10606 else if (result_x0 != T(1))
10608 printf(
"run_test21() - ERROR result_x0 is not expected value!\n");
10611 else if (!results.get_scalar(1,result_x1))
10613 printf(
"run_test21() - ERROR Failed to get scalar index1 from return result!\n");
10616 else if (result_x1 != T(3))
10618 printf(
"run_test21() - ERROR result_x1 is not expected value!\n");
10621 else if (!results.get_vector(2,result_v))
10623 printf(
"run_test21() - ERROR Failed to get vector from return result!\n");
10627 (result_v.size() != (
sizeof(expected_result_v) /
sizeof(T))) ||
10628 !std::equal(result_v.begin(),result_v.end(),expected_result_v)
10631 printf(
"run_test21() - ERROR result_v is not expected value!\n");
10634 else if (!results.get_string(3,result_s))
10636 printf(
"run_test21() - ERROR Failed to get string from return result!\n");
10639 else if (result_s != expected_result_s)
10641 printf(
"run_test21() - ERROR result_s is not expected value!\n");
10647 const std::string invalid_expressions[] =
10660 "var i := 2; v[i] := x",
10661 "var i := 2; v[i] += x",
10667 "var i := 2; aa[i:3] := bb",
10668 "var i := 2; aa[i+1:3] := bb",
10669 "var i := 2; aa[0:i] := bb",
10670 "var i := 2; aa[0:i+1] := bb",
10671 "var i := 1; var j := 3; aa[i:j] := bb",
10672 "var i := 1; var j := 3; aa[i+1:j] := bb",
10673 "var i := 1; var j := 3; aa[i:j+1] := bb",
10674 "var i := 1; var j := 3; aa[i+1:j+1] := bb",
10677 const std::size_t invalid_expressions_size =
sizeof(invalid_expressions) /
sizeof(std::string);
10679 for (std::size_t i = 0; i < invalid_expressions_size; ++i)
10681 symbol_table_t mutable_symbol_table;
10682 symbol_table_t immutable_symbol_table(symbol_table_t::e_immutable);
10686 std::string s =
"xyz";
10687 std::string aa =
"0123456789";
10688 std::string bb =
"A";
10692 std::string s_ =
"xyz";
10694 std::string a_ =
"0123456789";
10695 std::string b_ =
"A";
10697 immutable_symbol_table.add_variable (
"x" , x );
10698 immutable_symbol_table.add_vector (
"v" , v );
10699 immutable_symbol_table.add_stringvar(
"s" , s );
10700 immutable_symbol_table.add_stringvar(
"aa", aa);
10701 immutable_symbol_table.add_stringvar(
"bb", bb);
10703 mutable_symbol_table.add_variable (
"x_", x_);
10704 mutable_symbol_table.add_vector (
"v_", v_);
10705 mutable_symbol_table.add_stringvar (
"s_", s_);
10706 mutable_symbol_table.add_stringvar (
"a_", a_);
10707 mutable_symbol_table.add_stringvar (
"b_", b_);
10709 const std::string& expression_str = invalid_expressions[i];
10710 expression_t expression;
10711 expression.register_symbol_table(immutable_symbol_table);
10712 expression.register_symbol_table(mutable_symbol_table );
10715 const bool compile_result = parser.compile(expression_str, expression);
10717 if (compile_result)
10719 expression.value();
10720 printf(
"run_test21() - Invalid expression due to immutability was successfully compiled. Expression: %s\n",
10721 expression_str.c_str());
10732 symbol_table_t mutable_symbol_table;
10733 symbol_table_t immutable_symbol_table(symbol_table_t::e_immutable);
10735 mutable_symbol_table.add_variable(
"x", x);
10736 mutable_symbol_table.add_variable(
"y", y);
10738 immutable_symbol_table.add_variable(
"w", w);
10739 immutable_symbol_table.add_variable(
"z", z);
10741 expression_t expression;
10742 expression.register_symbol_table(mutable_symbol_table );
10743 expression.register_symbol_table(immutable_symbol_table);
10747 typedef std::pair<std::string,bool> local_test_t;
10749 const local_test_t expressions[] =
10751 std::make_pair<std::string,bool>(
"x := y + (z / w)" ,
true ),
10752 std::make_pair<std::string,bool>(
"y := y / x + (z / w)" ,
true ),
10753 std::make_pair<std::string,bool>(
"z := y + x - w" ,
false),
10754 std::make_pair<std::string,bool>(
"z == (w += y / x)" ,
false)
10757 const std::size_t expressions_size =
sizeof(expressions) /
sizeof(local_test_t);
10759 bool error_found =
false;
10761 for (std::size_t i = 0; i < expressions_size; ++i)
10763 const std::string expression_str = expressions[i].first;
10764 const bool expected_compile_result = expressions[i].second;
10766 if (expected_compile_result != parser.compile(expression_str, expression))
10768 printf(
"run_test21() - Invalid compilation of expression. Expected compile result: %c Expression: %s\n",
10769 expected_compile_result ?
'T' :
'F',
10770 expression_str.c_str());
10772 error_found =
true;
10780 expression.value();
10790 typedef typename parser_t::settings_store settings_t;
10792 const std::string expressions[] =
10794 "var result := 0; if (true) { result := 2 } if (true) { result := 3 }; result",
10795 "var result := 0; if (true) { result := 2 }; if (true) { result := 3 } result",
10796 "var result := 0; if (true) { result := 2 } if (true) { result := 3 } result",
10797 "var result := 0; var x:=1; if (x > 0) { result := 2 } else if (x > 0) { result := 3 } result",
10798 "var result := 0; var x := 1; if (x > 0) { result := 2 } if (x > 0) { result := 3 }; result",
10799 "var result := 0; var x := 1; if (x > 0) { result := 2 }; if (x > 0) { result := 3 } result",
10800 "var result := 0; var x := 1; if (x > 0) { result := 2 } if (x > 0) { result := 3 } result",
10801 "var result := 0; var x := 1; if (x > 0) { result := 2 } else if (x > 0) { result := 3 } result",
10802 "var result := 0; var x := 1; if (x > 0) result := 2 else if (x > 0) { result := 3 } result",
10803 "var result := 0; var x := 1; if (x > 0) {result := 2 } else if (x > 0) result := 3 result"
10806 const std::size_t expressions_size =
sizeof(expressions) /
sizeof(std::string);
10808 static const std::size_t compile_options =
10809 settings_t::e_replacer +
10810 settings_t::e_joiner +
10811 settings_t::e_numeric_check +
10812 settings_t::e_bracket_check +
10813 settings_t::e_sequence_check +
10814 settings_t::e_strength_reduction;
10816 const settings_t settings(compile_options);
10817 parser_t parser(settings);
10819 bool error_found =
false;
10821 for (std::size_t e = 0; e < expressions_size; ++e)
10823 const std::string& expression_string = expressions[e];
10824 expression_t expression;
10826 if (parser.compile(expression_string,expression))
10828 printf(
"run_test21() - Expected compilation error for expression: %s\n",
10829 expression_string.c_str());
10830 error_found =
true;
10834 expression.value();
10844 const std::string expressions[] =
10847 "var x := 2; sum(if (x > 1) { vv8 } else { vv7 }) == sum(vv8)",
10848 "var x := 2; sum(if (x > 1) { vv8 + 1 } else { vv8 + 2 }) == sum(vv8 + 1)",
10851 "var v[8] := {1,1,1,1,1,1,1,1}; vv8 += 1; sgn(vv8) == v",
10852 "abs(-1 * vv8) == vv8",
10853 "abs(vv8 * -1) == vv8",
10854 "var x := -1; abs(x * vv8) == vv8",
10855 "var x := -1; abs(vv8 * x) == vv8",
10856 "var x := 1; abs(-x * vv8) == vv8",
10857 "var x := 1; abs(vv8 * -x) == vv8",
10858 "var x := -2; abs(x * vv8) == 2vv8",
10859 "var x := -2; abs(vv8 * x) == 2vv8",
10860 "var x := 2; abs(-x * vv8) == 2vv8",
10861 "var x := 2; abs(vv8 * -x) == 2vv8",
10862 "var x := -2; abs(x * vv8) == -x * vv8",
10863 "var x := -2; abs(vv8 * x) == -x * vv8",
10864 "var x := 2; abs(-x * vv8) == x * vv8",
10865 "var x := 2; abs(vv8 * -x) == x * vv8",
10866 "var x := -2; abs(x * vv8) == vv8 * -x",
10867 "var x := -2; abs(vv8 * x) == vv8 * -x",
10868 "var x := 2; abs(-x * vv8) == vv8 * x",
10869 "var x := 2; abs(vv8 * -x) == vv8 * x",
10870 "var x := -2; abs(x * vv8) == abs(x) * vv8",
10871 "var x := -2; abs(vv8 * x) == abs(x) * vv8",
10872 "var x := -2; abs(x * vv8) == vv8 * abs(x)",
10873 "var x := -2; abs(vv8 * x) == vv8 * abs(x)",
10876 "var v[8] := {1,2,3,4,5,6,7,8}; var x := 1; (vv8 + x) == v",
10877 "var v[7] := {1,2,3,4,5,6,7}; var x := 1; (vv8 + x) == v",
10878 "var v[6] := {1,2,3,4,5,6}; var x := 1; (vv8 + x) == v",
10879 "var v[5] := {1,2,3,4,5}; var x := 1; (vv8 + x) == v",
10880 "var v[4] := {1,2,3,4}; var x := 1; (vv8 + x) == v",
10881 "var v[3] := {1,2,3}; var x := 1; (vv8 + x) == v",
10882 "var v[2] := {1,2}; var x := 1; (vv8 + x) == v",
10883 "var v[1] := {1}; var x := 1; (vv8 + x) == v",
10884 "var v[8] := {1,2,3,4,5,6,7,8}; var x := 1; (x + vv8) == v",
10885 "var v[7] := {1,2,3,4,5,6,7}; var x := 1; (x + vv8) == v",
10886 "var v[6] := {1,2,3,4,5,6}; var x := 1; (x + vv8) == v",
10887 "var v[5] := {1,2,3,4,5}; var x := 1; (x + vv8) == v",
10888 "var v[4] := {1,2,3,4}; var x := 1; (x + vv8) == v",
10889 "var v[3] := {1,2,3}; var x := 1; (x + vv8) == v",
10890 "var v[2] := {1,2}; var x := 1; (x + vv8) == v",
10891 "var v[1] := {1}; var x := 1; (x + vv8) == v",
10894 "var v[8] := [-1]; v < vv8",
10895 "var v[7] := [-1]; v < vv8",
10896 "var v[3] := [-1]; v < vv8",
10897 "var v[2] := [-1]; v < vv8",
10898 "var v[1] := [-1]; v < vv8",
10901 "var vv8sum := sum(vv8); vv8 += (vv8 + 1); sum(vv8) == (2 * sum(vv8sum) + vv8[] * 1)",
10902 "var vv8sum := sum(vv8); vv8 += (vv8 - 1); sum(vv8) == (2 * sum(vv8sum) - vv8[] * 1)",
10903 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 + x); sum(vv8) == (2 * sum(vv8sum) + vv8[] * 1)",
10904 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 - x); sum(vv8) == (2 * sum(vv8sum) - vv8[] * 1)",
10905 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 + (vv8 + x)); sum(vv8) == (3 * sum(vv8sum) + vv8[] * 1)",
10906 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 + (vv8 - x)); sum(vv8) == (3 * sum(vv8sum) - vv8[] * 1)",
10907 "var vv8sum := sum(vv8); vv8 += (vv8 += 1); sum(vv8) == (2 * vv8sum + 2 * (vv8[] * 1))",
10908 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 += x); sum(vv8) == (2 * vv8sum + 2 * (vv8[] * x))",
10909 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 -= x); sum(vv8) == (2 * vv8sum - 2 * (vv8[] * x))",
10910 "var vv8sum := sum(vv8); vv8 += (vv8 + 1); sum(vv8) == (2 * sum(vv8sum) + vv8[] * 1);",
10911 "var vv8sum := sum(vv8); vv8 += (vv8 - 1); sum(vv8) == (2 * sum(vv8sum) - vv8[] * 1);",
10912 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 + x); sum(vv8) == (2 * sum(vv8sum) + vv8[] * 1);",
10913 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 - x); sum(vv8) == (2 * sum(vv8sum) - vv8[] * 1);",
10914 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 + (vv8 + x)); sum(vv8) == (3 * sum(vv8sum) + vv8[] * 1);",
10915 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 + (vv8 - x)); sum(vv8) == (3 * sum(vv8sum) - vv8[] * 1);",
10916 "var vv8sum := sum(vv8); vv8 += (vv8 += 1); sum(vv8) == (2 * vv8sum + 2 * (vv8[] * 1));",
10917 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 += x); sum(vv8) == (2 * vv8sum + 2 * (vv8[] * x));",
10918 "var vv8sum := sum(vv8); var x := 1; vv8 += (vv8 -= x); sum(vv8) == (2 * vv8sum - 2 * (vv8[] * x));",
10919 "var vv3sum := sum(vv3); vv3 += (vv3 + 1); sum(vv3) == (2 * sum(vv3sum) + vv3[] * 1)",
10920 "var vv3sum := sum(vv3); vv3 += (vv3 - 1); sum(vv3) == (2 * sum(vv3sum) - vv3[] * 1)",
10921 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 + x); sum(vv3) == (2 * sum(vv3sum) + vv3[] * 1)",
10922 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 - x); sum(vv3) == (2 * sum(vv3sum) - vv3[] * 1)",
10923 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 + (vv3 + x)); sum(vv3) == (3 * sum(vv3sum) + vv3[] * 1)",
10924 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 + (vv3 - x)); sum(vv3) == (3 * sum(vv3sum) - vv3[] * 1)",
10925 "var vv3sum := sum(vv3); vv3 += (vv3 += 1); sum(vv3) == (2 * vv3sum + 2 * (vv3[] * 1))",
10926 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 += x); sum(vv3) == (2 * vv3sum + 2 * (vv3[] * x))",
10927 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 -= x); sum(vv3) == (2 * vv3sum - 2 * (vv3[] * x))",
10928 "var vv3sum := sum(vv3); vv3 += (vv3 + 1); sum(vv3) == (2 * sum(vv3sum) + vv3[] * 1);",
10929 "var vv3sum := sum(vv3); vv3 += (vv3 - 1); sum(vv3) == (2 * sum(vv3sum) - vv3[] * 1);",
10930 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 + x); sum(vv3) == (2 * sum(vv3sum) + vv3[] * 1);",
10931 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 - x); sum(vv3) == (2 * sum(vv3sum) - vv3[] * 1);",
10932 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 + (vv3 + x)); sum(vv3) == (3 * sum(vv3sum) + vv3[] * 1);",
10933 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 + (vv3 - x)); sum(vv3) == (3 * sum(vv3sum) - vv3[] * 1);",
10934 "var vv3sum := sum(vv3); vv3 += (vv3 += 1); sum(vv3) == (2 * vv3sum + 2 * (vv3[] * 1));",
10935 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 += x); sum(vv3) == (2 * vv3sum + 2 * (vv3[] * x));",
10936 "var vv3sum := sum(vv3); var x := 1; vv3 += (vv3 -= x); sum(vv3) == (2 * vv3sum - 2 * (vv3[] * x));",
10939 "var vv8sum := sum(vv8); vv8 += 1; sum(vv8) == (vv8sum + vv8[] * 1)",
10940 "var vv7sum := sum(vv7); vv7 += 1; sum(vv7) == (vv7sum + vv7[] * 1)",
10941 "var vv6sum := sum(vv6); vv6 += 1; sum(vv6) == (vv6sum + vv6[] * 1)",
10942 "var vv5sum := sum(vv5); vv5 += 1; sum(vv5) == (vv5sum + vv5[] * 1)",
10943 "var vv4sum := sum(vv4); vv4 += 1; sum(vv4) == (vv4sum + vv4[] * 1)",
10944 "var vv3sum := sum(vv3); vv3 += 1; sum(vv3) == (vv3sum + vv3[] * 1)",
10945 "var vv2sum := sum(vv2); vv2 += 1; sum(vv2) == (vv2sum + vv2[] * 1)",
10946 "var vv1sum := sum(vv1); vv1 += 1; sum(vv1) == (vv1sum + vv1[] * 1)",
10947 "var vv8sum := sum(vv8); var x := 7; vv8 += (x - 1) / 2; sum(vv8) == (vv8sum + vv8[] * 3)",
10948 "var vv7sum := sum(vv7); var x := 7; vv7 += (x - 1) / 2; sum(vv7) == (vv7sum + vv7[] * 3)",
10949 "var vv6sum := sum(vv6); var x := 7; vv6 += (x - 1) / 2; sum(vv6) == (vv6sum + vv6[] * 3)",
10950 "var vv5sum := sum(vv5); var x := 7; vv5 += (x - 1) / 2; sum(vv5) == (vv5sum + vv5[] * 3)",
10951 "var vv4sum := sum(vv4); var x := 7; vv4 += (x - 1) / 2; sum(vv4) == (vv4sum + vv4[] * 3)",
10952 "var vv3sum := sum(vv3); var x := 7; vv3 += (x - 1) / 2; sum(vv3) == (vv3sum + vv3[] * 3)",
10953 "var vv2sum := sum(vv2); var x := 7; vv2 += (x - 1) / 2; sum(vv2) == (vv2sum + vv2[] * 3)",
10954 "var vv1sum := sum(vv1); var x := 7; vv1 += (x - 1) / 2; sum(vv1) == (vv1sum + vv1[] * 3)",
10957 "var v[8] := [-1]; vv8 := v; sum(vv8) == (-1 * 8 + 0)",
10958 "var v[7] := [-1]; vv8 := v; sum(vv8) == (-1 * 7 + (7))",
10959 "var v[6] := [-1]; vv8 := v; sum(vv8) == (-1 * 6 + (6+7))",
10960 "var v[5] := [-1]; vv8 := v; sum(vv8) == (-1 * 5 + (5+6+7))",
10961 "var v[4] := [-1]; vv8 := v; sum(vv8) == (-1 * 4 + (4+5+6+7))",
10962 "var v[3] := [-1]; vv8 := v; sum(vv8) == (-1 * 3 + (3+4+5+6+7))",
10963 "var v[2] := [-1]; vv8 := v; sum(vv8) == (-1 * 2 + (2+3+4+5+6+7))",
10964 "var v[1] := [-1]; vv8 := v; sum(vv8) == (-1 * 1 + (1+2+3+4+5+6+7))",
10965 "var v[8] := [-1]; vv8 := v; var x[8] := { -1, -1, -1, -1, -1, -1, -1, -1 }; x == vv8",
10966 "var v[7] := [-1]; vv8 := v; var x[8] := { -1, -1, -1, -1, -1, -1, -1, 7 }; x == vv8",
10967 "var v[6] := [-1]; vv8 := v; var x[8] := { -1, -1, -1, -1, -1, -1, 6, 7 }; x == vv8",
10968 "var v[5] := [-1]; vv8 := v; var x[8] := { -1, -1, -1, -1, -1, 5, 6, 7 }; x == vv8",
10969 "var v[4] := [-1]; vv8 := v; var x[8] := { -1, -1, -1, -1, 4, 5, 6, 7 }; x == vv8",
10970 "var v[3] := [-1]; vv8 := v; var x[8] := { -1, -1, -1, 3, 4, 5, 6, 7 }; x == vv8",
10971 "var v[2] := [-1]; vv8 := v; var x[8] := { -1, -1, 2, 3, 4, 5, 6, 7 }; x == vv8",
10972 "var v[1] := [-1]; vv8 := v; var x[8] := { -1, 1, 2, 3, 4, 5, 6, 7 }; x == vv8",
10973 "var v[3] := [-1]; vv3 := v; sum(vv3) == (-1 * 3 + (0))",
10974 "var v[2] := [-1]; vv3 := v; sum(vv3) == (-1 * 2 + (2))",
10975 "var v[1] := [-1]; vv3 := v; sum(vv3) == (-1 * 1 + (1+2))",
10976 "var v[3] := [-1]; vv3 := v; var x[3] := { -1, -1, -1}; x == vv3",
10977 "var v[2] := [-1]; vv3 := v; var x[3] := { -1, -1, 2}; x == vv3",
10978 "var v[1] := [-1]; vv3 := v; var x[3] := { -1, 1, 2}; x == vv3",
10979 "vv8 := vv7; sum(vv8) == (sum(vv7) + 7)",
10980 "vv8 := vv6; sum(vv8) == (sum(vv6) + 6+ 7)",
10981 "vv8 := vv5; sum(vv8) == (sum(vv5) + 5 + 6 + 7)",
10982 "vv8 := vv4; sum(vv8) == (sum(vv4) + 4 + 5 + 6 + 7)",
10983 "vv8 := vv3; sum(vv8) == (sum(vv3) + 3 + 4 + 5 + 6 + 7)",
10984 "vv8 := vv2; sum(vv8) == (sum(vv2) + 2 + 3 + 4 + 5 + 6 + 7)",
10985 "vv8 := vv1; sum(vv8) == (sum(vv1) + 1 + 2 + 3 + 4 + 5 + 6 + 7)",
10986 "vv8 := vv7 + vv7; sum(vv8) == (2 * sum(vv7) + 7)",
10987 "vv8 := vv6 + vv6; sum(vv8) == (2 * sum(vv6) + 6+ 7)",
10988 "vv8 := vv5 + vv5; sum(vv8) == (2 * sum(vv5) + 5 + 6 + 7)",
10989 "vv8 := vv4 + vv4; sum(vv8) == (2 * sum(vv4) + 4 + 5 + 6 + 7)",
10990 "vv8 := vv3 + vv3; sum(vv8) == (2 * sum(vv3) + 3 + 4 + 5 + 6 + 7)",
10991 "vv8 := vv2 + vv2; sum(vv8) == (2 * sum(vv2) + 2 + 3 + 4 + 5 + 6 + 7)",
10992 "vv8 := vv1 + vv1; sum(vv8) == (2 * sum(vv1) + 1 + 2 + 3 + 4 + 5 + 6 + 7)",
10995 "var x := 3; vv8 := 2*x+1; sum(vv8) == (vv8[] * 7)",
10996 "var x := 3; vv7 := 2*x+1; sum(vv7) == (vv7[] * 7)",
10997 "var x := 3; vv6 := 2*x+1; sum(vv6) == (vv6[] * 7)",
10998 "var x := 3; vv5 := 2*x+1; sum(vv5) == (vv5[] * 7)",
10999 "var x := 3; vv4 := 2*x+1; sum(vv4) == (vv4[] * 7)",
11000 "var x := 3; vv3 := 2*x+1; sum(vv3) == (vv3[] * 7)",
11001 "var x := 3; vv2 := 2*x+1; sum(vv2) == (vv2[] * 7)",
11002 "var x := 3; vv1 := 2*x+1; sum(vv1) == (vv1[] * 7)",
11003 "var x[3] := [3]; vv8 := 2x[0]+1; sum(vv8) == (vv8[] * 7)",
11004 "var x[3] := [3]; vv7 := 2x[1]+1; sum(vv7) == (vv7[] * 7)",
11005 "var x[3] := [3]; vv6 := 2x[2]+1; sum(vv6) == (vv6[] * 7)",
11006 "var x[3] := [3]; vv5 := 2x[0]+1; sum(vv5) == (vv5[] * 7)",
11007 "var x[3] := [3]; vv4 := 2x[1]+1; sum(vv4) == (vv4[] * 7)",
11008 "var x[3] := [3]; vv3 := 2x[2]+1; sum(vv3) == (vv3[] * 7)",
11009 "var x[3] := [3]; vv2 := 2x[0]+1; sum(vv2) == (vv2[] * 7)",
11010 "var x[3] := [3]; vv1 := 2x[1]+1; sum(vv1) == (vv1[] * 7)",
11011 "var x[3] := [3]; var y[3] := [1]; vv8 := 2x[0]+y[0]; sum(vv8) == (vv8[] * 7)",
11012 "var x[3] := [3]; var y[3] := [1]; vv7 := 2x[1]+y[1]; sum(vv7) == (vv7[] * 7)",
11013 "var x[3] := [3]; var y[3] := [1]; vv6 := 2x[2]+y[2]; sum(vv6) == (vv6[] * 7)",
11014 "var x[3] := [3]; var y[3] := [1]; vv5 := 2x[0]+y[0]; sum(vv5) == (vv5[] * 7)",
11015 "var x[3] := [3]; var y[3] := [1]; vv4 := 2x[1]+y[1]; sum(vv4) == (vv4[] * 7)",
11016 "var x[3] := [3]; var y[3] := [1]; vv3 := 2x[2]+y[2]; sum(vv3) == (vv3[] * 7)",
11017 "var x[3] := [3]; var y[3] := [1]; vv2 := 2x[0]+y[0]; sum(vv2) == (vv2[] * 7)",
11018 "var x[3] := [3]; var y[3] := [1]; vv1 := 2x[1]+y[1]; sum(vv1) == (vv1[] * 7)",
11021 "var v[8] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 8 + 0)",
11022 "var v[7] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 7 + (7))",
11023 "var v[6] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 6 + (6+7))",
11024 "var v[5] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 5 + (5+6+7))",
11025 "var v[4] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 4 + (4+5+6+7))",
11026 "var v[3] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 3 + (3+4+5+6+7))",
11027 "var v[2] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 2 + (2+3+4+5+6+7))",
11028 "var v[1] := [-1]; vv8 <=> v; sum(vv8) == (-1 * 1 + (1+2+3+4+5+6+7))",
11029 "var v[8] := [-1]; vv8 <=> v; var x[8] := { -1, -1, -1, -1, -1, -1, -1, -1 }; x == vv8",
11030 "var v[7] := [-1]; vv8 <=> v; var x[8] := { -1, -1, -1, -1, -1, -1, -1, 7 }; x == vv8",
11031 "var v[6] := [-1]; vv8 <=> v; var x[8] := { -1, -1, -1, -1, -1, -1, 6, 7 }; x == vv8",
11032 "var v[5] := [-1]; vv8 <=> v; var x[8] := { -1, -1, -1, -1, -1, 5, 6, 7 }; x == vv8",
11033 "var v[4] := [-1]; vv8 <=> v; var x[8] := { -1, -1, -1, -1, 4, 5, 6, 7 }; x == vv8",
11034 "var v[3] := [-1]; vv8 <=> v; var x[8] := { -1, -1, -1, 3, 4, 5, 6, 7 }; x == vv8",
11035 "var v[2] := [-1]; vv8 <=> v; var x[8] := { -1, -1, 2, 3, 4, 5, 6, 7 }; x == vv8",
11036 "var v[1] := [-1]; vv8 <=> v; var x[8] := { -1, 1, 2, 3, 4, 5, 6, 7 }; x == vv8",
11037 "var v[3] := [-1]; vv3 <=> v; sum(vv3) == (-1 * 3 + (0))",
11038 "var v[2] := [-1]; vv3 <=> v; sum(vv3) == (-1 * 2 + (2))",
11039 "var v[1] := [-1]; vv3 <=> v; sum(vv3) == (-1 * 1 + (1+2))",
11040 "var v[3] := [-1]; vv3 <=> v; var x[3] := { -1, -1, -1}; x == vv3",
11041 "var v[2] := [-1]; vv3 <=> v; var x[3] := { -1, -1, 2}; x == vv3",
11042 "var v[1] := [-1]; vv3 <=> v; var x[3] := { -1, 1, 2}; x == vv3",
11047 "vv8[vv8[] - 1] == vv8[] - 1",
11048 "var vec_sum := 0; for (var i := 0; i < vv8[]; i +=1) { vec_sum += vv8[i]; }; vec_sum == (vv8[] - 1) * vv8[] / 2",
11049 "var vec_sum := 0; for (var i := 0; i < vv8[]; i +=1) { vec_sum += vv8[2i / 2]; }; vec_sum == (vv8[] - 1) * vv8[] / 2",
11050 "var x:= 1; var y:= 1; (vv8 + x)[y / x] == 2",
11051 "var x:= 1; var y:= 1; (vv8 + x - y)[y / x] == 1",
11052 "var x:= 1; (x + vv8)[1] == 2",
11053 "var x:= 1; var y:= 1; (x + vv8)[y / x] == 2",
11054 "var x:= 1; var y:= 1; (x + vv8 - y)[y / x] == 1",
11055 "var successes := 0; for(var i:=0; i < vv8[]; i += 1) { successes += (vv8 + 1)[i] == i + 1; }; successes == vv8[]",
11056 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (vv8 + x)[i] == i + x; }; successes == vv8[]",
11057 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (x + vv8)[i] == i + x; }; successes == vv8[]",
11058 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (vv8 + x)[i / x] == i + x; }; successes == vv8[]",
11059 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (x + vv8)[i / x] == i + x; }; successes == vv8[]",
11060 "(1 + vv8)[1] == 2",
11061 "(vv8 + 1)[1] == 2",
11062 "(vv8 + 1)[2 / 2] == 2",
11063 "(1 + vv8)[2 / 2] == 2",
11064 "var x:= 1; (x + vv8)[1] == 2",
11065 "var x:= 1; (vv8 + x)[1] == 2",
11066 "var x:= 1; var y:= 1; (x + vv8)[y] == 2",
11067 "var x:= 1; var y:= 1; (vv8 + x)[y] == 2",
11068 "var x:= 1; var y:= 1; (vv8 + x)[y / x] == 2",
11069 "var x:= 1; var y:= 1; (vv8 + x - y)[y / x] == 1",
11070 "var x:= 1; var y:= 1; (x + vv8)[y / x] == 2",
11071 "var x:= 1; var y:= 1; (x + vv8 - y)[y / x] == 1",
11072 "(abs(vv8 + 1))[1] == 2",
11073 "(abs(1 + vv8))[1] == 2",
11074 "(abs(vv8 + 1))[2 / 2] == 2",
11075 "(abs(1 + vv8))[2 / 2] == 2",
11076 "(abs(vv8 + 1)/2)[1] == 1",
11077 "(abs(1 + vv8)/2)[1] == 1",
11078 "(abs(vv8 + 1)/2)[2 / 2] == 1",
11079 "(abs(1 + vv8)/2)[2 / 2] == 1",
11080 "(abs(abs(vv8 + 1)) - 1)[1] == 1",
11081 "(abs(2 * abs(vv8 + 1)) - 1)[1] == 3",
11082 "(abs(abs(vv8 + 1) * 2) - 1)[1] == 3",
11083 "(abs(2abs(vv8 + 1)) - 1)[1] == 3",
11084 "(abs(abs(vv8 + 1)2) - 1)[1] == 3",
11085 "var x:= 1; (abs(x + vv8))[1] == 2",
11086 "var x:= 1; (abs(vv8 + x))[1] == 2",
11087 "var x:= 1; var y:= 1; (abs(x + vv8))[y] == 2",
11088 "var x:= 1; var y:= 1; (abs(vv8 + x))[y] == 2",
11089 "var x:= 1; var y:= 1; (abs(vv8 + x))[y / x] == 2",
11090 "var x:= 1; var y:= 1; (abs(vv8 + x - y))[y / x] == 1",
11091 "var x:= 1; var y:= 1; (abs(x + vv8))[y / x] == 2",
11092 "var x:= 1; var y:= 1; (abs(x + vv8 - y))[y / x] == 1",
11093 "var x:= 1; (abs(x + vv8)/2)[1] == 1",
11094 "var x:= 1; (abs(vv8 + x)/2)[1] == 1",
11095 "var x:= 1; var y:= 1; (abs(x + vv8)/2)[y] == 1",
11096 "var x:= 1; var y:= 1; (abs(vv8 + x)/2)[y] == 1",
11097 "var x:= 1; var y:= 1; (abs(vv8 + x)/2)[y / x] == 1",
11098 "var x:= 1; var y:= 1; (abs(x + vv8)/2)[y / x] == 1",
11099 "var x := 1; (abs(abs(vv8 + x)) - x)[1] == 1",
11100 "var x := 1; (abs(2 * abs(vv8 + x)) - x)[1] == 3",
11101 "var x := 1; (abs(abs(vv8 + x) * 2) - x)[1] == 3",
11102 "var x := 1; (abs(2abs(vv8 + x)) - x)[1] == 3",
11103 "var x := 1; (abs(abs(vv8 + x)2) - x)[1] == 3",
11104 "var x := 1; var y := 1; (abs(abs(vv8 + x)) - x)[y] == 1",
11105 "var x := 1; var y := 1; (abs(2 * abs(vv8 + x)) - x)[y] == 3",
11106 "var x := 1; var y := 1; (abs(abs(vv8 + x) * 2) - x)[y] == 3",
11107 "var x := 1; var y := 1; (abs(2abs(vv8 + x)) - x)[y] == 3",
11108 "var x := 1; var y := 1; (abs(abs(vv8 + x)2) - x)[y] == 3",
11109 "var x := 1; var y := 1; (abs(abs(vv8 + x)) - x)[x / y] == 1",
11110 "var x := 1; var y := 1; (abs(2 * abs(vv8 + x)) - x)[x / y] == 3",
11111 "var x := 1; var y := 1; (abs(abs(vv8 + x) * 2) - x)[x / y] == 3",
11112 "var x := 1; var y := 1; (abs(2abs(vv8 + x)) - x)[x / y] == 3",
11113 "var x := 1; var y := 1; (abs(abs(vv8 + x)2) - x)[x / y] == 3",
11114 "var successes := 0; for(var i:=0; i < vv8[]; i += 1) { successes += (vv8 + 1)[i] == i + 1; }; successes == vv8[]",
11115 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (vv8 + x)[i] == i + x; }; successes == vv8[]",
11116 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (x + vv8)[i] == i + x; }; successes == vv8[]",
11117 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (vv8 + x)[i / x] == i + x; }; successes == vv8[]",
11118 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (x + vv8)[i / x] == i + x; }; successes == vv8[]",
11119 "var successes := 0; for(var i:=0; i < vv8[]; i += 1) { successes += (abs(vv8 + 1))[i] == i + 1; }; successes == vv8[]",
11120 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (abs(vv8 + x))[i] == i + x; }; successes == vv8[]",
11121 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (abs(x + vv8))[i] == i + x; }; successes == vv8[]",
11122 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (abs(vv8 + x))[i / x] == i + x; }; successes == vv8[]",
11123 "var successes := 0; var x := 1 ; for(var i:=0; i < vv8[]; i += 1) { successes += (abs(x + vv8))[i / x] == i + x; }; successes == vv8[]",
11126 bool error_found =
false;
11128 for (std::size_t e = 0; e <
sizeof(expressions)/
sizeof(std::string); ++e)
11130 T vs8[] = { 0, 1, 2, 3, 4, 5, 6, 7 };
11131 T vs7[] = { 0, 1, 2, 3, 4, 5, 6 };
11132 T vs6[] = { 0, 1, 2, 3, 4, 5 };
11133 T vs5[] = { 0, 1, 2, 3, 4 };
11134 T vs4[] = { 0, 1, 2, 3 };
11135 T vs3[] = { 0, 1, 2 };
11136 T vs2[] = { 0, 1 };
11148 symbol_table_t symbol_table;
11150 symbol_table.add_vector(
"vv1", vv1);
11151 symbol_table.add_vector(
"vv2", vv2);
11152 symbol_table.add_vector(
"vv3", vv3);
11153 symbol_table.add_vector(
"vv4", vv4);
11154 symbol_table.add_vector(
"vv5", vv5);
11155 symbol_table.add_vector(
"vv6", vv6);
11156 symbol_table.add_vector(
"vv7", vv7);
11157 symbol_table.add_vector(
"vv8", vv8);
11161 const std::string& expression_string = expressions[e];
11162 expression_t expression;
11163 expression.register_symbol_table(symbol_table);
11165 if (!parser.compile(expression_string,expression))
11167 printf(
"run_test21() - vector_veiw expression compilation error. Expression: %s\n",
11168 expression_string.c_str());
11170 for (std::size_t i = 0; i < parser.error_count(); ++i)
11172 error_type error = parser.get_error(i);
11175 printf(
"run_test21() - Exp[%02d] Error[%02d] Position: %02d line: %d column: %d Type: [%14s] Msg: %s\n",
11176 static_cast<unsigned int>(e),
11177 static_cast<unsigned int>(i),
11178 static_cast<unsigned int>(error.token.position),
11179 static_cast<unsigned int>(error.line_no),
11180 static_cast<unsigned int>(error.column_no),
11182 error.diagnostic.c_str());
11185 error_found =
true;
11190 const T result = expression.value();
11192 if (result != T(1.0))
11194 error_found =
true;
11196 printf(
"run_test21() - Error: Exp[%02d] Expression result: %5.3f expected: 1 expression: %s\n",
11197 static_cast<unsigned int>(e),
11198 static_cast<double>(result),
11199 expression_string.c_str());
11210 const std::string expressions[] =
11212 "vv0[] == vv0_size",
11213 "sum(vv0) == (vv0[] * (vv0[] + 1) / 2) and (vv0[] == vv0_size)",
11214 "(min(vv0) == 1) and (vv0[] == vv0_size)",
11215 "(max(vv0) == vv0[]) and (vv0[] == vv0_size)",
11216 "(avg(vv0) == (min(vv0) + max(vv0)) / 2) and (vv0[] == vv0_size)",
11217 "(sum(vv0 + 1) == (vv0[] * (vv0[] + 1) / 2 + (vv0[] * 1))) and (vv0[] == vv0_size)",
11218 "(sum(vv0 - 1) == (vv0[] * (vv0[] + 1) / 2 - (vv0[] * 1))) and (vv0[] == vv0_size)",
11219 "(sum(1 + vv0) == (vv0[] * (vv0[] + 1) / 2 + (vv0[] * 1))) and (vv0[] == vv0_size)",
11220 "(sum(-1 + vv0) == (vv0[] * (vv0[] + 1) / 2 - (vv0[] * 1))) and (vv0[] == vv0_size)",
11221 "var x:= 1; sum(vv0 + x) == (vv0[] * (vv0[] + 1) / 2 + (vv0[] * x)) and (vv0[] == vv0_size)",
11222 "var x:= 1; sum(vv0 - x) == (vv0[] * (vv0[] + 1) / 2 - (vv0[] * x)) and (vv0[] == vv0_size)",
11223 "sum(2vv0) == (vv0[] * (vv0[] + 1)) and (vv0[] == vv0_size)",
11224 "sum(vv0 * 2) == (vv0[] * (vv0[] + 1)) and (vv0[] == vv0_size)",
11225 "sum(2vv0 + 1) == (vv0[] * (vv0[] + 1) + vv0[]) and (vv0[] == vv0_size)",
11226 "sum(1 + 2vv0) == (vv0[] * (vv0[] + 1) + vv0[]) and (vv0[] == vv0_size)",
11227 "var x := 1; sum(2vv0 + x) == (vv0[] * (vv0[] + 1) + x * vv0[]) and (vv0[] == vv0_size)",
11228 "var x := 1; sum(x + 2vv0) == (vv0[] * (vv0[] + 1) + x * vv0[]) and (vv0[] == vv0_size)",
11229 "sum(vv0 += 1) == (vv0[] * (vv0[] + 1) / 2 + vv0[]) and (vv0[] == vv0_size)",
11230 "var x:= 1; sum(vv0 += x) == (vv0[] * (vv0[] + 1) / 2 + x * vv0[]) and (vv0[] == vv0_size)",
11231 "var x:= 1; sum(vv0 -= x) == (vv0[] * (vv0[] + 1 - 2x) / 2) and (vv0[] == vv0_size)",
11232 "(sum(2vv0) == 2 * sum(vv0)) and (vv0[] == vv0_size)",
11233 "(sum(vv0 * 2) == 2 * sum(vv0)) and (vv0[] == vv0_size)",
11234 "var x:= 1; sum(2vv0) == (vv0[] * (vv0[] + 1)) and (vv0[] == vv0_size)",
11235 "var x := 2; sum(if (x > 1) { vv0 } else { vv1 }) == sum(vv0)",
11236 "dot(2 * vv0,vv1 - 1) + dot(2 * vv0,vv1 - 1) == 2sum(2vv0 * (vv1 - 1))",
11237 "(0 * dot(2 * vv0,vv1 - 1)) == 0"
11240 bool error_found =
false;
11242 for (std::size_t e = 0; e <
sizeof(expressions) /
sizeof(std::string); ++e)
11244 const T vanilla[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
11245 const std::size_t vanilla_size =
sizeof(vanilla) /
sizeof(T);
11247 std::vector<T> v0(vanilla, vanilla + vanilla_size);
11250 std::vector<T> v1(vanilla, vanilla + vanilla_size);
11253 T vv0_size = T(0.0);
11255 symbol_table_t symbol_table;
11256 symbol_table.add_variable(
"vv0_size", vv0_size);
11257 symbol_table.add_vector (
"vv0" , vv0 );
11258 symbol_table.add_vector (
"vv1" , vv1 );
11263 symbol_table.add_package( vector_package );
11264 symbol_table.add_package( io_package );
11266 const std::string& expression_string = expressions[e];
11267 expression_t expression;
11268 expression.register_symbol_table(symbol_table);
11272 if (!parser.compile(expression_string, expression))
11274 printf(
"run_test21() - Error: %s\tExpression: %s\n",
11275 parser.error().c_str(),
11276 expression_string.c_str());
11278 for (std::size_t i = 0; i < parser.error_count(); ++i)
11280 error_type error = parser.get_error(i);
11283 printf(
"run_test21() - Exp[%02d] Error[%02d] Position: %02d line: %d column: %d Type: [%14s] Msg: %s\n",
11284 static_cast<unsigned int>(e),
11285 static_cast<unsigned int>(i),
11286 static_cast<unsigned int>(error.token.position),
11287 static_cast<unsigned int>(error.line_no),
11288 static_cast<unsigned int>(error.column_no),
11290 error.diagnostic.c_str());
11296 for (std::size_t i = 1; i <= vv0.
base_size(); ++i)
11298 v0.assign(vanilla, vanilla + vanilla_size);
11299 v1.assign(vanilla, vanilla + vanilla_size);
11304 const T result = expression.value();
11308 printf(
"run_test21() - Exp[%02d] Error: size: %d expected 1 instead got: %f expr:%s\n",
11309 static_cast<unsigned int>(e),
11310 static_cast<unsigned int>(i),
11311 static_cast<double>(result),
11312 expression_string.c_str());
11318 expression.value();
11322 expression.value();
11324 expression.release();
11334 const T vanilla[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
11335 const std::size_t vanilla_size =
sizeof(vanilla) /
sizeof(T);
11337 std::vector<T> v0(vanilla, vanilla + vanilla_size);
11338 std::vector<T> v1(vanilla, vanilla + vanilla_size);
11345 symbol_table_t symbol_table;
11346 symbol_table.add_vector(
"v", vv);
11351 symbol_table.add_package( vector_package );
11352 symbol_table.add_package( io_package );
11353 symbol_table.add_function(
"resize", vv_size_handler);
11355 expression_t expression;
11356 expression.register_symbol_table(symbol_table);
11360 const std::string resize_expression =
11361 " var vec_original_size := v[]; "
11362 " var success_count := 0; "
11364 " for (var i := 1; i <= vec_original_size; i += 1) "
11366 " if (resize(v,i) == true and v[] == i) "
11368 " success_count += 1; "
11372 " success_count == vec_original_size ";
11374 if (!parser.compile(resize_expression, expression))
11376 printf(
"run_test21() - Error: %s\tExpression: %s\n",
11377 parser.error().c_str(),
11378 resize_expression.c_str());
11380 for (std::size_t i = 0; i < parser.error_count(); ++i)
11382 error_type error = parser.get_error(i);
11385 printf(
"run_test21() - Error[%02d] Position: %02d line: %d column: %d Type: [%14s] Msg: %s\n",
11386 static_cast<unsigned int>(i),
11387 static_cast<unsigned int>(error.token.position),
11388 static_cast<unsigned int>(error.line_no),
11389 static_cast<unsigned int>(error.column_no),
11391 error.diagnostic.c_str());
11397 const T value0 = expression.value();
11399 if (expression.value() != T(1))
11401 printf(
"run_test21() - Error: Failed evaluation Expected 1 got: %f (1)\n",
static_cast<double>(value0));
11407 const T value1 = expression.value();
11409 if (expression.value() != T(1))
11411 printf(
"run_test21() - Error: Failed evaluation Expected 1 got: %f (1)\n",
static_cast<double>(value1));
11417 expression.release();
11421 const T vanilla[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
11422 const std::size_t vanilla_size =
sizeof(vanilla) /
sizeof(T);
11424 std::vector<T> v0(vanilla, vanilla + vanilla_size);
11425 std::vector<T> v1(vanilla, vanilla + vanilla_size);
11432 symbol_table_t symbol_table;
11433 symbol_table.add_vector(
"v", vv);
11438 symbol_table.add_package( vector_package );
11439 symbol_table.add_package( io_package );
11440 symbol_table.add_function(
"resize", vv_size_handler);
11442 expression_t expression;
11443 expression.register_symbol_table(symbol_table);
11447 const std::string resize_expression =
11448 " var vec_original_size := v[]; "
11449 " var failure_count := 0; "
11451 " for (var i := vec_original_size + 1; i <= 2 * vec_original_size; i += 1) "
11453 " if (resize(v,i) == false or v[] != i) "
11455 " failure_count += 1 "
11459 " failure_count == vec_original_size ";
11461 if (!parser.compile(resize_expression, expression))
11463 printf(
"run_test21() - Error: %s\tExpression: %s\n",
11464 parser.error().c_str(),
11465 resize_expression.c_str());
11467 for (std::size_t i = 0; i < parser.error_count(); ++i)
11469 error_type error = parser.get_error(i);
11472 printf(
"run_test21() - Error[%02d] Position: %02d line: %d column: %d Type: [%14s] Msg: %s\n",
11473 static_cast<unsigned int>(i),
11474 static_cast<unsigned int>(error.token.position),
11475 static_cast<unsigned int>(error.line_no),
11476 static_cast<unsigned int>(error.column_no),
11478 error.diagnostic.c_str());
11484 const T value0 = expression.value();
11486 if (expression.value() != T(1))
11488 printf(
"run_test21() - Error: Failed evaluation Expected 1 got: %f (2)\n",
static_cast<double>(value0));
11494 const T value1 = expression.value();
11496 if (expression.value() != T(1))
11498 printf(
"run_test21() - Error: Failed evaluation Expected 1 got: %f (2)\n",
static_cast<double>(value1));
11504 expression.release();
11526 bool result =
true;
11529 const std::string expressions[] =
11531 " assert(1 > 1); ",
11532 " assert(1 > 2, 'assert statement 2'); ",
11533 " assert(1 > 3, 'assert ' + 'statement 3'); ",
11534 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); ",
11535 " assert(1 > 5, 'assert ' + 'statement 5'); ",
11536 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); "
11539 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
11541 for (std::size_t i = 0; i < expression_count; ++i)
11543 expression_t expression;
11546 if (!parser.compile(expressions[i], expression))
11548 printf(
"run_test22() - Error: %s\tExpression: %s [1]\n",
11549 parser.error().c_str(),
11550 expressions[i].c_str());
11556 printf(
"run_test22() - Error: Expression is not null! expression: %s [1]\n",
11557 expressions[i].c_str());
11562 expression.value();
11567 const std::string expressions[] =
11569 " assert(1 > 1); 1 + 0 ",
11570 " assert(1 > 2, 'assert statement 2'); 2 + 0 ",
11571 " assert(1 > 3, 'assert ' + 'statement 3'); 3 + 0 ",
11572 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 4 + 0 ",
11573 " assert(1 > 5, 'assert ' + 'statement 5'); 5 + 0 ",
11574 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 6 + 0 "
11577 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
11579 for (std::size_t i = 0; i < expression_count; ++i)
11581 expression_t expression;
11584 if (!parser.compile(expressions[i], expression))
11586 printf(
"run_test22() - Error: %s\tExpression: %s [2]\n",
11587 parser.error().c_str(),
11588 expressions[i].c_str());
11594 printf(
"run_test22() - Error: Expression is not constant! expression: %s [2]\n",
11595 expressions[i].c_str());
11599 expression.value();
11604 const std::string expressions[] =
11607 " assert(1 > 2, 'assert statement 2'); "
11608 " assert(1 > 3, 'assert ' + 'statement 3'); "
11609 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); "
11610 " assert(1 > 5, 'assert ' + 'statement 5'); "
11611 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); "
11614 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
11616 for (std::size_t i = 0; i < expression_count; ++i)
11618 expression_t expression;
11624 parser.register_assert_check(handler);
11626 if (!parser.compile(expressions[i], expression))
11628 printf(
"run_test22() - Error: %s\tExpression: %s [3]\n",
11629 parser.error().c_str(),
11630 expressions[i].c_str());
11635 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
11638 type_sequence.push_back(et_t::e_assert);
11639 type_sequence.push_back(et_t::e_assert);
11640 type_sequence.push_back(et_t::e_assert);
11641 type_sequence.push_back(et_t::e_assert);
11642 type_sequence.push_back(et_t::e_assert);
11643 type_sequence.push_back(et_t::e_assert);
11647 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [3]\n",
11648 expressions[i].c_str());
11653 expression.value();
11657 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [3]\n",
11659 expressions[i].c_str());
11667 const std::string expressions[] =
11669 " assert(1 > 1); 1 ",
11670 " assert(1 > 2, 'assert statement 2'); 2 ",
11671 " assert(1 > 3, 'assert ' + 'statement 3'); 3 ",
11672 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 4 ",
11673 " assert(1 > 5, 'assert ' + 'statement 5'); 5 ",
11674 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 6 "
11677 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
11679 for (std::size_t i = 0; i < expression_count; ++i)
11681 expression_t expression;
11687 parser.register_assert_check(handler);
11689 if (!parser.compile(expressions[i], expression))
11691 printf(
"run_test22() - Error: %s\tExpression: %s [4]\n",
11692 parser.error().c_str(),
11693 expressions[i].c_str());
11698 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
11701 type_sequence.push_back(et_t::e_assert );
11702 type_sequence.push_back(et_t::e_literal);
11706 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [4]\n",
11707 expressions[i].c_str());
11712 expression.value();
11716 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [4]\n",
11718 expressions[i].c_str());
11726 const std::string expressions[] =
11728 " assert(1 > 1); 1 + 0 ",
11729 " assert(1 > 2, 'assert statement 2'); 2 + 0 ",
11730 " assert(1 > 3, 'assert ' + 'statement 3'); 3 + 0 ",
11731 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 4 + 0 ",
11732 " assert(1 > 5, 'assert ' + 'statement 5'); 5 + 0 ",
11733 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 6 + 0 "
11736 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
11738 for (std::size_t i = 0; i < expression_count; ++i)
11740 expression_t expression;
11746 parser.register_assert_check(handler);
11748 if (!parser.compile(expressions[i], expression))
11750 printf(
"run_test22() - Error: %s\tExpression: %s [5]\n",
11751 parser.error().c_str(),
11752 expressions[i].c_str());
11757 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
11760 type_sequence.push_back(et_t::e_assert );
11761 type_sequence.push_back(et_t::e_literal);
11765 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [5]\n",
11766 expressions[i].c_str());
11771 expression.value();
11775 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [5]\n",
11777 expressions[i].c_str());
11785 const std::string expressions[] =
11787 " assert(1 > 1); 'assert statement 0001' ",
11788 " assert(1 > 2, 'assert statement 2'); 'assert statement 0002' ",
11789 " assert(1 > 3, 'assert ' + 'statement 3'); 'assert statement 0003' ",
11790 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 'assert statement 0004' ",
11791 " assert(1 > 5, 'assert ' + 'statement 5'); 'assert statement 0005' ",
11792 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 'assert statement 0006' "
11795 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
11797 for (std::size_t i = 0; i < expression_count; ++i)
11799 expression_t expression;
11805 parser.register_assert_check(handler);
11807 if (!parser.compile(expressions[i], expression))
11809 printf(
"run_test22() - Error: %s\tExpression: %s [6]\n",
11810 parser.error().c_str(),
11811 expressions[i].c_str());
11816 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
11819 type_sequence.push_back(et_t::e_assert);
11820 type_sequence.push_back(et_t::e_string);
11824 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [6]\n",
11825 expressions[i].c_str());
11830 expression.value();
11834 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [6]\n",
11836 expressions[i].c_str());
11844 const std::string expressions[] =
11846 " assert(1 > 1); 'assert statement' + '0001' ",
11847 " assert(1 > 2, 'assert statement 2'); 'assert statement' + '0002' ",
11848 " assert(1 > 3, 'assert ' + 'statement 3'); 'assert statement' + '0003' ",
11849 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 'assert statement' + '0004' ",
11850 " assert(1 > 5, 'assert ' + 'statement 5'); 'assert statement' + '0005' ",
11851 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 'assert statement' + '0006' "
11854 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
11856 for (std::size_t i = 0; i < expression_count; ++i)
11858 expression_t expression;
11864 parser.register_assert_check(handler);
11866 if (!parser.compile(expressions[i], expression))
11868 printf(
"run_test22() - Error: %s\tExpression: %s [7]\n",
11869 parser.error().c_str(),
11870 expressions[i].c_str());
11875 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
11878 type_sequence.push_back(et_t::e_assert);
11879 type_sequence.push_back(et_t::e_string);
11883 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [7]\n",
11884 expressions[i].c_str());
11889 expression.value();
11893 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [7]\n",
11895 expressions[i].c_str());
11903 const std::string expressions[] =
11905 " assert(x > y); ",
11906 " assert(x > y, 'assert statement 2'); ",
11907 " assert(x > y, 'assert ' + 'statement 3'); ",
11908 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); ",
11909 " assert(x > y, 'assert ' + 'statement 5'); ",
11910 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); "
11913 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
11915 for (std::size_t i = 0; i < expression_count; ++i)
11920 symbol_table_t symbol_table;
11921 expression_t expression;
11924 symbol_table.add_variable(
"x", x);
11925 symbol_table.add_variable(
"y", y);
11926 expression.register_symbol_table(symbol_table);
11928 if (!parser.compile(expressions[i], expression))
11930 printf(
"run_test22() - Error: %s\tExpression: %s [8]\n",
11931 parser.error().c_str(),
11932 expressions[i].c_str());
11938 printf(
"run_test22() - Error: Expression is not null! expression: %s [8]\n",
11939 expressions[i].c_str());
11944 expression.value();
11949 const std::string expressions[] =
11951 " assert(x > y); 1 + 0 ",
11952 " assert(x > y, 'assert statement 2'); 2 + 0 ",
11953 " assert(x > y, 'assert ' + 'statement 3'); 3 + 0 ",
11954 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); 4 + 0 ",
11955 " assert(x > y, 'assert ' + 'statement 5'); 5 + 0 ",
11956 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); 6 + 0 "
11959 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
11961 for (std::size_t i = 0; i < expression_count; ++i)
11966 symbol_table_t symbol_table;
11967 expression_t expression;
11970 symbol_table.add_variable(
"x", x);
11971 symbol_table.add_variable(
"y", y);
11972 expression.register_symbol_table(symbol_table);
11974 if (!parser.compile(expressions[i], expression))
11976 printf(
"run_test22() - Error: %s\tExpression: %s [9]\n",
11977 parser.error().c_str(),
11978 expressions[i].c_str());
11984 printf(
"run_test22() - Error: Expression is not constant! expression: %s [9]\n",
11985 expressions[i].c_str());
11989 expression.value();
11994 const std::string expressions[] =
11997 " assert(x > y, 'assert statement 2'); "
11998 " assert(x > y, 'assert ' + 'statement 3'); "
11999 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); "
12000 " assert(x > y, 'assert ' + 'statement 5'); "
12001 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); "
12004 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12006 for (std::size_t i = 0; i < expression_count; ++i)
12011 symbol_table_t symbol_table;
12012 expression_t expression;
12018 symbol_table.add_variable(
"x", x);
12019 symbol_table.add_variable(
"y", y);
12020 expression.register_symbol_table(symbol_table);
12022 parser.register_assert_check(handler);
12024 if (!parser.compile(expressions[i], expression))
12026 printf(
"run_test22() - Error: %s\tExpression: %s [10]\n",
12027 parser.error().c_str(),
12028 expressions[i].c_str());
12033 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12036 type_sequence.push_back(et_t::e_assert);
12037 type_sequence.push_back(et_t::e_assert);
12038 type_sequence.push_back(et_t::e_assert);
12039 type_sequence.push_back(et_t::e_assert);
12040 type_sequence.push_back(et_t::e_assert);
12041 type_sequence.push_back(et_t::e_assert);
12045 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [10]\n",
12046 expressions[i].c_str());
12051 expression.value();
12055 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [10]\n",
12057 expressions[i].c_str());
12065 const std::string expressions[] =
12067 " assert(x > y); 1 ",
12068 " assert(x > y, 'assert statement 2'); 2 ",
12069 " assert(x > y, 'assert ' + 'statement 3'); 3 ",
12070 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); 4 ",
12071 " assert(x > y, 'assert ' + 'statement 5'); 5 ",
12072 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); 6 "
12075 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12077 for (std::size_t i = 0; i < expression_count; ++i)
12082 symbol_table_t symbol_table;
12083 expression_t expression;
12089 symbol_table.add_variable(
"x", x);
12090 symbol_table.add_variable(
"y", y);
12091 expression.register_symbol_table(symbol_table);
12093 parser.register_assert_check(handler);
12095 if (!parser.compile(expressions[i], expression))
12097 printf(
"run_test22() - Error: %s\tExpression: %s [11]\n",
12098 parser.error().c_str(),
12099 expressions[i].c_str());
12104 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12107 type_sequence.push_back(et_t::e_assert );
12108 type_sequence.push_back(et_t::e_literal);
12112 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [11]\n",
12113 expressions[i].c_str());
12118 expression.value();
12122 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [11]\n",
12124 expressions[i].c_str());
12133 const std::string expressions[] =
12135 " assert(x > y); 1 + 0 ",
12136 " assert(x > y, 'assert statement 2'); 2 + 0 ",
12137 " assert(x > y, 'assert ' + 'statement 3'); 3 + 0 ",
12138 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); 4 + 0 ",
12139 " assert(x > y, 'assert ' + 'statement 5'); 5 + 0 ",
12140 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); 6 + 0 "
12143 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12145 for (std::size_t i = 0; i < expression_count; ++i)
12150 symbol_table_t symbol_table;
12151 expression_t expression;
12157 symbol_table.add_variable(
"x", x);
12158 symbol_table.add_variable(
"y", y);
12159 expression.register_symbol_table(symbol_table);
12161 parser.register_assert_check(handler);
12163 if (!parser.compile(expressions[i], expression))
12165 printf(
"run_test22() - Error: %s\tExpression: %s [12]\n",
12166 parser.error().c_str(),
12167 expressions[i].c_str());
12172 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12175 type_sequence.push_back(et_t::e_assert );
12176 type_sequence.push_back(et_t::e_literal);
12180 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [12]\n",
12181 expressions[i].c_str());
12186 expression.value();
12190 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [12]\n",
12192 expressions[i].c_str());
12200 const std::string expressions[] =
12202 " assert(x > y); 'assert statement 0001' ",
12203 " assert(x > y, 'assert statement 2'); 'assert statement 0002' ",
12204 " assert(x > y, 'assert ' + 'statement 3'); 'assert statement 0003' ",
12205 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); 'assert statement 0004' ",
12206 " assert(x > y, 'assert ' + 'statement 5'); 'assert statement 0005' ",
12207 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); 'assert statement 0006' "
12210 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12212 for (std::size_t i = 0; i < expression_count; ++i)
12217 symbol_table_t symbol_table;
12218 expression_t expression;
12224 symbol_table.add_variable(
"x", x);
12225 symbol_table.add_variable(
"y", y);
12226 expression.register_symbol_table(symbol_table);
12228 parser.register_assert_check(handler);
12230 if (!parser.compile(expressions[i], expression))
12232 printf(
"run_test22() - Error: %s\tExpression: %s [13]\n",
12233 parser.error().c_str(),
12234 expressions[i].c_str());
12239 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12242 type_sequence.push_back(et_t::e_assert);
12243 type_sequence.push_back(et_t::e_string);
12247 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [13]\n",
12248 expressions[i].c_str());
12253 expression.value();
12257 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [13]\n",
12259 expressions[i].c_str());
12267 const std::string expressions[] =
12269 " assert(x > y); 'assert statement' + '0001' ",
12270 " assert(x > y, 'assert statement 2'); 'assert statement' + '0002' ",
12271 " assert(x > y, 'assert ' + 'statement 3'); 'assert statement' + '0003' ",
12272 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); 'assert statement' + '0004' ",
12273 " assert(x > y, 'assert ' + 'statement 5'); 'assert statement' + '0005' ",
12274 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); 'assert statement' + '0006' "
12277 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12279 for (std::size_t i = 0; i < expression_count; ++i)
12284 symbol_table_t symbol_table;
12285 expression_t expression;
12291 symbol_table.add_variable(
"x", x);
12292 symbol_table.add_variable(
"y", y);
12293 expression.register_symbol_table(symbol_table);
12295 parser.register_assert_check(handler);
12297 if (!parser.compile(expressions[i], expression))
12299 printf(
"run_test22() - Error: %s\tExpression: %s [14]\n",
12300 parser.error().c_str(),
12301 expressions[i].c_str());
12306 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12309 type_sequence.push_back(et_t::e_assert);
12310 type_sequence.push_back(et_t::e_string);
12314 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [14]\n",
12315 expressions[i].c_str());
12320 expression.value();
12324 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [14]\n",
12326 expressions[i].c_str());
12334 const std::string expressions[] =
12336 " assert(1 > 1); 1 + 0; "
12337 " assert(1 > 2, 'assert statement 2'); 2 + 0; "
12338 " assert(1 > 3, 'assert ' + 'statement 3'); 3 + 0; "
12339 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 4 + 0; "
12340 " assert(1 > 5, 'assert ' + 'statement 5'); 5 + 0 "
12341 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 6 + 0; "
12344 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12346 for (std::size_t i = 0; i < expression_count; ++i)
12348 expression_t expression;
12354 parser.register_assert_check(handler);
12356 if (!parser.compile(expressions[i], expression))
12358 printf(
"run_test22() - Error: %s\tExpression: %s [15]\n",
12359 parser.error().c_str(),
12360 expressions[i].c_str());
12365 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12368 type_sequence.push_back(et_t::e_assert );
12369 type_sequence.push_back(et_t::e_assert );
12370 type_sequence.push_back(et_t::e_assert );
12371 type_sequence.push_back(et_t::e_assert );
12372 type_sequence.push_back(et_t::e_assert );
12373 type_sequence.push_back(et_t::e_assert );
12374 type_sequence.push_back(et_t::e_literal);
12378 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [15]\n",
12379 expressions[i].c_str());
12384 expression.value();
12388 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [15]\n",
12390 expressions[i].c_str());
12398 const std::string expressions[] =
12400 " assert(1 > 1); 'assert' + '01'; "
12401 " assert(1 > 2, 'assert statement 2'); 'assert' + '02'; "
12402 " assert(1 > 3, 'assert ' + 'statement 3'); 'assert' + '03'; "
12403 " assert(1 > 4, 'assert ' + 'statement 4', 'Assert04'); 'assert' + '04'; "
12404 " assert(1 > 5, 'assert ' + 'statement 5'); 'assert' + '05'; "
12405 " assert(1 > 6, 'assert ' + 'statement 6', 'Assert' + '06'); 'assert' + '06'; "
12408 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12410 for (std::size_t i = 0; i < expression_count; ++i)
12412 expression_t expression;
12418 parser.register_assert_check(handler);
12420 if (!parser.compile(expressions[i], expression))
12422 printf(
"run_test22() - Error: %s\tExpression: %s [16]\n",
12423 parser.error().c_str(),
12424 expressions[i].c_str());
12429 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12432 type_sequence.push_back(et_t::e_assert);
12433 type_sequence.push_back(et_t::e_assert);
12434 type_sequence.push_back(et_t::e_assert);
12435 type_sequence.push_back(et_t::e_assert);
12436 type_sequence.push_back(et_t::e_assert);
12437 type_sequence.push_back(et_t::e_assert);
12438 type_sequence.push_back(et_t::e_string);
12442 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [16]\n",
12443 expressions[i].c_str());
12448 expression.value();
12452 printf(
"run_test22() - Error: Invalid assert count of %d expected 1. Expression: %s [16]\n",
12454 expressions[i].c_str());
12462 const std::string expressions[] =
12464 " assert(x > y); x + y + 1; "
12465 " assert(x > y, 'assert statement 2'); x + y + 1; "
12466 " assert(x > y, 'assert ' + 'statement 3'); x + y + 1; "
12467 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); x + y + 1; "
12468 " assert(x > y, 'assert ' + 'statement 5'); x + y + 1; "
12469 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); x + y + 1; "
12472 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12474 for (std::size_t i = 0; i < expression_count; ++i)
12479 symbol_table_t symbol_table;
12480 expression_t expression;
12486 symbol_table.add_variable(
"x", x);
12487 symbol_table.add_variable(
"y", y);
12488 expression.register_symbol_table(symbol_table);
12490 parser.register_assert_check(handler);
12492 if (!parser.compile(expressions[i], expression))
12494 printf(
"run_test22() - Error: %s\tExpression: %s [17]\n",
12495 parser.error().c_str(),
12496 expressions[i].c_str());
12501 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12504 type_sequence.push_back(et_t::e_assert);
12505 type_sequence.push_back(et_t::e_assert);
12506 type_sequence.push_back(et_t::e_assert);
12507 type_sequence.push_back(et_t::e_assert);
12508 type_sequence.push_back(et_t::e_assert);
12509 type_sequence.push_back(et_t::e_assert);
12510 type_sequence.push_back(et_t::e_sf3ext);
12514 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [17]\n",
12515 expressions[i].c_str());
12520 expression.value();
12524 printf(
"run_test22() - Error: Invalid assert count of %d expected 6. Expression: %s [17]\n",
12526 expressions[i].c_str());
12534 const std::string expressions[] =
12536 " assert(x > y); 'assert' + ((x < y) ? '01' : 'XYZ'); "
12537 " assert(x > y, 'assert statement 2'); 'assert' + ((x < y) ? '02' : 'XYZ'); "
12538 " assert(x > y, 'assert ' + 'statement 3'); 'assert' + ((x < y) ? '03' : 'XYZ'); "
12539 " assert(x > y, 'assert ' + 'statement 4', 'Assert04'); 'assert' + ((x < y) ? '04' : 'XYZ'); "
12540 " assert(x > y, 'assert ' + 'statement 5'); 'assert' + ((x < y) ? '05' : 'XYZ'); "
12541 " assert(x > y, 'assert ' + 'statement 6', 'Assert' + '06'); 'assert' + ((x < y) ? '06' : 'XYZ'); "
12544 const std::size_t expression_count =
sizeof(expressions) /
sizeof(std::string);
12546 for (std::size_t i = 0; i < expression_count; ++i)
12551 symbol_table_t symbol_table;
12552 expression_t expression;
12558 symbol_table.add_variable(
"x", x);
12559 symbol_table.add_variable(
"y", y);
12560 expression.register_symbol_table(symbol_table);
12562 parser.register_assert_check(handler);
12564 if (!parser.compile(expressions[i], expression))
12566 printf(
"run_test22() - Error: %s\tExpression: %s [18]\n",
12567 parser.error().c_str(),
12568 expressions[i].c_str());
12573 std::vector<typename exprtk::expression_helper<T>::node_types> type_sequence;
12576 type_sequence.push_back(et_t::e_assert);
12577 type_sequence.push_back(et_t::e_assert);
12578 type_sequence.push_back(et_t::e_assert);
12579 type_sequence.push_back(et_t::e_assert);
12580 type_sequence.push_back(et_t::e_assert);
12581 type_sequence.push_back(et_t::e_assert);
12582 type_sequence.push_back(et_t::e_string);
12586 printf(
"run_test22() - Error: Expression failed to match type sequence. Expression: %s [18]\n",
12587 expressions[i].c_str());
12592 expression.value();
12596 printf(
"run_test22() - Error: Invalid assert count of %d expected 6. Expression: %s [18]\n",
12598 expressions[i].c_str());