From 1c928616a40686540ddd7df9d151f4ad3f7f063c Mon Sep 17 00:00:00 2001 From: Karma Riuk Date: Sun, 29 Jun 2025 10:56:51 +0200 Subject: [PATCH] written structure and tests for lexer, missing implementation --- src/lexer/lexer.cpp | 0 src/lexer/lexer.hpp | 7 +++++++ test/lexer.cpp | 35 +++++++++++++++++++++++++++++++++++ test/test.cpp | 20 ++++++++++++++++++++ 4 files changed, 62 insertions(+) create mode 100644 src/lexer/lexer.cpp create mode 100644 src/lexer/lexer.hpp create mode 100644 test/lexer.cpp create mode 100644 test/test.cpp diff --git a/src/lexer/lexer.cpp b/src/lexer/lexer.cpp new file mode 100644 index 0000000..e69de29 diff --git a/src/lexer/lexer.hpp b/src/lexer/lexer.hpp new file mode 100644 index 0000000..af2a122 --- /dev/null +++ b/src/lexer/lexer.hpp @@ -0,0 +1,7 @@ +#include "token/token.hpp" + +namespace lexer { + struct lexer { + token::token next_token(); + }; +} // namespace lexer diff --git a/test/lexer.cpp b/test/lexer.cpp new file mode 100644 index 0000000..06bef4d --- /dev/null +++ b/test/lexer.cpp @@ -0,0 +1,35 @@ +#include "lexer/lexer.hpp" + +#include "token/type.hpp" + +#include +#include + +TEST_CASE("next token") { + struct test { + token::type expectedType; + std::string expectedLiteral; + }; + + std::string input = "=+(){},;"; + + lexer::lexer l{}; + + test tests[] = { + {token::type::ASSIGN, "="}, + {token::type::PLUS, "+"}, + {token::type::LPAREN, "("}, + {token::type::RPAREN, ")"}, + {token::type::LBRACE, "{"}, + {token::type::RBRACE, "}"}, + {token::type::COMMA, ","}, + {token::type::SEMICOLON, ";"}, + {token::type::EOF_, ""}, + }; + + for (const auto& t : tests) { + token::token tok = l.next_token(); + CHECK(tok.type == t.expectedType); + CHECK(tok.literal == t.expectedLiteral); + } +}; diff --git a/test/test.cpp b/test/test.cpp new file mode 100644 index 0000000..62f9c6c --- /dev/null +++ b/test/test.cpp @@ -0,0 +1,20 @@ +#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN +#include + +int factorial(int number) { + return number <= 1 ? number : factorial(number - 1) * number; +} + +TEST_CASE("fact") { + CHECK(factorial(1) == 1); + CHECK(factorial(2) == 2); + CHECK(factorial(3) == 6); + CHECK(factorial(10) == 3628800); +} + +TEST_CASE("fact2") { + CHECK(factorial(1) == 1); + CHECK(factorial(2) == 2); + CHECK(factorial(3) == 6); + CHECK(factorial(10) == 3628800); +}