77 for (
int i=0;
i<
n;
i++) {
80 a_ls.fastAccessDx(
i) = 1;
84 b_ls.fastAccessDx(
i) = 1;
96 ASSERT_TRUE(x_dfad.hasFastAccess() == x_ls.hasFastAccess());
101 for (
int i=0;
i<x_ls.size();
i++) {
107 compareDx(x_dfad.fastAccessDx(
i), x_ls.fastAccessDx(
i));
126 template <
typename ScalarT>
128 ScalarT t1 = 3. * a +
sin(b) /
log(
fabs(a - b * 7.));
134 t1 /=
cosh(b - 0.7) + 7.*
sinh(t1 + 0.8)*
tanh(9./a) - 9.;
142 #define BINARY_OP_TEST(TESTNAME,OP) \
143 TEST_F(LogicalSparseOpsUnitTest, TESTNAME) { \
144 c_dfad = a_dfad OP b_dfad; \
145 c_ls = a_ls OP b_ls; \
146 compareFads(c_dfad, c_ls); \
148 double val = urand.number(); \
149 c_dfad = a_dfad OP val; \
150 c_ls = a_ls OP val; \
151 compareFads(c_dfad, c_ls); \
153 c_dfad = val OP b_dfad; \
154 c_ls = val OP b_ls; \
155 compareFads(c_dfad, c_ls); \
158 #define RELOP_TEST(TESTNAME,OP) \
159 TEST_F(LogicalSparseOpsUnitTest, TESTNAME) { \
160 bool r1 = a_dfad OP b_dfad; \
161 bool r2 = a_ls OP b_ls; \
162 ASSERT_TRUE(r1 == r2); \
164 double val = urand.number(); \
165 r1 = a_dfad OP val; \
167 ASSERT_TRUE(r1 == r2); \
169 r1 = val OP b_dfad; \
171 ASSERT_TRUE(r1 == r2); \
174 #define BINARY_FUNC_TEST(TESTNAME,FUNC) \
175 TEST_F(LogicalSparseOpsUnitTest, TESTNAME) { \
176 c_dfad = FUNC (a_dfad,b_dfad); \
177 c_ls = FUNC (a_ls,b_ls); \
178 compareFads(c_dfad, c_ls); \
180 double val = urand.number(); \
181 c_dfad = FUNC (a_dfad,val); \
182 c_ls = FUNC (a_ls,val); \
183 compareFads(c_dfad, c_ls); \
185 c_dfad = FUNC (val,b_dfad); \
186 c_ls = FUNC (val,b_ls); \
187 compareFads(c_dfad, c_ls); \
190 #define UNARY_OP_TEST(TESTNAME,OP) \
191 TEST_F(LogicalSparseOpsUnitTest, TESTNAME) { \
192 c_dfad = OP a_dfad; \
194 compareFads(c_dfad, c_ls); \
197 #define UNARY_FUNC_TEST(TESTNAME,FUNC) \
198 TEST_F(LogicalSparseOpsUnitTest, TESTNAME) { \
199 c_dfad = FUNC (a_dfad); \
200 c_ls = FUNC (a_ls); \
201 compareFads(c_dfad, c_ls); \
204 #define UNARY_ASSIGNOP_TEST(TESTNAME,OP) \
205 TEST_F(LogicalSparseOpsUnitTest, TESTNAME) { \
208 compareFads(c_dfad, c_ls); \
210 double val = urand.number(); \
213 compareFads(c_dfad, c_ls); \
255 c_dfad = composite1(a_dfad, b_dfad);
256 c_ls = composite1(a_ls, b_ls);
257 compareFads(c_dfad, c_ls);
265 aa_dfad = aa_dfad + b_dfad;
266 aa_ls = aa_ls + b_ls;
267 compareFads(aa_dfad, aa_ls);
275 aa_dfad = aa_dfad - b_dfad;
276 aa_ls = aa_ls - b_ls;
277 compareFads(aa_dfad, aa_ls);
285 aa_dfad = aa_dfad * b_dfad;
286 aa_ls = aa_ls * b_ls;
287 compareFads(aa_dfad, aa_ls);
295 aa_dfad = aa_dfad / b_dfad;
296 aa_ls = aa_ls / b_ls;
297 compareFads(aa_dfad, aa_ls);
304 LSType aa_ls = a_ls + 1.0;
305 c_ls =
max(aa_ls, a_ls);
306 compareDoubles(c_ls.val(), aa_ls.val());
307 for (
int i=0;
i<
n;
i++) {
308 compareBools(c_ls.dx(
i), aa_ls.dx(
i));
309 compareBools(c_ls.fastAccessDx(
i), aa_ls.fastAccessDx(
i));
311 c_ls =
max(a_ls, aa_ls);
312 compareDoubles(c_ls.val(), aa_ls.val());
313 for (
int i=0;
i<n;
i++) {
314 compareBools(c_ls.dx(
i), aa_ls.dx(
i));
315 compareBools(c_ls.fastAccessDx(
i), aa_ls.fastAccessDx(
i));
319 c_ls =
max(a_ls+1.0, a_ls);
320 compareDoubles(c_ls.val(), aa_ls.val());
321 for (
int i=0;
i<n;
i++) {
322 compareBools(c_ls.dx(
i), aa_ls.dx(
i));
323 compareBools(c_ls.fastAccessDx(
i), aa_ls.fastAccessDx(
i));
325 c_ls =
max(a_ls, a_ls+1.0);
326 compareDoubles(c_ls.val(), aa_ls.val());
327 for (
int i=0;
i<n;
i++) {
328 compareBools(c_ls.dx(
i), aa_ls.dx(
i));
329 compareBools(c_ls.fastAccessDx(
i), aa_ls.fastAccessDx(
i));
333 c_ls =
max(a_ls+1.0, a_ls+1.0);
334 compareDoubles(c_ls.val(), aa_ls.val());
335 for (
int i=0;
i<n;
i++) {
336 compareBools(c_ls.dx(
i), aa_ls.dx(
i));
337 compareBools(c_ls.fastAccessDx(
i), aa_ls.fastAccessDx(
i));
341 c_ls =
max(a_ls+1.0, a_ls-1.0);
342 compareDoubles(c_ls.val(), aa_ls.val());
343 for (
int i=0;
i<n;
i++) {
344 compareBools(c_ls.dx(
i), aa_ls.dx(
i));
345 compareBools(c_ls.fastAccessDx(
i), aa_ls.fastAccessDx(
i));
347 c_ls =
max(a_ls-1.0, a_ls+1.0);
348 compareDoubles(c_ls.val(), aa_ls.val());
349 for (
int i=0;
i<n;
i++) {
350 compareBools(c_ls.dx(
i), aa_ls.dx(
i));
351 compareBools(c_ls.fastAccessDx(
i), aa_ls.fastAccessDx(
i));
355 val = a_ls.val() + 1;
356 c_ls =
max(a_ls, val);
357 compareDoubles(c_ls.val(),
val);
358 for (
int i=0;
i<n;
i++)
359 compareBools(c_ls.dx(
i), 0);
360 val = a_ls.val() - 1;
361 c_ls =
max(a_ls, val);
362 compareDoubles(c_ls.val(), a_ls.val());
363 for (
int i=0;
i<n;
i++) {
364 compareBools(c_ls.dx(
i), a_ls.dx(
i));
365 compareBools(c_ls.fastAccessDx(
i), a_ls.fastAccessDx(
i));
367 val = b_ls.val() + 1;
368 c_ls =
max(val, b_ls);
369 compareDoubles(c_ls.val(),
val);
370 for (
int i=0;
i<n;
i++)
371 compareBools(c_ls.dx(
i), 0);
372 val = b_ls.val() - 1;
373 c_ls =
max(val, b_ls);
374 compareDoubles(c_ls.val(), b_ls.val());
375 for (
int i=0;
i<n;
i++) {
376 compareBools(c_ls.dx(
i), b_ls.dx(
i));
377 compareBools(c_ls.fastAccessDx(
i), b_ls.fastAccessDx(
i));
382 c_ls =
max(a_ls+1.0, val);
383 compareDoubles(c_ls.val(), aa_ls.val());
384 for (
int i=0;
i<n;
i++) {
385 compareBools(c_ls.dx(
i), aa_ls.dx(
i));
386 compareBools(c_ls.fastAccessDx(
i), aa_ls.fastAccessDx(
i));
388 c_ls =
max(val, a_ls+1.0);
389 compareDoubles(c_ls.val(), aa_ls.val());
390 for (
int i=0;
i<n;
i++) {
391 compareBools(c_ls.dx(
i), aa_ls.dx(
i));
392 compareBools(c_ls.fastAccessDx(
i), aa_ls.fastAccessDx(
i));
400 LSType aa_ls = a_ls - 1.0;
401 c_ls =
min(aa_ls, a_ls);
402 compareDoubles(c_ls.val(), aa_ls.val());
403 for (
int i=0;
i<
n;
i++) {
404 compareBools(c_ls.dx(
i), aa_ls.dx(
i));
405 compareBools(c_ls.fastAccessDx(
i), aa_ls.fastAccessDx(
i));
407 c_ls =
min(a_ls, aa_ls);
408 compareDoubles(c_ls.val(), aa_ls.val());
409 for (
int i=0;
i<n;
i++) {
410 compareBools(c_ls.dx(
i), aa_ls.dx(
i));
411 compareBools(c_ls.fastAccessDx(
i), aa_ls.fastAccessDx(
i));
415 c_ls =
min(a_ls-1.0, a_ls);
416 compareDoubles(c_ls.val(), aa_ls.val());
417 for (
int i=0;
i<n;
i++) {
418 compareBools(c_ls.dx(
i), aa_ls.dx(
i));
419 compareBools(c_ls.fastAccessDx(
i), aa_ls.fastAccessDx(
i));
421 c_ls =
min(a_ls, a_ls-1.0);
422 compareDoubles(c_ls.val(), aa_ls.val());
423 for (
int i=0;
i<n;
i++) {
424 compareBools(c_ls.dx(
i), aa_ls.dx(
i));
425 compareBools(c_ls.fastAccessDx(
i), aa_ls.fastAccessDx(
i));
429 c_ls =
min(a_ls-1.0, a_ls-1.0);
430 compareDoubles(c_ls.val(), aa_ls.val());
431 for (
int i=0;
i<n;
i++) {
432 compareBools(c_ls.dx(
i), aa_ls.dx(
i));
433 compareBools(c_ls.fastAccessDx(
i), aa_ls.fastAccessDx(
i));
437 c_ls =
min(a_ls+1.0, a_ls-1.0);
438 compareDoubles(c_ls.val(), aa_ls.val());
439 for (
int i=0;
i<n;
i++) {
440 compareBools(c_ls.dx(
i), aa_ls.dx(
i));
441 compareBools(c_ls.fastAccessDx(
i), aa_ls.fastAccessDx(
i));
443 c_ls =
min(a_ls-1.0, a_ls+1.0);
444 compareDoubles(c_ls.val(), aa_ls.val());
445 for (
int i=0;
i<n;
i++) {
446 compareBools(c_ls.dx(
i), aa_ls.dx(
i));
447 compareBools(c_ls.fastAccessDx(
i), aa_ls.fastAccessDx(
i));
451 val = a_ls.val() - 1;
452 c_ls =
min(a_ls, val);
453 compareDoubles(c_ls.val(),
val);
454 for (
int i=0;
i<n;
i++)
455 compareBools(c_ls.dx(
i), 0);
456 val = a_ls.val() + 1;
457 c_ls =
min(a_ls, val);
458 compareDoubles(c_ls.val(), a_ls.val());
459 for (
int i=0;
i<n;
i++) {
460 compareBools(c_ls.dx(
i), a_ls.dx(
i));
461 compareBools(c_ls.fastAccessDx(
i), a_ls.fastAccessDx(
i));
463 val = b_ls.val() - 1;
464 c_ls =
min(val, b_ls);
465 compareDoubles(c_ls.val(),
val);
466 for (
int i=0;
i<n;
i++)
467 compareBools(c_ls.dx(
i), 0);
468 val = b_ls.val() + 1;
469 c_ls =
min(val, b_ls);
470 compareDoubles(c_ls.val(), b_ls.val());
471 for (
int i=0;
i<n;
i++) {
472 compareBools(c_ls.dx(
i), b_ls.dx(
i));
473 compareBools(c_ls.fastAccessDx(
i), b_ls.fastAccessDx(
i));
478 c_ls =
min(a_ls-1.0, val);
479 compareDoubles(c_ls.val(), aa_ls.val());
480 for (
int i=0;
i<n;
i++) {
481 compareBools(c_ls.dx(
i), aa_ls.dx(
i));
482 compareBools(c_ls.fastAccessDx(
i), aa_ls.fastAccessDx(
i));
484 c_ls =
min(val, a_ls-1.0);
485 compareDoubles(c_ls.val(), aa_ls.val());
486 for (
int i=0;
i<n;
i++) {
487 compareBools(c_ls.dx(
i), aa_ls.dx(
i));
488 compareBools(c_ls.fastAccessDx(
i), aa_ls.fastAccessDx(
i));
void compareDoubles(double a, double b)
void compareDx(double a, bool b)
#define UNARY_OP_TEST(TESTNAME, OP)
#define BINARY_FUNC_TEST(TESTNAME, FUNC)
LogicalSparseOpsUnitTest()
#define TEST_F(test_fixture, test_name)
Sacado::LFad::LogicalSparse< double, bool > LSType
void compareBools(bool a, bool b)
#define UNARY_FUNC_TEST(TESTNAME, FUNC)
ScalarT number()
Get random number.
ScalarT composite1(const ScalarT &a, const ScalarT &b)
#define ASSERT_TRUE(condition)
#define RELOP_TEST(TESTNAME, OP)
SimpleFad< ValueT > min(const SimpleFad< ValueT > &a, const SimpleFad< ValueT > &b)
#define BINARY_OP_TEST(TESTNAME, OP)
Sacado::Fad::DFad< double > DFadType
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_ASSIGNOP_TEST(TESTNAME, OP)
Sacado::Random< double > urand
void compareFads(const DFadType &x_dfad, const LSType &x_ls)