-
Notifications
You must be signed in to change notification settings - Fork 178
/
Copy pathtest_tracer.py
96 lines (82 loc) · 2.47 KB
/
test_tracer.py
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
from amaranth.hdl._ast import *
from amaranth.hdl import _ast
from types import SimpleNamespace
from .utils import *
class TracerTestCase(FHDLTestCase):
def test_fast(self):
s1 = Signal()
self.assertEqual(s1.name, "s1")
s2 = Signal()
self.assertEqual(s2.name, "s2")
def test_call_variants(self):
args = []
kwargs = {}
s1 = Signal()
self.assertEqual(s1.name, "s1")
s2 = Signal(init=0)
self.assertEqual(s2.name, "s2")
s3 = Signal(*args, **kwargs)
self.assertEqual(s3.name, "s3")
s4 = _ast.Signal()
self.assertEqual(s4.name, "s4")
s5 = _ast.Signal(init=0)
self.assertEqual(s5.name, "s5")
s6 = _ast.Signal(*args, **kwargs)
self.assertEqual(s6.name, "s6")
def test_name(self):
class Dummy:
s1 = Signal()
self.assertEqual(s1.name, "s1")
s2 = Signal()
self.assertEqual(s2.name, "s2")
def test_attr(self):
ns = SimpleNamespace()
ns.s1 = Signal()
self.assertEqual(ns.s1.name, "s1")
ns.s2 = Signal()
self.assertEqual(ns.s2.name, "s2")
def test_index(self):
l = [None]
l[0] = Signal()
self.assertEqual(l[0].name, "$signal")
def test_deref_cell(self):
s1 = Signal()
self.assertEqual(s1.name, "s1")
s2 = Signal()
self.assertEqual(s2.name, "s2")
def dummy():
return s1, s2
def test_deref_free(self):
def inner():
nonlocal s3, s4
s3 = Signal()
s4 = Signal()
return s1, s2
s1 = Signal()
s2 = Signal()
s3 = None
s4 = None
inner()
self.assertEqual(s1.name, "s1")
self.assertEqual(s2.name, "s2")
self.assertEqual(s3.name, "s3")
self.assertEqual(s4.name, "s4")
def test_long(self):
test = ""
for i in range(100000):
test += f"dummy{i} = None\n"
test += "s1 = Signal()\n"
test += "s2 = Signal()\n"
ns = {"Signal": Signal}
exec(test, ns)
self.assertEqual(ns["s1"].name, "s1")
self.assertEqual(ns["s2"].name, "s2")
def test_deref_fast(self):
def inner(s2):
s1 = Signal()
s2 = Signal()
self.assertEqual(s1.name, "s1")
self.assertEqual(s2.name, "s2")
def dummy():
return s1, s2
inner(None)