Add more tests
This commit is contained in:
parent
ce431b5453
commit
574f73b637
@ -119,15 +119,6 @@ vector<Token> tokenize(vector<string> input, int initial_line) {
|
|||||||
tokens.emplace_back(token);
|
tokens.emplace_back(token);
|
||||||
j += 4;
|
j += 4;
|
||||||
}
|
}
|
||||||
else if (regex_search(str, m, IDENTIFIER_REGEX, regex_constants::match_continuous)) {
|
|
||||||
Token token = {
|
|
||||||
.type = TokenType::Identifier,
|
|
||||||
.data = m.str(),
|
|
||||||
.pos = pos
|
|
||||||
};
|
|
||||||
tokens.emplace_back(token);
|
|
||||||
j += m.str().length();
|
|
||||||
}
|
|
||||||
else if (str.starts_with("++")) {
|
else if (str.starts_with("++")) {
|
||||||
Token token = { .type = TokenType::DoublePlus, .pos = pos };
|
Token token = { .type = TokenType::DoublePlus, .pos = pos };
|
||||||
tokens.emplace_back(token);
|
tokens.emplace_back(token);
|
||||||
@ -198,6 +189,15 @@ vector<Token> tokenize(vector<string> input, int initial_line) {
|
|||||||
tokens.emplace_back(token);
|
tokens.emplace_back(token);
|
||||||
j += 1;
|
j += 1;
|
||||||
}
|
}
|
||||||
|
else if (regex_search(str, m, IDENTIFIER_REGEX, regex_constants::match_continuous)) {
|
||||||
|
Token token = {
|
||||||
|
.type = TokenType::Identifier,
|
||||||
|
.data = m.str(),
|
||||||
|
.pos = pos
|
||||||
|
};
|
||||||
|
tokens.emplace_back(token);
|
||||||
|
j += m.str().length();
|
||||||
|
}
|
||||||
else if (isspace(str[0])) {
|
else if (isspace(str[0])) {
|
||||||
j += 1;
|
j += 1;
|
||||||
}
|
}
|
||||||
|
@ -47,5 +47,23 @@ int main() {
|
|||||||
true
|
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
|
||||||
|
);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
39
test/statements.cpp
Normal file
39
test/statements.cpp
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
#include "include/test.h"
|
||||||
|
|
||||||
|
#include "../src/include/memory.h"
|
||||||
|
#include "../src/include/tokenize.h"
|
||||||
|
#include "../src/include/parser.h"
|
||||||
|
#include "../src/include/interpreter.h"
|
||||||
|
|
||||||
|
EvalResult execute(string s) {
|
||||||
|
Memory memory = Memory();
|
||||||
|
vector<Token> tokens = tokenize({ s });
|
||||||
|
Node ast = parse(tokens);
|
||||||
|
EvalResult res = eval(ast, memory);
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
_TEST_PRESENTATION("Statements");
|
||||||
|
|
||||||
|
_TEST_ASSERT(
|
||||||
|
_TEST_NO_EXCEPTION(get<int>(execute("int x = 0; if (1) x++; x;")) == 1),
|
||||||
|
"If vérifié",
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
_TEST_ASSERT(
|
||||||
|
_TEST_NO_EXCEPTION(get<int>(execute("int x = 0; if (0) x++; x;")) == 0),
|
||||||
|
"If pas vérifié",
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
_TEST_ASSERT(
|
||||||
|
_TEST_NO_EXCEPTION(get<int>(execute("int x = 1; if (0) x++; else x--; x;")) == 0),
|
||||||
|
"If else pas vérifié",
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
@ -5,53 +5,53 @@
|
|||||||
#include "../src/include/parser.h"
|
#include "../src/include/parser.h"
|
||||||
#include "../src/include/interpreter.h"
|
#include "../src/include/interpreter.h"
|
||||||
|
|
||||||
int execute(string s) {
|
EvalResult execute(string s) {
|
||||||
Memory memory = Memory();
|
Memory memory = Memory();
|
||||||
vector<Token> tokens = tokenize({ s });
|
vector<Token> tokens = tokenize({ s });
|
||||||
Node ast = parse(tokens);
|
Node ast = parse(tokens);
|
||||||
EvalResult res = eval(ast, memory);
|
EvalResult res = eval(ast, memory);
|
||||||
|
|
||||||
return get<int>(res);
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
_TEST_PRESENTATION("Variables");
|
_TEST_PRESENTATION("Variables");
|
||||||
|
|
||||||
_TEST_ASSERT(
|
_TEST_ASSERT(
|
||||||
_TEST_NO_EXCEPTION(execute("int uneVariableFarfelue__ = 12;") == 12),
|
_TEST_NO_EXCEPTION(get<int>(execute("int uneVariableFarfelue__ = 12;")) == 12),
|
||||||
"Déclaration avec assignement",
|
"Déclaration avec assignement",
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
|
|
||||||
_TEST_ASSERT(
|
_TEST_ASSERT(
|
||||||
_TEST_NO_EXCEPTION(execute("int x = 5; x = x + 3;") == 8),
|
_TEST_NO_EXCEPTION(get<int>(execute("int x = 5; x = x + 3;")) == 8),
|
||||||
"Déclaration puis assignement",
|
"Déclaration puis assignement",
|
||||||
true
|
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_ASSERT(
|
||||||
_TEST_IS_EXCEPTION(execute("1 + x;"), RuntimeError),
|
_TEST_IS_EXCEPTION(execute("1 + x;"), RuntimeError),
|
||||||
"Identifieur indéfini",
|
"Identifieur indéfini",
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
|
|
||||||
|
_TEST_ASSERT(
|
||||||
|
_TEST_IS_EXCEPTION(execute("int x; int x;"), RuntimeError),
|
||||||
|
"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;
|
return 0;
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user