Celero
TestFixture.h
1 #pragma once
2 
20 
21 #include <celero/Export.h>
22 #include <celero/Timer.h>
23 
24 #include <cstddef>
25 #include <cstdint>
26 #include <limits>
27 #include <memory>
28 #include <string>
29 #include <vector>
30 
31 // This must be included last.
32 #include <celero/ThreadLocal.h>
33 
34 namespace celero
35 {
36  class Benchmark;
37  class UserDefinedMeasurement;
38 
44  class CELERO_EXPORT TestFixture
45  {
46  public:
50  TestFixture();
51 
55  virtual ~TestFixture();
56 
57  enum class Constants : int64_t
58  {
59 #ifdef _MSC_VER
60 #if(_MSC_VER < 1900)
61  NoProblemSpaceValue = -9223372036854775807
62 #else
63  NoProblemSpaceValue = std::numeric_limits<int64_t>::min()
64 #endif
65 #else
66  NoProblemSpaceValue = std::numeric_limits<int64_t>::min()
67 #endif
68  };
69 
76  {
77  public:
78  ExperimentValue() = default;
79  ExperimentValue(int64_t v) : Value(v){};
80  ExperimentValue(int64_t v, int64_t i) : Value(v), Iterations(i){};
81 
82  virtual ~ExperimentValue() = default;
83 
85  int64_t Value{0};
86 
89  int64_t Iterations{0};
90  };
91 
103  virtual std::vector<std::shared_ptr<celero::TestFixture::ExperimentValue>> getExperimentValues() const
104  {
105  return std::vector<std::shared_ptr<celero::TestFixture::ExperimentValue>>();
106  };
107 
118  virtual double getExperimentValueResultScale() const
119  {
120  return 1.0;
121  };
122 
131  virtual void onExperimentStart(const celero::TestFixture::ExperimentValue* const x);
132 
138  virtual void onExperimentEnd();
139 
149  virtual void setUp(const celero::TestFixture::ExperimentValue* const x);
150 
154  void setExperimentTime(uint64_t x);
155 
159  uint64_t getExperimentTime() const;
160 
164  void setExperimentIterations(uint64_t x);
165 
169  uint64_t getExperimentIterations() const;
170 
178  virtual void tearDown();
179 
188  virtual uint64_t run(uint64_t threads, uint64_t iterations, const celero::TestFixture::ExperimentValue* const experimentValue);
189 
195  virtual std::vector<std::shared_ptr<UserDefinedMeasurement>> getUserDefinedMeasurements() const;
196 
200  std::vector<std::string> getUserDefinedMeasurementNames() const;
201 
202  protected:
204  virtual void UserBenchmark();
205 
209  virtual uint64_t HardCodedMeasurement() const;
210 
211  private:
212  uint64_t experimentIterations{0};
213  uint64_t experimentTime{0};
214  };
215 } // namespace celero
216 
virtual std::vector< std::shared_ptr< celero::TestFixture::ExperimentValue > > getExperimentValues() const
Allows a test fixture to supply values to use for experiments.
Definition: TestFixture.h:103
Definition: TestFixture.h:44
You can derive from this type to add your own information to the experiment value set...
Definition: TestFixture.h:75
Definition: Archive.h:25
virtual double getExperimentValueResultScale() const
Provide a units result scale of each experiment value.
Definition: TestFixture.h:118