#lang racket (require rackunit parser-tools/lex datalog/private/lex) (provide lex-tests) (define (test-lexer str tok-name [tok-value str]) (define pv (dlexer (open-input-string str))) (define v (position-token-token pv)) (test-equal? (format "lexer: ~a: <~a,~a>" str tok-name tok-value) (cons tok-name tok-value) (cons (token-name v) (token-value v)))) (define lex-tests (test-suite "lex" (test-lexer "=" 'EQUAL #f) (test-lexer "!=" 'NEQUAL #f) (test-lexer "?" 'QMARK #f) (test-lexer "~" 'TILDE #f) (test-lexer "." 'DOT #f) (test-lexer ")" 'RPAREN #f) (test-lexer "," 'COMMA #f) (test-lexer "(" 'LPAREN #f) (test-lexer "\"\"" 'STRING "") (test-lexer "\"foo\"" 'STRING "foo") (test-lexer "\"\\\"\"" 'STRING "\"") (test-lexer ":-" 'TSTILE #f) (test-lexer "" 'EOF #f) (test-lexer "Va1_" 'VARIABLE) (test-lexer "val_" 'IDENTIFIER) (test-lexer "912Kadf" 'IDENTIFIER) (test-lexer " =" 'EQUAL #f) (test-lexer "% 12453\n=" 'EQUAL #f) ))