aboutsummaryrefslogtreecommitdiff
path: root/tests/test/cpp/to-token.scm
blob: b633ce12905bee11830930cc028d9acb7d2307d5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
(define-module (test cpp to-token)
  :use-module (srfi srfi-64)
  :use-module (srfi srfi-64 test-error)
  :use-module (srfi srfi-88)
  :use-module (c to-token)
  :use-module ((system base lalr)
               :select (lexical-token-category
                        lexical-token-value))
  :use-module ((c lex2) :select (lex))
  )

(test-group "string tokens"
  (let ((v (preprocessing-token->token (car (lex "\"Hello\"")))))
    (test-equal 'string-literal (lexical-token-category v))
    (test-equal #vu8(#x48 #x65 #x6C #x6C #x6F 0) (lexical-token-value v))
    ;; TODO prefixes
    ))

(test-group "identifier tokens"
  (let ((v (preprocessing-token->token (car (lex "hello")))))
    (test-equal 'identifier (lexical-token-category v))
    (test-equal 'hello (lexical-token-value v))))

(test-group "keywords"
  (test-equal 'auto (preprocessing-token->token (car (lex "auto")))))

(test-group "numbers"
  (test-group "Integers"
    (test-group "Base-10"
      (let ((v (preprocessing-token->token (car (lex "1")))))
        (test-equal 'constant (lexical-token-category v))
        (test-equal 1 (lexical-token-value v))))

    (test-equal "Base-16"
      16 (lexical-token-value (preprocessing-token->token (car (lex "0x10")))))
    (test-equal "Base-8"
      8 (lexical-token-value (preprocessing-token->token (car (lex "010")))))
    (test-group "Suffixes"
      'TODO
      ))

  ;; TODO floats
  )

(test-group "character constants"
  (let ((v (preprocessing-token->token (car (lex "'a'")))))
    (test-equal 'constant (lexical-token-category v))
    (test-equal (char->integer #\a) (lexical-token-value v)) )
  (let ((v (preprocessing-token->token (car (lex "'ab'")))))
    (test-equal 'constant (lexical-token-category v))
    (test-equal (char->integer #\b) (lexical-token-value v)))
  (let ((v (preprocessing-token->token (car (lex "'\\x41'")))))
    (test-equal 'constant (lexical-token-category v))
    (test-equal #x41 (lexical-token-value v)))
  ;; (lex "'\\x4142'")
  ;; (lex "'L\\x4142'")
  )

(test-group "punctuators"
  (test-equal '+ (preprocessing-token->token (car (lex "+"))))
  (test-equal 'lbrace (preprocessing-token->token (car (lex "{")))))

(test-group "other"
  (test-error 'cpp-error (preprocessing-token->token (car (lex " ")))))