//  Copyright (c) 2001-2010 Hartmut Kaiser
//  Copyright (c) 2010 Head Geek
// 
//  Distributed under 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 <iostream> 
#include <boost/detail/lightweight_test.hpp>
#include <boost/spirit/include/qi.hpp> 
 
namespace qi = boost::spirit::qi; 
using qi::omit; 
using qi::repeat; 
using std::cout; 
using std::endl; 
 
typedef qi::rule<std::string::const_iterator, std::string()> strrule_type; 
 
void test(const std::string input, strrule_type rule, std::string result) 
{ 
    std::string target; 
    std::string::const_iterator i = input.begin(), ie = input.end(); 
 
    BOOST_TEST(qi::parse(i, ie, rule, target) && target == result);
} 
 
int main() 
{ 
    strrule_type obsolete_year = 
        omit[-qi::char_(" \t")] >> 
        repeat(2)[qi::digit] >> 
        omit[-qi::char_(" \t")]; 
    strrule_type correct_year = repeat(4)[qi::digit]; 
 
    test("1776", correct_year | repeat(2)[qi::digit], "1776");
    test("76",   obsolete_year, "76");
    test("76",   obsolete_year | correct_year, "76");
    test(" 76",  correct_year | obsolete_year, "76");
    test("76",   correct_year | obsolete_year, "76");
    test("76",   correct_year | repeat(2)[qi::digit], "76");

    return boost::report_errors();
} 

