Added test_token_type function

This commit is contained in:
Kyler Olsen 2025-10-30 22:22:50 -06:00
parent 1e3a43aea3
commit 4dc58b85c1
1 changed files with 17 additions and 51 deletions

View File

@ -191,7 +191,7 @@ static char *boolean_should_be(size_t i, Boolean value) {
// Test parts // Test parts
static Boolean test_eof_value(LexerTest *test, LexerResult result, size_t i) { static Boolean test_token_type(LexerTest *test, LexerResult result, size_t i, TokenType token_type) {
LexerTokenResult *head = get_token(result.result, i); LexerTokenResult *head = get_token(result.result, i);
if (head == 0) { if (head == 0) {
logic_fail_test(test, result, unexpected_end_of_token_stream(i + 1)); logic_fail_test(test, result, unexpected_end_of_token_stream(i + 1));
@ -199,8 +199,16 @@ static Boolean test_eof_value(LexerTest *test, LexerResult result, size_t i) {
} if (head->type == SLS_ERROR) { } if (head->type == SLS_ERROR) {
error_fail_test(test, result, result.error); error_fail_test(test, result, result.error);
return TRUE; return TRUE;
} if (head->result.type != TOKEN_EOF) { } if (head->result.type != token_type) {
logic_fail_test(test, result, token_should_be(i + 1, TOKEN_EOF, head->result.type)); logic_fail_test(test, result, token_should_be(i + 1, token_type, head->result.type));
return TRUE;
}
return FALSE;
}
static Boolean test_eof_value(LexerTest *test, LexerResult result, size_t i) {
LexerTokenResult *head = get_token(result.result, i);
if (test_token_type(test, result, i, TOKEN_EOF)) {
return TRUE; return TRUE;
} if (head->next != 0) { } if (head->next != 0) {
logic_fail_test(test, result, expected_end_of_token_stream(i + 1)); logic_fail_test(test, result, expected_end_of_token_stream(i + 1));
@ -211,14 +219,7 @@ static Boolean test_eof_value(LexerTest *test, LexerResult result, size_t i) {
static Boolean test_identifier_value(LexerTest *test, LexerResult result, size_t i, Boolean is_literal, size_t length, const char *name) { static Boolean test_identifier_value(LexerTest *test, LexerResult result, size_t i, Boolean is_literal, size_t length, const char *name) {
LexerTokenResult *head = get_token(result.result, i); LexerTokenResult *head = get_token(result.result, i);
if (head == 0) { if (test_token_type(test, result, i, TOKEN_IDENTIFIER)) {
logic_fail_test(test, result, unexpected_end_of_token_stream(i + 1));
return TRUE;
} if (head->type == SLS_ERROR) {
error_fail_test(test, result, result.error);
return TRUE;
} if (head->result.type != TOKEN_IDENTIFIER) {
logic_fail_test(test, result, token_should_be(i + 1, TOKEN_IDENTIFIER, head->result.type));
return TRUE; return TRUE;
} if (head->result.identifier.is_literal != is_literal) { } if (head->result.identifier.is_literal != is_literal) {
logic_fail_test(test, result, is_literal ? identifier_should_be_literal(i + 1) : identifier_should_not_be_literal(i + 1)); logic_fail_test(test, result, is_literal ? identifier_should_be_literal(i + 1) : identifier_should_not_be_literal(i + 1));
@ -235,14 +236,7 @@ static Boolean test_identifier_value(LexerTest *test, LexerResult result, size_t
static Boolean test_integer_value(LexerTest *test, LexerResult result, size_t i, IntegerBuiltInType type, uint64_t value) { static Boolean test_integer_value(LexerTest *test, LexerResult result, size_t i, IntegerBuiltInType type, uint64_t value) {
LexerTokenResult *head = get_token(result.result, i); LexerTokenResult *head = get_token(result.result, i);
if (head == 0) { if (test_token_type(test, result, i, TOKEN_INTEGER)) {
logic_fail_test(test, result, unexpected_end_of_token_stream(i + 1));
return TRUE;
} if (head->type == SLS_ERROR) {
error_fail_test(test, result, result.error);
return TRUE;
} if (head->result.type != TOKEN_INTEGER) {
logic_fail_test(test, result, token_should_be(i + 1, TOKEN_INTEGER, head->result.type));
return TRUE; return TRUE;
} if (head->result.integer_literal.type != type) { } if (head->result.integer_literal.type != type) {
logic_fail_test(test, result, integer_type_should_be(i + 1, type, head->result.integer_literal.type)); logic_fail_test(test, result, integer_type_should_be(i + 1, type, head->result.integer_literal.type));
@ -256,14 +250,7 @@ static Boolean test_integer_value(LexerTest *test, LexerResult result, size_t i,
static Boolean test_float_value(LexerTest *test, LexerResult result, size_t i, float value) { static Boolean test_float_value(LexerTest *test, LexerResult result, size_t i, float value) {
LexerTokenResult *head = get_token(result.result, i); LexerTokenResult *head = get_token(result.result, i);
if (head == 0) { if (test_token_type(test, result, i, TOKEN_FLOAT)) {
logic_fail_test(test, result, unexpected_end_of_token_stream(i + 1));
return TRUE;
} if (head->type == SLS_ERROR) {
error_fail_test(test, result, result.error);
return TRUE;
} if (head->result.type != TOKEN_FLOAT) {
logic_fail_test(test, result, token_should_be(i + 1, TOKEN_FLOAT, head->result.type));
return TRUE; return TRUE;
} if (head->result.float_literal - value) { } if (head->result.float_literal - value) {
logic_fail_test(test, result, float_value_should_be(i + 1, value, head->result.float_literal)); logic_fail_test(test, result, float_value_should_be(i + 1, value, head->result.float_literal));
@ -274,14 +261,7 @@ static Boolean test_float_value(LexerTest *test, LexerResult result, size_t i, f
static Boolean test_double_value(LexerTest *test, LexerResult result, size_t i, double value) { static Boolean test_double_value(LexerTest *test, LexerResult result, size_t i, double value) {
LexerTokenResult *head = get_token(result.result, i); LexerTokenResult *head = get_token(result.result, i);
if (head == 0) { if (test_token_type(test, result, i, TOKEN_DOUBLE)) {
logic_fail_test(test, result, unexpected_end_of_token_stream(i + 1));
return TRUE;
} if (head->type == SLS_ERROR) {
error_fail_test(test, result, result.error);
return TRUE;
} if (head->result.type != TOKEN_DOUBLE) {
logic_fail_test(test, result, token_should_be(i + 1, TOKEN_DOUBLE, head->result.type));
return TRUE; return TRUE;
} if (head->result.float_literal - value) { } if (head->result.float_literal - value) {
logic_fail_test(test, result, float_value_should_be(i + 1, value, head->result.float_literal)); logic_fail_test(test, result, float_value_should_be(i + 1, value, head->result.float_literal));
@ -292,14 +272,7 @@ static Boolean test_double_value(LexerTest *test, LexerResult result, size_t i,
static Boolean test_string_value(LexerTest *test, LexerResult result, size_t i, size_t length, const char *value) { static Boolean test_string_value(LexerTest *test, LexerResult result, size_t i, size_t length, const char *value) {
LexerTokenResult *head = get_token(result.result, i); LexerTokenResult *head = get_token(result.result, i);
if (head == 0) { if (test_token_type(test, result, i, TOKEN_STRING)) {
logic_fail_test(test, result, unexpected_end_of_token_stream(i + 1));
return TRUE;
} if (head->type == SLS_ERROR) {
error_fail_test(test, result, result.error);
return TRUE;
} if (head->result.type != TOKEN_STRING) {
logic_fail_test(test, result, token_should_be(i + 1, TOKEN_STRING, head->result.type));
return TRUE; return TRUE;
} if (head->result.string_literal.length == strnlen(value, length)) { } if (head->result.string_literal.length == strnlen(value, length)) {
logic_fail_test(test, result, token_length_should_be(i + 1, TOKEN_STRING, strnlen(value, length), head->result.string_literal.length)); logic_fail_test(test, result, token_length_should_be(i + 1, TOKEN_STRING, strnlen(value, length), head->result.string_literal.length));
@ -313,14 +286,7 @@ static Boolean test_string_value(LexerTest *test, LexerResult result, size_t i,
static Boolean test_boolean_value(LexerTest *test, LexerResult result, size_t i, Boolean value) { static Boolean test_boolean_value(LexerTest *test, LexerResult result, size_t i, Boolean value) {
LexerTokenResult *head = get_token(result.result, i); LexerTokenResult *head = get_token(result.result, i);
if (head == 0) { if (test_token_type(test, result, i, TOKEN_BOOLEAN)) {
logic_fail_test(test, result, unexpected_end_of_token_stream(i + 1));
return TRUE;
} if (head->type == SLS_ERROR) {
error_fail_test(test, result, result.error);
return TRUE;
} if (head->result.type != TOKEN_BOOLEAN) {
logic_fail_test(test, result, token_should_be(i + 1, TOKEN_BOOLEAN, head->result.type));
return TRUE; return TRUE;
} if (head->result.boolean_literal != value) { } if (head->result.boolean_literal != value) {
logic_fail_test(test, result, boolean_should_be(i + 1, value)); logic_fail_test(test, result, boolean_should_be(i + 1, value));