summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/lexer_test.c50
1 files changed, 30 insertions, 20 deletions
diff --git a/test/lexer_test.c b/test/lexer_test.c
index 4a31bbf..ae713b3 100644
--- a/test/lexer_test.c
+++ b/test/lexer_test.c
@@ -30,41 +30,51 @@ make_lexer_from_static_src(lexer_t *lexer, char *src, int srclen)
}
void
-assert_token(token_kind_t expected_kind, char *source, char *expected)
+assert_token_at(char *source, int token_index, token_kind_t expected_kind, char *expected)
{
- lexer_t lexer;
- token_t token;
+ lexer_t lexer;
+ token_t token;
+ make_lexer_from_static_src(&lexer, source, strlen(source));
- make_lexer_from_static_src(&lexer, source, strlen(source));
- lexer_next_token(&lexer, &token);
+ while (token_index > 0) {
+ lexer_next_token(&lexer, &token);
+ token_index--;
+ }
- char actual[token.value.size + 1];
- string_view_to_str(&token.value, actual);
+ lexer_next_token(&lexer, &token);
- assert_string_equal(token_kind_to_str(expected_kind), token_kind_to_str(token.kind));
- assert_int(expected_kind, ==, token.kind);
- assert_string_equal(expected, actual);
+ char actual[token.value.size + 1];
+ string_view_to_str(&token.value, actual);
+
+ assert_string_equal(token_kind_to_str(expected_kind), token_kind_to_str(token.kind));
+ assert_int(expected_kind, ==, token.kind);
+ assert_string_equal(expected, actual);
}
+
static MunitResult
test_tokenize_number(const MunitParameter params[],
void *user_data_or_fixture)
{
- assert_token(TOKEN_NUMBER, "1", "1");
- assert_token(TOKEN_NUMBER, " 13 ", "13");
- assert_token(TOKEN_NUMBER, " \n 13 ", "13");
+ assert_token_at("1", 0, TOKEN_NUMBER, "1");
+ assert_token_at(" 13 ", 0, TOKEN_NUMBER, "13");
+ assert_token_at(" \n 13 ", 0, TOKEN_NUMBER, "13");
return MUNIT_OK;
}
static MunitResult
test_tokenize_op(const MunitParameter params[],
- void *user_data_or_fixture)
+ void *user_data_or_fixture)
{
- assert_token(TOKEN_OP, " + 2", "+");
- assert_token(TOKEN_OP, " - \n", "-");
- assert_token(TOKEN_OP, " * ;", "*");
- assert_token(TOKEN_OP, " / ", "/");
+ assert_token_at(" + 2", 0, TOKEN_OP, "+");
+ assert_token_at(" - \n", 0, TOKEN_OP, "-");
+ assert_token_at(" * ;", 0, TOKEN_OP, "*");
+ assert_token_at(" / ", 0, TOKEN_OP, "/");
+
+ assert_token_at("1 * 2", 0, TOKEN_NUMBER, "1");
+ assert_token_at("1 * 2", 1, TOKEN_OP, "*");
+ assert_token_at("1 * 2", 2, TOKEN_NUMBER, "2");
return MUNIT_OK;
}
@@ -73,8 +83,8 @@ static MunitResult
test_tokenize_unknown(const MunitParameter params[],
void *user_data_or_fixture)
{
- assert_token(TOKEN_UNKNOWN, " @ ", "@");
- assert_token(TOKEN_UNKNOWN, " $ ", "$");
+ assert_token_at(" @ ", 0, TOKEN_UNKNOWN, "@");
+ assert_token_at(" $ ", 0, TOKEN_UNKNOWN, "$");
return MUNIT_OK;
}