Manak  2.0.0
manak_case.hpp
Go to the documentation of this file.
1 #ifndef MANAK_MANAK_CASE_HPP_INCLUDED
2 #define MANAK_MANAK_CASE_HPP_INCLUDED
3 
4 #include <string>
5 #include <functional>
6 #include <limits>
7 #include <list>
8 
9 #include <manak/util/timer.hpp>
13 
14 namespace manak
15 {
16 
17 class ManakCase
18 {
19  public:
20  ManakCase(const std::string& name,
21  const std::string& library_name,
22  double tolerance,
23  const size_t iterations,
24  double success_p)
25  : name(name),
26  library_name(library_name),
27  tolerance(tolerance),
28  iterations(iterations),
29  success_p(success_p)
30  {}
31 
32  template<typename T>
33  ManakCase(const std::string& name,
34  const std::string& library_name,
35  std::function<T()> run_function,
36  double tolerance,
37  const size_t iterations,
38  const double success_p)
39  : name(name),
40  library_name(library_name),
41  tolerance(tolerance),
42  iterations(iterations),
43  success_p(success_p)
44  {
45  run_functions.emplace_back("", [=](){run_function();});
46  }
47 
48  template<typename T>
49  ManakCase(const std::string& name,
50  const std::string& library_name,
51  T (run_function)(),
52  double tolerance,
53  const size_t iterations,
54  double success_p)
55  : name(name),
56  library_name(library_name),
57  tolerance(tolerance),
58  iterations(iterations),
59  success_p(success_p)
60  {
61  std::function<T()> fun(run_function);
62  run_functions.emplace_back("", [=](){fun();});
63  }
64 
65  virtual ~ManakCase() {}
66 
67  virtual std::list<utils::ObjectStore> Run() = 0;
68 
69  void AddComparisonEntry(double d)
70  {
71  to_c.push_back(d);
72  }
73 
74  const std::string& Name() const
75  {
76  return name;
77  }
78 
79  const std::string& LibraryName() const
80  {
81  return library_name;
82  }
83  const std::string& UName() const
84  {
85  return uname;
86  }
87  std::string& UName()
88  {
89  return uname;
90  }
91 
92  protected:
93  std::string name;
94  std::string uname;
95  std::string library_name;
96  std::list<std::pair<std::string, std::function<void()>>> run_functions;
97  double tolerance;
98  size_t iterations;
99  double success_p;
100 
101  std::vector<double> to_c;
102 };
103 
104 }
105 
106 #endif // MANAK_MANAK_CASE_HPP_INCLUDED
ManakCase(const std::string &name, const std::string &library_name, double tolerance, const size_t iterations, double success_p)
Definition: manak_case.hpp:20
std::string & UName()
Definition: manak_case.hpp:87
std::vector< double > to_c
Definition: manak_case.hpp:101
void AddComparisonEntry(double d)
Definition: manak_case.hpp:69
const std::string & Name() const
Definition: manak_case.hpp:74
ManakCase(const std::string &name, const std::string &library_name, T(run_function)(), double tolerance, const size_t iterations, double success_p)
Definition: manak_case.hpp:49
std::string name
Definition: manak_case.hpp:93
const std::string & UName() const
Definition: manak_case.hpp:83
virtual ~ManakCase()
Definition: manak_case.hpp:65
ManakCase(const std::string &name, const std::string &library_name, std::function< T()> run_function, double tolerance, const size_t iterations, const double success_p)
Definition: manak_case.hpp:33
virtual std::list< utils::ObjectStore > Run()=0
std::string uname
Definition: manak_case.hpp:94
std::list< std::pair< std::string, std::function< void()> > > run_functions
Definition: manak_case.hpp:96
std::string library_name
Definition: manak_case.hpp:95
const std::string & LibraryName() const
Definition: manak_case.hpp:79