@@ -172,12 +172,136 @@ TEST(fuzzing_float_literal_nagative_exponent_random)
172172 }
173173DONE
174174
175+ TEST (test_float_literal_undefined)
176+ const char *source = "-42e----49194-e4771";
177+ Lexer lexer (source);
178+
179+ auto t1 = lexer.next_token();
180+ auto t2 = lexer.next_token();
181+ auto t3 = lexer.next_token();
182+ auto t4 = lexer.next_token();
183+
184+ VERIFY_THIS (TokenKind::MINUS).token_as(t1.kind);
185+ VERIFY_THIS (TokenKind::MINUS).token_str_eq_to(t1, " -" , STR_LEN(" -" ));
186+ VERIFY_THIS (TokenKind::MINUS).token_metadata_eq_to(
187+ lexer.get_source_location(t1), 1, 1, 0
188+ );
189+
190+ VERIFY_THIS (TokenKind::FLOAT_LITERAL).token_as(t2.kind);
191+ VERIFY_THIS (TokenKind::FLOAT_LITERAL).token_str_eq_to(t2, " 42e----49194" , STR_LEN(" 42e----49194" ));
192+ VERIFY_THIS (TokenKind::FLOAT_LITERAL).token_metadata_eq_to(
193+ lexer.get_source_location(t2), 1, 2, 1
194+ );
195+
196+ VERIFY_THIS (TokenKind::MINUS).token_as(t3.kind);
197+ VERIFY_THIS (TokenKind::MINUS).token_str_eq_to(t3, " -" , STR_LEN(" -" ));
198+ VERIFY_THIS (TokenKind::MINUS).token_metadata_eq_to(
199+ lexer.get_source_location(t3), 1, 14, 13
200+ );
201+
202+ VERIFY_THIS (TokenKind::IDENT).token_as(t4.kind);
203+ VERIFY_THIS (TokenKind::IDENT).token_str_eq_to(t4, " e4771" , STR_LEN(" e4771" ));
204+ VERIFY_THIS (TokenKind::IDENT).token_metadata_eq_to(
205+ lexer.get_source_location(t4), 1, 15, 14
206+ );
207+ DONE
208+
209+ TEST (test_normal_string_literal)
210+ const char *source = "\"My String\"";
211+ Lexer lexer (source);
212+
213+ auto token = lexer.next_token();
214+ VERIFY_THIS (TokenKind::STRING_LITERAL).token_as(token.kind);
215+ VERIFY_THIS (TokenKind::STRING_LITERAL).token_str_eq_to(
216+ token,
217+ " \" My String\" " , STR_LEN(" \" My String\" " )
218+ );
219+ VERIFY_THIS (TokenKind::STRING_LITERAL).token_metadata_eq_to(
220+ lexer.get_source_location(token),
221+ 1, 1, 0
222+ );
223+ DONE
224+
225+ TEST (test_string_literal_without_closed)
226+ const char *source = "\"My String";
227+ Lexer lexer (source);
228+
229+ auto token = lexer.next_token();
230+ VERIFY_THIS (TokenKind::STRING_LITERAL).token_as(token.kind);
231+ VERIFY_THIS (TokenKind::STRING_LITERAL).token_str_eq_to(
232+ token,
233+ " \" My String" , STR_LEN(" \" My String" )
234+ );
235+ VERIFY_THIS (TokenKind::STRING_LITERAL).token_metadata_eq_to(
236+ lexer.get_source_location(token),
237+ 1, 1, 0
238+ );
239+ DONE
240+
241+ TEST (test_normal_raw_string_literal)
242+ const char *source = "r\"My raw string\"";
243+ Lexer lexer (source);
244+
245+ auto token = lexer.next_token();
246+
247+ VERIFY_THIS (TokenKind::RAW_STRING_LITERAL).token_as(token.kind);
248+ VERIFY_THIS (TokenKind::RAW_STRING_LITERAL).token_str_eq_to(
249+ token,
250+ " r\" My raw string\" " , STR_LEN(" r\" My raw string\" " )
251+ );
252+ VERIFY_THIS (TokenKind::RAW_STRING_LITERAL).token_metadata_eq_to(
253+ lexer.get_source_location(token),
254+ 1, 1, 0
255+ );
256+ DONE
257+
258+ TEST (test_raw_string_literal_without_closed)
259+ const char *source = "r\"My raw string";
260+ Lexer lexer (source);
261+
262+ auto token = lexer.next_token();
263+
264+ VERIFY_THIS (TokenKind::RAW_STRING_LITERAL).token_as(token.kind);
265+ VERIFY_THIS (TokenKind::RAW_STRING_LITERAL).token_str_eq_to(
266+ token,
267+ " r\" My raw string" , STR_LEN(" r\" My raw string" )
268+ );
269+ VERIFY_THIS (TokenKind::RAW_STRING_LITERAL).token_metadata_eq_to(
270+ lexer.get_source_location(token),
271+ 1, 1, 0
272+ );
273+ DONE
274+
275+ TEST (test_special_ident_r)
276+ const char *source = "r";
277+ Lexer lexer (source);
278+
279+ auto token = lexer.next_token();
280+
281+ VERIFY_THIS (TokenKind::IDENT).token_as(token.kind);
282+ VERIFY_THIS (TokenKind::IDENT).token_str_eq_to(
283+ token,
284+ " r" , STR_LEN(" r" )
285+ );
286+ VERIFY_THIS (TokenKind::IDENT).token_metadata_eq_to(
287+ lexer.get_source_location(token),
288+ 1, 1, 0
289+ );
290+ DONE
291+
175292TEST_ENTRY
176293 RUN_TEST (test_int_literal)
177294 RUN_TEST(test_float_literal_decimal)
178295 RUN_TEST(test_float_literal_exponent)
179296 RUN_TEST(test_float_literal_exponent_negative)
180297 RUN_TEST(test_wrong_float_literal)
298+ RUN_TEST(test_float_literal_undefined)
299+
300+ RUN_TEST(test_normal_string_literal)
301+ RUN_TEST(test_string_literal_without_closed)
302+ RUN_TEST(test_normal_raw_string_literal)
303+ RUN_TEST(test_raw_string_literal_without_closed)
304+ RUN_TEST(test_special_ident_r)
181305
182306 RUN_TEST(fuzzing_int_literal_random)
183307 RUN_TEST(fuzzing_float_literal_random)
0 commit comments