DFadUnitTests.cpp

Go to the documentation of this file.
00001 // $Id: DFadUnitTests.cpp,v 1.6.2.2 2009/03/05 19:41:30 etphipp Exp $ 
00002 // $Source: /space/CVS/Trilinos/packages/sacado/test/TestSuite/Attic/DFadUnitTests.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 "DFadUnitTests.hpp"
00033 
00034 CPPUNIT_TEST_SUITE_REGISTRATION( DFadOpsUnitTest );
00035 
00036 void FAD::error(const char *msg) {
00037   std::cout << msg << endl;
00038 }
00039 
00040 DFadOpsUnitTest::DFadOpsUnitTest() :
00041   urand(0.0, 1.0), n(5), tol_a(1.0e-15), tol_r(1.0e-14) {}
00042 
00043 DFadOpsUnitTest::DFadOpsUnitTest(int numComponents, double absolute_tolerance, 
00044          double relative_tolerance) :
00045   urand(0.0, 1.0), 
00046   n(numComponents), 
00047   tol_a(absolute_tolerance), 
00048   tol_r(relative_tolerance) {}
00049 
00050 void DFadOpsUnitTest::setUp() {
00051   double val;
00052 
00053   val = urand.number();
00054   a_dfad = DFadType(n,val);
00055   a_fad = FAD::Fad<double>(n,val);
00056   
00057   val = urand.number();
00058   b_dfad = DFadType(n,val);
00059   b_fad = FAD::Fad<double>(n,val);
00060 
00061   for (int i=0; i<n; i++) {
00062     val = urand.number();
00063     a_dfad.fastAccessDx(i) = val;
00064     a_fad.fastAccessDx(i) = val;
00065 
00066     val = urand.number();
00067     b_dfad.fastAccessDx(i) = val;
00068     b_fad.fastAccessDx(i) = val;
00069   }
00070 }
00071 
00072 void DFadOpsUnitTest::tearDown() {}
00073 
00074 void DFadOpsUnitTest::compareFads(const DFadType& x_dfad,
00075           const FAD::Fad<double>& x_fad) {
00076 
00077   // Compare sizes
00078   CPPUNIT_ASSERT(x_dfad.size() == x_fad.size());
00079   
00080   // Compare hasFastAccess
00081   CPPUNIT_ASSERT(x_dfad.hasFastAccess() == x_fad.hasFastAccess());
00082   
00083   // Compare values
00084   compareDoubles(x_dfad.val(), x_fad.val());
00085   
00086   for (int i=0; i<x_fad.size(); i++) {
00087     
00088     // Compare dx
00089     compareDoubles(x_dfad.dx(i), x_fad.dx(i));
00090     
00091     // Compare fastAccessDx
00092     compareDoubles(x_dfad.fastAccessDx(i), x_fad.fastAccessDx(i));
00093   }
00094 }
00095 
00096 void DFadOpsUnitTest::compareDoubles(double a, double b) {
00097   CPPUNIT_ASSERT( fabs(a-b) < tol_a + tol_r*fabs(a) );
00098 }
00099 
00100 void DFadOpsUnitTest::testMax() {
00101   double val;
00102 
00103   DFadType aa_dfad = a_dfad + 1.0;
00104   c_dfad = max(aa_dfad, a_dfad);
00105   compareDoubles(c_dfad.val(), aa_dfad.val());
00106   for (int i=0; i<n; i++) {
00107     compareDoubles(c_dfad.dx(i), aa_dfad.dx(i));
00108     compareDoubles(c_dfad.fastAccessDx(i), aa_dfad.fastAccessDx(i));
00109   }
00110   
00111   c_dfad = max(a_dfad, aa_dfad);
00112   compareDoubles(c_dfad.val(), aa_dfad.val());
00113   for (int i=0; i<n; i++) {
00114     compareDoubles(c_dfad.dx(i), aa_dfad.dx(i));
00115     compareDoubles(c_dfad.fastAccessDx(i), aa_dfad.fastAccessDx(i));
00116   }
00117 
00118   c_dfad = max(a_dfad+1.0, a_dfad);
00119   compareDoubles(c_dfad.val(), aa_dfad.val());
00120   for (int i=0; i<n; i++) {
00121     compareDoubles(c_dfad.dx(i), aa_dfad.dx(i));
00122     compareDoubles(c_dfad.fastAccessDx(i), aa_dfad.fastAccessDx(i));
00123   }
00124   
00125   c_dfad = max(a_dfad, a_dfad+1.0);
00126   compareDoubles(c_dfad.val(), aa_dfad.val());
00127   for (int i=0; i<n; i++) {
00128     compareDoubles(c_dfad.dx(i), aa_dfad.dx(i));
00129     compareDoubles(c_dfad.fastAccessDx(i), aa_dfad.fastAccessDx(i));
00130   }
00131 
00132   // Expr, Expr (same)
00133   this->c_dfad = max(this->a_dfad+1.0, this->a_dfad+1.0);
00134   compareDoubles(c_dfad.val(), aa_dfad.val());
00135   for (int i=0; i<n; i++) {
00136     compareDoubles(c_dfad.dx(i), aa_dfad.dx(i));
00137     compareDoubles(c_dfad.fastAccessDx(i), aa_dfad.fastAccessDx(i));
00138   }
00139 
00140   // Expr, Expr (different)
00141   this->c_dfad = max(this->a_dfad+1.0, this->a_dfad-1.0);
00142   compareDoubles(c_dfad.val(), aa_dfad.val());
00143   for (int i=0; i<n; i++) {
00144     compareDoubles(c_dfad.dx(i), aa_dfad.dx(i));
00145     compareDoubles(c_dfad.fastAccessDx(i), aa_dfad.fastAccessDx(i));
00146   }
00147   this->c_dfad = max(this->a_dfad-1.0, this->a_dfad+1.0);
00148   compareDoubles(c_dfad.val(), aa_dfad.val());
00149   for (int i=0; i<n; i++) {
00150     compareDoubles(c_dfad.dx(i), aa_dfad.dx(i));
00151     compareDoubles(c_dfad.fastAccessDx(i), aa_dfad.fastAccessDx(i));
00152   }
00153   
00154   val = a_dfad.val() + 1;
00155   c_dfad = max(a_dfad, val);
00156   compareDoubles(c_dfad.val(), val);
00157   for (int i=0; i<n; i++)
00158     compareDoubles(c_dfad.dx(i), 0.0);
00159   
00160   val = a_dfad.val() - 1;
00161   c_dfad = max(a_dfad, val);
00162   compareDoubles(c_dfad.val(), a_dfad.val());
00163   for (int i=0; i<n; i++) {
00164     compareDoubles(c_dfad.dx(i), a_dfad.dx(i));
00165     compareDoubles(c_dfad.fastAccessDx(i), a_dfad.fastAccessDx(i));
00166   }
00167 
00168   val = b_dfad.val() + 1;
00169   c_dfad = max(val, b_dfad);
00170   compareDoubles(c_dfad.val(), val);
00171   for (int i=0; i<n; i++)
00172     compareDoubles(c_dfad.dx(i), 0.0);
00173   
00174   val = b_dfad.val() - 1;
00175   c_dfad = max(val, b_dfad);
00176   compareDoubles(c_dfad.val(), b_dfad.val());
00177   for (int i=0; i<n; i++) {
00178     compareDoubles(c_dfad.dx(i), b_dfad.dx(i));
00179     compareDoubles(c_dfad.fastAccessDx(i), b_dfad.fastAccessDx(i));
00180   }
00181 }
00182 
00183 void DFadOpsUnitTest::testMin() {
00184   double val;
00185 
00186   DFadType aa_dfad = a_dfad - 1.0;
00187   c_dfad = min(aa_dfad, a_dfad);
00188   compareDoubles(c_dfad.val(), aa_dfad.val());
00189   for (int i=0; i<n; i++) {
00190     compareDoubles(c_dfad.dx(i), aa_dfad.dx(i));
00191     compareDoubles(c_dfad.fastAccessDx(i), aa_dfad.fastAccessDx(i));
00192   }
00193 
00194   c_dfad = min(a_dfad, aa_dfad);
00195   compareDoubles(c_dfad.val(), aa_dfad.val());
00196   for (int i=0; i<n; i++) {
00197     compareDoubles(c_dfad.dx(i), aa_dfad.dx(i));
00198     compareDoubles(c_dfad.fastAccessDx(i), aa_dfad.fastAccessDx(i));
00199   }
00200 
00201   // Expr, Expr (same)
00202   this->c_dfad = min(this->a_dfad-1.0, this->a_dfad-1.0);
00203   compareDoubles(c_dfad.val(), aa_dfad.val());
00204   for (int i=0; i<n; i++) {
00205     compareDoubles(c_dfad.dx(i), aa_dfad.dx(i));
00206     compareDoubles(c_dfad.fastAccessDx(i), aa_dfad.fastAccessDx(i));
00207   }
00208 
00209   // Expr, Expr (different)
00210   this->c_dfad = min(this->a_dfad+1.0, this->a_dfad-1.0);
00211   compareDoubles(c_dfad.val(), aa_dfad.val());
00212   for (int i=0; i<n; i++) {
00213     compareDoubles(c_dfad.dx(i), aa_dfad.dx(i));
00214     compareDoubles(c_dfad.fastAccessDx(i), aa_dfad.fastAccessDx(i));
00215   }
00216   this->c_dfad = min(this->a_dfad-1.0, this->a_dfad+1.0);
00217   compareDoubles(c_dfad.val(), aa_dfad.val());
00218   for (int i=0; i<n; i++) {
00219     compareDoubles(c_dfad.dx(i), aa_dfad.dx(i));
00220     compareDoubles(c_dfad.fastAccessDx(i), aa_dfad.fastAccessDx(i));
00221   }
00222 
00223   val = a_dfad.val() - 1;
00224   c_dfad = min(a_dfad, val);
00225   compareDoubles(c_dfad.val(), val);
00226   for (int i=0; i<n; i++)
00227     compareDoubles(c_dfad.dx(i), 0.0);
00228   
00229   val = a_dfad.val() + 1;
00230   c_dfad = min(a_dfad, val);
00231   compareDoubles(c_dfad.val(), a_dfad.val());
00232   for (int i=0; i<n; i++) {
00233     compareDoubles(c_dfad.dx(i), a_dfad.dx(i));
00234     compareDoubles(c_dfad.fastAccessDx(i), a_dfad.fastAccessDx(i));
00235   }
00236 
00237   val = b_dfad.val() - 1;
00238   c_dfad = min(val, b_dfad);
00239   compareDoubles(c_dfad.val(), val);
00240   for (int i=0; i<n; i++)
00241     compareDoubles(c_dfad.dx(i), 0.0);
00242   
00243   val = b_dfad.val() + 1;
00244   c_dfad = min(val, b_dfad);
00245   compareDoubles(c_dfad.val(), b_dfad.val());
00246   for (int i=0; i<n; i++) {
00247     compareDoubles(c_dfad.dx(i), b_dfad.dx(i));
00248     compareDoubles(c_dfad.fastAccessDx(i), b_dfad.fastAccessDx(i));
00249   }
00250 }

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