Validatrix.h
Go to the documentation of this file.
1 #ifndef _tst_Validatrix_h_
2 #define _tst_Validatrix_h_
3 
4 #include <utl/Trace.h>
5 #include <utl/TimeDistribution.h>
6 #include <string>
7 #include <vector>
8 #include <iostream>
9 #include <sstream>
10 
11 
12 namespace tst {
13 
14  namespace Validatrix {
15 
16  /*
17  Testing utilities
18  \author Darko Veberic
19  \date 13 July 2009
20  */
21 
22  const double kDefaultTolerance = 1e-6;
23 
24 
25  enum CompareType {
26  eEqual = 0,
27  eAbsolute = 1,
29  };
30 
31 
32  template<typename T>
33  struct Type;
34 
35  template<>
36  struct Type<char> { static const char Code = 'i'; };
37 
38  template<>
39  struct Type<short> { static const char Code = 'i'; };
40 
41  template<>
42  struct Type<int> { static const char Code = 'i'; };
43 
44  template<>
45  struct Type<long> { static const char Code = 'i'; };
46 
47  template<>
48  struct Type<unsigned char> { static const char Code = 'u'; };
49 
50  template<>
51  struct Type<unsigned short> { static const char Code = 'u'; };
52 
53  template<>
54  struct Type<unsigned int> { static const char Code = 'u'; };
55 
56  template<>
57  struct Type<unsigned long> { static const char Code = 'u'; };
58 
59  template<>
60  struct Type<float> { static char const Code = 'd'; };
61 
62  template<>
63  struct Type<double> { static char const Code = 'd'; };
64 
65 
66  inline
67  char
69  {
70  const char comp[] = { 'e', 'a', 'r' };
71  return comp[c];
72  }
73 
74 
75  template<typename T>
76  inline
77  std::string
78  Pack(const std::size_t n, const T* const v, const CompareType c,
79  const double tolerance = kDefaultTolerance)
80  {
81  if (!n)
82  return "";
83  std::ostringstream os;
84  os << Type<T>::Code;
85  if (n > 1)
86  os << '[' << n << ']';
87  os << CompareCode(c);
88  if (c != eEqual && tolerance != kDefaultTolerance)
89  os << '@' << tolerance;
90  os << ' ';
91  for (std::size_t i = 0; i < n; ++i)
92  os << v[i] << ' ';
93  return os.str();
94  }
95 
96 
97  template<typename T>
98  inline std::string Pack(const T& value, const CompareType c,
99  const double tolerance = kDefaultTolerance)
100  { return Pack(1, &value, c, tolerance); }
101 
102 
103  template<typename T>
104  inline std::string Pack(const utl::Trace<T>& trace, const CompareType c,
105  const double tolerance = kDefaultTolerance)
106  { return Pack(trace.GetSize(), &(*trace.Begin()), c, tolerance); }
107 
108 
109  template<typename T>
110  inline std::string Pack(const std::vector<T>& vec, const CompareType c,
111  const double tolerance = kDefaultTolerance)
112  { return Pack(vec.size(), &vec.front(), c, tolerance); }
113 
114 
115  template<typename T>
116  inline
117  std::string
119  const double tolerance = kDefaultTolerance)
120  {
121  std::string res;
122  for (const auto& tv : td.SparseRange()) {
123  res.append(Pack(tv.template get<0>(), eEqual));
124  res.append(Pack(tv.template get<1>(), c, tolerance));
125  }
126  return res;
127  }
128 
129 
130  template<typename T>
131  inline std::string BeEqual(const T& value)
132  { return Pack(value, eEqual); }
133 
134 
135  template<typename T>
136  inline std::string BeEqual(const std::size_t n, const T* const v)
137  { return Pack(n, v, eEqual); }
138 
139 
140  template<typename T>
141  inline std::string BeCloseAbs(const T& value,
142  const double tolerance = kDefaultTolerance)
143  { return Pack(value, eAbsolute, tolerance); }
144 
145 
146  template<typename T>
147  inline std::string CloseAbs(const std::size_t n, const T* const v,
148  const double tolerance = kDefaultTolerance)
149  { return Pack(n, v, eAbsolute, tolerance); }
150 
151 
152  template<typename T>
153  inline std::string BeCloseRel(const T& value,
154  const double tolerance = kDefaultTolerance)
155  { return Pack(value, eRelative, tolerance); }
156 
157 
158  template<typename T>
159  inline std::string BeCloseRel(const std::size_t n, const T* const v,
160  const double tolerance = kDefaultTolerance)
161  { return Pack(n, v, eRelative, tolerance); }
162 
163 
164  std::string BeLabel(const std::string& tag);
165 
166 
167  bool Compare(const std::string& oldFilename, const std::string& newFilename, const bool failOnFirst = true);
168 
169 
170  bool Compare(std::istream& s1, std::istream& s2, const bool failOnFirst = true);
171 
172  }
173 
174 }
175 
176 
177 #endif
std::string BeCloseRel(const T &value, const double tolerance=kDefaultTolerance)
Definition: Validatrix.h:153
char CompareCode(const CompareType c)
Definition: Validatrix.h:68
Histogram class for time distributions with suppressed empty bins.
std::string BeCloseAbs(const T &value, const double tolerance=kDefaultTolerance)
Definition: Validatrix.h:141
Iterator Begin()
Definition: Trace.h:75
bool Compare(const string &oldFilename, const string &newFilename, const bool failOnFirst)
std::string BeLabel(const string &tag)
std::string Pack(const std::size_t n, const T *const v, const CompareType c, const double tolerance=kDefaultTolerance)
Definition: Validatrix.h:78
SizeType GetSize() const
Definition: Trace.h:156
const double kDefaultTolerance
Definition: Validatrix.h:22
std::string BeEqual(const T &value)
Definition: Validatrix.h:131
Template class for a FADC data or calibrated data container. Use the typedefs (TraceD, TraceI, etc.) defined in Trace-fwd.h.
Definition: Trace-fwd.h:19
std::string CloseAbs(const std::size_t n, const T *const v, const double tolerance=kDefaultTolerance)
Definition: Validatrix.h:147
Validate SdCalibrator.

, generated on Tue Sep 26 2023.