]> git.mdlowis.com Git - archive/dlang-scm.git/commitdiff
Checkpoint Commit. Added unit tests for numbers, whitespace, and comments
authorMike D. Lowis <mike@mdlowis.com>
Tue, 10 Jul 2012 21:20:09 +0000 (17:20 -0400)
committerMike D. Lowis <mike@mdlowis.com>
Tue, 10 Jul 2012 21:20:09 +0000 (17:20 -0400)
source/lexer.scm
tests/test_lexer.scm

index 9bda8576930f3c76c38418865160bcc9d0271f41..3803851709075dc54b5f7e168f84bae9034f3897 100644 (file)
     (buf-consume! in)))
 
 (define (dlang/number in)
-  (lex/token 'number
+  (token 'number
     (string-append
-      (if (char=? #\- (buf-lookahead! in 1)) (buf-consume! in) "")
+      (if (char=? #\- (buf-lookahead! in 1))
+        (string (buf-consume! in)) "")
       (dlang/integer in)
       (if (char=? (buf-lookahead! in 1) #\.)
         (dlang/decimal in) "")
@@ -82,6 +83,8 @@
     (string
       (if (char=? (buf-lookahead! in 1) #\e)
         (char-match in #\e) (char-match in #\E)))
+    (if (char=? #\- (buf-lookahead! in 1))
+      (string (buf-consume! in)) "")
     (dlang/integer in)))
 
 (define (dlang/character in)
index 8b2be37ba23f125d4ee4bfa9f1b268a61c2506ac..c03b432bd594a2224cb038b8db2efbb617c76137 100644 (file)
 
 ; dlang/whitespace
 ;------------------------------------------------------------------------------
+(def-test "dlang/whitespace should recognize and consume whitespace"
+  (call-with-input-string " \t\r\na"
+    (lambda (input) '())))
 
 ; dlang/comment
 ;------------------------------------------------------------------------------
+(def-test "dlang/comment should recognize comments with windows style line endings"
+  (call-with-input-string "# foo\r\n"
+    (lambda (input) '())))
+
+(def-test "dlang/comment should recognize comments with unix style line endings"
+  (call-with-input-string "# foo\n"
+    (lambda (input) '())))
+
+(def-test "dlang/comment should recognize an empty comment"
+  (call-with-input-string "#\n"
+    (lambda (input) '())))
+
+(def-test "dlang/comment should recognize comment at EOF"
+  (call-with-input-string "#"
+    (lambda (input) '())))
 
 ; dlang/number
 ;------------------------------------------------------------------------------
+(def-test "dlang/number should recognize a positive integer"
+  (call-with-input-string "1"
+    (lambda (input)
+      (define buffer (buf input read-char))
+      (define result (dlang/number buffer))
+      (and (token? result)
+           (equal? 'number (token-type result))
+           (equal? "1" (token-text result))))))
+
+(def-test "dlang/number should recognize a negative integer"
+  (call-with-input-string "-1"
+    (lambda (input)
+      (define buffer (buf input read-char))
+      (define result (dlang/number buffer))
+      (and (token? result)
+           (equal? 'number (token-type result))
+           (equal? "-1" (token-text result))))))
+
+(def-test "dlang/number should recognize a positive float"
+  (call-with-input-string "1.1"
+    (lambda (input)
+      (define buffer (buf input read-char))
+      (define result (dlang/number buffer))
+      (and (token? result)
+           (equal? 'number (token-type result))
+           (equal? "1.1" (token-text result))))))
+
+(def-test "dlang/number should recognize a negative float"
+  (call-with-input-string "-1.1"
+    (lambda (input)
+      (define buffer (buf input read-char))
+      (define result (dlang/number buffer))
+      (and (token? result)
+           (equal? 'number (token-type result))
+           (equal? "-1.1" (token-text result))))))
+
+(def-test "dlang/number should recognize a positive integer with positive exponent"
+  (call-with-input-string "1e1"
+    (lambda (input)
+      (define buffer (buf input read-char))
+      (define result (dlang/number buffer))
+      (and (token? result)
+           (equal? 'number (token-type result))
+           (equal? "1e1" (token-text result))))))
+
+(def-test "dlang/number should recognize a positive integer with negative exponent"
+  (call-with-input-string "1e-1"
+    (lambda (input)
+      (define buffer (buf input read-char))
+      (define result (dlang/number buffer))
+      (and (token? result)
+           (equal? 'number (token-type result))
+           (equal? "1e-1" (token-text result))))))
+
+(def-test "dlang/number should recognize a positive float with positive exponent"
+  (call-with-input-string "1.1e1"
+    (lambda (input)
+      (define buffer (buf input read-char))
+      (define result (dlang/number buffer))
+      (and (token? result)
+           (equal? 'number (token-type result))
+           (equal? "1.1e1" (token-text result))))))
+
+(def-test "dlang/number should recognize a positive float with negative exponent"
+  (call-with-input-string "1.1e-1"
+    (lambda (input)
+      (define buffer (buf input read-char))
+      (define result (dlang/number buffer))
+      (and (token? result)
+           (equal? 'number (token-type result))
+           (equal? "1.1e-1" (token-text result))))))
+
+(def-test "dlang/number should recognize a negative integer with positive exponent"
+  (call-with-input-string "-1e1"
+    (lambda (input)
+      (define buffer (buf input read-char))
+      (define result (dlang/number buffer))
+      (and (token? result)
+           (equal? 'number (token-type result))
+           (equal? "-1e1" (token-text result))))))
+
+(def-test "dlang/number should recognize a negative integer with negative exponent"
+  (call-with-input-string "-1e-1"
+    (lambda (input)
+      (define buffer (buf input read-char))
+      (define result (dlang/number buffer))
+      (and (token? result)
+           (equal? 'number (token-type result))
+           (equal? "-1e-1" (token-text result))))))
+
+(def-test "dlang/number should recognize a negative float with positive exponent"
+  (call-with-input-string "-1.1e1"
+    (lambda (input)
+      (define buffer (buf input read-char))
+      (define result (dlang/number buffer))
+      (and (token? result)
+           (equal? 'number (token-type result))
+           (equal? "-1.1e1" (token-text result))))))
+
+(def-test "dlang/number should recognize a negative float with negative exponent"
+  (call-with-input-string "-1.1e-1"
+    (lambda (input)
+      (define buffer (buf input read-char))
+      (define result (dlang/number buffer))
+      (and (token? result)
+           (equal? 'number (token-type result))
+           (equal? "-1.1e-1" (token-text result))))))
 
 ; dlang/integer
 ;------------------------------------------------------------------------------
       (and (string? result)
            (equal? "E012" result)))))
 
+(def-test "dlang/exponent should recognize a negative exponent"
+  (call-with-input-string "e-012"
+    (lambda (input)
+      (define buffer (buf input read-char))
+      (define result (dlang/exponent buffer))
+      (and (string? result)
+           (equal? "e-012" result)))))
+
 (def-test "dlang/exponent should error when no integer portion in input"
   (call-with-input-string "e "
     (lambda (input)
       (check-error "An Id was expected but none found."
         (dlang/id buffer)))))
 
+(def-test "dlang/stop recognition when comment encountered"
+  (call-with-input-string "foo#"
+    (lambda (input) '())))
+
+
+