Changeset 2333 for trunk/test_more


Ignore:
Timestamp:
Apr 3, 2012 12:34:56 AM (8 years ago)
Author:
bradbell
Message:
  1. Put AD constructors in ad_ctor.hpp and assignments in ad_assing.hpp.
  2. Make new tests for this and move old tests form example to test_more.
Location:
trunk/test_more
Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/test_more/copy.cpp

    r1370 r2333  
    11/* $Id$ */
    22/* --------------------------------------------------------------------------
    3 CppAD: C++ Algorithmic Differentiation: Copyright (C) 2003-07 Bradley M. Bell
     3CppAD: C++ Algorithmic Differentiation: Copyright (C) 2003-12 Bradley M. Bell
    44
    55CppAD is distributed under multiple licenses. This distribution is under
     
    1717# include <cppad/cppad.hpp>
    1818
    19 bool Copy(void)
     19namespace { // begin empty namespace
     20
     21bool copy_older(void)
    2022{       bool ok = true;
    2123
     
    6870}
    6971
     72bool copy_ad(void)
     73{       bool ok = true;   // initialize test result flag
     74        using CppAD::AD;  // so can use AD in place of CppAD::AD
     75
     76        // domain space vector
     77        size_t n = 1;
     78        CPPAD_TEST_VECTOR< AD<double> > x(n);
     79        x[0]     = 2.;
     80
     81        // declare independent variables and start tape recording
     82        CppAD::Independent(x);
     83
     84        // create an AD<double> that does not depend on x
     85        AD<double> b = 3.;   
     86
     87        // use copy constructor
     88        AD<double> u(x[0]);   
     89        AD<double> v = b;
     90
     91        // check which are parameters
     92        ok &= Variable(u);
     93        ok &= Parameter(v);
     94
     95        // range space vector
     96        size_t m = 2;
     97        CPPAD_TEST_VECTOR< AD<double> > y(m);
     98        y[0]  = u;
     99        y[1]  = v;
     100
     101        // create f: x -> y and vectors used for derivative calculations
     102        CppAD::ADFun<double> f(x, y);
     103        CPPAD_TEST_VECTOR<double> dx(n);
     104        CPPAD_TEST_VECTOR<double> dy(m);
     105 
     106        // check parameters flags
     107        ok &= ! f.Parameter(0);
     108        ok &=   f.Parameter(1);
     109
     110        // check function values
     111        ok &= ( y[0] == 2. );
     112        ok &= ( y[1] == 3. );
     113
     114        // forward computation of partials w.r.t. x[0]
     115        dx[0] = 1.;
     116        dy    = f.Forward(1, dx);
     117        ok   &= ( dy[0] == 1. );   // du / dx
     118        ok   &= ( dy[1] == 0. );   // dv / dx
     119
     120        return ok;
     121}
     122bool copy_base(void)
     123{       bool ok = true;    // initialize test result flag
     124        using CppAD::AD;   // so can use AD in place of CppAD::AD
     125
     126        // construct directly from Base where Base is double
     127        AD<double> x(1.);
     128
     129        // construct from a type that converts to Base where Base is double
     130        AD<double> y = 2;
     131
     132        // construct from a type that converts to Base where Base = AD<double>
     133        AD< AD<double> > z(3);
     134
     135        // check that resulting objects are parameters
     136        ok &= Parameter(x);
     137        ok &= Parameter(y);
     138        ok &= Parameter(z);
     139
     140        // check values of objects (compare AD<double> with double)
     141        ok &= ( x == 1.);
     142        ok &= ( y == 2.);
     143        ok &= ( Value(z) == 3.);
     144
     145        // user constructor through the static_cast template function
     146        x   = static_cast < AD<double> >( 4 );
     147        z  = static_cast < AD< AD<double> > >( 5 );
     148
     149        ok &= ( x == 4. );
     150        ok &= ( Value(z) == 5. );
     151
     152        return ok;
     153}
     154bool default_ctor(void)
     155{       bool ok = true;
     156        using CppAD::AD;
     157
     158        // default AD constructor
     159        AD<double> x, y;
     160
     161        // check that they are parameters
     162        ok &= Parameter(x);
     163        ok &= Parameter(y);
     164
     165        // assign them values
     166        x = 3.;
     167        y = 4.;
     168
     169        // just check a simple operation
     170        ok &= (x + y == 7.);
     171
     172        return ok;
     173}
     174
    70175// END PROGRAM
     176} // end empty namespace
     177bool copy(void)
     178{       bool ok = true;
     179        ok &= copy_older();
     180        ok &= copy_ad();
     181        ok &= copy_base();
     182        ok &= default_ctor();
     183        return ok;
     184}
  • trunk/test_more/makefile.am

    r2307 r2333  
    6060        acos.cpp \
    6161        asin.cpp \
     62        assign.cpp \
    6263        add.cpp \
    6364        add_eq.cpp \
  • trunk/test_more/makefile.in

    r2307 r2333  
    4444CONFIG_CLEAN_VPATH_FILES =
    4545am__test_more_SOURCES_DIST = base_adolc.cpp alloc_openmp.cpp \
    46         test_more.cpp abs.cpp acos.cpp asin.cpp add.cpp add_eq.cpp \
    47         add_zero.cpp atan.cpp atan_2.cpp base_alloc.cpp \
     46        test_more.cpp abs.cpp acos.cpp asin.cpp assign.cpp add.cpp \
     47        add_eq.cpp add_zero.cpp atan.cpp atan_2.cpp base_alloc.cpp \
    4848        check_simple_vector.cpp compare.cpp compare_change.cpp \
    4949        cond_exp.cpp cond_exp_ad.cpp copy.cpp cos.cpp cosh.cpp \
     
    6565am_test_more_OBJECTS = $(am__objects_1) $(am__objects_2) \
    6666        test_more.$(OBJEXT) abs.$(OBJEXT) acos.$(OBJEXT) \
    67         asin.$(OBJEXT) add.$(OBJEXT) add_eq.$(OBJEXT) \
     67        asin.$(OBJEXT) assign.$(OBJEXT) add.$(OBJEXT) add_eq.$(OBJEXT) \
    6868        add_zero.$(OBJEXT) atan.$(OBJEXT) atan_2.$(OBJEXT) \
    6969        base_alloc.$(OBJEXT) check_simple_vector.$(OBJEXT) \
     
    280280        acos.cpp \
    281281        asin.cpp \
     282        assign.cpp \
    282283        add.cpp \
    283284        add_eq.cpp \
     
    404405@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alloc_openmp.Po@am__quote@
    405406@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asin.Po@am__quote@
     407@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/assign.Po@am__quote@
    406408@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atan.Po@am__quote@
    407409@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atan_2.Po@am__quote@
  • trunk/test_more/test_more.cpp

    r2307 r2333  
    2525extern bool alloc_openmp(void);
    2626extern bool Asin(void);
     27extern bool assign(void);
    2728extern bool Atan(void);
    2829extern bool Atan2(void);
     
    3435extern bool CondExp(void);
    3536extern bool CondExpAD(void);
    36 extern bool Copy(void);
     37extern bool copy(void);
    3738extern bool Cos(void);
    3839extern bool Cosh(void);
     
    129130        ok &= Run( AddZero,         "AddZero"        );
    130131        ok &= Run( Asin,            "Asin"           );
     132        ok &= Run( assign,          "assign"         );
    131133        ok &= Run( Atan,            "Atan"           );
    132134        ok &= Run( Atan2,           "Atan2"          );
     
    137139        ok &= Run( CondExp,         "CondExp"        );
    138140        ok &= Run( CondExpAD,       "CondExpAD"      );
    139         ok &= Run( Copy,            "Copy"           );
     141        ok &= Run( copy,            "copy"           );
    140142        ok &= Run( Cos,             "Cos"            );
    141143        ok &= Run( Cosh,            "Cosh"           );
  • trunk/test_more/test_more.vcproj

    r2281 r2333  
    203203                        </File>
    204204                        <File
     205                                RelativePath=".\assign.cpp"
     206                                >
     207                        </File>
     208                        <File
    205209                                RelativePath=".\atan.cpp"
    206210                                >
Note: See TracChangeset for help on using the changeset viewer.