1 #!/usr/bin/env python2
2 # Copyright 2016 Andy Chu. All rights reserved.
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 # http://www.apache.org/licenses/LICENSE-2.0
8 """
9 id_kind_test.py: Tests for id_kind_def.py
10 """
11 from __future__ import print_function
12
13 import unittest
14
15 from _devbuild.gen.id_kind_asdl import Id, Kind
16 from frontend import consts
17 from frontend.lexer_def import ID_SPEC
18 from core.test_lib import Tok
19
20 _kind_sizes = ID_SPEC.kind_sizes
21
22
23 class TokensTest(unittest.TestCase):
24 def testId(self):
25 #print(dir(Id))
26 print(Id.Op_Newline)
27 print(Id.Undefined_Tok)
28
29 def testTokens(self):
30 print(Id.Op_Newline)
31 print(Tok(Id.Op_Newline, '\n'))
32
33 print(Id.Op_Newline)
34
35 print(Kind.Eof)
36 print(Kind.Left)
37
38 print('--')
39 num_kinds = 0
40 for name in dir(Kind):
41 if name[0].isupper():
42 kind = getattr(Kind, name)
43 print('%-20s %s' % (name, kind))
44 num_kinds += 1
45
46 print()
47 print('Number of Kinds:', num_kinds)
48 print()
49
50 for name in dir(Id):
51 if name[0].isupper():
52 id_ = getattr(Id, name)
53 print('%-30s %s' % (name, id_))
54
55 # 309 out of 256 tokens now
56 print()
57 print('Number of IDs:', len(ID_SPEC.id_str2int))
58
59 t = Tok(Id.Arith_Plus, '+')
60 self.assertEqual(Kind.Arith, consts.GetKind(t.id))
61 t = Tok(Id.Arith_CaretEqual, '^=')
62 self.assertEqual(Kind.Arith, consts.GetKind(t.id))
63 t = Tok(Id.Arith_RBrace, '}')
64 self.assertEqual(Kind.Arith, consts.GetKind(t.id))
65
66 t = Tok(Id.BoolBinary_GlobDEqual, '==')
67 self.assertEqual(Kind.BoolBinary, consts.GetKind(t.id))
68
69 t = Tok(Id.BoolBinary_Equal, '=')
70 self.assertEqual(Kind.BoolBinary, consts.GetKind(t.id))
71
72 def testLexerPairs(self):
73 def MakeLookup(p):
74 return dict((pat, tok) for _, pat, tok in p)
75
76 lookup = MakeLookup(ID_SPEC.LexerPairs(Kind.BoolUnary))
77 #print(lookup)
78 self.assertEqual(Id.BoolUnary_e, lookup['-e'])
79 self.assertEqual(Id.BoolUnary_z, lookup['-z'])
80
81 lookup2 = MakeLookup(ID_SPEC.LexerPairs(Kind.BoolBinary))
82 self.assertEqual(Id.BoolBinary_eq, lookup2['-eq'])
83 #print(lookup2)
84
85 def testPrintStats(self):
86 print('---')
87 k = _kind_sizes
88 print('STATS: %d tokens in %d groups: %s' % (sum(k), len(k), k))
89 # Thinking about switching
90 big = [i for i in k if i > 8]
91 print('%d BIG groups: %s' % (len(big), sorted(big)))
92
93
94 if __name__ == '__main__':
95 unittest.main()