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.