73 BOOST_CHECK(
result.HasValue() );
74 BOOST_CHECK_CLOSE(
result.GetValue(), 42.5, 0.001 );
78 VALUE strVal = std::string(
"123.45");
80 BOOST_CHECK(
result.HasValue() );
81 BOOST_CHECK_CLOSE(
result.GetValue(), 123.45, 0.001 );
85 VALUE invalidStr = std::string(
"not_a_number");
87 BOOST_CHECK(
result.HasError() );
98 VALUE strVal = std::string(
"Hello");
117 BOOST_CHECK( addResult.HasValue() );
118 BOOST_CHECK_CLOSE( std::get<double>( addResult.GetValue() ), 13.0, 0.001 );
121 BOOST_CHECK( subResult.HasValue() );
122 BOOST_CHECK_CLOSE( std::get<double>( subResult.GetValue() ), 7.0, 0.001 );
125 BOOST_CHECK( mulResult.HasValue() );
126 BOOST_CHECK_CLOSE( std::get<double>( mulResult.GetValue() ), 30.0, 0.001 );
129 BOOST_CHECK( divResult.HasValue() );
130 BOOST_CHECK_CLOSE( std::get<double>( divResult.GetValue() ), 3.333, 0.1 );
133 BOOST_CHECK( modResult.HasValue() );
134 BOOST_CHECK_CLOSE( std::get<double>( modResult.GetValue() ), 1.0, 0.001 );
137 BOOST_CHECK( powResult.HasValue() );
138 BOOST_CHECK_CLOSE( std::get<double>( powResult.GetValue() ), 1000.0, 0.001 );
147 BOOST_CHECK( divResult.HasError() );
150 BOOST_CHECK( modResult.HasError() );
178 BOOST_CHECK_CLOSE( std::get<double>( node->data ), 42.5, 0.001 );
202 const auto& binOpData = std::get<BIN_OP_DATA>( binOp->data );
203 BOOST_CHECK( binOpData.op ==
'+' );
204 BOOST_CHECK( binOpData.left !=
nullptr );
205 BOOST_CHECK( binOpData.right !=
nullptr );
210 std::vector<std::unique_ptr<NODE>> args;
216 const auto& funcData = std::get<FUNC_DATA>( funcNode->data );
234 auto result = node->Accept( evaluator );
236 BOOST_CHECK(
result.HasValue() );
237 BOOST_CHECK( std::holds_alternative<double>(
result.GetValue() ) );
238 BOOST_CHECK_CLOSE( std::get<double>(
result.GetValue() ), 42.5, 0.001 );
244 auto result = node->Accept( evaluator );
246 BOOST_CHECK(
result.HasValue() );
247 BOOST_CHECK( std::holds_alternative<std::string>(
result.GetValue() ) );
254 auto result = node->Accept( evaluator );
256 BOOST_CHECK(
result.HasValue() );
257 BOOST_CHECK( std::holds_alternative<double>(
result.GetValue() ) );
258 BOOST_CHECK_CLOSE( std::get<double>(
result.GetValue() ), 10.0, 0.001 );
264 auto result = node->Accept( evaluator );
266 BOOST_CHECK(
result.HasError() );
275 auto result = binOp->Accept( evaluator );
277 BOOST_CHECK(
result.HasValue() );
278 BOOST_CHECK_CLOSE( std::get<double>(
result.GetValue() ), 15.0, 0.001 );
287 auto result = binOp->Accept( evaluator );
289 BOOST_CHECK(
result.HasValue() );
290 BOOST_CHECK( std::holds_alternative<std::string>(
result.GetValue() ) );
306 std::vector<std::unique_ptr<NODE>> args;
310 auto result = funcNode->Accept( evaluator );
312 BOOST_CHECK(
result.HasValue() );
313 BOOST_CHECK_CLOSE( std::get<double>(
result.GetValue() ), 5.0, 0.001 );
318 std::vector<std::unique_ptr<NODE>> args;
322 auto result = funcNode->Accept( evaluator );
324 BOOST_CHECK(
result.HasValue() );
325 BOOST_CHECK_CLOSE( std::get<double>(
result.GetValue() ), 4.0, 0.001 );
330 std::vector<std::unique_ptr<NODE>> args;
334 auto result = funcNode->Accept( evaluator );
336 BOOST_CHECK(
result.HasError() );
341 std::vector<std::unique_ptr<NODE>> args;
347 auto result = funcNode->Accept( evaluator );
349 BOOST_CHECK(
result.HasValue() );
350 BOOST_CHECK_CLOSE( std::get<double>(
result.GetValue() ), 7.0, 0.001 );
355 std::vector<std::unique_ptr<NODE>> args;
359 auto result = funcNode->Accept( evaluator );
361 BOOST_CHECK(
result.HasValue() );
362 BOOST_CHECK( std::holds_alternative<std::string>(
result.GetValue() ) );
368 std::vector<std::unique_ptr<NODE>> args;
373 auto result = funcNode->Accept( evaluator );
375 BOOST_CHECK(
result.HasValue() );
376 BOOST_CHECK( std::holds_alternative<std::string>(
result.GetValue() ) );
382 std::vector<std::unique_ptr<NODE>> args;
386 auto result = funcNode->Accept( evaluator );
388 BOOST_CHECK(
result.HasError() );
393 std::vector<std::unique_ptr<NODE>> args;
396 auto result = todayNode->Accept( evaluator );
398 BOOST_CHECK(
result.HasValue() );
399 BOOST_CHECK( std::holds_alternative<double>(
result.GetValue() ) );
401 auto days = std::get<double>(
result.GetValue() );
402 BOOST_CHECK_GT( days, 18000 );
406 std::vector<std::unique_ptr<NODE>> args;
409 auto result = randomNode->Accept( evaluator );
411 BOOST_CHECK(
result.HasValue() );
412 BOOST_CHECK( std::holds_alternative<double>(
result.GetValue() ) );
413 auto randomVal = std::get<double>(
result.GetValue() );
414 BOOST_CHECK_GE( randomVal, 0.0 );
415 BOOST_CHECK_LT( randomVal, 1.0 );
wxString result
Test unit parsing edge cases and error handling.
BOOST_CHECK_EQUAL(result, "25.4")
BOOST_AUTO_TEST_CASE(ValueUtils)
Test VALUE_UTILS functionality.
auto CreateTestVariableResolver()
Declare the test suite.