testAugerUnitParser.cc
Go to the documentation of this file.
1 #include <cppunit/extensions/HelperMacros.h>
2 
3 #include <boost/assign/std/vector.hpp>
4 #include <boost/assign/list_of.hpp>
5 
6 #include <tst/Verify.h>
7 #include <utl/UnitGrammar.h>
8 #include <utl/ErrorLogger.h>
9 #include <utl/AugerException.h>
10 #include <utl/SymbolTable.h>
11 
12 #include <map>
13 #include <string>
14 #include <iostream>
15 
16 using std::map;
17 using std::vector;
18 using std::string;
19 using namespace utl;
20 using namespace tst;
21 using namespace boost::assign;
22 
23 
24 #define ASSERT_CLOSE(x, y) CPPUNIT_ASSERT(Verify<CloseTo>(x, y))
25 #define ASSERT_NOTCLOSE(x, y) CPPUNIT_ASSERT(Verify<Not<CloseTo> >(x, y))
26 
27 
28 
29 
30 
31 class AugerUnitParserTest : public CppUnit::TestFixture {
32 
33  CPPUNIT_TEST_SUITE(AugerUnitParserTest);
34  CPPUNIT_TEST(testParsing);
35  CPPUNIT_TEST(testFailure);
36  CPPUNIT_TEST_SUITE_END();
37 
38 public:
39  void
41  {
43  }
44 
45  void
46  tearDown() { }
47 
48 
49  void
51  {
52  const map<string, double> expressionValue =
53  map_list_of
54  ("1000*pascal", 1000*pascal)
55  ("100*pascal", 100*pascal)
56  ("1.5*meter", 1.5*meter)
57  ("1/(cm2*s*sr*GeV)", 1/(cm2*s*sr*GeV))
58  ("1/(cm^2*s*sr*MeV)", 1/(pow(cm,2)*s*sr*MeV))
59  ("1/(cm2*s*steradian)", 1/(cm2*s*steradian))
60  ("1e-6*sr", 1e-6*sr)
61  ("1/m", 1/m)
62  ("1/(m2*s*sr*GeV)", 1/(m2*s*sr*GeV))
63  ("1/meter", 1/meter)
64  ("1/MeV", 1/MeV)
65  ("1/m/m/deg/deg/microsecond", 1/m/m/deg/deg/microsecond)
66  ("(2.0^2.0)^(2.0^2.0)", pow(pow(2.0,2.0),pow(2.0,2.0)))
67  ("ampere", ampere)
68  ("candela", candela)
69  ("cm", cm)
70  ("deg", deg)
71  ("degree", degree)
72  ("EeV", EeV)
73  ("eV", eV)
74  ("g/cm/cm", g/cm/cm)
75  ("g/cm/cm/cm", g/cm/cm/cm)
76  ("GeV", GeV)
77  ("GeV/m", GeV/m)
78  ("hertz", hertz)
79  ("Hz", Hz)
80  ("joule", joule)
81  ("kelvin", kelvin)
82  ("kg", kg)
83  ("kHz", kHz)
84  ("kilometer", kilometer)
85  ("kilometer/hour", kilometer/hour)
86  ("km", km)
87  ("m", m)
88  ("m2/kg", m2/kg)
89  ("m3/(kg*kelvin^0.5)", m3/(kg*sqrt(kelvin)))
90  ("megahertz", megahertz)
91  ("meter", meter)
92  ("meter*(3^0.5)/2", meter*(sqrt(3))/2)
93  ("meter/second", meter/second)
94  ("MeV", MeV)
95  ("MHz", MHz)
96  ("microsecond", microsecond)
97  ("mm", mm)
98  ("m*m*deg*deg", m*m*deg*deg)
99  ("ms", ms)
100  ("nanometer", nanometer)
101  ("nanosecond", nanosecond)
102  ("ns", ns)
103  ("perCent", perCent)
104  ("radian", radian)
105  ("s", s)
106  ("sr*km2", sr*km2)
107  ("V", V)
108  ("volt", volt)
109  ("s*GeV", s*GeV)
110  ("s*TeV", s*TeV)
111  ("km * m * m", km * m * m)
112  ("(km) * m * m", (km) * m * m)
113  ("(km * m) * m", (km * m) * m)
114  ("(km * m * m)", (km * m * m))
115  ("km/kg", km/kg)
116  ("km / kg", km/kg)
117  ("km / kg", km/kg)
118  ("g/(cm*cm*cm)", g/(cm*cm*cm))
119  ("g/(cm2*cm)", g/(cm2*cm))
120  ("g/cm3", g/cm3)
121  ("kilo", kilo)
122  ("nano*meter", nanometer)
123  ("milli*meter", milli*meter)
124  ("kilo*meter", kilometer)
125  ;
126 
127  //utl::AugerUnitParser& up = utl::AugerUnitParser::GetInstance();
129 
130  for (map<string, double>::const_iterator it = expressionValue.begin(), end = expressionValue.end();
131  it != end; ++it)
132  ASSERT_CLOSE(up.Evaluate(it->first), it->second);
133  }
134 
135  void
137  {
138  vector<string> expressions;
139  expressions +=
140  "1/cm2*s*sr*MeV)",
141  "1/(cm2*s*sr*OMG)",
142  "1-(cm2*s*sr*MeV)",
143  "R",
144  "d",
145  "z",
146  "q",
147  "Q",
148  "megadong",
149  "OMG/m",
150  "cm2/OMG/WTF/m/m";
151 
152  //utl::AugerUnitParser& up = utl::AugerUnitParser::GetInstance();
154 
155  for (vector<string>::const_iterator it = expressions.begin(), end = expressions.end();
156  it != end; ++it) {
157  bool throws = false;
158  try {
159  up.Evaluate(*it);
160  } catch (XMLParseException& ex) {
161  throws = true;
162  }
163  Expected();
164  CPPUNIT_ASSERT(throws);
165  }
166  }
167 
168 };
169 
170 
constexpr double second
Definition: AugerUnits.h:145
constexpr double kilo
Definition: AugerUnits.h:71
constexpr double eV
Definition: AugerUnits.h:185
constexpr double milli
Definition: AugerUnits.h:66
constexpr double mm
Definition: AugerUnits.h:113
constexpr double perCent
Definition: AugerUnits.h:282
constexpr double V
Definition: AugerUnits.h:233
constexpr double EeV
Definition: AugerUnits.h:190
constexpr double cm3
Definition: AugerUnits.h:119
constexpr double km
Definition: AugerUnits.h:125
constexpr double MHz
Definition: AugerUnits.h:159
void SetVerbosity(const EVerbosity verbosity)
Set the verbosity level.
Definition: ErrorLogger.h:88
constexpr double radian
Definition: AugerUnits.h:130
constexpr double Hz
Definition: AugerUnits.h:157
constexpr double m2
Definition: AugerUnits.h:122
double pow(const double x, const unsigned int i)
constexpr double km2
Definition: AugerUnits.h:126
Exception for errors encountered when parsing XML.
CPPUNIT_TEST_SUITE_REGISTRATION(testAiresShowerFile)
constexpr double nanometer
Definition: AugerUnits.h:102
constexpr double deg
Definition: AugerUnits.h:140
constexpr double MeV
Definition: AugerUnits.h:184
constexpr double ms
Definition: AugerUnits.h:164
constexpr double s
Definition: AugerUnits.h:163
constexpr double pascal
Definition: AugerUnits.h:212
really everything
Definition: Verbosity.h:18
constexpr double nanosecond
Definition: AugerUnits.h:143
constexpr double m3
Definition: AugerUnits.h:123
constexpr double meter
Definition: AugerUnits.h:81
constexpr double candela
Definition: AugerUnits.h:272
void Expected()
Print `Expected&#39; for expected failures.
Definition: Verify.h:85
constexpr double degree
constexpr double megahertz
Definition: AugerUnits.h:155
constexpr double kHz
Definition: AugerUnits.h:158
constexpr double g
Definition: AugerUnits.h:200
constexpr double hertz
Definition: AugerUnits.h:153
constexpr double hour
Definition: AugerUnits.h:150
constexpr double kelvin
Definition: AugerUnits.h:259
constexpr double joule
Definition: AugerUnits.h:181
constexpr double TeV
Definition: AugerUnits.h:188
constexpr double GeV
Definition: AugerUnits.h:187
#define ASSERT_CLOSE(x, y)
constexpr double volt
Definition: AugerUnits.h:229
constexpr double steradian
Definition: AugerUnits.h:134
constexpr double cm
Definition: AugerUnits.h:117
constexpr double kilometer
Definition: AugerUnits.h:93
static ErrorLogger & GetInstance()
Definition: Singleton.h:128
constexpr double sr
Definition: AugerUnits.h:139
constexpr double ampere
Definition: AugerUnits.h:221
constexpr double ns
Definition: AugerUnits.h:162
constexpr double m
Definition: AugerUnits.h:121
constexpr double microsecond
Definition: AugerUnits.h:147
constexpr double kg
Definition: AugerUnits.h:199
constexpr double cm2
Definition: AugerUnits.h:118

, generated on Tue Sep 26 2023.