#include "CxxUtils/checker_macros.h"
#include "gtest/gtest.h"
#include "../ap_fixed.h"
#include <sstream>
#include <cmath>
Go to the source code of this file.
|
| constexpr int | pow (int base, int exp) noexcept |
| template<int W, int P> |
| constexpr double | min () |
| template<int W, int P> |
| constexpr double | max () |
| | TEST (ap_fixedTester, minmax) |
| | TEST (ap_fixedTester, stablity) |
| | TEST (ap_fixedTester, specialValue) |
| | TEST (ap_fixedTester, overflow_h) |
| | TEST (ap_fixedTester, overflow_l) |
| | TEST (ap_fixedTester, addition) |
| | TEST (ap_fixedTester, addition1) |
| | TEST (ap_fixedTester, subtraction) |
| | TEST (ap_fixedTester, subtraction1) |
| | TEST (ap_fixedTester, multiplication) |
| | TEST (ap_fixedTester, multiplication1) |
| | TEST (ap_fixedTester, division) |
| | TEST (ap_fixedTester, division1) |
| | TEST (ap_fixedTester, negation) |
| | TEST (ap_fixedTester, doubleMult) |
◆ max()
Definition at line 33 of file ap_fixedTest.cxx.
33 {
34 static_assert(
W >=
P);
35 static_assert(
P >= 0);
36 return static_cast<double>(
pow(2, W-1)-1)/
static_cast<double>(
pow(2,
P));
37}
constexpr int pow(int base, int exp) noexcept
◆ min()
Definition at line 26 of file ap_fixedTest.cxx.
26 {
27 static_assert(
W >=
P);
28 static_assert(
P >= 0);
30}
◆ pow()
| int pow |
( |
int | base, |
|
|
int | exp ) |
|
constexprnoexcept |
◆ TEST() [1/15]
| TEST |
( |
ap_fixedTester | , |
|
|
addition | ) |
Definition at line 114 of file ap_fixedTest.cxx.
114 {
115
116 constexpr int width{10};
117 constexpr int prec{5};
118 const double eps {std::pow(2.0, -prec)};
120
121 ap ap_sum =
ap(1) +
ap(2);
122 auto val =
static_cast<double>(ap_sum);
123 auto diff = std::abs(val - 3);
124
125 EXPECT_EQ (3, val);
126 EXPECT_LT (
diff, eps);
127
128 ap_sum =
ap(1.5) +
ap(2.5);
129 val =
static_cast<double>(ap_sum);
130 diff = std::abs(val - 4);
131
132 EXPECT_EQ (4, val);
133 EXPECT_LT (
diff, eps);
134}
void diff(const Jet &rJet1, const Jet &rJet2, std::map< std::string, double > varDiff)
Difference between jets - Non-Class function required by trigger.
◆ TEST() [2/15]
| TEST |
( |
ap_fixedTester | , |
|
|
addition1 | ) |
Definition at line 136 of file ap_fixedTest.cxx.
136 {
137
138 constexpr int width{10};
139 constexpr int prec{5};
140 const double eps {std::pow(2.0, -prec)};
142
143 ap ap_sum =
ap(2) += 1;
144 auto val =
static_cast<double>(ap_sum);
145 auto diff = std::abs(val - 3);
146
147 EXPECT_EQ (3, val);
148 EXPECT_LT (
diff, eps);
149
150 ap_sum =
ap(1.5) += 2.5;
151 val =
static_cast<double>(ap_sum);
152 diff = std::abs(val - 4);
153
154 EXPECT_EQ (4, val);
155 EXPECT_LT (
diff, eps);
156}
◆ TEST() [3/15]
| TEST |
( |
ap_fixedTester | , |
|
|
division | ) |
Definition at line 249 of file ap_fixedTest.cxx.
249 {
250
251 constexpr int width{10};
252 constexpr int prec{5};
253 const double eps {std::pow(2.0, -prec)};
255
257 auto val =
static_cast<double>(ap_div);
258 auto diff = std::abs(val - 0.5);
259
260 EXPECT_EQ (0.5, val);
261 EXPECT_LT (
diff, eps);
262
263 ap_div =
ap(-1.5)/
ap(2);
264 val =
static_cast<double>(ap_div);
265 diff = std::abs(val + 0.75);
266
267 EXPECT_EQ (-0.75, val);
268 EXPECT_LT (
diff, eps);
269}
◆ TEST() [4/15]
| TEST |
( |
ap_fixedTester | , |
|
|
division1 | ) |
Definition at line 272 of file ap_fixedTest.cxx.
272 {
273
274 constexpr int width{10};
275 constexpr int prec{5};
276 const double eps {std::pow(2.0, -prec)};
278
280 auto val =
static_cast<double>(ap_div);
281 auto diff = std::abs(val - 0.5);
282
283 EXPECT_EQ (0.5, val);
284 EXPECT_LT (
diff, eps);
285
286 ap_div =
ap(-1.5)/
ap(2);
287 val =
static_cast<double>(ap_div);
288 diff = std::abs(val + 0.75);
289
290 EXPECT_EQ (-0.75, val);
291 EXPECT_LT (
diff, eps);
292}
◆ TEST() [5/15]
| TEST |
( |
ap_fixedTester | , |
|
|
doubleMult | ) |
Definition at line 314 of file ap_fixedTest.cxx.
314 {
315
316 constexpr int width{10};
317 constexpr int prec{5};
318
320 ap ap_mul = 9.99 *
ap(1);
321
322 EXPECT_EQ (10, static_cast<double>(ap_mul));
323}
◆ TEST() [6/15]
| TEST |
( |
ap_fixedTester | , |
|
|
minmax | ) |
Definition at line 39 of file ap_fixedTest.cxx.
39 {
40
43 EXPECT_EQ(-16, min_v);
44 EXPECT_EQ(15.96875, max_v);
45}
◆ TEST() [7/15]
| TEST |
( |
ap_fixedTester | , |
|
|
multiplication | ) |
Definition at line 205 of file ap_fixedTest.cxx.
205 {
206
207 constexpr int width{10};
208 constexpr int prec{5};
209 const double eps {std::pow(2.0, -prec)};
211
212 ap ap_prod =
ap(1) *
ap(2);
213 auto val =
static_cast<double>(ap_prod);
214 auto diff = std::abs(val - 2);
215
216 EXPECT_EQ (2, val);
217 EXPECT_LT (
diff, eps);
218
219 ap_prod =
ap(-1.5)*
ap(2);
220 val =
static_cast<double>(ap_prod);
221 diff = std::abs(val +3);
222
223 EXPECT_EQ (-3, val);
224 EXPECT_LT (
diff, eps);
225}
◆ TEST() [8/15]
| TEST |
( |
ap_fixedTester | , |
|
|
multiplication1 | ) |
Definition at line 227 of file ap_fixedTest.cxx.
227 {
228 constexpr int width{10};
229 constexpr int prec{5};
230 const double eps {std::pow(2.0, -prec)};
232
233 ap ap_prod =
ap(1) *=
ap(2);
234 auto val =
static_cast<double>(ap_prod);
235 auto diff = std::abs(val - 2);
236
237 EXPECT_EQ (2, val);
238 EXPECT_LT (
diff, eps);
239
240 ap_prod =
ap(-1.5) *=
ap(2.);
241 val =
static_cast<double>(ap_prod);
242 diff = std::abs(val +3);
243
244 EXPECT_EQ (-3, val);
245 EXPECT_LT (
diff, eps);
246}
◆ TEST() [9/15]
| TEST |
( |
ap_fixedTester | , |
|
|
negation | ) |
Definition at line 295 of file ap_fixedTest.cxx.
295 {
296
297 constexpr int width{10};
298 constexpr int prec{5};
299
301
303 auto ap_n = -ap_p;
304 auto ap_pp = -ap_n;
305
306 auto val_p = static_cast<double>(ap_p);
307 auto val_n =
static_cast<double>(ap_n);
308 auto val_pp = static_cast<double>(ap_pp);
309
310 EXPECT_EQ (val_p, -val_n);
311 EXPECT_EQ (val_p, val_pp);
312}
◆ TEST() [10/15]
| TEST |
( |
ap_fixedTester | , |
|
|
overflow_h | ) |
EXPECT does not take templates, provide a new typename
Definition at line 90 of file ap_fixedTest.cxx.
90 {
91 constexpr int width{10};
92 constexpr int prec{5};
93
96
98
99 EXPECT_THROW ((
ap(outOfRange)), std::out_of_range);
100}
◆ TEST() [11/15]
| TEST |
( |
ap_fixedTester | , |
|
|
overflow_l | ) |
Definition at line 102 of file ap_fixedTest.cxx.
102 {
103 constexpr int width{10};
104 constexpr int prec{5};
105
106
109
110 EXPECT_THROW ((
ap(outOfRange)), std::out_of_range);
111}
◆ TEST() [12/15]
| TEST |
( |
ap_fixedTester | , |
|
|
specialValue | ) |
Definition at line 78 of file ap_fixedTest.cxx.
78 {
79
80
82 EXPECT_EQ (-0.3125, static_cast<double>(apf));
84 ss << std::hex << apf.m_value;
85 EXPECT_EQ (
"fff6",
ss.str());
86}
◆ TEST() [13/15]
| TEST |
( |
ap_fixedTester | , |
|
|
stablity | ) |
Definition at line 47 of file ap_fixedTest.cxx.
47 {
48
49
50 constexpr int width{10};
51 constexpr int prec{5};
52 double delta =
pow(2, -prec-1);
53
57
59
60 while (cval <= max_val) {
61
63 double d0 =
static_cast<double>(ap_gs0);
65 double d1 =
static_cast<double>(ap_gs1);
67 double d2 =
static_cast<double>(ap_gs2);
68
69 EXPECT_EQ (d2, d0);
70 EXPECT_EQ (ap_gs0.m_value, ap_gs2.m_value);
71 EXPECT_LT (std::abs(d0 -cval), 1./(2*2*2*2*2));
72
73
74 cval = -
val + ((++
i) * delta);
75 }
76}
◆ TEST() [14/15]
| TEST |
( |
ap_fixedTester | , |
|
|
subtraction | ) |
Definition at line 159 of file ap_fixedTest.cxx.
159 {
160
161 constexpr int width{10};
162 constexpr int prec{5};
163 const double eps {std::pow(2.0, -prec)};
165
166 ap ap_diff =
ap(1) -
ap(2);
167 auto val =
static_cast<double>(ap_diff);
168 auto diff = std::abs(val + 1);
169
170 EXPECT_EQ (-1, val);
171 EXPECT_LT (
diff, eps);
172
173 ap_diff =
ap(1.5) -
ap(2.5);
174 val =
static_cast<double>(ap_diff);
175 diff = std::abs(val + 1);
176
177 EXPECT_EQ (-1, val);
178 EXPECT_LT (
diff, eps);
179}
◆ TEST() [15/15]
| TEST |
( |
ap_fixedTester | , |
|
|
subtraction1 | ) |
Definition at line 181 of file ap_fixedTest.cxx.
181 {
182
183 constexpr int width{10};
184 constexpr int prec{5};
185 const double eps {std::pow(2.0, -prec)};
187
188 ap ap_diff =
ap(1) -= 2;
189 auto val =
static_cast<double>(ap_diff);
190 auto diff = std::abs(val + 1);
191
192 EXPECT_EQ (-1, val);
193 EXPECT_LT (
diff, eps);
194
195 ap_diff =
ap(1.5) -= 2.5;
196 val =
static_cast<double>(ap_diff);
197 diff = std::abs(val + 1);
198
199 EXPECT_EQ (-1, val);
200 EXPECT_LT (
diff, eps);
201}
◆ ATLAS_NO_CHECK_FILE_THREAD_SAFETY
| ATLAS_NO_CHECK_FILE_THREAD_SAFETY |