@@ -311,4 +311,146 @@ TEST(lexer, lexer5) {
311311 ASSERT_EQ (jucc::lexer::TOK_CURLY_CLOSE, token);
312312 token = lex.GetToken (is);
313313 ASSERT_EQ (jucc::lexer::TOK_EOF, token);
314+ is.close ();
315+ }
316+
317+ TEST (lexer, lexer6) {
318+ std::string filename (" ../test/lexer/arithmetic.txt" );
319+ Lexer lex = Lexer ();
320+
321+ std::ifstream is (filename);
322+ int token;
323+ token = lex.GetToken (is);
324+ ASSERT_EQ (jucc::lexer::TOK_INT, token);
325+ token = lex.GetToken (is);
326+ ASSERT_EQ (jucc::lexer::TOK_IDENTIFIER, token);
327+ token = lex.GetToken (is);
328+ ASSERT_EQ (jucc::lexer::TOK_PAREN_OPEN, token);
329+ token = lex.GetToken (is);
330+ ASSERT_EQ (jucc::lexer::TOK_PAREN_CLOSE, token);
331+ token = lex.GetToken (is);
332+ ASSERT_EQ (jucc::lexer::TOK_CURLY_OPEN, token);
333+ token = lex.GetToken (is);
334+ ASSERT_EQ (jucc::lexer::TOK_INT, token);
335+ token = lex.GetToken (is);
336+ ASSERT_EQ (jucc::lexer::TOK_IDENTIFIER, token);
337+ token = lex.GetToken (is);
338+ ASSERT_EQ (jucc::lexer::TOK_ASSIGNMENT, token);
339+ token = lex.GetToken (is);
340+ ASSERT_EQ (jucc::lexer::TOK_DECIMAL, token);
341+ token = lex.GetToken (is);
342+ ASSERT_EQ (jucc::lexer::TOK_SEMICOLON, token);
343+ token = lex.GetToken (is);
344+ ASSERT_EQ (jucc::lexer::TOK_IF, token);
345+ token = lex.GetToken (is);
346+ ASSERT_EQ (jucc::lexer::TOK_PAREN_OPEN, token);
347+ token = lex.GetToken (is);
348+ ASSERT_EQ (jucc::lexer::TOK_IDENTIFIER, token);
349+ token = lex.GetToken (is);
350+ ASSERT_EQ (jucc::lexer::TOK_GREATER_THAN, token);
351+ token = lex.GetToken (is);
352+ ASSERT_EQ (jucc::lexer::TOK_DECIMAL, token);
353+ token = lex.GetToken (is);
354+ ASSERT_EQ (jucc::lexer::TOK_PAREN_CLOSE, token);
355+ token = lex.GetToken (is);
356+ ASSERT_EQ (jucc::lexer::TOK_CURLY_OPEN, token);
357+ token = lex.GetToken (is);
358+ ASSERT_EQ (jucc::lexer::TOK_COUT, token);
359+ token = lex.GetToken (is);
360+ ASSERT_EQ (jucc::lexer::TOK_LEFT_SHIFT, token);
361+ token = lex.GetToken (is);
362+ ASSERT_EQ (jucc::lexer::TOK_IDENTIFIER, token);
363+ token = lex.GetToken (is);
364+ ASSERT_EQ (jucc::lexer::TOK_SEMICOLON, token);
365+ token = lex.GetToken (is);
366+ ASSERT_EQ (jucc::lexer::TOK_CURLY_CLOSE, token);
367+ token = lex.GetToken (is);
368+ ASSERT_EQ (jucc::lexer::TOK_ELSE, token);
369+ token = lex.GetToken (is);
370+ ASSERT_EQ (jucc::lexer::TOK_CURLY_OPEN, token);
371+ token = lex.GetToken (is);
372+ ASSERT_EQ (jucc::lexer::TOK_IF, token);
373+ token = lex.GetToken (is);
374+ ASSERT_EQ (jucc::lexer::TOK_PAREN_OPEN, token);
375+ token = lex.GetToken (is);
376+ ASSERT_EQ (jucc::lexer::TOK_IDENTIFIER, token);
377+ token = lex.GetToken (is);
378+ ASSERT_EQ (jucc::lexer::TOK_NOT_EQUAL_TO, token);
379+ token = lex.GetToken (is);
380+ ASSERT_EQ (jucc::lexer::TOK_DECIMAL, token);
381+ token = lex.GetToken (is);
382+ ASSERT_EQ (jucc::lexer::TOK_PAREN_CLOSE, token);
383+ token = lex.GetToken (is);
384+ ASSERT_EQ (jucc::lexer::TOK_CURLY_OPEN, token);
385+ token = lex.GetToken (is);
386+ ASSERT_EQ (jucc::lexer::TOK_IDENTIFIER, token);
387+ token = lex.GetToken (is);
388+ ASSERT_EQ (jucc::lexer::TOK_ASSIGNMENT, token);
389+ token = lex.GetToken (is);
390+ ASSERT_EQ (jucc::lexer::TOK_PAREN_OPEN, token);
391+ token = lex.GetToken (is);
392+ ASSERT_EQ (jucc::lexer::TOK_IDENTIFIER, token);
393+ token = lex.GetToken (is);
394+ ASSERT_EQ (jucc::lexer::TOK_MULTIPLY, token);
395+ token = lex.GetToken (is);
396+ ASSERT_EQ (jucc::lexer::TOK_DECIMAL, token);
397+ token = lex.GetToken (is);
398+ ASSERT_EQ (jucc::lexer::TOK_PAREN_CLOSE, token);
399+ token = lex.GetToken (is);
400+ ASSERT_EQ (jucc::lexer::TOK_PLUS, token);
401+ token = lex.GetToken (is);
402+ ASSERT_EQ (jucc::lexer::TOK_DECIMAL, token);
403+ token = lex.GetToken (is);
404+ ASSERT_EQ (jucc::lexer::TOK_MINUS, token);
405+ token = lex.GetToken (is);
406+ ASSERT_EQ (jucc::lexer::TOK_DECIMAL, token);
407+ token = lex.GetToken (is);
408+ ASSERT_EQ (jucc::lexer::TOK_SEMICOLON, token);
409+ token = lex.GetToken (is);
410+ ASSERT_EQ (jucc::lexer::TOK_COMMENT, token);
411+ token = lex.GetToken (is);
412+ ASSERT_EQ (jucc::lexer::TOK_IDENTIFIER, token);
413+ token = lex.GetToken (is);
414+ ASSERT_EQ (jucc::lexer::TOK_ASSIGNMENT, token);
415+ token = lex.GetToken (is);
416+ ASSERT_EQ (jucc::lexer::TOK_IDENTIFIER, token);
417+ token = lex.GetToken (is);
418+ ASSERT_EQ (jucc::lexer::TOK_DIVIDE, token);
419+ token = lex.GetToken (is);
420+ ASSERT_EQ (jucc::lexer::TOK_DECIMAL, token);
421+ token = lex.GetToken (is);
422+ ASSERT_EQ (jucc::lexer::TOK_SEMICOLON, token);
423+ token = lex.GetToken (is);
424+ ASSERT_EQ (jucc::lexer::TOK_CURLY_CLOSE, token);
425+ token = lex.GetToken (is);
426+ ASSERT_EQ (jucc::lexer::TOK_IF, token);
427+ token = lex.GetToken (is);
428+ ASSERT_EQ (jucc::lexer::TOK_PAREN_OPEN, token);
429+ token = lex.GetToken (is);
430+ ASSERT_EQ (jucc::lexer::TOK_IDENTIFIER, token);
431+ token = lex.GetToken (is);
432+ ASSERT_EQ (jucc::lexer::TOK_GREATER_THAN_OR_EQUALS, token);
433+ token = lex.GetToken (is);
434+ ASSERT_EQ (jucc::lexer::TOK_DECIMAL, token);
435+ token = lex.GetToken (is);
436+ ASSERT_EQ (jucc::lexer::TOK_PAREN_CLOSE, token);
437+ token = lex.GetToken (is);
438+ ASSERT_EQ (jucc::lexer::TOK_CURLY_OPEN, token);
439+ token = lex.GetToken (is);
440+ ASSERT_EQ (jucc::lexer::TOK_COUT, token);
441+ token = lex.GetToken (is);
442+ ASSERT_EQ (jucc::lexer::TOK_LEFT_SHIFT, token);
443+ token = lex.GetToken (is);
444+ ASSERT_EQ (jucc::lexer::TOK_IDENTIFIER, token);
445+ token = lex.GetToken (is);
446+ ASSERT_EQ (jucc::lexer::TOK_SEMICOLON, token);
447+ token = lex.GetToken (is);
448+ ASSERT_EQ (jucc::lexer::TOK_CURLY_CLOSE, token);
449+ token = lex.GetToken (is);
450+ ASSERT_EQ (jucc::lexer::TOK_CURLY_CLOSE, token);
451+ token = lex.GetToken (is);
452+ ASSERT_EQ (jucc::lexer::TOK_CURLY_CLOSE, token);
453+ token = lex.GetToken (is);
454+ ASSERT_EQ (jucc::lexer::TOK_EOF, token);
455+ is.close ();
314456}
0 commit comments