CacheDFadUnitTests.cpp

Go to the documentation of this file.
00001 // $Id: CacheDFadUnitTests.cpp,v 1.6.2.1 2009/03/05 19:41:30 etphipp Exp $ 
00002 // $Source: /space/CVS/Trilinos/packages/sacado/test/TestSuite/Attic/CacheDFadUnitTests.cpp,v $ 
00003 // @HEADER
00004 // ***********************************************************************
00005 // 
00006 //                           Sacado Package
00007 //                 Copyright (2006) Sandia Corporation
00008 // 
00009 // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
00010 // the U.S. Government retains certain rights in this software.
00011 // 
00012 // This library is free software; you can redistribute it and/or modify
00013 // it under the terms of the GNU Lesser General Public License as
00014 // published by the Free Software Foundation; either version 2.1 of the
00015 // License, or (at your option) any later version.
00016 //  
00017 // This library is distributed in the hope that it will be useful, but
00018 // WITHOUT ANY WARRANTY; without even the implied warranty of
00019 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00020 // Lesser General Public License for more details.
00021 //  
00022 // You should have received a copy of the GNU Lesser General Public
00023 // License along with this library; if not, write to the Free Software
00024 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
00025 // USA
00026 // Questions? Contact David M. Gay (dmgay@sandia.gov) or Eric T. Phipps
00027 // (etphipp@sandia.gov).
00028 // 
00029 // ***********************************************************************
00030 // @HEADER
00031 
00032 #include "CacheDFadUnitTests.hpp"
00033 
00034 CPPUNIT_TEST_SUITE_REGISTRATION( CacheDFadOpsUnitTest );
00035 
00036 CacheDFadOpsUnitTest::CacheDFadOpsUnitTest() :
00037   urand(0.0, 1.0), n(5), tol_a(1.0e-15), tol_r(1.0e-14) {}
00038 
00039 CacheDFadOpsUnitTest::CacheDFadOpsUnitTest(int numComponents, 
00040              double absolute_tolerance, 
00041              double relative_tolerance) :
00042   urand(0.0, 1.0), 
00043   n(numComponents), 
00044   tol_a(absolute_tolerance), 
00045   tol_r(relative_tolerance) {}
00046 
00047 void CacheDFadOpsUnitTest::setUp() {
00048   double val;
00049 
00050   val = urand.number();
00051   a_dfad = DFadType(n,val);
00052   a_fad = FAD::Fad<double>(n,val);
00053   
00054   val = urand.number();
00055   b_dfad = DFadType(n,val);
00056   b_fad = FAD::Fad<double>(n,val);
00057 
00058   for (int i=0; i<n; i++) {
00059     val = urand.number();
00060     a_dfad.fastAccessDx(i) = val;
00061     a_fad.fastAccessDx(i) = val;
00062 
00063     val = urand.number();
00064     b_dfad.fastAccessDx(i) = val;
00065     b_fad.fastAccessDx(i) = val;
00066   }
00067 }
00068 
00069 void CacheDFadOpsUnitTest::tearDown() {}
00070 
00071 void CacheDFadOpsUnitTest::compareFads(const DFadType& x_dfad,
00072                const FAD::Fad<double>& x_fad) {
00073 
00074   // Compare sizes
00075   CPPUNIT_ASSERT(x_dfad.size() == x_fad.size());
00076   
00077   // Compare hasFastAccess
00078   CPPUNIT_ASSERT(x_dfad.hasFastAccess() == x_fad.hasFastAccess());
00079   
00080   // Compare values
00081   compareDoubles(x_dfad.val(), x_fad.val());
00082   
00083   for (int i=0; i<x_fad.size(); i++) {
00084     
00085     // Compare dx
00086     compareDoubles(x_dfad.dx(i), x_fad.dx(i));
00087     
00088     // Compare fastAccessDx
00089     compareDoubles(x_dfad.fastAccessDx(i), x_fad.fastAccessDx(i));
00090   }
00091 }
00092 
00093 void CacheDFadOpsUnitTest::compareDoubles(double a, double b) {
00094   CPPUNIT_ASSERT( fabs(a-b) < tol_a + tol_r*fabs(a) );
00095 }
00096 
00097 void CacheDFadOpsUnitTest::testMax() {
00098   double val;
00099 
00100   DFadType aa_dfad = a_dfad + 1.0;
00101   c_dfad = max(aa_dfad, a_dfad);
00102   compareDoubles(c_dfad.val(), aa_dfad.val());
00103   for (int i=0; i<n; i++) {
00104     compareDoubles(c_dfad.dx(i), aa_dfad.dx(i));
00105     compareDoubles(c_dfad.fastAccessDx(i), aa_dfad.fastAccessDx(i));
00106   }
00107   
00108   c_dfad = max(a_dfad, aa_dfad);
00109   compareDoubles(c_dfad.val(), aa_dfad.val());
00110   for (int i=0; i<n; i++) {
00111     compareDoubles(c_dfad.dx(i), aa_dfad.dx(i));
00112     compareDoubles(c_dfad.fastAccessDx(i), aa_dfad.fastAccessDx(i));
00113   }
00114 
00115   c_dfad = max(a_dfad+1.0, a_dfad);
00116   compareDoubles(c_dfad.val(), aa_dfad.val());
00117   for (int i=0; i<n; i++) {
00118     compareDoubles(c_dfad.dx(i), aa_dfad.dx(i));
00119     compareDoubles(c_dfad.fastAccessDx(i), aa_dfad.fastAccessDx(i));
00120   }
00121   
00122   c_dfad = max(a_dfad, a_dfad+1.0);
00123   compareDoubles(c_dfad.val(), aa_dfad.val());
00124   for (int i=0; i<n; i++) {
00125     compareDoubles(c_dfad.dx(i), aa_dfad.dx(i));
00126     compareDoubles(c_dfad.fastAccessDx(i), aa_dfad.fastAccessDx(i));
00127   }
00128 
00129   // Expr, Expr (same)
00130   this->c_dfad = max(this->a_dfad+1.0, this->a_dfad+1.0);
00131   compareDoubles(c_dfad.val(), aa_dfad.val());
00132   for (int i=0; i<n; i++) {
00133     compareDoubles(c_dfad.dx(i), aa_dfad.dx(i));
00134     compareDoubles(c_dfad.fastAccessDx(i), aa_dfad.fastAccessDx(i));
00135   }
00136 
00137   // Expr, Expr (different)
00138   this->c_dfad = max(this->a_dfad+1.0, this->a_dfad-1.0);
00139   compareDoubles(c_dfad.val(), aa_dfad.val());
00140   for (int i=0; i<n; i++) {
00141     compareDoubles(c_dfad.dx(i), aa_dfad.dx(i));
00142     compareDoubles(c_dfad.fastAccessDx(i), aa_dfad.fastAccessDx(i));
00143   }
00144   this->c_dfad = max(this->a_dfad-1.0, this->a_dfad+1.0);
00145   compareDoubles(c_dfad.val(), aa_dfad.val());
00146   for (int i=0; i<n; i++) {
00147     compareDoubles(c_dfad.dx(i), aa_dfad.dx(i));
00148     compareDoubles(c_dfad.fastAccessDx(i), aa_dfad.fastAccessDx(i));
00149   }
00150   
00151   val = a_dfad.val() + 1;
00152   c_dfad = max(a_dfad, val);
00153   compareDoubles(c_dfad.val(), val);
00154   for (int i=0; i<n; i++)
00155     compareDoubles(c_dfad.dx(i), 0.0);
00156   
00157   val = a_dfad.val() - 1;
00158   c_dfad = max(a_dfad, val);
00159   compareDoubles(c_dfad.val(), a_dfad.val());
00160   for (int i=0; i<n; i++) {
00161     compareDoubles(c_dfad.dx(i), a_dfad.dx(i));
00162     compareDoubles(c_dfad.fastAccessDx(i), a_dfad.fastAccessDx(i));
00163   }
00164 
00165   val = b_dfad.val() + 1;
00166   c_dfad = max(val, b_dfad);
00167   compareDoubles(c_dfad.val(), val);
00168   for (int i=0; i<n; i++)
00169     compareDoubles(c_dfad.dx(i), 0.0);
00170   
00171   val = b_dfad.val() - 1;
00172   c_dfad = max(val, b_dfad);
00173   compareDoubles(c_dfad.val(), b_dfad.val());
00174   for (int i=0; i<n; i++) {
00175     compareDoubles(c_dfad.dx(i), b_dfad.dx(i));
00176     compareDoubles(c_dfad.fastAccessDx(i), b_dfad.fastAccessDx(i));
00177   }
00178 }
00179 
00180 void CacheDFadOpsUnitTest::testMin() {
00181   double val;
00182 
00183   DFadType aa_dfad = a_dfad - 1.0;
00184   c_dfad = min(aa_dfad, a_dfad);
00185   compareDoubles(c_dfad.val(), aa_dfad.val());
00186   for (int i=0; i<n; i++) {
00187     compareDoubles(c_dfad.dx(i), aa_dfad.dx(i));
00188     compareDoubles(c_dfad.fastAccessDx(i), aa_dfad.fastAccessDx(i));
00189   }
00190 
00191   c_dfad = min(a_dfad, aa_dfad);
00192   compareDoubles(c_dfad.val(), aa_dfad.val());
00193   for (int i=0; i<n; i++) {
00194     compareDoubles(c_dfad.dx(i), aa_dfad.dx(i));
00195     compareDoubles(c_dfad.fastAccessDx(i), aa_dfad.fastAccessDx(i));
00196   }
00197 
00198   // Expr, Expr (same)
00199   this->c_dfad = min(this->a_dfad-1.0, this->a_dfad-1.0);
00200   compareDoubles(c_dfad.val(), aa_dfad.val());
00201   for (int i=0; i<n; i++) {
00202     compareDoubles(c_dfad.dx(i), aa_dfad.dx(i));
00203     compareDoubles(c_dfad.fastAccessDx(i), aa_dfad.fastAccessDx(i));
00204   }
00205 
00206   // Expr, Expr (different)
00207   this->c_dfad = min(this->a_dfad+1.0, this->a_dfad-1.0);
00208   compareDoubles(c_dfad.val(), aa_dfad.val());
00209   for (int i=0; i<n; i++) {
00210     compareDoubles(c_dfad.dx(i), aa_dfad.dx(i));
00211     compareDoubles(c_dfad.fastAccessDx(i), aa_dfad.fastAccessDx(i));
00212   }
00213   this->c_dfad = min(this->a_dfad-1.0, this->a_dfad+1.0);
00214   compareDoubles(c_dfad.val(), aa_dfad.val());
00215   for (int i=0; i<n; i++) {
00216     compareDoubles(c_dfad.dx(i), aa_dfad.dx(i));
00217     compareDoubles(c_dfad.fastAccessDx(i), aa_dfad.fastAccessDx(i));
00218   }
00219 
00220   val = a_dfad.val() - 1;
00221   c_dfad = min(a_dfad, val);
00222   compareDoubles(c_dfad.val(), val);
00223   for (int i=0; i<n; i++)
00224     compareDoubles(c_dfad.dx(i), 0.0);
00225   
00226   val = a_dfad.val() + 1;
00227   c_dfad = min(a_dfad, val);
00228   compareDoubles(c_dfad.val(), a_dfad.val());
00229   for (int i=0; i<n; i++) {
00230     compareDoubles(c_dfad.dx(i), a_dfad.dx(i));
00231     compareDoubles(c_dfad.fastAccessDx(i), a_dfad.fastAccessDx(i));
00232   }
00233 
00234   val = b_dfad.val() - 1;
00235   c_dfad = min(val, b_dfad);
00236   compareDoubles(c_dfad.val(), val);
00237   for (int i=0; i<n; i++)
00238     compareDoubles(c_dfad.dx(i), 0.0);
00239   
00240   val = b_dfad.val() + 1;
00241   c_dfad = min(val, b_dfad);
00242   compareDoubles(c_dfad.val(), b_dfad.val());
00243   for (int i=0; i<n; i++) {
00244     compareDoubles(c_dfad.dx(i), b_dfad.dx(i));
00245     compareDoubles(c_dfad.fastAccessDx(i), b_dfad.fastAccessDx(i));
00246   }
00247 }

Generated on Tue Oct 20 12:55:02 2009 for Sacado Package Browser (Single Doxygen Collection) by doxygen 1.4.7