diff options
author | Hugo Hörnquist <hugo@lysator.liu.se> | 2022-06-30 00:22:46 +0200 |
---|---|---|
committer | Hugo Hörnquist <hugo@lysator.liu.se> | 2022-07-07 21:17:22 +0200 |
commit | e0b3406a8c0fa27345883adb94fd55e1955febd7 (patch) | |
tree | 74ba6df94470f2d8467060ed20ad9cd1535cf684 /tests/test/cpp.scm | |
parent | C-parser #define without body. (diff) | |
download | calp-e0b3406a8c0fa27345883adb94fd55e1955febd7.tar.gz calp-e0b3406a8c0fa27345883adb94fd55e1955febd7.tar.xz |
C-parser add strings.
Diffstat (limited to 'tests/test/cpp.scm')
-rw-r--r-- | tests/test/cpp.scm | 33 |
1 files changed, 25 insertions, 8 deletions
diff --git a/tests/test/cpp.scm b/tests/test/cpp.scm index 8a53ecce..f7b11296 100644 --- a/tests/test/cpp.scm +++ b/tests/test/cpp.scm @@ -13,8 +13,6 @@ ;; So changing the lexer test cases isn't a problem ;; but don't change the parser test cases -;; Strings aren't yet implemented -(test-skip "Strings") ;; __asm__ always has strings as arguments (test-skip "__asm__") ;; not implemented @@ -24,6 +22,10 @@ ;; order of operation is wrong, leading to an incorrect result (test-skip "Cast with operation") +;; A string follewed by a macro (which expands to a string) +;; should be concatenated. This is however not yet implemented +(test-skip "Implicit concatenation of string and macro") + (define run (compose parse-lexeme-tree lex)) (define-syntax let-group @@ -366,7 +368,7 @@ (test-group "Strings" (test-group "Empty string" (let ((form "\"\"")) - (test-equal '(string "") (lex form)) + (test-equal 'string (lex form)) (test-equal #vu8(0) (run form)))) (test-group "Simple string" @@ -384,13 +386,28 @@ (test-group "Implicit concatenation of string and macro" (let ((form "\"a\" MACRO")) - (test-equal '() (lex form)) + (test-equal '((string "a") (variable "MACRO")) (lex form)) (test-equal '() (run form)))) - (test-group "String with escape" - (let ((form (string #\\ #\"))) - (test-equal `(string ,(string #\")) (lex form)) - (test-equal #vu8(34 0) (run form))))) + (test-group "String with only escape" + (let ((form (string #\" #\\ #\" #\"))) + (test-equal `(string "\"") (lex form)) + (test-equal #vu8(34 0) (run form)))) + + (test-group "String with escape at start" + (let ((form (string #\" #\\ #\" #\a #\"))) + (test-equal `(string "\"a") (lex form)) + (test-equal #vu8(34 #x61 0) (run form)))) + + (test-group "String with escape at end" + (let ((form (string #\" #\a #\\ #\" #\"))) + (test-equal `(string "a\"") (lex form)) + (test-equal #vu8(#x61 34 0) (run form)))) + + (test-group "String with escape in middle" + (let ((form (string #\" #\a #\\ #\" #\b #\"))) + (test-equal `(string "a\"b") (lex form)) + (test-equal #vu8(#x61 34 #x62 0) (run form))))) (test-group "__asm__" (let ((form "__asm__(\".globl \" __XSTRING(sym))")) |