From: Mike D. Lowis Date: Tue, 10 Jul 2012 21:20:09 +0000 (-0400) Subject: Checkpoint Commit. Added unit tests for numbers, whitespace, and comments X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=1d2bd60a6b499068b5540797edcb1cb9ecf981b7;p=archive%2Fdlang-scm.git Checkpoint Commit. Added unit tests for numbers, whitespace, and comments --- diff --git a/source/lexer.scm b/source/lexer.scm index 9bda857..3803851 100644 --- a/source/lexer.scm +++ b/source/lexer.scm @@ -51,9 +51,10 @@ (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) diff --git a/tests/test_lexer.scm b/tests/test_lexer.scm index 8b2be37..c03b432 100644 --- a/tests/test_lexer.scm +++ b/tests/test_lexer.scm @@ -7,12 +7,137 @@ ; 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 ;------------------------------------------------------------------------------ @@ -128,6 +253,14 @@ (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) @@ -263,3 +396,9 @@ (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) '()))) + + +