c-repl/test/tokenize.cpp
2023-11-15 14:31:11 +01:00

107 lines
2.9 KiB
C++

#include <string>
#include <vector>
using namespace std;
#include "include/test.h"
#include "../src/include/tokenize.h"
int main() {
_TEST_PRESENTATION("Lexer");
/* Complex input */
{
string input = "int a = x+++7;";
vector<Token> tokens = tokenize({ input });
_TEST_ASSERT(
_TEST_NO_EXCEPTION(tokens.size() == 8),
"Il devrait y avoir 8 tokens",
false
)
_TEST_ASSERT(
_TEST_NO_EXCEPTION(tokens[0].type == TokenType::Type),
"Le premier token devrait être de type 'Type'",
false
)
_TEST_ASSERT(
_TEST_NO_EXCEPTION(get<Type>(tokens[0].data) == Type::Int),
"Les données du premier token devraient être 'Int'",
false
)
_TEST_ASSERT(
_TEST_NO_EXCEPTION(tokens[1].type == TokenType::Identifier),
"Le deuxième token devrait être un 'Identifiant'",
false
)
_TEST_ASSERT(
_TEST_NO_EXCEPTION(get<string>(tokens[1].data) == "a"),
"Les données du deuxième token devraient être 'a'",
false
)
_TEST_ASSERT(
_TEST_NO_EXCEPTION(tokens[2].type == TokenType::Equal),
"Le troisième token devrait être 'Equal'",
false
)
_TEST_ASSERT(
_TEST_NO_EXCEPTION(tokens[3].type == TokenType::Identifier),
"Le quatrième token devrait être un 'Identifiant'",
false
)
_TEST_ASSERT(
_TEST_NO_EXCEPTION(get<string>(tokens[3].data) == "x"),
"Les données du quatrième token devraient être 'x'",
false
)
_TEST_ASSERT(
_TEST_NO_EXCEPTION(tokens[4].type == TokenType::DoublePlus),
"Le cinquième token devrait être 'DoublePlus'",
false
)
_TEST_ASSERT(
_TEST_NO_EXCEPTION(tokens[5].type == TokenType::Plus),
"Le cinquième token devrait être 'Plus'",
false
)
_TEST_ASSERT(
_TEST_NO_EXCEPTION(tokens[6].type == TokenType::Int),
"Le premier token devrait être de type 'Int'",
false
)
_TEST_ASSERT(
_TEST_NO_EXCEPTION(get<int>(tokens[6].data) == 7),
"Les données du premier token devraient être '7'",
false
)
_TEST_ASSERT(
_TEST_NO_EXCEPTION(tokens[7].type == TokenType::Semicolon),
"Le cinquième token devrait être 'Semicolon'",
false
)
_TEST_ASSERT(true, "+++", true)
}
/* Incorrect input */
{
string input = "int a = 10 @;";
_TEST_ASSERT(
_TEST_IS_EXCEPTION(tokenize({ input }), TokenError),
"Token invalide",
true
)
}
return 0;
}