source: trunk/test_more/test_more.cpp @ 3811

Last change on this file since 3811 was 3811, checked in by bradbell, 4 years ago

merge to branch: trunk
from repository: https://github.com/coin-or/CppAD
start hash code: f77cd2e443b8d14f354f97efc4c26369227dfe81
end hash code: 33d1f5b8d837d83c8baf656045d85d8b45f0b297

commit 33d1f5b8d837d83c8baf656045d85d8b45f0b297
Author: Brad Bell <bradbell@…>
Date: Sun Mar 27 04:01:14 2016 -0700

  1. Test non-symmetric reverse mode in eigen_mat_inv (and fix this example).
  2. Advance version to cppad-20160327.

commit 238e214ff36ca835efca615c609576dc8bf5038d
Author: Brad Bell <bradbell@…>
Date: Sat Mar 26 18:10:59 2016 -0700

eigen_mat_inv.hpp: use inverse matrix (since we are computing it).
eigen_mat_mul.hpp: comment seperator.
eigen_mat_inv.cpp: matrix during recording is non-singular.
eigen_mat_inv.cpp: test first and second order forward.

commit fc918b0476cc8ea66abdf2904a71fc93472d279d
Author: Brad Bell <bradbell@…>
Date: Sat Mar 26 16:26:51 2016 -0700

Add test_more/eigen_mat_inv.cpp.


eigen_mat_inv.hpp: fix calculation of vy.
eigen_mat_inv.cpp: fix section title.
CMakeLists.txt: no longer necessary to have special library for eigen tests.
eigen_mat_inv.cpp: Test with non-symmetric matrix.

  • Property svn:keywords set to Id
