OILS
/
frontend
/
id_kind_def_test.py
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()
|