30 #ifndef FADUNITTESTS_HPP
31 #define FADUNITTESTS_HPP
46 template <
typename FadType>
79 for (
int i=0;
i<
n;
i++) {
96 template <
typename ScalarT>
98 ScalarT t1 = 3. * a +
sin(b) /
log(
fabs(a - b * 7.));
104 t1 /=
cosh(b - 0.7) + 7.*
sinh(t1 + 0.8)*
tanh(9./a) - 9.;
114 #define BINARY_OP_TEST(FIXTURENAME,TESTNAME,OP) \
115 TYPED_TEST_P(FIXTURENAME, TESTNAME) { \
116 auto a_dfad = this->a_dfad_; \
117 auto b_dfad = this->b_dfad_; \
118 auto c_dfad = this->c_dfad_; \
119 auto a_fad = this->a_fad_; \
120 auto b_fad = this->b_fad_; \
121 auto c_fad = this->c_fad_; \
122 c_dfad = a_dfad OP b_dfad; \
123 c_fad = a_fad OP b_fad; \
124 COMPARE_FADS(c_dfad, c_fad); \
126 double val = this->urand.number(); \
127 c_dfad = a_dfad OP val; \
128 c_fad = a_fad OP val; \
129 COMPARE_FADS(c_dfad, c_fad); \
131 c_dfad = val OP b_dfad; \
132 c_fad = val OP b_fad; \
133 COMPARE_FADS(c_dfad, c_fad); \
136 #define RELOP_TEST(FIXTURENAME,TESTNAME,OP) \
137 TYPED_TEST_P(FIXTURENAME, TESTNAME) { \
138 auto a_dfad = this->a_dfad_; \
139 auto b_dfad = this->b_dfad_; \
140 auto a_fad = this->a_fad_; \
141 auto b_fad = this->b_fad_; \
142 bool r1 = a_dfad OP b_dfad; \
143 bool r2 = a_fad OP b_fad; \
144 ASSERT_TRUE(r1 == r2); \
146 double val = this->urand.number(); \
147 r1 = a_dfad OP val; \
149 ASSERT_TRUE(r1 == r2); \
151 r1 = val OP b_dfad; \
153 ASSERT_TRUE(r1 == r2); \
156 #define BINARY_FUNC_TEST(FIXTURENAME,TESTNAME,FUNC) \
157 TYPED_TEST_P(FIXTURENAME, TESTNAME) { \
158 auto a_dfad = this->a_dfad_; \
159 auto b_dfad = this->b_dfad_; \
160 auto c_dfad = this->c_dfad_; \
161 auto a_fad = this->a_fad_; \
162 auto b_fad = this->b_fad_; \
163 auto c_fad = this->c_fad_; \
164 c_dfad = FUNC (a_dfad,b_dfad); \
165 c_fad = FUNC (a_fad,b_fad); \
166 COMPARE_FADS(c_dfad, c_fad); \
168 double val = this->urand.number(); \
169 c_dfad = FUNC (a_dfad,val); \
170 c_fad = FUNC (a_fad,val); \
171 COMPARE_FADS(c_dfad, c_fad); \
173 c_dfad = FUNC (val,b_dfad); \
174 c_fad = FUNC (val,b_fad); \
175 COMPARE_FADS(c_dfad, c_fad); \
178 #define UNARY_OP_TEST(FIXTURENAME,TESTNAME,OP) \
179 TYPED_TEST_P(FIXTURENAME, TESTNAME) { \
180 auto a_dfad = this->a_dfad_; \
181 auto c_dfad = this->c_dfad_; \
182 auto a_fad = this->a_fad_; \
183 auto c_fad = this->c_fad_; \
184 c_dfad = OP a_dfad; \
186 COMPARE_FADS(c_dfad, c_fad); \
189 #define UNARY_FUNC_TEST(FIXTURENAME,TESTNAME,FUNC) \
190 TYPED_TEST_P(FIXTURENAME, TESTNAME) { \
191 auto a_dfad = this->a_dfad_; \
192 auto c_dfad = this->c_dfad_; \
193 auto a_fad = this->a_fad_; \
194 auto c_fad = this->c_fad_; \
195 c_dfad = FUNC (a_dfad); \
196 c_fad = FUNC (a_fad); \
197 COMPARE_FADS(c_dfad, c_fad); \
200 #define UNARY_ASSIGNOP_TEST(FIXTURENAME,TESTNAME,OP) \
201 TYPED_TEST_P(FIXTURENAME, TESTNAME){ \
202 auto a_dfad = this->a_dfad_; \
203 auto b_dfad = this->b_dfad_; \
204 auto c_dfad = this->c_dfad_; \
205 auto a_fad = this->a_fad_; \
206 auto b_fad = this->b_fad_; \
207 auto c_fad = this->c_fad_; \
212 COMPARE_FADS(c_dfad, c_fad); \
214 double val = this->urand.number(); \
217 COMPARE_FADS(c_dfad, c_fad); \
227 RELOP_TEST(FadOpsUnitTest, testLessThanOrEquals, <=)
228 RELOP_TEST(FadOpsUnitTest, testGreaterThanOrEquals, >=)
230 RELOP_TEST(FadOpsUnitTest, testGreaterThan, >)
259 typedef decltype(this->a_dfad_)
FadType;
264 auto a_dfad = this->a_dfad_;
265 auto b_dfad = this->b_dfad_;
266 auto c_dfad = this->c_dfad_;
267 auto a_fad = this->a_fad_;
268 auto b_fad = this->b_fad_;
269 auto c_fad = this->c_fad_;
271 FadType aa_dfad = a_dfad + 1.0;
272 c_dfad =
max(aa_dfad, a_dfad);
274 for (
int i=0;
i<this->
n;
i++) {
279 c_dfad =
max(a_dfad, aa_dfad);
281 for (
int i=0;
i<this->n;
i++) {
286 c_dfad =
max(a_dfad+1.0, a_dfad);
288 for (
int i=0;
i<this->n;
i++) {
293 c_dfad =
max(a_dfad, a_dfad+1.0);
295 for (
int i=0;
i<this->n;
i++) {
300 val = a_dfad.val() + 1;
301 c_dfad =
max(a_dfad, val);
303 for (
int i=0;
i<this->n;
i++)
306 val = a_dfad.val() - 1;
307 c_dfad =
max(a_dfad, val);
309 for (
int i=0;
i<this->n;
i++) {
314 val = b_dfad.val() + 1;
315 c_dfad =
max(val, b_dfad);
317 for (
int i=0;
i<this->n;
i++)
320 val = b_dfad.val() - 1;
321 c_dfad =
max(val, b_dfad);
323 for (
int i=0;
i<this->n;
i++) {
330 typedef decltype(this->a_dfad_)
FadType;
335 auto a_dfad = this->a_dfad_;
336 auto b_dfad = this->b_dfad_;
337 auto c_dfad = this->c_dfad_;
338 auto a_fad = this->a_fad_;
339 auto b_fad = this->b_fad_;
340 auto c_fad = this->c_fad_;
342 FadType aa_dfad = a_dfad - 1.0;
343 c_dfad =
min(aa_dfad, a_dfad);
345 for (
int i=0;
i<this->
n;
i++) {
350 c_dfad =
min(a_dfad, aa_dfad);
352 for (
int i=0;
i<this->n;
i++) {
357 val = a_dfad.val() - 1;
358 c_dfad =
min(a_dfad, val);
360 for (
int i=0;
i<this->n;
i++)
363 val = a_dfad.val() + 1;
364 c_dfad =
min(a_dfad, val);
366 for (
int i=0;
i<this->n;
i++) {
371 val = b_dfad.val() - 1;
372 c_dfad =
min(val, b_dfad);
374 for (
int i=0;
i<this->n;
i++)
377 val = b_dfad.val() + 1;
378 c_dfad =
min(val, b_dfad);
380 for (
int i=0;
i<this->n;
i++) {
387 auto a_dfad = this->a_dfad_;
388 auto b_dfad = this->b_dfad_;
389 auto c_dfad = this->c_dfad_;
390 auto a_fad = this->a_fad_;
391 auto b_fad = this->b_fad_;
392 auto c_fad = this->c_fad_;
394 c_dfad = this->composite1(a_dfad, b_dfad);
395 c_fad = this->composite1(a_fad, b_fad);
400 typedef decltype(this->a_dfad_)
FadType;
403 auto a_dfad = this->a_dfad_;
404 auto b_dfad = this->b_dfad_;
405 auto a_fad = this->a_fad_;
406 auto b_fad = this->b_fad_;
408 FadType aa_dfad = a_dfad;
409 FAD::Fad<ScalarType> aa_fad = a_fad;
412 aa_dfad = aa_dfad + b_dfad;
413 aa_fad = aa_fad + b_fad;
418 typedef decltype(this->a_dfad_)
FadType;
421 auto a_dfad = this->a_dfad_;
422 auto b_dfad = this->b_dfad_;
423 auto a_fad = this->a_fad_;
424 auto b_fad = this->b_fad_;
426 FadType aa_dfad = a_dfad;
427 FAD::Fad<ScalarType> aa_fad = a_fad;
430 aa_dfad = aa_dfad - b_dfad;
431 aa_fad = aa_fad - b_fad;
436 typedef decltype(this->a_dfad_)
FadType;
439 auto a_dfad = this->a_dfad_;
440 auto b_dfad = this->b_dfad_;
441 auto a_fad = this->a_fad_;
442 auto b_fad = this->b_fad_;
444 FadType aa_dfad = a_dfad;
445 FAD::Fad<ScalarType> aa_fad = a_fad;
448 aa_dfad = aa_dfad * b_dfad;
449 aa_fad = aa_fad * b_fad;
454 typedef decltype(this->a_dfad_)
FadType;
457 auto a_dfad = this->a_dfad_;
458 auto b_dfad = this->b_dfad_;
459 auto a_fad = this->a_fad_;
460 auto b_fad = this->b_fad_;
462 FadType aa_dfad = a_dfad;
463 FAD::Fad<ScalarType> aa_fad = a_fad;
466 aa_dfad = aa_dfad / b_dfad;
467 aa_fad = aa_fad / b_fad;
473 typedef decltype(this->a_dfad_)
FadType;
479 for (
int i=0;
i<this->
n; ++
i)
480 a.fastAccessDx(
i) = this->urand.number();
484 for (
int i=0;
i<this->n; ++
i)
485 cc.fastAccessDx(
i) = b.val()*
pow(a.val(),b.val()-1)*a.dx(
i);
496 for (
int i=0;
i<this->n; ++
i)
497 cc.fastAccessDx(
i) = 0.0;
509 for (
int i=0;
i<this->n; ++
i)
510 cc.fastAccessDx(
i) = 0.0;
521 for (
int i=0;
i<this->n; ++
i)
522 cc.fastAccessDx(
i) = 0.0;
558 testLessThanOrEquals,
559 testGreaterThanOrEquals,
593 #endif // FADUNITTESTS_HPP
REGISTER_TYPED_TEST_SUITE_P(FadBLASUnitTests, testSCAL1, testSCAL2, testSCAL3, testSCAL4, testCOPY1, testCOPY2, testCOPY3, testCOPY4, testAXPY1, testAXPY2, testAXPY3, testAXPY4, testDOT1, testDOT2, testDOT3, testDOT4, testNRM21, testNRM22, testGEMV1, testGEMV2, testGEMV3, testGEMV4, testGEMV5, testGEMV6, testGEMV7, testGEMV8, testGEMV9, testTRMV1, testTRMV2, testTRMV3, testTRMV4, testGER1, testGER2, testGER3, testGER4, testGER5, testGER6, testGER7, testGEMM1, testGEMM2, testGEMM3, testGEMM4, testGEMM5, testGEMM6, testGEMM7, testGEMM8, testGEMM9, testGEMM10, testSYMM1, testSYMM2, testSYMM3, testSYMM4, testSYMM5, testSYMM6, testSYMM7, testSYMM8, testSYMM9, testTRMM1, testTRMM2, testTRMM3, testTRMM4, testTRMM5, testTRMM6, testTRMM7, testTRSM1, testTRSM2, testTRSM3, testTRSM4, testTRSM5, testTRSM6, testTRSM7)
FAD::Fad< ScalarType > c_fad_
TYPED_TEST_P(FadBLASUnitTests, testSCAL1)
#define COMPARE_VALUES(a, b)
Sacado::Fad::DFad< double > FadType
#define UNARY_OP_TEST(FIXTURENAME, TESTNAME, OP)
#define BINARY_OP_TEST(FIXTURENAME, TESTNAME, OP)
expr expr1 expr1 expr1 c expr2 expr1 expr2 expr1 expr2 expr1 expr1 expr1 expr1 c expr2 expr1 expr2 expr1 expr2 expr1 expr1 expr1 expr1 c *expr2 expr1 expr2 expr1 expr2 expr1 expr1 expr1 expr1 c expr2 expr1 expr2 expr1 expr2 expr1 expr1 expr1 expr2 expr1 expr2 expr1 expr1 expr1 expr2 expr1 expr2 expr1 expr1 expr1 c
#define UNARY_ASSIGNOP_TEST(FIXTURENAME, TESTNAME, OP)
SimpleFad< ValueT > min(const SimpleFad< ValueT > &a, const SimpleFad< ValueT > &b)
Sacado::Random< ScalarType > urand
#define BINARY_FUNC_TEST(FIXTURENAME, TESTNAME, FUNC)
Sacado::ScalarType< FadType >::type ScalarType
#define UNARY_FUNC_TEST(FIXTURENAME, TESTNAME, FUNC)
ScalarT composite1(const ScalarT &a, const ScalarT &b)
TYPED_TEST_SUITE_P(FadBLASUnitTests)
FAD::Fad< ScalarType > a_fad_
SimpleFad< ValueT > max(const SimpleFad< ValueT > &a, const SimpleFad< ValueT > &b)
SACADO_INLINE_FUNCTION mpl::enable_if_c< ExprLevel< Expr< T1 > >::value==ExprLevel< Expr< T2 > >::value, Expr< PowerOp< Expr< T1 >, Expr< T2 > > > >::type pow(const Expr< T1 > &expr1, const Expr< T2 > &expr2)
A random number generator that generates random numbers uniformly distributed in the interval (a...
#define COMPARE_FADS(a, b)
FAD::Fad< ScalarType > b_fad_
#define RELOP_TEST(FIXTURENAME, TESTNAME, OP)
Base template specification for testing whether type is statically sized.