1 /*=============================================================================
2     Copyright (c) 2001-2013 Joel de Guzman
3 
4     Distributed under the Boost Software License, Version 1.0. (See accompanying
5     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 =============================================================================*/
7 #if !defined(BOOST_SPIRIT_TEST_FEBRUARY_01_2007_0605PM)
8 #define BOOST_SPIRIT_TEST_FEBRUARY_01_2007_0605PM
9 
10 #include <boost/spirit/home/x3/core/parse.hpp>
11 #include <iostream>
12 
13 namespace spirit_test
14 {
15     template <typename Char, typename Parser>
test(Char const * in,Parser const & p,bool full_match=true)16     bool test(Char const* in, Parser const& p, bool full_match = true)
17     {
18         Char const* last = in;
19         while (*last)
20             last++;
21         return boost::spirit::x3::parse(in, last, p)
22             && (!full_match || (in == last));
23     }
24 
25     template <typename Char, typename Parser, typename Skipper>
test(Char const * in,Parser const & p,Skipper const & s,bool full_match=true)26     bool test(Char const* in, Parser const& p
27         , Skipper const& s, bool full_match = true)
28     {
29         Char const* last = in;
30         while (*last)
31             last++;
32         return boost::spirit::x3::phrase_parse(in, last, p, s)
33             && (!full_match || (in == last));
34     }
35 
36     template <typename Char, typename Parser>
test_failure(Char const * in,Parser const & p)37     bool test_failure(Char const* in, Parser const& p)
38     {
39         char const * const start = in;
40         Char const* last = in;
41         while (*last)
42             last++;
43 
44         return !boost::spirit::x3::parse(in, last, p) && (in == start);
45     }
46 
47     template <typename Char, typename Parser, typename Attr>
test_attr(Char const * in,Parser const & p,Attr & attr,bool full_match=true)48     bool test_attr(Char const* in, Parser const& p
49         , Attr& attr, bool full_match = true)
50     {
51         Char const* last = in;
52         while (*last)
53             last++;
54         return boost::spirit::x3::parse(in, last, p, attr)
55             && (!full_match || (in == last));
56     }
57 
58     template <typename Char, typename Parser, typename Attr, typename Skipper>
test_attr(Char const * in,Parser const & p,Attr & attr,Skipper const & s,bool full_match=true)59     bool test_attr(Char const* in, Parser const& p
60         , Attr& attr, Skipper const& s, bool full_match = true)
61     {
62         Char const* last = in;
63         while (*last)
64             last++;
65         return boost::spirit::x3::phrase_parse(in, last, p, s, attr)
66             && (!full_match || (in == last));
67     }
68 
69     template <typename Char, typename Parser>
binary_test(Char const * in,std::size_t size,Parser const & p,bool full_match=true)70     bool binary_test(Char const* in, std::size_t size, Parser const& p,
71         bool full_match = true)
72     {
73         Char const* last = in + size;
74         return boost::spirit::x3::parse(in, last, p)
75             && (!full_match || (in == last));
76     }
77 
78     template <typename Char, typename Parser, typename Skipper>
binary_test(Char const * in,std::size_t size,Parser const & p,Skipper const & s,bool full_match=true)79     bool binary_test(Char const* in, std::size_t size, Parser const& p,
80         Skipper const& s, bool full_match = true)
81     {
82         Char const* last = in + size;
83         return boost::spirit::x3::phrase_parse(in, last, p, s)
84             && (!full_match || (in == last));
85     }
86 
87     template <typename Char, typename Parser, typename Attr>
binary_test_attr(Char const * in,std::size_t size,Parser const & p,Attr & attr,bool full_match=true)88     bool binary_test_attr(Char const* in, std::size_t size, Parser const& p,
89         Attr& attr, bool full_match = true)
90     {
91         Char const* last = in + size;
92         return boost::spirit::x3::parse(in, last, p, attr)
93             && (!full_match || (in == last));
94     }
95 
96     template <typename Char, typename Parser, typename Attr, typename Skipper>
binary_test_attr(Char const * in,std::size_t size,Parser const & p,Attr & attr,Skipper const & s,bool full_match=true)97     bool binary_test_attr(Char const* in, std::size_t size, Parser const& p,
98         Attr& attr, Skipper const& s, bool full_match = true)
99     {
100         Char const* last = in + size;
101         return boost::spirit::x3::phrase_parse(in, last, p, s, attr)
102             && (!full_match || (in == last));
103     }
104 }
105 
106 #endif
107