c-repl/test/arithmetic.cpp

87 lines
1.8 KiB
C++

#include "include/test.hpp"
#include "../src/include/execute.hpp"
#include "../src/include/utils.hpp"
int execute(string s) {
Memory memory;
return get<int>(execute(split_string(s, '\n'), memory));
}
int main() {
_TEST_PRESENTATION("Expressions Arithmétiques");
_TEST_ASSERT(
_TEST_NO_EXCEPTION(execute("10 + 3 * (7 - 2);") == 25),
"Priorités",
true
);
_TEST_ASSERT(
_TEST_NO_EXCEPTION(execute("12 - 4 - 20;") == -12),
"Parenthésage",
true
);
_TEST_ASSERT(
_TEST_NO_EXCEPTION(execute("-7 + 13 + -6;") == 0),
"Opérateurs unaires",
true
);
_TEST_ASSERT(
_TEST_IS_EXCEPTION(execute("1 / 0;"), ErrorType::DivisionByZero),
"Division par 0",
true
);
_TEST_ASSERT(
_TEST_IS_EXCEPTION(execute("1 % 0;"), ErrorType::ModuloByZero),
"Modulo par 0",
true
);
_TEST_ASSERT(
_TEST_NO_EXCEPTION(execute("int a = 27; ++a;") == 28),
"Incrémentation par la gauche",
true
);
_TEST_ASSERT(
_TEST_NO_EXCEPTION(execute("int a = 27; a--;") == 27),
"Décrémentation par la droite",
true
);
_TEST_ASSERT(
_TEST_NO_EXCEPTION(execute("int a = 27; -(+-++a);") == 28),
"Incrémentation et opérations unaires",
true
);
_TEST_ASSERT(
_TEST_NO_EXCEPTION(execute("1 < 2;") == 1),
"Inférieur strict",
true
);
_TEST_ASSERT(
_TEST_NO_EXCEPTION(execute("2 > 3;") == 0),
"Supérieur strict",
true
);
_TEST_ASSERT(
_TEST_NO_EXCEPTION(execute("2 <= 1;") == 0),
"Inférieur ou égal",
true
);
_TEST_ASSERT(
_TEST_NO_EXCEPTION(execute("2 >= 1;") == 1),
"Supérieur ou égal",
true
);
return 0;
}