AI-Prolog
view release on metacpan or search on metacpan
t/80preprocessor_math.t view on Meta::CPAN
[ 'OP', '*' ],
[ 'ATOM', 'I' ],
[ 'RPAREN', ')' ],
], "$rhs : lexes properly";
can_ok $CLASS, '_parse';
is $CLASS->_parse([
[qw/ ATOM 5 /],
[qw/ OP * /],
[qw/ ATOM 4 /],
]), 'mult(5, 4)', '... and simple expressions should parse properly';
is $CLASS->_parse([
[qw/ ATOM 5 /],
[qw{ OP / }],
[qw/ ATOM 4 /],
]), 'div(5, 4)', '... and simple expressions should parse properly';
is $CLASS->_parse([
[qw/ ATOM 5 /],
[qw{ OP + }],
[qw/ ATOM 4 /],
]), 'plus(5, 4)', '... and simple expressions should parse properly';
is $CLASS->_parse([
[qw/ ATOM 5 /],
[qw{ OP - }],
[qw/ ATOM 4 /],
]), 'minus(5, 4)', '... and simple expressions should parse properly';
is $CLASS->_parse([
[qw/ ATOM 5 /],
[qw{ OP % }],
[qw/ ATOM 4 /],
]), 'mod(5, 4)', '... and simple expressions should parse properly';
is $CLASS->_parse([
[qw/ ATOM 5 /],
[qw{ OP + }],
[qw/ ATOM 4 /],
[qw{ OP * }],
[qw/ ATOM 7.2/],
]), 'plus(5, mult(4, 7.2))', '... and compound expressions should parse properly';
is $CLASS->_parse([
[qw/ ATOM 5 /],
[qw{ OP * }],
[qw/ ATOM 4 /],
[qw{ OP + }],
[qw/ ATOM 7.2/],
]), 'plus(mult(5, 4), 7.2)', '... and compound expressions should parse properly';
is $CLASS->_parse([
[qw/ ATOM 5 /],
[qw/ OP * /],
[qw/ LPAREN ( /],
[qw/ ATOM 4 /],
[qw/ OP + /],
[qw/ ATOM 7.2 /],
[qw/ RPAREN ) /],
]), 'mult(5, plus(4, 7.2))', '... and parentheses should group properly';
is $CLASS->process('X is 3 + 2.'), 'is(X, plus(3, 2)).',
'... and it should be able to transform full math expressions.';
my @expressions = (
'X is 3.',
'is(X, 3).',
'Answer = A + B.',
'eq(Answer, plus(A, B)).',
'Answer = A + B + C.',
'eq(Answer, plus(plus(A, B), C)).',
'Answer = A + B + C + D + E.',
'eq(Answer, plus(plus(plus(plus(A, B), C), D), E)).',
'7 >= 3 * 7 + 4.',
'ge(7, plus(mult(3, 7), 4)).',
'7 < 3 * (7 + 4),',
'lt(7, mult(3, plus(7, 4))),',
'X = 3 % 2.',
'eq(X, mod(3, 2)).',
'X = (3 % 2).',
'eq(X, mod(3, 2)).',
'Result is (3 + 4) % ModValue.',
'is(Result, mod(plus(3, 4), ModValue)).',
'Result is ((3 + 4) % ModValue).',
'is(Result, mod(plus(3, 4), ModValue)).',
'Answer is 9 / (3 + (4+7) % ModValue).',
'is(Answer, div(9, mod(plus(3, plus(4, 7)), ModValue))).',
'Answer is 9 / (3 + (4+7) % ModValue) + 2 / (3+7).',
'is(Answer, plus(div(9, mod(plus(3, plus(4, 7)), ModValue)), div(2, plus(3, 7)))).',
'X \= 9 / (3 + (4+7) % ModValue) + 2 / (3+7).',
'ne(X, plus(div(9, mod(plus(3, plus(4, 7)), ModValue)), div(2, plus(3, 7)))).',
'-1 is E ** (PI * I).',
'is(-1, pow(E, mult(PI, I))).',
);
while (my ($before, $after) = splice @expressions, 0, 2) {
is $CLASS->process($before), $after,
"$before : should transform correctly";
}
( run in 0.573 second using v1.01-cache-2.11-cpan-39bf76dae61 )