aboutsummaryrefslogtreecommitdiff
path: root/tests/test/cpp.scm
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test/cpp.scm')
-rw-r--r--tests/test/cpp.scm33
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))"))