2026-10-02 20:31:24 +03:00
|
|
|
#include "test-tools.hpp"
|
|
|
|
|
#include "parser.hpp"
|
2026-10-04 14:13:14 +03:00
|
|
|
#include "syntaxer.hpp"
|
2026-10-02 20:31:24 +03:00
|
|
|
#include "expression.hpp"
|
|
|
|
|
|
|
|
|
|
TEST(parser_proper_test_1)
|
|
|
|
|
{
|
2026-10-02 22:14:03 +03:00
|
|
|
auto o = Parser::tokenize_input("(1+2-c)");
|
2026-10-05 20:24:09 +03:00
|
|
|
Parser::print_math_vector(o);
|
2026-10-02 22:14:03 +03:00
|
|
|
|
2026-10-02 20:31:24 +03:00
|
|
|
std::vector<Expression::Token> r;
|
|
|
|
|
|
|
|
|
|
r.push_back(Expression::Token(Expression::Token::OPA));
|
|
|
|
|
r.push_back(Expression::Token(1));
|
|
|
|
|
r.push_back(Expression::Token(Expression::Token::ADD));
|
|
|
|
|
r.push_back(Expression::Token(2));
|
|
|
|
|
r.push_back(Expression::Token(Expression::Token::SUB));
|
|
|
|
|
r.push_back(Expression::Token("c"));
|
|
|
|
|
r.push_back(Expression::Token(Expression::Token::CPA));
|
|
|
|
|
|
2026-10-05 11:17:48 +03:00
|
|
|
CHECK(Parser::assert_same(o, r));
|
2026-10-02 20:31:24 +03:00
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST(parser_proper_test_2)
|
|
|
|
|
{
|
2026-10-02 22:14:03 +03:00
|
|
|
auto o = Parser::tokenize_input("(1**5,-snake+marble*34*(35 / 63.2))");
|
2026-10-05 20:24:09 +03:00
|
|
|
Parser::print_math_vector(o);
|
2026-10-02 22:14:03 +03:00
|
|
|
|
2026-10-02 20:31:24 +03:00
|
|
|
std::vector<Expression::Token> r;
|
|
|
|
|
|
|
|
|
|
r.push_back(Expression::Token(Expression::Token::OPA));
|
|
|
|
|
r.push_back(Expression::Token(1));
|
|
|
|
|
r.push_back(Expression::Token(Expression::Token::POW));
|
|
|
|
|
r.push_back(Expression::Token(5));
|
|
|
|
|
r.push_back(Expression::Token(Expression::Token::SUB));
|
|
|
|
|
r.push_back(Expression::Token("snake"));
|
|
|
|
|
r.push_back(Expression::Token(Expression::Token::ADD));
|
|
|
|
|
r.push_back(Expression::Token("marble"));
|
|
|
|
|
r.push_back(Expression::Token(Expression::Token::MUL));
|
|
|
|
|
r.push_back(Expression::Token(34));
|
|
|
|
|
r.push_back(Expression::Token(Expression::Token::MUL));
|
|
|
|
|
r.push_back(Expression::Token(Expression::Token::OPA));
|
|
|
|
|
r.push_back(Expression::Token(35));
|
|
|
|
|
r.push_back(Expression::Token(Expression::Token::DIV));
|
|
|
|
|
r.push_back(Expression::Token(63.2));
|
|
|
|
|
r.push_back(Expression::Token(Expression::Token::CPA));
|
|
|
|
|
r.push_back(Expression::Token(Expression::Token::CPA));
|
|
|
|
|
|
2026-10-05 11:17:48 +03:00
|
|
|
CHECK(Parser::assert_same(o, r));
|
2026-10-02 20:31:24 +03:00
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
2026-10-02 22:14:03 +03:00
|
|
|
TEST(parser_proper_test_3)
|
|
|
|
|
{
|
|
|
|
|
auto o = Parser::tokenize_input(")))25.4,, 33..4 35 37 39 41 // +-*/***()()()");
|
2026-10-05 20:24:09 +03:00
|
|
|
Parser::print_math_vector(o);
|
2026-10-02 22:14:03 +03:00
|
|
|
|
|
|
|
|
std::vector<Expression::Token> r;
|
|
|
|
|
|
|
|
|
|
r.push_back(Expression::Token(Expression::Token::CPA));
|
|
|
|
|
r.push_back(Expression::Token(Expression::Token::CPA));
|
|
|
|
|
r.push_back(Expression::Token(Expression::Token::CPA));
|
|
|
|
|
r.push_back(Expression::Token(25.4));
|
|
|
|
|
r.push_back(Expression::Token(35));
|
|
|
|
|
r.push_back(Expression::Token(37));
|
|
|
|
|
r.push_back(Expression::Token(39));
|
|
|
|
|
r.push_back(Expression::Token(41));
|
|
|
|
|
r.push_back(Expression::Token(Expression::Token::DIV));
|
|
|
|
|
r.push_back(Expression::Token(Expression::Token::DIV));
|
|
|
|
|
r.push_back(Expression::Token(Expression::Token::ADD));
|
|
|
|
|
r.push_back(Expression::Token(Expression::Token::SUB));
|
|
|
|
|
r.push_back(Expression::Token(Expression::Token::MUL));
|
|
|
|
|
r.push_back(Expression::Token(Expression::Token::DIV));
|
|
|
|
|
r.push_back(Expression::Token(Expression::Token::POW));
|
|
|
|
|
r.push_back(Expression::Token(Expression::Token::MUL));
|
|
|
|
|
r.push_back(Expression::Token(Expression::Token::OPA));
|
|
|
|
|
r.push_back(Expression::Token(Expression::Token::CPA));
|
|
|
|
|
r.push_back(Expression::Token(Expression::Token::OPA));
|
|
|
|
|
r.push_back(Expression::Token(Expression::Token::CPA));
|
|
|
|
|
r.push_back(Expression::Token(Expression::Token::OPA));
|
|
|
|
|
r.push_back(Expression::Token(Expression::Token::CPA));
|
|
|
|
|
|
2026-10-05 11:17:48 +03:00
|
|
|
CHECK(Parser::assert_same(o, r));
|
2026-10-02 22:14:03 +03:00
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
2026-10-04 14:13:14 +03:00
|
|
|
TEST(tree_proper_test_1)
|
|
|
|
|
{
|
2026-10-05 11:17:48 +03:00
|
|
|
std::vector<Expression::Token> o = Parser::tokenize_input("(1**5 * (1 - 2 - (3 + 4) - ((5 + 6) + (7 + 8))))");
|
|
|
|
|
std::vector<Expression::Operation> ov = Syntax::build_op_vector(o);
|
2026-10-04 14:13:14 +03:00
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
2026-10-05 20:24:09 +03:00
|
|
|
TEST(tree_proper_test_2)
|
|
|
|
|
{
|
|
|
|
|
std::vector<Expression::Token> o = Parser::tokenize_input("(1**5 * (1-2-3-4-5-6-7-8))");
|
2026-10-14 19:57:02 +03:00
|
|
|
if (Syntax::prepare_token_vector(o))
|
|
|
|
|
{
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
2026-10-05 20:24:09 +03:00
|
|
|
std::vector<Expression::Operation> ov = Syntax::build_op_vector(o);
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
2026-10-02 20:31:24 +03:00
|
|
|
void register_tests(void)
|
|
|
|
|
{
|
|
|
|
|
REGISTER(parser_proper_test_1);
|
|
|
|
|
REGISTER(parser_proper_test_2);
|
2026-10-02 22:14:03 +03:00
|
|
|
REGISTER(parser_proper_test_3);
|
2026-10-04 14:13:14 +03:00
|
|
|
|
|
|
|
|
REGISTER(tree_proper_test_1);
|
2026-10-05 20:24:09 +03:00
|
|
|
REGISTER(tree_proper_test_2);
|
2026-10-02 20:31:24 +03:00
|
|
|
}
|