(define-module (test cpp lex2) :use-module (srfi srfi-64) :use-module (srfi srfi-88) :use-module (ice-9 peg) :use-module (c lex2)) (test-equal "Integer literal" '(preprocessing-token (pp-number "10")) (lex "10")) (test-equal "String literal" '(preprocessing-token (string-literal "Hello")) (lex "\"Hello\"")) (test-equal "Mulitple tokens, including whitespace" '((whitespace " ") (preprocessing-token (pp-number "10")) (whitespace " ")) (lex " 10 ")) (test-equal "Char literal" '(preprocessing-token (character-constant "a")) (lex "'a'")) (test-equal "Comment inside string" '(preprocessing-token (string-literal "Hel/*lo")) (lex "\"Hel/*lo\"")) (test-equal "#define line" '((preprocessing-token (punctuator "#")) (preprocessing-token (identifier "define")) (whitespace " ") (preprocessing-token (identifier "f")) (preprocessing-token (punctuator "(")) (preprocessing-token (identifier "x")) (preprocessing-token (punctuator ")")) (whitespace " ") (preprocessing-token (pp-number "10"))) (lex "#define f(x) 10")) (test-equal "Nested parenthesis" '((preprocessing-token (identifier "f")) (preprocessing-token (punctuator "(")) (preprocessing-token (pp-number "1")) (preprocessing-token (punctuator ",")) (whitespace " ") (preprocessing-token (punctuator "(")) (preprocessing-token (pp-number "2")) (preprocessing-token (punctuator ",")) (whitespace " ") (preprocessing-token (pp-number "3")) (preprocessing-token (punctuator ")")) (preprocessing-token (punctuator ",")) (whitespace " ") (preprocessing-token (pp-number "4")) (preprocessing-token (punctuator ")"))) (lex "f(1, (2, 3), 4)"))