Skip to content

Commit b2d0879

Browse files
committed
testing...
1 parent 87d9a09 commit b2d0879

File tree

4 files changed

+145
-1
lines changed

4 files changed

+145
-1
lines changed

scanner/run_tests

629 KB
Binary file not shown.

scanner/src/scanner.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,9 @@ namespace TINY
6767
if (std::isalpha(current))
6868
{
6969
std::string identifier(1, current);
70-
while (std::isalnum(peek()))
70+
71+
// Accept only alphabetic characters for identifiers
72+
while (std::isalpha(peek()))
7173
{
7274
identifier += get();
7375
}

scanner/test/scanner_test.cpp

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
#include <gtest/gtest.h>
2+
#include "scanner.hpp"
3+
#include "token.hpp"
4+
5+
namespace TINY
6+
{
7+
namespace SCANNER
8+
{
9+
10+
// Test valid tokens
11+
TEST(ScannerTest, ValidTokens)
12+
{
13+
std::string input = "if then end repeat until read write := < = + - * / ( ) ;";
14+
Scanner scanner(input);
15+
16+
EXPECT_TRUE(scanner.hasMoreTokens());
17+
EXPECT_EQ(scanner.getNextToken().getType(), TokenType::IF);
18+
EXPECT_EQ(scanner.getNextToken().getType(), TokenType::THEN);
19+
EXPECT_EQ(scanner.getNextToken().getType(), TokenType::END);
20+
EXPECT_EQ(scanner.getNextToken().getType(), TokenType::REPEAT);
21+
EXPECT_EQ(scanner.getNextToken().getType(), TokenType::UNTIL);
22+
EXPECT_EQ(scanner.getNextToken().getType(), TokenType::READ);
23+
EXPECT_EQ(scanner.getNextToken().getType(), TokenType::WRITE);
24+
EXPECT_EQ(scanner.getNextToken().getType(), TokenType::ASSIGN);
25+
EXPECT_EQ(scanner.getNextToken().getType(), TokenType::LESSTHAN);
26+
EXPECT_EQ(scanner.getNextToken().getType(), TokenType::EQUAL);
27+
EXPECT_EQ(scanner.getNextToken().getType(), TokenType::PLUS);
28+
EXPECT_EQ(scanner.getNextToken().getType(), TokenType::MINUS);
29+
EXPECT_EQ(scanner.getNextToken().getType(), TokenType::MULT);
30+
EXPECT_EQ(scanner.getNextToken().getType(), TokenType::DIV);
31+
EXPECT_EQ(scanner.getNextToken().getType(), TokenType::OPENBRACKET);
32+
EXPECT_EQ(scanner.getNextToken().getType(), TokenType::CLOSEDBRACKET);
33+
EXPECT_EQ(scanner.getNextToken().getType(), TokenType::SEMICOLON);
34+
EXPECT_FALSE(scanner.hasMoreTokens());
35+
}
36+
37+
// Test identifiers
38+
TEST(ScannerTest, Identifiers)
39+
{
40+
std::string input = "varName another_var lastVar";
41+
Scanner scanner(input);
42+
43+
// First identifier: "varName"
44+
EXPECT_EQ(scanner.getNextToken().getType(), TokenType::IDENTIFIER);
45+
EXPECT_EQ(scanner.getNextToken().getValue(), "varName");
46+
47+
// Identifier: "another"
48+
EXPECT_EQ(scanner.getNextToken().getType(), TokenType::IDENTIFIER);
49+
EXPECT_EQ(scanner.getNextToken().getValue(), "another");
50+
51+
// Underscore as UNKNOWN token
52+
EXPECT_EQ(scanner.getNextToken().getType(), TokenType::UNKNOWN);
53+
EXPECT_EQ(scanner.getNextToken().getValue(), "_");
54+
55+
// Identifier: "var"
56+
EXPECT_EQ(scanner.getNextToken().getType(), TokenType::IDENTIFIER);
57+
EXPECT_EQ(scanner.getNextToken().getValue(), "var");
58+
59+
// Final identifier: "lastVar"
60+
EXPECT_EQ(scanner.getNextToken().getType(), TokenType::IDENTIFIER);
61+
EXPECT_EQ(scanner.getNextToken().getValue(), "lastVar");
62+
}
63+
64+
// Test numeric literals
65+
TEST(ScannerTest, NumericLiterals)
66+
{
67+
std::string input = "123 45678 999";
68+
Scanner scanner(input);
69+
70+
EXPECT_EQ(scanner.getNextToken().getType(), TokenType::NUMBER);
71+
EXPECT_EQ(scanner.getNextToken().getValue(), "123");
72+
73+
EXPECT_EQ(scanner.getNextToken().getType(), TokenType::NUMBER);
74+
EXPECT_EQ(scanner.getNextToken().getValue(), "45678");
75+
76+
EXPECT_EQ(scanner.getNextToken().getType(), TokenType::NUMBER);
77+
EXPECT_EQ(scanner.getNextToken().getValue(), "999");
78+
}
79+
80+
// Test mixed tokens
81+
TEST(ScannerTest, MixedTokens)
82+
{
83+
std::string input = "if x := 42 + y;";
84+
Scanner scanner(input);
85+
86+
EXPECT_EQ(scanner.getNextToken().getType(), TokenType::IF);
87+
EXPECT_EQ(scanner.getNextToken().getType(), TokenType::IDENTIFIER);
88+
EXPECT_EQ(scanner.getNextToken().getType(), TokenType::ASSIGN);
89+
EXPECT_EQ(scanner.getNextToken().getType(), TokenType::NUMBER);
90+
EXPECT_EQ(scanner.getNextToken().getType(), TokenType::PLUS);
91+
EXPECT_EQ(scanner.getNextToken().getType(), TokenType::IDENTIFIER);
92+
EXPECT_EQ(scanner.getNextToken().getType(), TokenType::SEMICOLON);
93+
}
94+
95+
// Test unknown tokens
96+
TEST(ScannerTest, UnknownTokens)
97+
{
98+
std::string input = "@ $ #";
99+
Scanner scanner(input);
100+
101+
EXPECT_EQ(scanner.getNextToken().getType(), TokenType::UNKNOWN);
102+
EXPECT_EQ(scanner.getNextToken().getValue(), "@");
103+
104+
EXPECT_EQ(scanner.getNextToken().getType(), TokenType::UNKNOWN);
105+
EXPECT_EQ(scanner.getNextToken().getValue(), "$");
106+
107+
EXPECT_EQ(scanner.getNextToken().getType(), TokenType::UNKNOWN);
108+
EXPECT_EQ(scanner.getNextToken().getValue(), "#");
109+
}
110+
111+
} // namespace SCANNER
112+
} // namespace TINY

scanner/test/token_test.cpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#include <gtest/gtest.h>
2+
#include "token.hpp"
3+
4+
namespace TINY
5+
{
6+
namespace SCANNER
7+
{
8+
9+
// Test token creation
10+
TEST(TokenTest, TokenCreation)
11+
{
12+
Token token(TokenType::IF, "if", 1, 1);
13+
14+
EXPECT_EQ(token.getType(), TokenType::IF);
15+
EXPECT_EQ(token.getValue(), "if");
16+
EXPECT_EQ(token.getLine(), 1);
17+
EXPECT_EQ(token.getColumn(), 1);
18+
}
19+
20+
// Test token string representation
21+
TEST(TokenTest, TokenToString)
22+
{
23+
Token token(TokenType::IF, "if", 1, 1);
24+
25+
EXPECT_EQ(token.toString(false), "IF, if");
26+
EXPECT_EQ(token.toString(true), "IF, if [Line: 1, Column: 1]");
27+
}
28+
29+
} // namespace SCANNER
30+
} // namespace TINY

0 commit comments

Comments
 (0)