From cba504b509cd59f376063f6e590362b197147a2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Sun, 3 Jul 2022 12:36:35 +0200 Subject: Major work. --- tests/test/cpp/lex2.scm | 64 ++++++++++++++++++++++++++++++++++++++++ tests/test/cpp/preprocessor2.scm | 29 ++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 tests/test/cpp/lex2.scm create mode 100644 tests/test/cpp/preprocessor2.scm (limited to 'tests/test/cpp') diff --git a/tests/test/cpp/lex2.scm b/tests/test/cpp/lex2.scm new file mode 100644 index 00000000..0342e25c --- /dev/null +++ b/tests/test/cpp/lex2.scm @@ -0,0 +1,64 @@ +(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)")) + diff --git a/tests/test/cpp/preprocessor2.scm b/tests/test/cpp/preprocessor2.scm new file mode 100644 index 00000000..117b7e49 --- /dev/null +++ b/tests/test/cpp/preprocessor2.scm @@ -0,0 +1,29 @@ +(define-module (test cpp preprocessor2) + :use-module (srfi srfi-64) + :use-module (srfi srfi-88)) + + + +(test-group "Tokens until End Of Line" + (call-with-values + (lambda () + (tokens-until-eol + '(before (whitespace "\n") after))) + (lambda (bef aft) + (test-equal '(before) bef) + (test-equal '((whitespace "\n") after) aft)))) + + + +(test-equal "Squeeze whitespace" + '(bef (whitespace " ") aft) + (squeeze-whitespace + '(bef + (whitespace a) + (whitespace b) + aft))) + + + +(test-equal "(" + (stringify-token '(preprocessor-token (operator "(")))) -- cgit v1.2.3