Code-Eli  0.3.6
fd_test_suite.hpp
Go to the documentation of this file.
1 /*********************************************************************************
2 * Copyright (c) 2013 David D. Marshall <ddmarsha@calpoly.edu>
3 *
4 * All rights reserved. This program and the accompanying materials
5 * are made available under the terms of the Eclipse Public License v1.0
6 * which accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
8 *
9 * Contributors:
10 * David D. Marshall - initial code and implementation
11 ********************************************************************************/
12 
13 #ifndef mutil_fd_testsuite_hpp
14 #define mutil_fd_testsuite_hpp
15 
16 #include <cmath> // std::pow, std::exp
17 
18 #include <typeinfo> // typeid
19 #include <string> // std::string
20 #include <sstream> // std::stringstream
21 #include <iomanip> // std::setw
22 #include <vector> // std::vector
23 
24 #include "eli/mutil/fd.hpp"
25 
26 // NOTE: Derive and implememt d1o4, d1o5, d1o6, d2o3, d2o4, d2o5, d2o6
27 // NOTE: How to extend this to multiple dimensional derivatives?
28 // NOTE: Can implement the MUSCL, FV discretization, (structured?) etc. as same type
29 
30 namespace sveli
31 {
32  namespace post
33  {
34  template<typename itn__, typename ite__, typename data__>
35  int calculate_order(itn__ itn, ite__ iteb, ite__ itee, const data__ &refrat);
36 //
37 // template<typename itn__, typename ite__, typename itr__>
38 // int calculate_order(itn__ itn, ite__ iteb, ite__ itee, itr__ itr);
39  }
40 }
41 
42 #include <cmath> // std::log
43 
44 template<typename itn__, typename ite__, typename data__>
45 int calculate_order(itn__ itn, ite__ iteb, ite__ itee, const data__ &refrat)
46 {
47  ite__ ite(iteb), itep(iteb);
48 
49  for (++ite; ite!=itee; ++ite, ++itep, ++itn)
50  (*itn)=std::log(std::abs((*itep)/(*ite)))/std::log(refrat);
51 
52  return 0;
53 }
54 
55 template<typename data__>
56 class fd_test_suite : public Test::Suite
57 {
58  protected:
59  void AddTests(const float &)
60  {
66  }
67 
68  void AddTests(const double &)
69  {
75  }
76 
77  void AddTests(const long double &)
78  {
84  }
85 
86  public:
88  {
89  // add the tests
90  AddTests(data__());
91  }
93  {
94  }
95 
96  private:
97  void d1o1_test()
98  {
99  typedef eli::mutil::fd::d1o1<data__> d1o1_type;
100 
101  std::vector<data__> dx(1); dx[0]=static_cast<data__>(1.0);
102  d1_driver("*** 1st Derivative, 1st Order Left Uniform Spacing ***", dx, d1o1_type(d1o1_type::LEFT));
103  d1_driver("*** 1st Derivative, 1st Order Right Uniform Spacing ***", dx, d1o1_type(d1o1_type::RIGHT));
104 
105  std::vector<data__> dx_factor(2); dx_factor[0]=static_cast<data__>(1.0); dx_factor[1]=static_cast<data__>(1.0);
106  d1_driver("*** 1st Derivative, 1st Order Left Uniform Spacing ***", dx_factor, d1o1_type(d1o1_type::LEFT));
107  d1_driver("*** 1st Derivative, 1st Order Right Uniform Spacing ***", dx_factor, d1o1_type(d1o1_type::RIGHT));
108  dx_factor[0]=static_cast<data__>(0.95); dx_factor[1]=static_cast<data__>(1.00);
109  d1_driver("*** 1st Derivative, 1st Order Left Mildly Non-Uniform Spacing ***", dx_factor, d1o1_type(d1o1_type::LEFT));
110  dx_factor[0]=static_cast<data__>(1.00); dx_factor[1]=static_cast<data__>(0.95);
111  d1_driver("*** 1st Derivative, 1st Order Right Mildly Non-Uniform Spacing ***", dx_factor, d1o1_type(d1o1_type::RIGHT));
112  dx_factor[0]=static_cast<data__>(0.1); dx_factor[1]=static_cast<data__>(1.00);
113  d1_driver("*** 1st Derivative, 1st Order Left Extremely Non-Uniform Spacing ***", dx_factor, d1o1_type(d1o1_type::LEFT));
114  dx_factor[0]=static_cast<data__>(1.0); dx_factor[1]=static_cast<data__>(0.1);
115  d1_driver("*** 1st Derivative, 1st Order Right Extremely Non-Uniform Spacing ***", dx_factor, d1o1_type(d1o1_type::RIGHT));
116  }
117 
118  void d1o2_test()
119  {
120  typedef eli::mutil::fd::d1o2<data__> d1o2_type;
121 
122  std::vector<data__> dx(1); dx[0]=static_cast<data__>(1.0);
123  d1_driver("*** 1st Derivative, 2nd Order Center Uniform Spacing ***", dx, d1o2_type(d1o2_type::CENTER));
124  d1_driver("*** 1st Derivative, 2nd Order Left Uniform Spacing ***", dx, d1o2_type(d1o2_type::LEFT));
125  d1_driver("*** 1st Derivative, 2nd Order Right Uniform Spacing ***", dx, d1o2_type(d1o2_type::RIGHT));
126 
127  std::vector<data__> dx_factor(3); dx_factor[0]=static_cast<data__>(1.0); dx_factor[1]=static_cast<data__>(1.0); dx_factor[2]=static_cast<data__>(1.0);
128  d1_driver("*** 1st Derivative, 2nd Order Center Uniform Spacing ***", dx_factor, d1o2_type(d1o2_type::CENTER));
129  d1_driver("*** 1st Derivative, 2nd Order Left Uniform Spacing ***", dx_factor, d1o2_type(d1o2_type::LEFT));
130  d1_driver("*** 1st Derivative, 2nd Order Right Uniform Spacing ***", dx_factor, d1o2_type(d1o2_type::RIGHT));
131  dx_factor[0]=static_cast<data__>(0.95); dx_factor[1]=static_cast<data__>(1.0); dx_factor[2]=static_cast<data__>(1.05);
132  d1_driver("*** 1st Derivative, 2nd Order Center Mildly Non-Uniform Spacing ***", dx_factor, d1o2_type(d1o2_type::CENTER));
133  dx_factor[0]=static_cast<data__>(1.025); dx_factor[1]=static_cast<data__>(0.95); dx_factor[2]=static_cast<data__>(1.00);
134  d1_driver("*** 1st Derivative, 2nd Order Left Mildly Non-Uniform Spacing ***", dx_factor, d1o2_type(d1o2_type::LEFT));
135  dx_factor[0]=static_cast<data__>(1.00); dx_factor[1]=static_cast<data__>(0.95); dx_factor[2]=static_cast<data__>(1.025);
136  d1_driver("*** 1st Derivative, 2nd Order Right Mildly Non-Uniform Spacing ***", dx_factor, d1o2_type(d1o2_type::RIGHT));
137  dx_factor[0]=static_cast<data__>(0.1); dx_factor[1]=static_cast<data__>(1.0); dx_factor[2]=static_cast<data__>(1.8);
138  d1_driver("*** 1st Derivative, 2nd Order Center Extremely Non-Uniform Spacing ***", dx_factor, d1o2_type(d1o2_type::CENTER));
139  dx_factor[0]=static_cast<data__>(0.95); dx_factor[1]=static_cast<data__>(0.1); dx_factor[2]=static_cast<data__>(1.00);
140  d1_driver("*** 1st Derivative, 2nd Order Left Extremely Non-Uniform Spacing ***", dx_factor, d1o2_type(d1o2_type::LEFT));
141  dx_factor[0]=static_cast<data__>(1.0); dx_factor[1]=static_cast<data__>(0.1); dx_factor[2]=static_cast<data__>(0.95);
142  d1_driver("*** 1st Derivative, 2nd Order Right Extremely Non-Uniform Spacing ***", dx_factor, d1o2_type(d1o2_type::RIGHT));
143  }
144 
145  void d1o3_test()
146  {
147  typedef eli::mutil::fd::d1o3<data__> d1o3_type;
148 
149  std::vector<data__> dx(1); dx[0]=static_cast<data__>(1.0);
150  d1_driver("*** 1st Derivative, 3rd Order Left Uniform Spacing ***", dx, d1o3_type(d1o3_type::LEFT));
151  d1_driver("*** 1st Derivative, 3rd Order Left-Biased Uniform Spacing ***", dx, d1o3_type(d1o3_type::LEFT_BIASED));
152  d1_driver("*** 1st Derivative, 3rd Order Right-Biased Uniform Spacing ***", dx, d1o3_type(d1o3_type::RIGHT_BIASED));
153  d1_driver("*** 1st Derivative, 3rd Order Right Uniform Spacing ***", dx, d1o3_type(d1o3_type::RIGHT));
154 
155  std::vector<data__> dx_factor(4); dx_factor[0]=static_cast<data__>(1.0); dx_factor[1]=static_cast<data__>(1.0); dx_factor[2]=static_cast<data__>(1.0); dx_factor[3]=static_cast<data__>(1.0);
156  d1_driver("*** 1st Derivative, 3rd Order Left Uniform Spacing ***", dx_factor, d1o3_type(d1o3_type::LEFT));
157  d1_driver("*** 1st Derivative, 3rd Order Left-Biased Uniform Spacing ***", dx_factor, d1o3_type(d1o3_type::LEFT_BIASED));
158  d1_driver("*** 1st Derivative, 3rd Order Right-Biased Uniform Spacing ***", dx_factor, d1o3_type(d1o3_type::RIGHT_BIASED));
159  d1_driver("*** 1st Derivative, 3rd Order Right Uniform Spacing ***", dx_factor, d1o3_type(d1o3_type::RIGHT));
160  dx_factor[0]=static_cast<data__>(2.95/3); dx_factor[1]=static_cast<data__>(1.025); dx_factor[2]=static_cast<data__>(0.95); dx_factor[3]=static_cast<data__>(1.00);
161  d1_driver("*** 1st Derivative, 3rd Order Left Mildly Non-Uniform Spacing ***", dx_factor, d1o3_type(d1o3_type::RIGHT_BIASED));
162  dx_factor[0]=static_cast<data__>(2.95/3); dx_factor[1]=static_cast<data__>(1.025); dx_factor[2]=static_cast<data__>(1.00); dx_factor[3]=static_cast<data__>(0.95);
163  d1_driver("*** 1st Derivative, 3rd Order Left-Biased Mildly Non-Uniform Spacing ***", dx_factor, d1o3_type(d1o3_type::LEFT_BIASED));
164  dx_factor[0]=static_cast<data__>(0.95); dx_factor[1]=static_cast<data__>(1.00); dx_factor[2]=static_cast<data__>(1.025); dx_factor[3]=static_cast<data__>(2.95/3);
165  d1_driver("*** 1st Derivative, 3rd Order Right-Biased Mildly Non-Uniform Spacing ***", dx_factor, d1o3_type(d1o3_type::RIGHT_BIASED));
166  dx_factor[0]=static_cast<data__>(1.00); dx_factor[1]=static_cast<data__>(0.95); dx_factor[2]=static_cast<data__>(1.025); dx_factor[3]=static_cast<data__>(2.95/3);
167  d1_driver("*** 1st Derivative, 3rd Order Right Mildly Non-Uniform Spacing ***", dx_factor, d1o3_type(d1o3_type::RIGHT));
168  dx_factor[0]=static_cast<data__>(1.2); dx_factor[1]=static_cast<data__>(0.95); dx_factor[2]=static_cast<data__>(0.1); dx_factor[3]=static_cast<data__>(1.00);
169  d1_driver("*** 1st Derivative, 3rd Order Left Extremely Non-Uniform Spacing ***", dx_factor, d1o3_type(d1o3_type::LEFT));
170  dx_factor[0]=static_cast<data__>(1.2); dx_factor[1]=static_cast<data__>(0.95); dx_factor[2]=static_cast<data__>(1.0); dx_factor[3]=static_cast<data__>(0.1);
171  d1_driver("*** 1st Derivative, 3rd Order Left-Biased Extremely Non-Uniform Spacing ***", dx_factor, d1o3_type(d1o3_type::LEFT_BIASED));
172  dx_factor[0]=static_cast<data__>(0.1); dx_factor[1]=static_cast<data__>(1.0); dx_factor[2]=static_cast<data__>(0.95); dx_factor[3]=static_cast<data__>(1.2);
173  d1_driver("*** 1st Derivative, 3rd Order Right-Biased Extremely Non-Uniform Spacing ***", dx_factor, d1o3_type(d1o3_type::RIGHT_BIASED));
174  dx_factor[0]=static_cast<data__>(1.0); dx_factor[1]=static_cast<data__>(0.1); dx_factor[2]=static_cast<data__>(0.95); dx_factor[3]=static_cast<data__>(1.2);
175  d1_driver("*** 1st Derivative, 3rd Order Right Extremely Non-Uniform Spacing ***", dx_factor, d1o3_type(d1o3_type::RIGHT));
176  }
177 
178  void d2o1_test()
179  {
180  typedef eli::mutil::fd::d2o1<data__> d2o1_type;
181 
182  std::vector<data__> dx(1); dx[0]=static_cast<data__>(1.0);
183  d1_driver("*** 2nd Derivative, 1st Order Center Uniform Spacing ***", dx, d2o1_type(d2o1_type::CENTER));
184  d1_driver("*** 2nd Derivative, 1st Order Left Uniform Spacing ***", dx, d2o1_type(d2o1_type::LEFT));
185  d1_driver("*** 2nd Derivative, 1st Order Right Uniform Spacing ***", dx, d2o1_type(d2o1_type::RIGHT));
186 
187  std::vector<data__> dx_factor(3); dx_factor[0]=static_cast<data__>(1.0); dx_factor[1]=static_cast<data__>(1.0); dx_factor[2]=static_cast<data__>(1.0);
188  d1_driver("*** 2nd Derivative, 1st Order Center Uniform Spacing ***", dx_factor, d2o1_type(d2o1_type::CENTER));
189  d1_driver("*** 2nd Derivative, 1st Order Left Uniform Spacing ***", dx_factor, d2o1_type(d2o1_type::LEFT));
190  d1_driver("*** 2nd Derivative, 1st Order Right Uniform Spacing ***", dx_factor, d2o1_type(d2o1_type::RIGHT));
191  dx_factor[0]=static_cast<data__>(0.95); dx_factor[1]=static_cast<data__>(1.0); dx_factor[2]=static_cast<data__>(1.05);
192  d1_driver("*** 2nd Derivative, 1st Order Center Mildly Non-Uniform Spacing ***", dx_factor, d2o1_type(d2o1_type::CENTER));
193  dx_factor[0]=static_cast<data__>(1.025); dx_factor[1]=static_cast<data__>(0.95); dx_factor[2]=static_cast<data__>(1.00);
194  d1_driver("*** 2nd Derivative, 1st Order Left Mildly Non-Uniform Spacing ***", dx_factor, d2o1_type(d2o1_type::LEFT));
195  dx_factor[0]=static_cast<data__>(1.00); dx_factor[1]=static_cast<data__>(0.95); dx_factor[2]=static_cast<data__>(1.025);
196  d1_driver("*** 2nd Derivative, 1st Order Right Mildly Non-Uniform Spacing ***", dx_factor, d2o1_type(d2o1_type::RIGHT));
197  dx_factor[0]=static_cast<data__>(0.1); dx_factor[1]=static_cast<data__>(1.0); dx_factor[2]=static_cast<data__>(1.8);
198  d1_driver("*** 2nd Derivative, 1st Order Center Extremely Non-Uniform Spacing ***", dx_factor, d2o1_type(d2o1_type::CENTER));
199  dx_factor[0]=static_cast<data__>(0.95); dx_factor[1]=static_cast<data__>(0.1); dx_factor[2]=static_cast<data__>(1.00);
200  d1_driver("*** 2nd Derivative, 1st Order Left Extremely Non-Uniform Spacing ***", dx_factor, d2o1_type(d2o1_type::LEFT));
201  dx_factor[0]=static_cast<data__>(1.0); dx_factor[1]=static_cast<data__>(0.1); dx_factor[2]=static_cast<data__>(0.95);
202  d1_driver("*** 2nd Derivative, 1st Order Right Extremely Non-Uniform Spacing ***", dx_factor, d2o1_type(d2o1_type::RIGHT));
203  }
204 
205  void d2o2_test()
206  {
207  typedef eli::mutil::fd::d2o2<data__> d2o2_type;
208 
209  std::vector<data__> dx(1); dx[0]=static_cast<data__>(1.0);
210  d1_driver("*** 2nd Derivative, 2nd Order Left Uniform Spacing ***", dx, d2o2_type(d2o2_type::LEFT));
211  d1_driver("*** 2nd Derivative, 2nd Order Left-Biased Uniform Spacing ***", dx, d2o2_type(d2o2_type::LEFT_BIASED));
212  d1_driver("*** 2nd Derivative, 2nd Order Right-Biased Uniform Spacing ***", dx, d2o2_type(d2o2_type::RIGHT_BIASED));
213  d1_driver("*** 2nd Derivative, 2nd Order Right Uniform Spacing ***", dx, d2o2_type(d2o2_type::RIGHT));
214 
215  std::vector<data__> dx_factor(4); dx_factor[0]=static_cast<data__>(1.0); dx_factor[1]=static_cast<data__>(1.0); dx_factor[2]=static_cast<data__>(1.0); dx_factor[3]=static_cast<data__>(1.0);
216  d1_driver("*** 2nd Derivative, 2nd Order Left Uniform Spacing ***", dx_factor, d2o2_type(d2o2_type::LEFT));
217  d1_driver("*** 2nd Derivative, 2nd Order Left-Biased Uniform Spacing ***", dx_factor, d2o2_type(d2o2_type::LEFT_BIASED));
218  d1_driver("*** 2nd Derivative, 2nd Order Right-Biased Uniform Spacing ***", dx_factor, d2o2_type(d2o2_type::RIGHT_BIASED));
219  d1_driver("*** 2nd Derivative, 2nd Order Right Uniform Spacing ***", dx_factor, d2o2_type(d2o2_type::RIGHT));
220  dx_factor[0]=static_cast<data__>(2.95/3); dx_factor[1]=static_cast<data__>(1.025); dx_factor[2]=static_cast<data__>(0.95); dx_factor[3]=static_cast<data__>(1.00);
221  d1_driver("*** 2nd Derivative, 2nd Order Left Mildly Non-Uniform Spacing ***", dx_factor, d2o2_type(d2o2_type::LEFT));
222  dx_factor[0]=static_cast<data__>(2.95/3); dx_factor[1]=static_cast<data__>(1.025); dx_factor[2]=static_cast<data__>(1.00); dx_factor[3]=static_cast<data__>(0.95);
223  d1_driver("*** 2nd Derivative, 2nd Order Left-Biased Mildly Non-Uniform Spacing ***", dx_factor, d2o2_type(d2o2_type::LEFT_BIASED));
224  dx_factor[0]=static_cast<data__>(0.95); dx_factor[1]=static_cast<data__>(1.00); dx_factor[2]=static_cast<data__>(1.025); dx_factor[3]=static_cast<data__>(2.95/3);
225  d1_driver("*** 2nd Derivative, 2nd Order Right-Biased Mildly Non-Uniform Spacing ***", dx_factor, d2o2_type(d2o2_type::RIGHT_BIASED));
226  dx_factor[0]=static_cast<data__>(1.00); dx_factor[1]=static_cast<data__>(0.95); dx_factor[2]=static_cast<data__>(1.025); dx_factor[3]=static_cast<data__>(2.95/3);
227  d1_driver("*** 2nd Derivative, 2nd Order Right Mildly Non-Uniform Spacing ***", dx_factor, d2o2_type(d2o2_type::RIGHT));
228  dx_factor[0]=static_cast<data__>(1.2); dx_factor[1]=static_cast<data__>(0.95); dx_factor[2]=static_cast<data__>(0.1); dx_factor[3]=static_cast<data__>(1.00);
229  d1_driver("*** 2nd Derivative, 2nd Order Left Extremely Non-Uniform Spacing ***", dx_factor, d2o2_type(d2o2_type::LEFT));
230  dx_factor[0]=static_cast<data__>(1.2); dx_factor[1]=static_cast<data__>(0.95); dx_factor[2]=static_cast<data__>(1.0); dx_factor[3]=static_cast<data__>(0.1);
231  d1_driver("*** 2nd Derivative, 2nd Order Left-Biased Extremely Non-Uniform Spacing ***", dx_factor, d2o2_type(d2o2_type::LEFT_BIASED));
232  dx_factor[0]=static_cast<data__>(0.1); dx_factor[1]=static_cast<data__>(1.0); dx_factor[2]=static_cast<data__>(0.95); dx_factor[3]=static_cast<data__>(1.2);
233  d1_driver("*** 2nd Derivative, 2nd Order Right-Biased Extremely Non-Uniform Spacing ***", dx_factor, d2o2_type(d2o2_type::RIGHT_BIASED));
234  dx_factor[0]=static_cast<data__>(1.0); dx_factor[1]=static_cast<data__>(0.1); dx_factor[2]=static_cast<data__>(0.95); dx_factor[3]=static_cast<data__>(1.2);
235  d1_driver("*** 2nd Derivative, 2nd Order Right Extremely Non-Uniform Spacing ***", dx_factor, d2o2_type(d2o2_type::RIGHT));
236  }
237 
238  template<typename d1__>
239  void d1_driver(const std::string &str, const std::vector<data__> &dx_factor, const d1__ &dop)
240  {
241  const size_t nnodes(dop.number_nodes());
242  const size_t nref(5);
243  const data__ x0(0.5), rrat(3.0), dx0(0.5);
244  data__ d(0);
245  size_t c;
246  std::ptrdiff_t ind0;
247  std::vector<data__> phi(nref);
248  std::vector<data__> phi_err(nref);
249  std::vector<data__> phi_te(nref);
250  std::vector<data__> dx(nref);
251  std::vector<data__> ord(nref);
252  std::vector<data__> x(nnodes);
253  std::vector<data__> dx_term(nnodes);
254  std::vector<std::ptrdiff_t> ind(nnodes);
255  bool uniform;
256 
257  // capture the mesh refinement
258  if (dx_factor.size() == 1)
259  {
260  uniform=true;
261  for (size_t i=0; i<nnodes; ++i)
262  dx_term[i]=static_cast<data__>(1.0);
263  }
264  else
265  {
266  dx_term=dx_factor;
267  uniform=true;
268  for (size_t i=1; i<dx_factor.size(); ++i)
269  {
270  if (dx_factor[i]!=dx_factor[i-1])
271  uniform=false;
272  }
273  }
274 
275  // get the index offsets
276  ind0=dop.index(ind.begin());
277 
278  for (c=0; c<nref; ++c)
279  {
280  dx[c]=dx0*std::pow(rrat,-static_cast<int>(c));
281  for (size_t i=0; i<nnodes; ++i)
282  {
283  x[i]=x0+ind[i]*dx[c]*dx_term[i];
284  phi[i]=std::exp(x[i]);
285  }
286 
287  TEST_ASSERT(x0==x[ind0]);
288 
289  if (dx_factor.size() == 1)
290  {
291  int tertn;
292  dop.evaluate(d, phi.begin(), dx[c]);
293  tertn=dop.truncation_error(phi_te[c], std::exp(x[ind0]), dx[c]);
294  if (tertn>0)
295  {
296  // need to evaluate the order+tertn derivative
297  phi_te[c]*=std::exp(x[ind0]);
298  }
299  }
300  else
301  {
302  dop.evaluate(d, phi.begin(), x.begin());
303  dop.truncation_error(phi_te[c], std::exp(x[ind0]), x.begin());
304  }
305  phi_err[c]=std::exp(x[ind0])-d;
306  }
307 
308  // calculate the order of accuracy
309  calculate_order(ord.begin()+1, phi_err.begin(), phi_err.end(), rrat);
310  if (typeid(data__)==typeid(float))
311  {
312  // for float, if truncation error is too small, then will hit numerical precision limits
313  if (std::abs(phi_te[(nref-1)/2])<5e-3)
314  {
315  TEST_ASSERT(true);
316  }
317  else
318  {
319  TEST_ASSERT_DELTA_MSG(ord[(nref-1)/2], dop.order(uniform), static_cast<data__>(5.0e-1), str.c_str());
320  }
321  }
322  else
323  {
324  TEST_ASSERT_DELTA_MSG(ord[nref-1], dop.order(uniform), static_cast<data__>(5.0e-2), str.c_str());
325  }
326  }
327 };
328 
329 #endif
330 
int calculate_order(itn__ itn, ite__ iteb, ite__ itee, const data__ &refrat)
Definition: fd_test_suite.hpp:45
void d1o3_test()
Definition: fd_test_suite.hpp:145
~fd_test_suite()
Definition: fd_test_suite.hpp:92
Definition: d1o3.hpp:27
Definition: fd_test_suite.hpp:56
void d1o1_test()
Definition: fd_test_suite.hpp:97
void d1_driver(const std::string &str, const std::vector< data__ > &dx_factor, const d1__ &dop)
Definition: fd_test_suite.hpp:239
void d2o2_test()
Definition: fd_test_suite.hpp:205
int calculate_order(itn__ itn, ite__ iteb, ite__ itee, const data__ &refrat)
Definition: fd_test_suite.hpp:45
void d1o2_test()
Definition: fd_test_suite.hpp:118
Definition: fd_test_suite.hpp:30
Definition: d1o2.hpp:27
Definition: d2o2.hpp:27
fd_test_suite()
Definition: fd_test_suite.hpp:87
void AddTests(const float &)
Definition: fd_test_suite.hpp:59
void AddTests(const long double &)
Definition: fd_test_suite.hpp:77
Definition: d1o1.hpp:27
void AddTests(const double &)
Definition: fd_test_suite.hpp:68
Definition: d2o1.hpp:27
void d2o1_test()
Definition: fd_test_suite.hpp:178