30 #ifndef TAYLORUNITTESTS_HPP
31 #define TAYLORUNITTESTS_HPP
34 #include "adolc/adouble.h"
35 #include "adolc/interfaces.h"
36 #include "adolc/taping.h"
42 inline adouble
max(
const adouble&
a,
const adouble& b) {
return fmax(a,b); }
43 inline adouble
max(
const adouble&
a,
double v) {
return fmax(a,v); }
44 inline adouble
max(
double v,
const adouble& b) {
return fmax(v,b); }
45 inline adouble
min(
const adouble&
a,
const adouble& b) {
return fmin(a,b); }
46 inline adouble
min(
const adouble&
a,
double v) {
return fmin(a,v); }
47 inline adouble
min(
double v,
const adouble& b) {
return fmin(v,b); }
54 #define COMPARE_POLYS(x_dtay, x_adolc) \
55 ASSERT_TRUE(x_dtay.degree() == d); \
56 for (int i=0; i<=d; i++) { \
57 COMPARE_VALUES(x_dtay.coeff(i), x_adolc[i]); \
61 #define COMPARE_TAYS(x_dtay, y_dtay) \
62 ASSERT_TRUE(x_dtay.degree() == y_dtay.degree()); \
63 for (int i=0; i<=x_dtay.degree(); i++) { \
64 COMPARE_VALUES(x_dtay.coeff(i), y_dtay.coeff(i)); \
69 template <
class TaylorType>
92 X_[0] =
new double[
d_+1];
93 X_[1] =
new double[
d_+1];
96 Y_[0] =
new double[
d_+1];
115 for (
int i=0;
i<=
d_;
i++) {
130 template <
typename ScalarT>
132 ScalarT t1 = 3. * a +
sin(b) /
log(
fabs(a - b * 7.));
138 t1 /=
cosh(b - 0.7) + 7.*
sinh(t1 + 0.8)*
tanh(9./(a+1.)) - 9.;
173 template <
typename TaylorType>
183 #define BINARY_OP2_TEST(FIXTURENAME,TESTNAME,OP) \
184 TYPED_TEST_P(FIXTURENAME, TESTNAME) { \
185 auto a_dtay = this->a_dtay_; \
186 auto b_dtay = this->b_dtay_; \
187 auto c_dtay = this->c_dtay_; \
191 c_dtay = a_dtay OP b_dtay; \
193 adouble aa, ab, ac; \
199 forward(0,1,2,d,0,X,Y); \
200 COMPARE_POLYS(c_dtay,Y[0]); \
203 #define BINARY_OPRC_TEST(FIXTURENAME,TESTNAME,OP) \
204 TYPED_TEST_P(FIXTURENAME, TESTNAME) { \
205 auto a_dtay = this->a_dtay_; \
206 auto c_dtay = this->c_dtay_; \
210 double val = this->urand.number(); \
211 c_dtay = a_dtay OP val; \
218 forward(0,1,1,d,0,X,Y); \
219 COMPARE_POLYS(c_dtay,Y[0]); \
222 #define BINARY_OPLC_TEST(FIXTURENAME,TESTNAME,OP) \
223 TYPED_TEST_P(FIXTURENAME, TESTNAME) { \
224 auto a_dtay = this->a_dtay_; \
225 auto c_dtay = this->c_dtay_; \
229 double val = this->urand.number(); \
230 c_dtay = val OP a_dtay; \
237 forward(0,1,1,d,0,X,Y); \
238 COMPARE_POLYS(c_dtay,Y[0]); \
241 #define BINARY_OP_TEST(FIXTURENAME,TESTNAME,OP) \
242 BINARY_OP2_TEST(FIXTURENAME,TESTNAME,OP) \
243 BINARY_OPLC_TEST(FIXTURENAME,TESTNAME ## LeftConstant,OP) \
244 BINARY_OPRC_TEST(FIXTURENAME,TESTNAME ## RightConstant,OP)
246 #define RELOP_OP2_TEST(FIXTURENAME,TESTNAME,OP) \
247 TYPED_TEST_P(FIXTURENAME, TESTNAME) { \
248 auto a_dtay = this->a_dtay_; \
249 auto b_dtay = this->b_dtay_; \
250 bool r1 = a_dtay OP b_dtay; \
251 bool r2 = a_dtay.coeff(0) OP b_dtay.coeff(0); \
252 ASSERT_TRUE(r1 == r2); \
255 #define RELOP_OPLC_TEST(FIXTURENAME,TESTNAME,OP) \
256 TYPED_TEST_P(FIXTURENAME, TESTNAME) { \
257 auto b_dtay = this->b_dtay_; \
258 double val = this->urand.number(); \
259 bool r1 = val OP b_dtay; \
260 bool r2 = val OP b_dtay.coeff(0); \
261 ASSERT_TRUE(r1 == r2); \
264 #define RELOP_OPRC_TEST(FIXTURENAME,TESTNAME,OP) \
265 TYPED_TEST_P(FIXTURENAME, TESTNAME) { \
266 auto a_dtay = this->b_dtay_; \
267 double val = this->urand.number(); \
268 bool r1 = a_dtay OP val; \
269 bool r2 = a_dtay.coeff(0) OP val; \
270 ASSERT_TRUE(r1 == r2); \
273 #define RELOP_OP_TEST(FIXTURENAME,TESTNAME,OP) \
274 RELOP_OP2_TEST(FIXTURENAME,TESTNAME,OP) \
275 RELOP_OPLC_TEST(FIXTURENAME,TESTNAME ## LeftConstant,OP) \
276 RELOP_OPRC_TEST(FIXTURENAME,TESTNAME ## RightConstant,OP)
278 #define BINARY_FUNC2_TEST(FIXTURENAME,TESTNAME,FUNC) \
279 TYPED_TEST_P(FIXTURENAME, TESTNAME) { \
280 auto a_dtay = this->a_dtay_; \
281 auto b_dtay = this->b_dtay_; \
282 auto c_dtay = this->c_dtay_; \
286 c_dtay = FUNC (a_dtay, b_dtay); \
288 adouble aa, ab, ac; \
291 ac = FUNC (aa, ab); \
294 forward(0,1,2,d,0,X,Y); \
295 COMPARE_POLYS(c_dtay,Y[0]); \
298 #define BINARY_FUNCRC_TEST(FIXTURENAME,TESTNAME,FUNC) \
299 TYPED_TEST_P(FIXTURENAME, TESTNAME) { \
300 auto a_dtay = this->a_dtay_; \
301 auto c_dtay = this->c_dtay_; \
305 double val = this->urand.number(); \
306 c_dtay = FUNC (a_dtay, val); \
310 ac = FUNC (aa, val); \
313 forward(0,1,1,d,0,X,Y); \
314 COMPARE_POLYS(c_dtay,Y[0]); \
317 #define BINARY_FUNCLC_TEST(FIXTURENAME,TESTNAME,FUNC) \
318 TYPED_TEST_P(FIXTURENAME, TESTNAME) { \
319 auto a_dtay = this->a_dtay_; \
320 auto c_dtay = this->c_dtay_; \
324 double val = this->urand.number(); \
325 c_dtay = FUNC (val, a_dtay); \
329 ac = FUNC (val, aa); \
332 forward(0,1,1,d,0,X,Y); \
333 COMPARE_POLYS(c_dtay,Y[0]); \
336 #define BINARY_FUNC_TEST(FIXTURENAME,TESTNAME,FUNC) \
337 BINARY_FUNC2_TEST(FIXTURENAME,TESTNAME,FUNC) \
338 BINARY_FUNCLC_TEST(FIXTURENAME,TESTNAME ## LeftConstant,FUNC) \
339 BINARY_FUNCRC_TEST(FIXTURENAME,TESTNAME ## RightConstant,FUNC)
341 #define UNARY_OP_TEST(FIXTURENAME,TESTNAME,OP) \
342 TYPED_TEST_P(FIXTURENAME, TESTNAME) { \
343 auto a_dtay = this->a_dtay_; \
344 auto c_dtay = this->c_dtay_; \
348 c_dtay = OP a_dtay; \
355 forward(0,1,1,d,0,X,Y); \
356 COMPARE_POLYS(c_dtay,Y[0]); \
359 #define UNARY_FUNC_TEST(FIXTURENAME,TESTNAME,FUNC) \
360 TYPED_TEST_P(FIXTURENAME, TESTNAME) { \
361 auto a_dtay = this->a_dtay_; \
362 auto c_dtay = this->c_dtay_; \
366 c_dtay = FUNC (a_dtay); \
373 forward(0,1,1,d,0,X,Y); \
374 COMPARE_POLYS(c_dtay,Y[0]); \
377 #define UNARY_ASSIGNOP2_TEST(FIXTURENAME,TESTNAME,OP) \
378 TYPED_TEST_P(FIXTURENAME, TESTNAME) { \
379 auto a_dtay = this->a_dtay_; \
380 auto b_dtay = this->b_dtay_; \
381 auto c_dtay = this->c_dtay_; \
388 adouble aa, ab, ac; \
395 forward(0,1,2,d,0,X,Y); \
396 COMPARE_POLYS(c_dtay,Y[0]); \
399 #define UNARY_ASSIGNOPRC_TEST(FIXTURENAME,TESTNAME,OP) \
400 TYPED_TEST_P(FIXTURENAME, TESTNAME) { \
401 auto a_dtay = this->a_dtay_; \
402 auto c_dtay = this->c_dtay_; \
406 double val = this->urand.number(); \
416 forward(0,1,1,d,0,X,Y); \
417 COMPARE_POLYS(c_dtay,Y[0]); \
420 #define UNARY_ASSIGNOPLC_TEST(FIXTURENAME,TESTNAME,OP) \
421 TYPED_TEST_P(FIXTURENAME, TESTNAME) { \
422 auto a_dtay = this->a_dtay_; \
423 auto c_dtay = this->c_dtay_; \
427 double val = this->urand.number(); \
437 forward(0,1,1,d,0,X,Y); \
438 COMPARE_POLYS(c_dtay,Y[0]); \
441 #define UNARY_ASSIGNOP_TEST(FIXTURENAME,TESTNAME,OP) \
442 UNARY_ASSIGNOP2_TEST(FIXTURENAME,TESTNAME,OP) \
443 UNARY_ASSIGNOPLC_TEST(FIXTURENAME,TESTNAME ## LeftConstant,OP) \
444 UNARY_ASSIGNOPRC_TEST(FIXTURENAME,TESTNAME ## RightConstant,OP)
454 RELOP_OP_TEST(TaylorOpsUnitTest, testGreaterThanOrEquals, >=)
484 auto a_dtay = this->a_dtay_;
485 auto b_dtay = this->b_dtay_;
486 auto c_dtay = this->c_dtay_;
490 c_dtay = this->composite1(a_dtay, b_dtay);
495 ac = this->composite1(aa,ab);
498 forward(0,1,2,d,0,X,Y);
504 auto a_dtay = this->a_dtay_;
506 TaylorType a_diff1 =
diff(a_dtay);
507 TaylorType a_diff2(d-1, 0.0);
508 for (
int i=1;
i<=d; ++
i)
515 auto a_dtay = this->a_dtay_;
516 TaylorType a_diff1 =
diff(a_dtay, 3);
524 testAdditionLeftConstant,
525 testAdditionRightConstant,
527 testSubtractionLeftConstant,
528 testSubtractionRightConstant,
530 testMultiplicationLeftConstant,
531 testMultiplicationRightConstant,
533 testDivisionLeftConstant,
534 testDivisionRightConstant,
536 testEqualsLeftConstant,
537 testEqualsRightConstant,
539 testNotEqualsLeftConstant,
540 testNotEqualsRightConstant,
541 testLessThanOrEquals,
542 testLessThanOrEqualsLeftConstant,
543 testLessThanOrEqualsRightConstant,
544 testGreaterThanOrEquals,
545 testGreaterThanOrEqualsLeftConstant,
546 testGreaterThanOrEqualsRightConstant,
548 testLessThanLeftConstant,
549 testLessThanRightConstant,
551 testGreaterThanLeftConstant,
552 testGreaterThanRightConstant,
570 testPlusEqualsLeftConstant,
571 testPlusEqualsRightConstant,
573 testMinusEqualsLeftConstant,
574 testMinusEqualsRightConstant,
576 testTimesEqualsLeftConstant,
577 testTimesEqualsRightConstant,
579 testDivideEqualsLeftConstant,
580 testDivideEqualsRightConstant,
583 testPowRightConstant,
592 TaylorMaxMinUnitTest,
595 testMaxRightConstant,
598 testMinRightConstant);
600 #endif // TAYLORUNITTESTS_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)
TYPED_TEST_P(FadBLASUnitTests, testSCAL1)
#define RELOP_OP_TEST(FIXTURENAME, TESTNAME, OP)
Sacado::Random< double > urand
#define COMPARE_TAYS(x_dtay, y_dtay)
ScalarT number()
Get random number.
Sacado::Tay::Taylor< double > TaylorType
#define UNARY_OP_TEST(FIXTURENAME, TESTNAME, OP)
ScalarT composite1(const ScalarT &a, const ScalarT &b)
CacheTaylor< T > diff(const CacheTaylor< T > &x, int n=1)
Compute Taylor series of n-th derivative of x.
T & fastAccessCoeff(int i)
Returns degree i term without bounds checking.
SimpleFad< ValueT > min(const SimpleFad< ValueT > &a, const SimpleFad< ValueT > &b)
#define UNARY_ASSIGNOP_TEST(FIXTURENAME, TESTNAME, OP)
#define COMPARE_POLYS(x_dtay, x_adolc)
#define BINARY_FUNC_TEST(FIXTURENAME, TESTNAME, FUNC)
#define BINARY_OP_TEST(FIXTURENAME, TESTNAME, OP)
TYPED_TEST_SUITE_P(FadBLASUnitTests)
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)
#define UNARY_FUNC_TEST(FIXTURENAME, TESTNAME, FUNC)