forked from KPGPMC/furlang
Add integers to lexer
Signed-off-by: CHatingPython <chatingpython@gmail.com>
This commit is contained in:
+17
-3
@@ -8,7 +8,13 @@ using namespace furc::front;
|
||||
using namespace std::string_view_literals;
|
||||
|
||||
#define EXPECT_TOKEN(lexer, t) EXPECT_EQ((lexer).next_token(), (t));
|
||||
#define EXPECT_EMPTY_TOKEN(lexer) EXPECT_EQ((lexer).next_token(), (token{}));
|
||||
#define EXPECT_EOF(lexer) EXPECT_EQ((lexer).next_token(), (token{}));
|
||||
#define EXPECT_ERROR(lexer, err) \
|
||||
do { \
|
||||
auto handle = (lexer).next_token(); \
|
||||
EXPECT_TRUE(handle.has_error()); \
|
||||
EXPECT_EQ(handle.error(), (err)); \
|
||||
} while (0)
|
||||
|
||||
TEST(Lexer, Tokens) {
|
||||
lexer lexer("<TEMP>", "()\n\t\t{\n}[\"shto-to\"]; :,.main return func");
|
||||
@@ -26,7 +32,7 @@ TEST(Lexer, Tokens) {
|
||||
EXPECT_TOKEN(lexer, (token{ token_t::Identifier, "main"sv }));
|
||||
EXPECT_TOKEN(lexer, (token{ keyword_token::Return }));
|
||||
EXPECT_TOKEN(lexer, (token{ keyword_token::Func }));
|
||||
EXPECT_EMPTY_TOKEN(lexer);
|
||||
EXPECT_EOF(lexer);
|
||||
}
|
||||
|
||||
TEST(Lexer, Comments) {
|
||||
@@ -35,7 +41,15 @@ TEST(Lexer, Comments) {
|
||||
EXPECT_TOKEN(lexer, (token{ keyword_token::Func }));
|
||||
EXPECT_TOKEN(lexer, (token{ token_t::Lbrace, "{"sv }));
|
||||
EXPECT_TOKEN(lexer, (token{ token_t::Rbrace, "}"sv }));
|
||||
EXPECT_EMPTY_TOKEN(lexer);
|
||||
EXPECT_EOF(lexer);
|
||||
}
|
||||
|
||||
TEST(Lexer, Integers) {
|
||||
lexer lexer("<TEMP>", "67 18446744073709551615 18446744073709551616");
|
||||
EXPECT_TOKEN(lexer, (token{ 67ULL }));
|
||||
EXPECT_TOKEN(lexer, (token{ 18446744073709551615ULL }));
|
||||
EXPECT_ERROR(lexer, "integer 18446744073709551616 is too big");
|
||||
EXPECT_EOF(lexer);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
@@ -18,7 +18,7 @@ TEST(Parser, EmptyFunctions) {
|
||||
EXPECT_TRUE(first.present());
|
||||
EXPECT_EQ(first->declaration_type(), declaration_node_t::FunctionDefinition);
|
||||
node_handle<function_definition_node> funcDef = first;
|
||||
EXPECT_EQ(funcDef->name().value, "main");
|
||||
EXPECT_EQ(funcDef->name()->string, "main");
|
||||
EXPECT_EQ(funcDef->body()->statements.size(), 0);
|
||||
}
|
||||
{
|
||||
@@ -26,7 +26,7 @@ TEST(Parser, EmptyFunctions) {
|
||||
EXPECT_TRUE(second.present());
|
||||
EXPECT_EQ(second->declaration_type(), declaration_node_t::FunctionDeclaration);
|
||||
node_handle<function_declarartion_node> funcDecl = second;
|
||||
EXPECT_EQ(funcDecl->name().value, "foo");
|
||||
EXPECT_EQ(funcDecl->name()->string, "foo");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user