c-repl/test/variables.cpp
2024-01-03 16:20:42 +01:00

51 lines
1.2 KiB
C++

#include "include/test.h"
#include "../src/include/execute.h"
#include "../src/include/utils.h"
EvalResult execute(string s) {
Memory memory;
return execute(split_string(s, '\n'), memory);
}
int main() {
_TEST_PRESENTATION("Variables");
_TEST_ASSERT(
_TEST_NO_EXCEPTION(get<int>(execute("int uneVariableFarfelue__ = 12;")) == 12),
"Déclaration avec assignement",
true
);
_TEST_ASSERT(
_TEST_NO_EXCEPTION(get<int>(execute("int x = 5; x = x + 3;")) == 8),
"Déclaration puis assignement",
true
);
_TEST_ASSERT(
_TEST_IS_EXCEPTION(execute("1 + x;"), ErrorType::UnknownIdentifier),
"Identifieur indéfini",
true
);
_TEST_ASSERT(
_TEST_IS_EXCEPTION(execute("int x; int x;"), ErrorType::AlreadyDeclaredIdentifier),
"Identifieur déjà défini",
true
);
_TEST_ASSERT(
_TEST_NO_EXCEPTION(holds_alternative<monostate>(execute("int x; { int x; }"))),
"Identifieur déjà défini dans une autre scope",
true
);
_TEST_ASSERT(
_TEST_NO_EXCEPTION(get<int>(execute("int x = 1; int y; { int x = 2; y = x + 2; }; y;")) == 4),
"Shadowing",
true
);
return 0;
}