30 #ifndef FADUNITTESTS_HPP 31 #define FADUNITTESTS_HPP 46 template <
typename FadType>
79 for (
int i=0;
i<
n;
i++) {
96 template <
typename ScalarT>
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); \ 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_;
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_;
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_;
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_;
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
FAD::Fad< ScalarType > c_fad_
REGISTER_TYPED_TEST_SUITE_P(FadOpsUnitTest, testAddition, testSubtraction, testMultiplication, testDivision, testEquals, testNotEquals, testLessThanOrEquals, testGreaterThanOrEquals, testLessThan, testGreaterThan, testPow, testUnaryPlus, testUnaryMinus, testExp, testLog, testLog10, testSqrt, testCos, testSin, testTan, testACos, testASin, testATan, testCosh, testSinh, testTanh, testAbs, testFAbs, testPlusEquals, testMinusEquals, testTimesEquals, testDivideEquals, testMax, testMin, testComposite1, testPlusLR, testMinusLR, testTimesLR, testDivideLR, testPowConstB)
TYPED_TEST_SUITE_P(FadOpsUnitTest)
#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_P(FadOpsUnitTest, testMax)
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.