72 BOOST_CHECK(
result.HasValue() );
73 BOOST_CHECK_CLOSE(
result.GetValue(), 42.5, 0.001 );
77 Value strVal = std::string(
"123.45");
79 BOOST_CHECK(
result.HasValue() );
80 BOOST_CHECK_CLOSE(
result.GetValue(), 123.45, 0.001 );
84 Value invalidStr = std::string(
"not_a_number");
86 BOOST_CHECK(
result.HasError() );
97 Value strVal = std::string(
"Hello");
116 BOOST_CHECK( addResult.HasValue() );
117 BOOST_CHECK_CLOSE( std::get<double>( addResult.GetValue() ), 13.0, 0.001 );
120 BOOST_CHECK( subResult.HasValue() );
121 BOOST_CHECK_CLOSE( std::get<double>( subResult.GetValue() ), 7.0, 0.001 );
124 BOOST_CHECK( mulResult.HasValue() );
125 BOOST_CHECK_CLOSE( std::get<double>( mulResult.GetValue() ), 30.0, 0.001 );
128 BOOST_CHECK( divResult.HasValue() );
129 BOOST_CHECK_CLOSE( std::get<double>( divResult.GetValue() ), 3.333, 0.1 );
132 BOOST_CHECK( modResult.HasValue() );
133 BOOST_CHECK_CLOSE( std::get<double>( modResult.GetValue() ), 1.0, 0.001 );
136 BOOST_CHECK( powResult.HasValue() );
137 BOOST_CHECK_CLOSE( std::get<double>( powResult.GetValue() ), 1000.0, 0.001 );
146 BOOST_CHECK( divResult.HasError() );
149 BOOST_CHECK( modResult.HasError() );
177 BOOST_CHECK_CLOSE( std::get<double>( node->data ), 42.5, 0.001 );
201 const auto& binOpData = std::get<BIN_OP_DATA>( binOp->data );
202 BOOST_CHECK( binOpData.op ==
'+' );
203 BOOST_CHECK( binOpData.left !=
nullptr );
204 BOOST_CHECK( binOpData.right !=
nullptr );
209 std::vector<std::unique_ptr<NODE>> args;
215 const auto& funcData = std::get<FUNC_DATA>( funcNode->data );
233 auto result = node->Accept( evaluator );
235 BOOST_CHECK(
result.HasValue() );
236 BOOST_CHECK( std::holds_alternative<double>(
result.GetValue() ) );
237 BOOST_CHECK_CLOSE( std::get<double>(
result.GetValue() ), 42.5, 0.001 );
243 auto result = node->Accept( evaluator );
245 BOOST_CHECK(
result.HasValue() );
246 BOOST_CHECK( std::holds_alternative<std::string>(
result.GetValue() ) );
253 auto result = node->Accept( evaluator );
255 BOOST_CHECK(
result.HasValue() );
256 BOOST_CHECK( std::holds_alternative<double>(
result.GetValue() ) );
257 BOOST_CHECK_CLOSE( std::get<double>(
result.GetValue() ), 10.0, 0.001 );
263 auto result = node->Accept( evaluator );
265 BOOST_CHECK(
result.HasError() );
274 auto result = binOp->Accept( evaluator );
276 BOOST_CHECK(
result.HasValue() );
277 BOOST_CHECK_CLOSE( std::get<double>(
result.GetValue() ), 15.0, 0.001 );
286 auto result = binOp->Accept( evaluator );
288 BOOST_CHECK(
result.HasValue() );
289 BOOST_CHECK( std::holds_alternative<std::string>(
result.GetValue() ) );
305 std::vector<std::unique_ptr<NODE>> args;
309 auto result = funcNode->Accept( evaluator );
311 BOOST_CHECK(
result.HasValue() );
312 BOOST_CHECK_CLOSE( std::get<double>(
result.GetValue() ), 5.0, 0.001 );
317 std::vector<std::unique_ptr<NODE>> args;
321 auto result = funcNode->Accept( evaluator );
323 BOOST_CHECK(
result.HasValue() );
324 BOOST_CHECK_CLOSE( std::get<double>(
result.GetValue() ), 4.0, 0.001 );
329 std::vector<std::unique_ptr<NODE>> args;
333 auto result = funcNode->Accept( evaluator );
335 BOOST_CHECK(
result.HasError() );
340 std::vector<std::unique_ptr<NODE>> args;
346 auto result = funcNode->Accept( evaluator );
348 BOOST_CHECK(
result.HasValue() );
349 BOOST_CHECK_CLOSE( std::get<double>(
result.GetValue() ), 7.0, 0.001 );
354 std::vector<std::unique_ptr<NODE>> args;
358 auto result = funcNode->Accept( evaluator );
360 BOOST_CHECK(
result.HasValue() );
361 BOOST_CHECK( std::holds_alternative<std::string>(
result.GetValue() ) );
367 std::vector<std::unique_ptr<NODE>> args;
372 auto result = funcNode->Accept( evaluator );
374 BOOST_CHECK(
result.HasValue() );
375 BOOST_CHECK( std::holds_alternative<std::string>(
result.GetValue() ) );
381 std::vector<std::unique_ptr<NODE>> args;
385 auto result = funcNode->Accept( evaluator );
387 BOOST_CHECK(
result.HasError() );
392 std::vector<std::unique_ptr<NODE>> args;
395 auto result = todayNode->Accept( evaluator );
397 BOOST_CHECK(
result.HasValue() );
398 BOOST_CHECK( std::holds_alternative<double>(
result.GetValue() ) );
400 auto days = std::get<double>(
result.GetValue() );
401 BOOST_CHECK_GT( days, 18000 );
405 std::vector<std::unique_ptr<NODE>> args;
408 auto result = randomNode->Accept( evaluator );
410 BOOST_CHECK(
result.HasValue() );
411 BOOST_CHECK( std::holds_alternative<double>(
result.GetValue() ) );
412 auto randomVal = std::get<double>(
result.GetValue() );
413 BOOST_CHECK_GE( randomVal, 0.0 );
414 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.