1
#include "gtest/gtest.h"
3
#include "App/ExpressionParser.h"
4
#include "App/ExpressionTokenizer.h"
7
TEST(Expression, tokenize)
9
EXPECT_EQ(App::ExpressionTokenizer().perform(QString::fromUtf8(""), 10), QString());
11
EXPECT_EQ(App::ExpressionTokenizer().perform(QString::fromUtf8("0.00000 \xC2\xB0-"), 10), QString());
12
EXPECT_EQ(App::ExpressionTokenizer().perform(QString::fromUtf8("0.00000 \xC2\xB0-s"), 11), QString::fromLatin1("s"));
13
EXPECT_EQ(App::ExpressionTokenizer().perform(QString::fromUtf8("0.00000 \xC2\xB0-ss"), 12), QString::fromLatin1("ss"));
14
EXPECT_EQ(App::ExpressionTokenizer().perform(QString::fromUtf8("0.00000 deg"), 5), QString());
15
EXPECT_EQ(App::ExpressionTokenizer().perform(QString::fromUtf8("0.00000 deg"), 11), QString::fromLatin1("deg"));
18
TEST(Expression, tokenizeQuantity)
20
auto result = App::ExpressionParser::tokenize("0.00000 deg");
21
EXPECT_EQ(result.size(), 2);
22
EXPECT_EQ(std::get<0>(result[0]), App::ExpressionParser::NUM);
23
EXPECT_EQ(std::get<1>(result[0]), 0);
24
EXPECT_EQ(std::get<2>(result[0]), "0.00000");
25
EXPECT_EQ(std::get<0>(result[1]), App::ExpressionParser::UNIT);
26
EXPECT_EQ(std::get<1>(result[1]), 8);
27
EXPECT_EQ(std::get<2>(result[1]), "deg");
30
TEST(Expression, tokenizeFunc)
32
auto result = App::ExpressionParser::tokenize("sin(0.00000)");
33
EXPECT_EQ(result.size(), 3);
34
EXPECT_EQ(std::get<0>(result[0]), App::ExpressionParser::FUNC);
35
EXPECT_EQ(std::get<1>(result[0]), 0);
36
EXPECT_EQ(std::get<2>(result[0]), "sin(");
37
EXPECT_EQ(std::get<0>(result[1]), App::ExpressionParser::NUM);
38
EXPECT_EQ(std::get<1>(result[1]), 4);
39
EXPECT_EQ(std::get<2>(result[1]), "0.00000");
40
EXPECT_EQ(std::get<1>(result[2]), 11);
41
EXPECT_EQ(std::get<2>(result[2]), ")");
44
TEST(Expression, tokenizeOne)
46
auto result = App::ExpressionParser::tokenize("1");
47
EXPECT_EQ(result.size(), 1);
48
EXPECT_EQ(std::get<0>(result[0]), App::ExpressionParser::ONE);
49
EXPECT_EQ(std::get<1>(result[0]), 0);
50
EXPECT_EQ(std::get<2>(result[0]), "1");
53
TEST(Expression, tokenizeNum)
55
auto result = App::ExpressionParser::tokenize("1.2341");
56
EXPECT_EQ(result.size(), 1);
57
EXPECT_EQ(std::get<0>(result[0]), App::ExpressionParser::NUM);
58
EXPECT_EQ(std::get<1>(result[0]), 0);
59
EXPECT_EQ(std::get<2>(result[0]), "1.2341");
62
TEST(Expression, tokenizeID)
64
auto result = App::ExpressionParser::tokenize("Something");
65
EXPECT_EQ(result.size(), 1);
66
EXPECT_EQ(std::get<0>(result[0]), App::ExpressionParser::IDENTIFIER);
67
EXPECT_EQ(std::get<1>(result[0]), 0);
68
EXPECT_EQ(std::get<2>(result[0]), "Something");
71
TEST(Expression, tokenizeUnit)
73
auto result = App::ExpressionParser::tokenize("km");
74
EXPECT_EQ(result.size(), 1);
75
EXPECT_EQ(std::get<0>(result[0]), App::ExpressionParser::UNIT);
76
EXPECT_EQ(std::get<1>(result[0]), 0);
77
EXPECT_EQ(std::get<2>(result[0]), "km");
80
TEST(Expression, tokenizeUSUnit)
82
auto result = App::ExpressionParser::tokenize("\"");
83
EXPECT_EQ(result.size(), 1);
84
EXPECT_EQ(std::get<0>(result[0]), App::ExpressionParser::USUNIT);
85
EXPECT_EQ(std::get<1>(result[0]), 0);
86
EXPECT_EQ(std::get<2>(result[0]), "\"");
89
TEST(Expression, tokenizeInt)
91
auto result = App::ExpressionParser::tokenize("123456");
92
EXPECT_EQ(result.size(), 1);
93
EXPECT_EQ(std::get<0>(result[0]), App::ExpressionParser::INTEGER);
94
EXPECT_EQ(std::get<1>(result[0]), 0);
95
EXPECT_EQ(std::get<2>(result[0]), "123456");
98
TEST(Expression, tokenizePi)
100
auto result = App::ExpressionParser::tokenize("pi");
101
EXPECT_EQ(result.size(), 1);
102
EXPECT_EQ(std::get<0>(result[0]), App::ExpressionParser::CONSTANT);
103
EXPECT_EQ(std::get<1>(result[0]), 0);
104
EXPECT_EQ(std::get<2>(result[0]), "pi");
107
TEST(Expression, tokenizeE)
109
auto result = App::ExpressionParser::tokenize("e");
110
EXPECT_EQ(result.size(), 1);
111
EXPECT_EQ(std::get<0>(result[0]), App::ExpressionParser::CONSTANT);
112
EXPECT_EQ(std::get<1>(result[0]), 0);
113
EXPECT_EQ(std::get<2>(result[0]), "e");
116
TEST(Expression, tokenizeConstant)
118
auto result = App::ExpressionParser::tokenize("True False true false None");
119
EXPECT_EQ(result.size(), 5);
120
EXPECT_EQ(std::get<0>(result[0]), App::ExpressionParser::CONSTANT);
121
EXPECT_EQ(std::get<1>(result[0]), 0);
122
EXPECT_EQ(std::get<2>(result[0]), "True");
123
EXPECT_EQ(std::get<0>(result[1]), App::ExpressionParser::CONSTANT);
124
EXPECT_EQ(std::get<0>(result[2]), App::ExpressionParser::CONSTANT);
125
EXPECT_EQ(std::get<0>(result[3]), App::ExpressionParser::CONSTANT);
126
EXPECT_EQ(std::get<0>(result[4]), App::ExpressionParser::CONSTANT);
129
TEST(Expression, tokenizeEqual)
131
auto result = App::ExpressionParser::tokenize("==");
132
EXPECT_EQ(result.size(), 1);
133
EXPECT_EQ(std::get<0>(result[0]), App::ExpressionParser::EQ);
134
EXPECT_EQ(std::get<1>(result[0]), 0);
135
EXPECT_EQ(std::get<2>(result[0]), "==");
138
TEST(Expression, tokenizeNotEqual)
140
auto result = App::ExpressionParser::tokenize("!=");
141
EXPECT_EQ(result.size(), 1);
142
EXPECT_EQ(std::get<0>(result[0]), App::ExpressionParser::NEQ);
143
EXPECT_EQ(std::get<1>(result[0]), 0);
144
EXPECT_EQ(std::get<2>(result[0]), "!=");
147
TEST(Expression, tokenizeLessThan)
149
auto result = App::ExpressionParser::tokenize("<");
150
EXPECT_EQ(result.size(), 1);
151
EXPECT_EQ(std::get<0>(result[0]), App::ExpressionParser::LT);
152
EXPECT_EQ(std::get<1>(result[0]), 0);
153
EXPECT_EQ(std::get<2>(result[0]), "<");
156
TEST(Expression, tokenizeLessThanEqual)
158
auto result = App::ExpressionParser::tokenize("<=");
159
EXPECT_EQ(result.size(), 1);
160
EXPECT_EQ(std::get<0>(result[0]), App::ExpressionParser::LTE);
161
EXPECT_EQ(std::get<1>(result[0]), 0);
162
EXPECT_EQ(std::get<2>(result[0]), "<=");
165
TEST(Expression, tokenizeGreaterThan)
167
auto result = App::ExpressionParser::tokenize(">");
168
EXPECT_EQ(result.size(), 1);
169
EXPECT_EQ(std::get<0>(result[0]), App::ExpressionParser::GT);
170
EXPECT_EQ(std::get<1>(result[0]), 0);
171
EXPECT_EQ(std::get<2>(result[0]), ">");
174
TEST(Expression, tokenizeGreaterThanEqual)
176
auto result = App::ExpressionParser::tokenize(">=");
177
EXPECT_EQ(result.size(), 1);
178
EXPECT_EQ(std::get<0>(result[0]), App::ExpressionParser::GTE);
179
EXPECT_EQ(std::get<1>(result[0]), 0);
180
EXPECT_EQ(std::get<2>(result[0]), ">=");
183
TEST(Expression, tokenizeMinus)
185
auto result = App::ExpressionParser::tokenize("1-1");
186
EXPECT_EQ(result.size(), 3);
187
EXPECT_EQ(std::get<0>(result[1]), App::ExpressionParser::MINUSSIGN);
188
EXPECT_EQ(std::get<1>(result[1]), 1);
189
EXPECT_EQ(std::get<2>(result[1]), "-");
192
TEST(Expression, tokenizeCell1)
194
auto result = App::ExpressionParser::tokenize("$A$12");
195
EXPECT_EQ(result.size(), 1);
196
EXPECT_EQ(std::get<0>(result[0]), App::ExpressionParser::CELLADDRESS);
197
EXPECT_EQ(std::get<1>(result[0]), 0);
198
EXPECT_EQ(std::get<2>(result[0]), "$A$12");
201
TEST(Expression, tokenizeCell2)
203
auto result = App::ExpressionParser::tokenize("A$12");
204
EXPECT_EQ(result.size(), 1);
205
EXPECT_EQ(std::get<0>(result[0]), App::ExpressionParser::CELLADDRESS);
206
EXPECT_EQ(std::get<1>(result[0]), 0);
207
EXPECT_EQ(std::get<2>(result[0]), "A$12");
210
TEST(Expression, tokenizeCell3)
212
auto result = App::ExpressionParser::tokenize("$A12");
213
EXPECT_EQ(result.size(), 1);
214
EXPECT_EQ(std::get<0>(result[0]), App::ExpressionParser::CELLADDRESS);
215
EXPECT_EQ(std::get<1>(result[0]), 0);
216
EXPECT_EQ(std::get<2>(result[0]), "$A12");
219
TEST(Expression, tokenizeString)
221
auto result = App::ExpressionParser::tokenize("<<Test>>");
222
EXPECT_EQ(result.size(), 1);
223
EXPECT_EQ(std::get<0>(result[0]), App::ExpressionParser::STRING);
224
EXPECT_EQ(std::get<1>(result[0]), 0);
225
EXPECT_EQ(std::get<2>(result[0]), "<<Test>>");
228
TEST(Expression, tokenizeExponent)
233
TEST(Expression, tokenizeNumAndUnit)
238
TEST(Expression, tokenizePos)
243
TEST(Expression, tokenizeNeg)
248
TEST(Expression, tokenizePi_rad)
250
EXPECT_EQ(App::ExpressionTokenizer().perform(QString::fromLatin1("p"), 1), QString::fromLatin1("p"));
251
EXPECT_EQ(App::ExpressionTokenizer().perform(QString::fromLatin1("pi"), 2), QString());
252
EXPECT_EQ(App::ExpressionTokenizer().perform(QString::fromLatin1("pi "), 3), QString());
253
EXPECT_EQ(App::ExpressionTokenizer().perform(QString::fromLatin1("pi r"), 4), QString::fromLatin1("r"));
254
EXPECT_EQ(App::ExpressionTokenizer().perform(QString::fromLatin1("pi ra"), 5), QString::fromLatin1("ra"));
255
EXPECT_EQ(App::ExpressionTokenizer().perform(QString::fromLatin1("pi rad"), 6), QString::fromLatin1("rad"));
256
EXPECT_EQ(App::ExpressionTokenizer().perform(QString::fromLatin1("pi rad"), 2), QString());
259
TEST(Expression, toString)
261
App::UnitExpression expr{nullptr, Base::Quantity{}, "pi rad"};
262
EXPECT_EQ(expr.toString(), "pi rad");
265
TEST(Expression, test_pi_rad)
267
auto constant = std::make_unique<App::ConstantExpression>(nullptr, "pi");
268
auto unit = std::make_unique<App::UnitExpression>(nullptr, Base::Quantity{}, "rad");
269
auto op = std::make_unique<App::OperatorExpression>(nullptr, constant.get(), App::OperatorExpression::UNIT, unit.get());
270
EXPECT_EQ(op->toString(), "pi rad");
274
TEST(Expression, test_e_rad)
276
auto constant = std::make_unique<App::ConstantExpression>(nullptr, "e");
277
auto unit = std::make_unique<App::UnitExpression>(nullptr, Base::Quantity{}, "rad");
278
auto op = std::make_unique<App::OperatorExpression>(nullptr, constant.get(), App::OperatorExpression::UNIT, unit.get());
279
EXPECT_EQ(op->toString(), "e rad");