File: example.cpp

package info (click to toggle)
cppad 2026.00.00.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 11,584 kB
  • sloc: cpp: 112,960; sh: 6,146; ansic: 179; python: 71; sed: 12; makefile: 10
file content (131 lines) | stat: -rw-r--r-- 3,736 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
// SPDX-FileCopyrightText: Bradley M. Bell <bradbell@seanet.com>
// SPDX-FileContributor: 2003-22 Bradley M. Bell
// ----------------------------------------------------------------------------
/*
{xrst_begin speed_example.cpp}

Speed Examples and Tests Driver
###############################

Running These Tests
*******************
After executing the :ref:`cmake-name` command
form the :ref:`download@Distribution Directory`,
you can build and run these tests with the commands::

   cd build
   make check_speed_example

Note that your choice of :ref:`cmake@generator` may require using
an different version of make; e.g., ``ninja`` .

{xrst_literal
   // BEGIN C++
   // END C++
}

{xrst_end speed_example.cpp}
-------------------------------------------------------------------------------
*/
// BEGIN C++

# include <cppad/cppad.hpp>

// various example routines
extern bool det_of_minor(void);
extern bool det_by_lu(void);
extern bool det_by_minor(void);
extern bool elapsed_seconds(void);
extern bool mat_sum_sq(void);
extern bool ode_evaluate(void);
extern bool sparse_hes_fun(void);
extern bool sparse_jac_fun(void);
extern bool speed_test(void);
extern bool time_test(void);

namespace {
   // function that runs one test
   size_t Run_ok_count    = 0;
   size_t Run_error_count = 0;
   const char* exception_list[] = {
      "elapsed_seconds",
      "speed_test",
      "time_test"
   };
   size_t n_exception = sizeof(exception_list) / sizeof(exception_list[0]);
   bool Run(bool TestOk(void), std::string name)
   {  bool ok               = true;
      std::streamsize width =  20;
      std::cout.width( width );
      std::cout.setf( std::ios_base::left );
      std::cout << name;
      bool exception = false;
      for(size_t i = 0; i < n_exception; i++)
         exception |= exception_list[i] == name;
      //
      ok &= name.size() < size_t(width);
      ok &= TestOk();
      if( ok )
      {  std::cout << "OK" << std::endl;
         Run_ok_count++;
      }
      else if ( exception )
      {  std::cout << "Error: perhaps too many other programs running";
         std::cout << std::endl;
         // no change to Run_ok_count
         ok = true;
      }
      else
      {  std::cout << "Error" << std::endl;
         Run_error_count++;
      }
      return ok;
   }
}

// main program that runs all the tests
int main(void)
{  bool ok = true;
   using std::cout;
   using std::endl;

   // This line used by test_one.sh

   ok &= Run(det_of_minor,          "det_of_minor"   );
   ok &= Run(det_by_minor,         "det_by_minor"    );
   ok &= Run(det_by_lu,               "det_by_lu"    );
   ok &= Run(elapsed_seconds,   "elapsed_seconds"    );
   ok &= Run(mat_sum_sq,             "mat_sum_sq"    );
   ok &= Run(ode_evaluate,         "ode_evaluate"    );
   ok &= Run(sparse_hes_fun,    "sparse_hes_fun"     );
   ok &= Run(sparse_jac_fun,    "sparse_jac_fun"     );
   ok &= Run(speed_test,             "speed_test"    );
   ok &= Run(time_test,               "time_test"    );
   assert( ok || (Run_error_count > 0) );

   // check for memory leak in previous calculations
   if( ! CppAD::thread_alloc::free_all() )
   {  ok = false;
      cout << "Error: memory leak detected" << endl;
   }

   if( ok )
   {  cout << "Check above to see if all " << int(Run_ok_count)
      << " tests passed.\n";
      cout << "possible exceptions are: " << exception_list[0];
      for(size_t i = 1; i < n_exception; ++i)
         cout << ", " << exception_list[i];
      cout << endl;
   }
   else
      cout << int(Run_error_count) << " tests failed.";
   cout << endl;

   if(ok)
      return EXIT_SUCCESS;
   else
      return EXIT_FAILURE;
}

// END C++