You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
beautiful-racket/beautiful-racket-demo/basic-demo/lexer-test.rkt

58 lines
1.6 KiB
Racket

#lang br
(require "lexer.rkt" brag/support rackunit)
(define (lex str)
(apply-lexer basic-lexer str))
(check-equal? (lex "") empty)
(check-equal?
(lex " ")
(list (srcloc-token (token " " #:skip? #t)
(srcloc 'string #f #f 1 1))))
(check-equal?
(lex "rem ignored\n")
(list (srcloc-token (token 'REM "rem ignored")
(srcloc 'string #f #f 1 11))
(srcloc-token (token 'NEWLINE)
(srcloc 'string #f #f 12 1))))
(check-equal?
(lex "print")
(list (srcloc-token "print"
(srcloc 'string #f #f 1 5))))
(check-equal?
(lex "goto")
(list (srcloc-token "goto"
(srcloc 'string #f #f 1 4))))
(check-equal?
(lex "end")
(list (srcloc-token "end"
(srcloc 'string #f #f 1 3))))
(check-equal?
(lex "+")
(list (srcloc-token "+"
(srcloc 'string #f #f 1 1))))
(check-equal?
(lex "12")
(list (srcloc-token (token 'INTEGER 12)
(srcloc 'string #f #f 1 2))))
(check-equal?
(lex "1.2")
(list (srcloc-token (token 'DECIMAL 1.2)
(srcloc 'string #f #f 1 3))))
(check-equal?
(lex "12.")
(list (srcloc-token (token 'DECIMAL 12.)
(srcloc 'string #f #f 1 3))))
(check-equal?
(lex ".12")
(list (srcloc-token (token 'DECIMAL .12)
(srcloc 'string #f #f 1 3))))
(check-equal?
(lex "\"foo\"")
(list (srcloc-token (token 'STRING "foo")
(srcloc 'string #f #f 1 5))))
(check-equal?
(lex "'foo'")
(list (srcloc-token (token 'STRING "foo")
(srcloc 'string #f #f 1 5))))
(check-exn exn:fail:read? (lambda () (lex "x")))