File size: 10.0 KB
Line 
1// $Id: test_more.cpp 3811 2016-03-27 13:00:39Z bradbell $
2/* --------------------------------------------------------------------------
3CppAD: C++ Algorithmic Differentiation: Copyright (C) 2003-16 Bradley M. Bell
4
5CppAD is distributed under multiple licenses. This distribution is under
6the terms of the
7                    Eclipse Public License Version 1.0.
8
9A copy of this license is included in the COPYING file of this distribution.
10Please visit http://www.coin-or.org/CppAD/ for information on other licenses.
11-------------------------------------------------------------------------- */
12
13// system include files used for I/O
14# include <iostream>
15
16// memory leak checker
17# include <cppad/utility/thread_alloc.hpp>
18
19// prototype external compiled tests (this line expected by bin/new_test.sh)
20extern bool abs(void);
21extern bool acos(void);
22extern bool acosh(void);
23extern bool adfun_copy(void);
24extern bool Add(void);
25extern bool AddEq(void);
26extern bool AddZero(void);
27extern bool alloc_openmp(void);
28extern bool asin(void);
29extern bool asinh(void);
30extern bool assign(void);
31extern bool atan(void);
32extern bool atanh(void);
33extern bool atan2(void);
34extern bool azmul(void);
35extern bool base_adolc(void);
36extern bool base_alloc_test(void);
37extern bool check_simple_vector(void);
38extern bool checkpoint(void);
39extern bool Compare(void);
40extern bool compare_change(void);
41extern bool CondExp(void);
42extern bool CondExpAD(void);
43extern bool cond_exp_rev(void);
44extern bool copy(void);
45extern bool Cos(void);
46extern bool Cosh(void);
47extern bool cppad_eigen(void);
48extern bool dbl_epsilon(void);
49extern bool Div(void);
50extern bool DivEq(void);
51extern bool DivZeroOne(void);
52extern bool eigen_mat_inv(void);
53extern bool erf(void);
54extern bool Exp(void);
55extern bool expm1(void);
56extern bool ForHess(void);
57extern bool for_sparse_hes(void);
58extern bool for_sparse_jac(void);
59extern bool Forward(void);
60extern bool forward_dir(void);
61extern bool forward_order(void);
62extern bool FromBase(void);
63extern bool FunCheck(void);
64extern bool hes_sparsity(void);
65extern bool ipopt_solve(void);
66extern bool jacobian(void);
67extern bool log(void);
68extern bool log10(void);
69extern bool log1p(void);
70extern bool Mul(void);
71extern bool mul_level(void);
72extern bool mul_cond_rev(void);
73extern bool mul_cskip(void);
74extern bool MulEq(void);
75extern bool mul_zdouble(void);
76extern bool MulZeroOne(void);
77extern bool NearEqualExt(void);
78extern bool Neg(void);
79extern bool num_limits(void);
80extern bool ode_err_control(void);
81extern bool old_mat_mul(void);
82extern bool old_reciprocal(void);
83extern bool old_tan(void);
84extern bool old_usead_1(void);
85extern bool old_usead_2(void);
86extern bool omp_alloc(void);
87extern bool optimize(void);
88extern bool parameter(void);
89extern bool Poly(void);
90extern bool Pow(void);
91extern bool PowInt(void);
92extern bool print_for(void);
93extern bool reverse(void);
94extern bool rev_sparse_jac(void);
95extern bool RevTwo(void);
96extern bool RombergOne(void);
97extern bool Rosen34(void);
98extern bool Runge45(void);
99extern bool SimpleVector(void);
100extern bool Sin(void);
101extern bool SinCos(void);
102extern bool Sinh(void);
103extern bool sparse_hessian(void);
104extern bool sparse_jacobian(void);
105extern bool sparse_vec_ad(void);
106extern bool Sqrt(void);
107extern bool std_math(void);
108extern bool Sub(void);
109extern bool SubEq(void);
110extern bool SubZero(void);
111extern bool tan(void);
112extern bool to_string(void);
113extern bool test_vector(void);
114extern bool track_new_del(void);
115extern bool Value(void);
116extern bool VecAD(void);
117extern bool VecADPar(void);
118extern bool VecUnary(void);
119extern bool zdouble(void);
120
121// tests in local subdirectory
122extern bool vector_set(void);
123
124namespace {
125        // function that runs one test
126        static size_t Run_ok_count    = 0;
127        static size_t Run_error_count = 0;
128        bool Run(bool TestOk(void), std::string name)
129        {       bool ok               = true;
130                std::streamsize width =  20;
131                std::cout.width( width );
132                std::cout.setf( std::ios_base::left );
133                std::cout << name;
134                //
135                ok &= name.size() < size_t(width);
136                ok &= TestOk();
137                if( ok )
138                {       std::cout << "OK" << std::endl;
139                        Run_ok_count++;
140                }
141                else
142                {       std::cout << "Error" << std::endl;
143                        Run_error_count++;
144                }
145                return ok;
146        }
147}
148
149// main program that runs all the tests
150int main(void)
151{       bool ok = true;
152        using namespace std;
153
154        // This line is used by test_one.sh
155
156        // run external compiled tests (this line expected by bin/new_test.sh)
157        ok &= Run( abs,             "abs"            );
158        ok &= Run( acos,            "acos"           );
159        ok &= Run( acosh,           "acosh"          );
160        ok &= Run( adfun_copy,      "adfun_copy"     );
161        ok &= Run( Add,             "Add"            );
162        ok &= Run( AddEq,           "AddEq"          );
163        ok &= Run( AddZero,         "AddZero"        );
164        ok &= Run( asin,            "asin"           );
165        ok &= Run( asinh,           "asinh"          );
166        ok &= Run( assign,          "assign"         );
167        ok &= Run( atan,            "atan"           );
168        ok &= Run( atanh,           "atanh"          );
169        ok &= Run( atan2,           "atan2"          );
170        ok &= Run( azmul,           "azmul"          );
171        ok &= Run( check_simple_vector, "check_simple_vector" );
172        ok &= Run( checkpoint,      "checkpoint"     );
173        ok &= Run( Compare,         "Compare"        );
174        ok &= Run( compare_change,  "compare_change" );
175        ok &= Run( CondExp,         "CondExp"        );
176        ok &= Run( CondExpAD,       "CondExpAD"      );
177        ok &= Run( cond_exp_rev,    "cond_exp_rev"   );
178        ok &= Run( copy,            "copy"           );
179        ok &= Run( Cos,             "Cos"            );
180        ok &= Run( Cosh,            "Cosh"           );
181        ok &= Run( dbl_epsilon,     "dbl_epsilon"    );
182        ok &= Run( Div,             "Div"            );
183        ok &= Run( DivEq,           "DivEq"          );
184        ok &= Run( DivZeroOne,      "DivZeroOne"     );
185        ok &= Run( erf,             "erf"            );
186        ok &= Run( Exp,             "Exp"            );
187        ok &= Run( expm1,           "expm1"          );
188        ok &= Run( ForHess,         "ForHess"        );
189        ok &= Run( for_sparse_hes,  "for_sparse_hes" );
190        ok &= Run( for_sparse_jac,  "for_sparse_jac" );
191        ok &= Run( Forward,         "Forward"        );
192        ok &= Run( forward_dir,     "forward_dir"    );
193        ok &= Run( forward_order,   "forward_order"  );
194        ok &= Run( FromBase,        "FromBase"       );
195        ok &= Run( FunCheck,        "FunCheck"       );
196        ok &= Run( hes_sparsity,    "hes_sparsity"   );
197        ok &= Run( jacobian,        "jacobian"       );
198        ok &= Run( log,             "log"            );
199        ok &= Run( log10,           "log10"          );
200        ok &= Run( log1p,           "log1p"          );
201        ok &= Run( Mul,             "Mul"            );
202        ok &= Run( mul_level,       "mul_level"      );
203        ok &= Run( mul_cond_rev,    "mul_cond_rev"   );
204        ok &= Run( mul_cskip,       "Mul_cskip"      );
205        ok &= Run( MulEq,           "MulEq"          );
206        ok &= Run( mul_zdouble,     "mul_zdouble"    );
207        ok &= Run( MulZeroOne,      "MulZeroOne"     );
208        ok &= Run( NearEqualExt,    "NearEqualExt"   );
209        ok &= Run( Neg,             "Neg"            );
210        ok &= Run( num_limits,      "num_limits"     );
211        ok &= Run( ode_err_control, "ode_err_control");
212        ok &= Run( old_mat_mul,     "old_mat_mul"    );
213        ok &= Run( old_reciprocal,  "old_reciprocal" );
214        ok &= Run( old_tan,         "old_tan"        );
215        ok &= Run( old_usead_1,     "old_usead_1"    );
216        ok &= Run( old_usead_2,     "old_usead_2"    );
217        ok &= Run( omp_alloc,       "omp_alloc"      );
218        ok &= Run( optimize,        "optimize"       );
219        ok &= Run( parameter,       "parameter"      );
220        ok &= Run( Poly,            "Poly"           );
221        ok &= Run( Pow,             "Pow"            );
222        ok &= Run( PowInt,          "PowInt"         );
223        ok &= Run( print_for,       "print_for"      );
224        ok &= Run( reverse,         "reverse"        );
225        ok &= Run( rev_sparse_jac,  "rev_sparse_jac" );
226        ok &= Run( RevTwo,          "RevTwo"         );
227        ok &= Run( RombergOne,      "RombergOne"     );
228        ok &= Run( Rosen34,         "Rosen34"        );
229        ok &= Run( Runge45,         "Runge45"        );
230        ok &= Run( SimpleVector,    "SimpleVector"   );
231        ok &= Run( Sin,             "Sin"            );
232        ok &= Run( SinCos,          "SinCos"         );
233        ok &= Run( Sinh,            "Sinh"           );
234        ok &= Run( sparse_hessian,  "sparse_hessian" );
235        ok &= Run( sparse_jacobian, "sparse_jacobian");
236        ok &= Run( sparse_vec_ad,   "sparse_vec_ad"  );
237        ok &= Run( Sqrt,            "Sqrt"           );
238        ok &= Run( std_math,        "std_math"       );
239        ok &= Run( Sub,             "Sub"            );
240        ok &= Run( SubEq,           "SubEq"          );
241        ok &= Run( SubZero,         "SubZero"        );
242        ok &= Run( tan,             "tan"            );
243        ok &= Run( to_string,       "to_string"      );
244        ok &= Run( track_new_del,   "track_new_del"  );
245        ok &= Run( Value,           "Value"          );
246        ok &= Run( VecAD,           "VecAD"          );
247        ok &= Run( VecADPar,        "VecADPar"       );
248        ok &= Run( VecUnary,        "VecUnary"       );
249        ok &= Run( zdouble,         "zdouble"        );
250# ifdef CPPAD_ADOLC_TEST
251        ok &= Run( base_adolc,      "base_adolc"     );
252# endif
253# ifdef CPPAD_IPOPT_TEST
254        ok &= Run( ipopt_solve,     "ipopt_solve"    );
255# endif
256# ifdef CPPAD_OPENMP_TEST
257        ok &= Run( alloc_openmp,    "alloc_openmp"   );
258# endif
259# ifdef CPPAD_EIGEN_TEST
260        ok &= Run( cppad_eigen,     "cppad_eigen"    );
261        ok &= Run( eigen_mat_inv,   "eigen_mat_inv"  );
262# endif
263# if ! CPPAD_EIGENVECTOR
264        ok &= Run( test_vector, "test_vector" );
265# endif
266
267        // local sub-directory
268        ok &= Run( test_vector,      "test_vector"   );
269
270        // check for errors
271        using std::cout;
272        using std::endl;
273        assert( ok || (Run_error_count > 0) );
274        if( CppAD::thread_alloc::free_all() )
275        {       Run_ok_count++;
276                cout << "OK:    " << "No memory leak detected" << endl;
277        }
278        else
279        {       ok = false;
280                Run_error_count++;
281                cout << "Error: " << "memory leak detected" << endl;
282        }
283        // Run base_require after memory leak check because base_alloc.hpp uses
284        // thread_alloc to allocate memory for static copies of nan.
285        ok &= Run( base_alloc_test, "base_alloc"     );
286        // convert int(size_t) to avoid warning on _MSC_VER systems
287        if( ok )
288                cout << "All " << int(Run_ok_count) << " tests passed." << endl;
289        else    cout << int(Run_error_count) << " tests failed." << endl;
290
291        return static_cast<int>( ! ok );
292
293}
294// END PROGRAM
Note: See TracBrowser for help on using the repository browser.