spirit/classic/test/if_p_int_as_condition_test.cpp
2017-11-21 19:49:36 +03:00

88 lines
2.5 KiB
C++

/*=============================================================================
Copyright (c) 2004 Martin Wille
http://spirit.sourceforge.net/
Use, modification and distribution is subject to the Boost Software
License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)
=============================================================================*/
#include <boost/spirit/include/classic_core.hpp>
#include <boost/spirit/include/classic_dynamic.hpp>
#include <boost/spirit/include/classic_ast.hpp>
#include <iostream>
#include <boost/detail/lightweight_test.hpp>
using namespace BOOST_SPIRIT_CLASSIC_NS;
int the_var_to_be_tested = 0;
namespace local
{
template <typename T>
struct var_wrapper : public ::boost::reference_wrapper<T>
{
typedef ::boost::reference_wrapper<T> parent;
explicit inline var_wrapper(T& t) : parent(t) {}
inline T& operator()() const { return parent::get(); }
};
template <typename T>
inline var_wrapper<T>
var(T& t)
{
return var_wrapper<T>(t);
}
}
struct test_grammar : public grammar <test_grammar>
{
template <typename ScannerT>
struct definition
{
rule <ScannerT, parser_tag <0> > test;
definition(const test_grammar& /*self*/)
{
test
= if_p(local::var(the_var_to_be_tested))
[
real_p
];
}
const rule <ScannerT, parser_tag<0> >& start() const {return test;}
};
};
int main()
{
test_grammar gram;
tree_parse_info <const char*> result;
//predictably fails
the_var_to_be_tested = 0;
result = ast_parse("1.50", gram, space_p);
std::cout << "Testing if_p against: " << the_var_to_be_tested << std::endl;
std::cout << "success: " << result.full << std::endl;
BOOST_TEST(!result.full);
//predicatably succeeds
the_var_to_be_tested = 1;
result = ast_parse("1.50", gram, space_p);
std::cout << "Testing if_p against: " << the_var_to_be_tested << std::endl;
std::cout << "success: " << result.full << std::endl;
BOOST_TEST(result.full);
//should succeed
the_var_to_be_tested = 2;
result = ast_parse("1.50", gram, space_p);
std::cout << "Testing if_p against: " << the_var_to_be_tested << std::endl;
std::cout << "success: " << result.full << std::endl;
BOOST_TEST(result.full);
return boost::report_errors();
}