76 BOOST_CHECK(
result.HasValue() );
77 BOOST_CHECK_CLOSE(
result.GetValue(), 42.5, 0.001 );
81 Value strVal = std::string(
"123.45");
83 BOOST_CHECK(
result.HasValue() );
84 BOOST_CHECK_CLOSE(
result.GetValue(), 123.45, 0.001 );
88 Value invalidStr = std::string(
"not_a_number");
90 BOOST_CHECK(
result.HasError() );
101 Value strVal = std::string(
"Hello");
120 BOOST_CHECK( addResult.HasValue() );
121 BOOST_CHECK_CLOSE( std::get<double>( addResult.GetValue() ), 13.0, 0.001 );
124 BOOST_CHECK( subResult.HasValue() );
125 BOOST_CHECK_CLOSE( std::get<double>( subResult.GetValue() ), 7.0, 0.001 );
128 BOOST_CHECK( mulResult.HasValue() );
129 BOOST_CHECK_CLOSE( std::get<double>( mulResult.GetValue() ), 30.0, 0.001 );
132 BOOST_CHECK( divResult.HasValue() );
133 BOOST_CHECK_CLOSE( std::get<double>( divResult.GetValue() ), 3.333, 0.1 );
136 BOOST_CHECK( modResult.HasValue() );
137 BOOST_CHECK_CLOSE( std::get<double>( modResult.GetValue() ), 1.0, 0.001 );
140 BOOST_CHECK( powResult.HasValue() );
141 BOOST_CHECK_CLOSE( std::get<double>( powResult.GetValue() ), 1000.0, 0.001 );
150 BOOST_CHECK( divResult.HasError() );
153 BOOST_CHECK( modResult.HasError() );
181 BOOST_CHECK_CLOSE( std::get<double>( node->data ), 42.5, 0.001 );
205 const auto& binOpData = std::get<BIN_OP_DATA>( binOp->data );
206 BOOST_CHECK( binOpData.op ==
'+' );
207 BOOST_CHECK( binOpData.left !=
nullptr );
208 BOOST_CHECK( binOpData.right !=
nullptr );
213 std::vector<std::unique_ptr<NODE>> args;
219 const auto& funcData = std::get<FUNC_DATA>( funcNode->data );
237 auto result = node->Accept( evaluator );
239 BOOST_CHECK(
result.HasValue() );
240 BOOST_CHECK( std::holds_alternative<double>(
result.GetValue() ) );
241 BOOST_CHECK_CLOSE( std::get<double>(
result.GetValue() ), 42.5, 0.001 );
247 auto result = node->Accept( evaluator );
249 BOOST_CHECK(
result.HasValue() );
250 BOOST_CHECK( std::holds_alternative<std::string>(
result.GetValue() ) );
257 auto result = node->Accept( evaluator );
259 BOOST_CHECK(
result.HasValue() );
260 BOOST_CHECK( std::holds_alternative<double>(
result.GetValue() ) );
261 BOOST_CHECK_CLOSE( std::get<double>(
result.GetValue() ), 10.0, 0.001 );
267 auto result = node->Accept( evaluator );
269 BOOST_CHECK(
result.HasError() );
278 auto result = binOp->Accept( evaluator );
280 BOOST_CHECK(
result.HasValue() );
281 BOOST_CHECK_CLOSE( std::get<double>(
result.GetValue() ), 15.0, 0.001 );
290 auto result = binOp->Accept( evaluator );
292 BOOST_CHECK(
result.HasValue() );
293 BOOST_CHECK( std::holds_alternative<std::string>(
result.GetValue() ) );
309 std::vector<std::unique_ptr<NODE>> args;
313 auto result = funcNode->Accept( evaluator );
315 BOOST_CHECK(
result.HasValue() );
316 BOOST_CHECK_CLOSE( std::get<double>(
result.GetValue() ), 5.0, 0.001 );
321 std::vector<std::unique_ptr<NODE>> args;
325 auto result = funcNode->Accept( evaluator );
327 BOOST_CHECK(
result.HasValue() );
328 BOOST_CHECK_CLOSE( std::get<double>(
result.GetValue() ), 4.0, 0.001 );
333 std::vector<std::unique_ptr<NODE>> args;
337 auto result = funcNode->Accept( evaluator );
339 BOOST_CHECK(
result.HasError() );
344 std::vector<std::unique_ptr<NODE>> args;
350 auto result = funcNode->Accept( evaluator );
352 BOOST_CHECK(
result.HasValue() );
353 BOOST_CHECK_CLOSE( std::get<double>(
result.GetValue() ), 7.0, 0.001 );
358 std::vector<std::unique_ptr<NODE>> args;
362 auto result = funcNode->Accept( evaluator );
364 BOOST_CHECK(
result.HasValue() );
365 BOOST_CHECK( std::holds_alternative<std::string>(
result.GetValue() ) );
371 std::vector<std::unique_ptr<NODE>> args;
376 auto result = funcNode->Accept( evaluator );
378 BOOST_CHECK(
result.HasValue() );
379 BOOST_CHECK( std::holds_alternative<std::string>(
result.GetValue() ) );
385 std::vector<std::unique_ptr<NODE>> args;
389 auto result = funcNode->Accept( evaluator );
391 BOOST_CHECK(
result.HasError() );
396 std::vector<std::unique_ptr<NODE>> args;
399 auto result = todayNode->Accept( evaluator );
401 BOOST_CHECK(
result.HasValue() );
402 BOOST_CHECK( std::holds_alternative<double>(
result.GetValue() ) );
404 auto days = std::get<double>(
result.GetValue() );
405 BOOST_CHECK_GT( days, 18000 );
409 std::vector<std::unique_ptr<NODE>> args;
412 auto result = randomNode->Accept( evaluator );
414 BOOST_CHECK(
result.HasValue() );
415 BOOST_CHECK( std::holds_alternative<double>(
result.GetValue() ) );
416 auto randomVal = std::get<double>(
result.GetValue() );
417 BOOST_CHECK_GE( randomVal, 0.0 );
418 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.