diff options
Diffstat (limited to 'test/unit/t_expr.cc')
-rw-r--r-- | test/unit/t_expr.cc | 332 |
1 files changed, 332 insertions, 0 deletions
diff --git a/test/unit/t_expr.cc b/test/unit/t_expr.cc new file mode 100644 index 00000000..b5865948 --- /dev/null +++ b/test/unit/t_expr.cc @@ -0,0 +1,332 @@ +#include <system.hh> + +#include "t_expr.h" + +#include "expr.h" +#include "predicate.h" +#include "query.h" +#include "op.h" + +using namespace ledger; + +CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(ValueExprTestCase, "expr"); + +void ValueExprTestCase::setUp() +{ + times_initialize(); + amount_t::initialize(); +} + +void ValueExprTestCase::tearDown() +{ + amount_t::shutdown(); + times_shutdown(); +} + +// 1. foo and bar +// 2. 'foo and bar' +// 3. (foo and bar) +// 4. ( foo and bar ) +// 5. '( foo and' bar) +// 6. =foo and bar +// 7. ='foo and bar' +// 8. 'expr foo and bar' +// 9. expr 'foo and bar' +// 10. expr foo and bar +// 11. foo and bar or baz +// 12. foo and bar | baz +// 13. foo and bar |baz +// 14. foo and bar| baz +// 15. foo and bar|baz +// 16. foo 'and bar|baz' + +void ValueExprTestCase::testPredicateTokenizer1() +{ + value_t args; + args.push_back(string_value("foo")); + args.push_back(string_value("and")); + args.push_back(string_value("bar")); + +#ifndef NOT_FOR_PYTHON + query_t::lexer_t tokens(args.begin(), args.end()); + + assertEqual(query_t::lexer_t::token_t::TERM, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TOK_AND, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TERM, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::END_REACHED, tokens.next_token().kind); +#endif +} + +void ValueExprTestCase::testPredicateTokenizer2() +{ + value_t args; + args.push_back(string_value("foo and bar")); + +#ifndef NOT_FOR_PYTHON + query_t::lexer_t tokens(args.begin(), args.end()); + + assertEqual(query_t::lexer_t::token_t::TERM, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TOK_AND, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TERM, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::END_REACHED, tokens.next_token().kind); +#endif +} + +void ValueExprTestCase::testPredicateTokenizer3() +{ + value_t args; + args.push_back(string_value("(foo")); + args.push_back(string_value("and")); + args.push_back(string_value("bar)")); + +#ifndef NOT_FOR_PYTHON + query_t::lexer_t tokens(args.begin(), args.end()); + + assertEqual(query_t::lexer_t::token_t::LPAREN, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TERM, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TOK_AND, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TERM, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::RPAREN, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::END_REACHED, tokens.next_token().kind); +#endif +} + +void ValueExprTestCase::testPredicateTokenizer4() +{ + value_t args; + args.push_back(string_value("(")); + args.push_back(string_value("foo")); + args.push_back(string_value("and")); + args.push_back(string_value("bar")); + args.push_back(string_value(")")); + +#ifndef NOT_FOR_PYTHON + query_t::lexer_t tokens(args.begin(), args.end()); + + assertEqual(query_t::lexer_t::token_t::LPAREN, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TERM, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TOK_AND, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TERM, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::RPAREN, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::END_REACHED, tokens.next_token().kind); +#endif +} + +void ValueExprTestCase::testPredicateTokenizer5() +{ + value_t args; + args.push_back(string_value("( foo and")); + args.push_back(string_value("bar)")); + +#ifndef NOT_FOR_PYTHON + query_t::lexer_t tokens(args.begin(), args.end()); + + assertEqual(query_t::lexer_t::token_t::LPAREN, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TERM, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TOK_AND, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TERM, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::RPAREN, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::END_REACHED, tokens.next_token().kind); +#endif +} + +void ValueExprTestCase::testPredicateTokenizer6() +{ + value_t args; + args.push_back(string_value("=foo")); + args.push_back(string_value("and")); + args.push_back(string_value("bar")); + +#ifndef NOT_FOR_PYTHON + query_t::lexer_t tokens(args.begin(), args.end()); + + assertEqual(query_t::lexer_t::token_t::TOK_EQ, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TERM, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TOK_AND, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TERM, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::END_REACHED, tokens.next_token().kind); +#endif +} + +void ValueExprTestCase::testPredicateTokenizer7() +{ + value_t args; + args.push_back(string_value("=foo and bar")); + +#ifndef NOT_FOR_PYTHON + query_t::lexer_t tokens(args.begin(), args.end()); + + assertEqual(query_t::lexer_t::token_t::TOK_EQ, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TERM, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TOK_AND, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TERM, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::END_REACHED, tokens.next_token().kind); +#endif +} + +void ValueExprTestCase::testPredicateTokenizer8() +{ + value_t args; + args.push_back(string_value("expr foo and bar")); + +#ifndef NOT_FOR_PYTHON + query_t::lexer_t tokens(args.begin(), args.end()); + + assertEqual(query_t::lexer_t::token_t::TOK_EXPR, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TERM, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::END_REACHED, tokens.next_token().kind); +#endif +} + +void ValueExprTestCase::testPredicateTokenizer9() +{ + value_t args; + args.push_back(string_value("expr")); + args.push_back(string_value("foo and bar")); + +#ifndef NOT_FOR_PYTHON + query_t::lexer_t tokens(args.begin(), args.end()); + + assertEqual(query_t::lexer_t::token_t::TOK_EXPR, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TERM, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::END_REACHED, tokens.next_token().kind); +#endif +} + +void ValueExprTestCase::testPredicateTokenizer10() +{ + value_t args; + args.push_back(string_value("expr")); + args.push_back(string_value("foo")); + args.push_back(string_value("and")); + args.push_back(string_value("bar")); + +#ifndef NOT_FOR_PYTHON + query_t::lexer_t tokens(args.begin(), args.end()); + + assertEqual(query_t::lexer_t::token_t::TOK_EXPR, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TERM, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TOK_AND, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TERM, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::END_REACHED, tokens.next_token().kind); +#endif +} + +void ValueExprTestCase::testPredicateTokenizer11() +{ + value_t args; + args.push_back(string_value("foo")); + args.push_back(string_value("and")); + args.push_back(string_value("bar")); + args.push_back(string_value("or")); + args.push_back(string_value("baz")); + +#ifndef NOT_FOR_PYTHON + query_t::lexer_t tokens(args.begin(), args.end()); + + assertEqual(query_t::lexer_t::token_t::TERM, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TOK_AND, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TERM, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TOK_OR, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TERM, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::END_REACHED, tokens.next_token().kind); +#endif +} + +void ValueExprTestCase::testPredicateTokenizer12() +{ + value_t args; + args.push_back(string_value("foo")); + args.push_back(string_value("and")); + args.push_back(string_value("bar")); + args.push_back(string_value("|")); + args.push_back(string_value("baz")); + +#ifndef NOT_FOR_PYTHON + query_t::lexer_t tokens(args.begin(), args.end()); + + assertEqual(query_t::lexer_t::token_t::TERM, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TOK_AND, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TERM, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TOK_OR, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TERM, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::END_REACHED, tokens.next_token().kind); +#endif +} + +void ValueExprTestCase::testPredicateTokenizer13() +{ + value_t args; + args.push_back(string_value("foo")); + args.push_back(string_value("and")); + args.push_back(string_value("bar")); + args.push_back(string_value("|baz")); + +#ifndef NOT_FOR_PYTHON + query_t::lexer_t tokens(args.begin(), args.end()); + + assertEqual(query_t::lexer_t::token_t::TERM, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TOK_AND, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TERM, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TOK_OR, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TERM, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::END_REACHED, tokens.next_token().kind); +#endif +} + +void ValueExprTestCase::testPredicateTokenizer14() +{ + value_t args; + args.push_back(string_value("foo")); + args.push_back(string_value("and")); + args.push_back(string_value("bar|")); + args.push_back(string_value("baz")); + +#ifndef NOT_FOR_PYTHON + query_t::lexer_t tokens(args.begin(), args.end()); + + assertEqual(query_t::lexer_t::token_t::TERM, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TOK_AND, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TERM, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TOK_OR, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TERM, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::END_REACHED, tokens.next_token().kind); +#endif +} + +void ValueExprTestCase::testPredicateTokenizer15() +{ + value_t args; + args.push_back(string_value("foo")); + args.push_back(string_value("and")); + args.push_back(string_value("bar|baz")); + +#ifndef NOT_FOR_PYTHON + query_t::lexer_t tokens(args.begin(), args.end()); + + assertEqual(query_t::lexer_t::token_t::TERM, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TOK_AND, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TERM, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TOK_OR, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TERM, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::END_REACHED, tokens.next_token().kind); +#endif +} + +void ValueExprTestCase::testPredicateTokenizer16() +{ + value_t args; + args.push_back(string_value("foo")); + args.push_back(string_value("and bar|baz")); + +#ifndef NOT_FOR_PYTHON + query_t::lexer_t tokens(args.begin(), args.end()); + + assertEqual(query_t::lexer_t::token_t::TERM, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TOK_AND, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TERM, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TOK_OR, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::TERM, tokens.next_token().kind); + assertEqual(query_t::lexer_t::token_t::END_REACHED, tokens.next_token().kind); +#endif +} |