ChimeraTK-ApplicationCore 04.06.00
Loading...
Searching...
No Matches
testPythonScalarAccessors.py
Go to the documentation of this file.
1#!/usr/bin/python3
2
3import sys
4import os
5import os.path
6import traceback
7import math
8
9# fmt: off
10# Hack to insert the python path for the locally compiled module in the
11# test script
12sys.path.insert(0, os.path.abspath(os.path.join(os.curdir, "..")))
13import PyApplicationCore as ac # NOQA
14# fmt: on
15
16
17class MyMod(ac.ApplicationModule):
18
19 def __init__(self, owner, name, description):
20 super().__init__(owner, name, description)
21
22 self.v0 = ac.ScalarOutput(ac.DataType.int32, self, "/Test/V0", "", "")
23 self.v1 = ac.ScalarOutput(ac.DataType.int32, self, "/Test/V1", "", "")
24 self.v2 = ac.ScalarOutput(ac.DataType.int32, self, "/Test/V2", "", "")
25 self.v3 = ac.ScalarOutput(ac.DataType.int32, self, "/Test/V3", "", "")
26 self.v4 = ac.ScalarOutput(ac.DataType.int32, self, "/Test/V4", "", "")
27 self.v5 = ac.ScalarOutput(ac.DataType.float32, self, "/Test/V5", "", "")
28 self.v6 = ac.ScalarOutput(ac.DataType.float32, self, "/Test/V6", "", "")
29 self.v7 = ac.ScalarOutput(ac.DataType.float32, self, "/Test/V7", "", "")
30 self.v8 = ac.ScalarOutput(ac.DataType.string, self, "/Test/V8", "", "")
31 self.end = ac.ScalarPushInput(ac.DataType.int32, self, "/Test/end", "", "")
32
33 self.result = ac.ScalarOutput(ac.DataType.string, self, "/Test/Result", "", "")
34
35 def mainLoop(self):
36
37 self.v0.setAndWrite(0)
38 self.v1.setAndWrite(1)
39 self.v2.setAndWrite(2)
40 self.v3.setAndWrite(1)
41 self.v4.setAndWrite(42)
42 self.v5.setAndWrite(-33.21)
43 self.v6.setAndWrite(11.7832)
44 self.v7.setAndWrite(2.75)
45 self.v8.setAndWrite("some string")
46 self.result.setAndWrite("")
47
48 while True:
49 try:
50
51 # check comparisons between accessorts
52
53 assert self.v1 == self.v3
54 assert self.v1 < self.v2
55 assert self.v2 > self.v1
56 assert self.v1 != self.v2
57 assert self.v1 >= self.v3
58 assert self.v2 >= self.v3
59 assert self.v1 <= self.v2
60 assert self.v1 <= self.v3
61
62 assert not (self.v1 != self.v1)
63 assert not (self.v1 > self.v2)
64 assert not (self.v2 < self.v1)
65 assert not (self.v1 == self.v2)
66 assert not (self.v2 <= self.v3)
67 assert not (self.v1 >= self.v2)
68
69 # accessors and python objects / ints
70
71 assert self.v1 == 1
72 assert self.v1 < 3
73 assert self.v2 > -1
74 assert self.v1 != 2
75 assert self.v1 >= 1
76 assert self.v2 >= 1
77 assert self.v1 <= 2
78 assert self.v1 <= 1
79
80 assert not (self.v1 != 1)
81 assert not (self.v1 > 2)
82 assert not (self.v2 < 1)
83 assert not (self.v1 == 2)
84 assert not (self.v2 <= 1)
85 assert not (self.v1 >= 2)
86
87 # switch directions
88
89 assert 2 != self.v1
90 assert 3 > self.v1
91 assert 1 < self.v2
92 assert 1 == self.v1
93 assert -33 <= self.v2
94 assert 2 <= self.v2
95 assert 2 >= self.v1
96 assert 1 >= self.v1
97
98 assert not (100 == self.v1)
99 assert not (3 < self.v1)
100 assert not (-1 > self.v2)
101 assert not (1 != self.v1)
102 assert not (-12 >= self.v1)
103 assert not (22 <= self.v1)
104
105 # check math functions
106 # assert @ : can't test matmul with scalars
107 # check math with accessors on the left
108
109 assert (self.v1 + 41) == 42
110 assert (self.v1 - 41) == -40
111 assert (self.v4 / 7) == 6
112 assert (self.v4 // 10) == 4
113 assert (self.v4 % 10) == 2
114 assert divmod(self.v4, 4) == (10, 2)
115 assert (self.v2 ** 3) == 8
116 assert (self.v2 << 3) == 16
117 assert (self.v4 >> 2) == 10
118 assert (self.v4 & 2) == 2
119 assert (self.v4 ^ 2) == 40
120 assert (self.v4 | 1) == 43
121
122 # check math with accessors on the right
123
124 assert (41 + self.v1) == 42
125 assert (41 - self.v1) == 40
126 assert (84 / self.v4) == 2
127 assert (7 // self.v2) == 3
128 assert (7 % self.v2) == 1
129 assert divmod(42, self.v2) == (21, 0)
130 assert (3 ** self.v2) == 9
131 assert (3 << self.v2) == 12
132 assert (42 >> self.v2) == 10
133 assert (2 & self.v4) == 2
134 assert (2 ^ self.v4) == 40
135 assert (1 | self.v4) == 43
136
137 # TODO: check math with two accessors
138
139 # check unary operations
140 assert -self.v1 == -1
141 eps = 0.00001
142 assert -self.v5 - 33.21 <= eps
143 assert +self.v4 == self.v4
144 assert abs(self.v5) - 33.21 <= eps
145 assert ~self.v1 == -2
146 assert ~self.v4 == -43
147
148 assert isinstance(int(self.v1), int)
149 assert int(self.v5) == -33
150 assert isinstance(float(self.v2), float)
151
152 assert math.trunc(self.v6) == 11
153 assert math.trunc(self.v5) == -33
154 assert math.floor(self.v6) == 11
155 assert math.floor(self.v5) == -34
156 assert math.ceil(self.v6) == 12
157 assert math.ceil(self.v5) == -33
158 assert round(self.v6) == 12
159 assert round(self.v6, 1) == 11.8
160 assert round(self.v6, 2) == 11.78
161
162 assert str(self.v7) == "2.75"
163 assert str(self.v8) == "some string"
164 assert bool(self.v7) == True
165 assert bool(self.v0) == False
166
167 except Exception as e:
168 self.result.setAndWrite("\n".join(traceback.format_exception(e)))
169
170 self.result.setAndWrite("Scalar test did not produce any Python Errors")
171
172 self.end.readAndGet()
173
174
175ac.app.myMod = MyMod(ac.app, "ScalarTestModule", "Module to check scalar comparison and math operators")
__init__(self, owner, name, description)
void mainLoop() override