-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathtest_signature.py
195 lines (139 loc) · 5.13 KB
/
test_signature.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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
#!/usr/bin/env python
"""Unittest for signature.py."""
import unittest
try:
import elaps
except:
import os
import sys
sys.path.append(
os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
)
from elaps.signature import *
class TestArgs(unittest.TestCase):
"""Tests for Arg classes."""
def test_Name(self):
"""Test for Name."""
self.assertEqual(Name("name"), "name")
def test_Flag(self):
"""Test for Flag."""
self.assertEqual(Flag("name", [1, 2]).default(), 1)
self.assertTrue(issubclass(Trans, Flag))
def test_Scalar(self):
"""Test for Scalar."""
self.assertEqual(cScalar().format_sampler(2), "%s,%s" % (2., 0.))
self.assertTrue(issubclass(iScalar, Scalar))
def test_ArgWithMin(self):
"""Test for ArgWithMin."""
self.assertEqual(ArgWithMin("name", "1234").minstr, "1234")
def test_Data(self):
"""Test for Data."""
self.assertEqual(cData("name").format_sampler(2), "[%s]" % 4)
self.assertTrue(issubclass(sData, Data))
def test_Ld(self):
"""Test for Ld."""
pass
def test_Inc(self):
"""Test for Inc."""
pass
def test_Work(self):
"""Test for Work."""
self.assertTrue(issubclass(zWork, Work))
def test_lWork(self):
"""Test for lWork."""
pass
def test_Info(self):
"""Test for Info."""
pass
def test_String(self):
"""Test for String."""
pass
class TestSignature(unittest.TestCase):
""" Tests for Signature."""
def test_init(self):
"""Test for __init__()."""
self.assertEqual(Signature("kernel")[0], Name("kernel"))
def test_lambdas(self):
"""Test for lambda functions."""
# flops
sig = Signature("name", Dim("m"), Dim("n"), flops="m + n")
self.assertEqual(sig.flops("name", 1234, 5678), 1234 + 5678)
# min
sig = Signature("name", Dim("m"), Dim("n"), Data("A", "m * n"))
self.assertEqual(sig.A.min("name", 1234, 5678, None), 1234 * 5678)
# attr
sig = Signature("name", Dim("n"),
Scalar(attr="lower if n < 100 else None"))
self.assertEqual(sig.alpha.properties("name", 5, None), ("lower",))
self.assertEqual(sig.alpha.properties("name", 105, None), tuple())
# failure checking
self.assertRaises(NameError,
Signature, "name", Dim("m"), flops="n")
self.assertRaises(NameError,
Signature, "name", Dim("m"), Data("X", "m * n"))
self.assertRaises(NameError,
Signature, "name", Dim("m"),
Data("X", "m", "lower if n else None"))
def test_dataargs(self):
"""Test for dataargs()."""
sig = Signature("name", Dim("n"), Data("A"), Data("B"), Ld("x"),
Data("C"))
self.assertEqual(sig.dataargs(), [2, 3, 5])
def test_datatype(self):
"""Test for datatype()."""
sig = Signature("name", Dim("n"), dData("A"), iData("B"), Ld("x"),
cData("C"))
self.assertEqual(sig.datatype(), "double precision")
def test_str(self):
"""Test for __str__()."""
sig = Signature("name", Dim("n"), dData("A"), Ld("x"), cData("C"))
self.assertEquals(str(sig), "name(n, A, x, C)")
class TestCall(unittest.TestCase):
"""Tests for Call."""
def setUp(self):
"""Set up a signature."""
self.sig = Signature("name", Dim("n"), dData("A", "ldA * n + 5"),
Ld("ldA", "n + 3"), flops="n ** 4")
def test_init(self):
"""Test for __init__()."""
sig = self.sig
self.assertRaises(TypeError, Call, "name", 1234)
self.assertRaises(TypeError, sig, 1234)
self.assertEqual(sig(1234, "X", 5), Call(sig, 1234, "X", 5))
self.assertEqual(sig(), sig(1, None, None))
self.assertEqual(sig(A="a"), sig(1, "a", None))
def test_attr(self):
"""Test for __get/setattr__()."""
sig = self.sig
self.assertEqual(sig().A, None)
call = sig()
call.A = 2
self.assertEqual(call, sig(1, 2, None))
def test_argdict(self):
"""Test for argdict()."""
sig = self.sig
self.assertEqual(sig(2, 3, 4).argdict(),
{"name": "name", "n": 2, "A": 3, "ldA": 4})
def test_complete(self):
"""Test for completing mechanism."""
sig = self.sig
call = sig()
call[1] = 1234
call2 = call.copy()
call2.complete_once()
self.assertEqual(call2, sig(1234, None, 1234 + 3))
call2 = call.copy()
call2.complete()
self.assertEqual(call2, sig(1234, (1234 + 3) * 1234 + 5, 1234 + 3))
def test_flops(self):
"""Test for flops()."""
sig = self.sig
call = sig()
call.n = 1234
self.assertEqual(call.flops(), 1234 ** 4)
def test_str(self):
sig = self.sig
call = sig(1, 2, "b")
self.assertEqual(str(call), "name(1, 2, b)")
if __name__ == "__main__":
unittest.main()