• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //  Copyright (c) 2001-2011 Hartmut Kaiser
2 //
3 //  Distributed under the Boost Software License, Version 1.0. (See accompanying
4 //  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
5 
6 #include <boost/config/warning_disable.hpp>
7 #include <boost/detail/lightweight_test.hpp>
8 
9 #include <boost/spirit/include/karma_char.hpp>
10 #include <boost/spirit/include/karma_numeric.hpp>
11 #include <boost/spirit/include/karma_directive.hpp>
12 #include <boost/spirit/include/karma_operator.hpp>
13 #include <boost/spirit/include/karma_action.hpp>
14 #include <boost/spirit/include/karma_stream.hpp>
15 #include <boost/spirit/include/karma_format_attr.hpp>
16 
17 #include "test_manip_attr.hpp"
18 
19 #if SPIRIT_ARGUMENTS_LIMIT < 10
20 # error SPIRIT_ARGUMENTS_LIMIT must be at least 10 to run the test
21 #endif
22 
23 using spirit_test::test;
24 using spirit_test::test_delimited;
25 using spirit_test::test_predelimited;
26 
27 ///////////////////////////////////////////////////////////////////////////////
28 int
main()29 main()
30 {
31     using namespace boost::spirit;
32 
33     {
34         using namespace boost::spirit::ascii;
35 
36         BOOST_TEST(test("1", char_, '1'));
37         BOOST_TEST(test("12", char_ << char_, '1', '2'));
38         BOOST_TEST(test("123", char_ << char_ << char_, '1', '2', '3'));
39         BOOST_TEST(test("1234"
40           , char_ << char_ << char_ << char_
41           , '1', '2', '3', '4'));
42         BOOST_TEST(test("12345"
43           , char_ << char_ << char_ << char_ << char_
44           , '1', '2', '3', '4', '5'));
45         BOOST_TEST(test("123456"
46           , char_ << char_ << char_ << char_ << char_ << char_
47           , '1', '2', '3', '4', '5', '6'));
48         BOOST_TEST(test("1234567"
49           , char_ << char_ << char_ << char_ << char_ << char_ << char_
50           , '1', '2', '3', '4', '5', '6', '7'));
51         BOOST_TEST(test("12345678"
52           , char_ << char_ << char_ << char_ << char_ << char_ << char_ << char_
53           , '1', '2', '3', '4', '5', '6', '7', '8'));
54         BOOST_TEST(test("123456789"
55           , char_ << char_ << char_ << char_ << char_ << char_ << char_ << char_ << char_
56           , '1', '2', '3', '4', '5', '6', '7', '8', '9'));
57         BOOST_TEST(test("1234567890"
58           , char_ << char_ << char_ << char_ << char_ << char_ << char_ << char_ << char_ << char_
59           , '1', '2', '3', '4', '5', '6', '7', '8', '9', '0'));
60     }
61 
62     {
63         using namespace boost::spirit::ascii;
64 
65         BOOST_TEST(test_delimited("1 ", char_, space, '1'));
66         BOOST_TEST(test_delimited("1 2 "
67           , char_ << char_, space, '1', '2'));
68         BOOST_TEST(test_delimited("1 2 3 "
69           , char_ << char_ << char_, space, '1', '2', '3'));
70         BOOST_TEST(test_delimited("1 2 3 4 "
71           , char_ << char_ << char_ << char_
72           , space, '1', '2', '3', '4'));
73         BOOST_TEST(test_delimited("1 2 3 4 5 "
74           , char_ << char_ << char_ << char_ << char_
75           , space, '1', '2', '3', '4', '5'));
76         BOOST_TEST(test_delimited("1 2 3 4 5 6 "
77           , char_ << char_ << char_ << char_ << char_ << char_
78           , space, '1', '2', '3', '4', '5', '6'));
79         BOOST_TEST(test_delimited("1 2 3 4 5 6 7 "
80           , char_ << char_ << char_ << char_ << char_ << char_ << char_
81           , space, '1', '2', '3', '4', '5', '6', '7'));
82         BOOST_TEST(test_delimited("1 2 3 4 5 6 7 8 "
83           , char_ << char_ << char_ << char_ << char_ << char_ << char_ << char_
84           , space, '1', '2', '3', '4', '5', '6', '7', '8'));
85         BOOST_TEST(test_delimited("1 2 3 4 5 6 7 8 9 "
86           , char_ << char_ << char_ << char_ << char_ << char_ << char_ << char_ << char_
87           , space, '1', '2', '3', '4', '5', '6', '7', '8', '9'));
88         BOOST_TEST(test_delimited("1 2 3 4 5 6 7 8 9 0 "
89           , char_ << char_ << char_ << char_ << char_ << char_ << char_ << char_ << char_ << char_
90           , space, '1', '2', '3', '4', '5', '6', '7', '8', '9', '0'));
91     }
92 
93     {
94         using namespace boost::spirit::ascii;
95         using boost::spirit::karma::delimit_flag;
96 
97         BOOST_TEST(test_predelimited(" 1 ", char_, space
98           , delimit_flag::predelimit, '1'));
99         BOOST_TEST(test_predelimited(" 1 2 "
100           , char_ << char_, space, delimit_flag::predelimit
101           , '1', '2'));
102         BOOST_TEST(test_predelimited(" 1 2 3 "
103           , char_ << char_ << char_, space
104           , delimit_flag::predelimit, '1', '2', '3'));
105         BOOST_TEST(test_predelimited(" 1 2 3 4 "
106           , char_ << char_ << char_ << char_
107           , space, delimit_flag::predelimit, '1', '2', '3', '4'));
108         BOOST_TEST(test_predelimited(" 1 2 3 4 5 "
109           , char_ << char_ << char_ << char_ << char_
110           , space, delimit_flag::predelimit, '1', '2', '3', '4', '5'));
111         BOOST_TEST(test_predelimited(" 1 2 3 4 5 6 "
112           , char_ << char_ << char_ << char_ << char_ << char_
113           , space, delimit_flag::predelimit
114           , '1', '2', '3', '4', '5', '6'));
115         BOOST_TEST(test_predelimited(" 1 2 3 4 5 6 7 "
116           , char_ << char_ << char_ << char_ << char_ << char_ << char_
117           , space, delimit_flag::predelimit
118           , '1', '2', '3', '4', '5', '6', '7'));
119         BOOST_TEST(test_predelimited(" 1 2 3 4 5 6 7 8 "
120           , char_ << char_ << char_ << char_ << char_ << char_ << char_ << char_
121           , space, delimit_flag::predelimit
122           , '1', '2', '3', '4', '5', '6', '7', '8'));
123         BOOST_TEST(test_predelimited(" 1 2 3 4 5 6 7 8 9 "
124           , char_ << char_ << char_ << char_ << char_ << char_ << char_ << char_ << char_
125           , space, delimit_flag::predelimit
126           , '1', '2', '3', '4', '5', '6', '7', '8', '9'));
127         BOOST_TEST(test_predelimited(" 1 2 3 4 5 6 7 8 9 0 "
128           , char_ << char_ << char_ << char_ << char_ << char_ << char_ << char_ << char_ << char_
129           , space, delimit_flag::predelimit
130           , '1', '2', '3', '4', '5', '6', '7', '8', '9', '0'));
131     }
132 
133     {
134         using namespace boost::spirit::ascii;
135         using boost::spirit::karma::delimit_flag;
136 
137         BOOST_TEST(test_predelimited("1 ", char_, space
138           , delimit_flag::dont_predelimit, '1'));
139         BOOST_TEST(test_predelimited("1 2 "
140           , char_ << char_, space, delimit_flag::dont_predelimit
141           , '1', '2'));
142         BOOST_TEST(test_predelimited("1 2 3 "
143           , char_ << char_ << char_, space
144           , delimit_flag::dont_predelimit, '1', '2', '3'));
145         BOOST_TEST(test_predelimited("1 2 3 4 "
146           , char_ << char_ << char_ << char_
147           , space, delimit_flag::dont_predelimit, '1', '2', '3', '4'));
148         BOOST_TEST(test_predelimited("1 2 3 4 5 "
149           , char_ << char_ << char_ << char_ << char_
150           , space, delimit_flag::dont_predelimit, '1', '2', '3', '4', '5'));
151         BOOST_TEST(test_predelimited("1 2 3 4 5 6 "
152           , char_ << char_ << char_ << char_ << char_ << char_
153           , space, delimit_flag::dont_predelimit
154           , '1', '2', '3', '4', '5', '6'));
155         BOOST_TEST(test_predelimited("1 2 3 4 5 6 7 "
156           , char_ << char_ << char_ << char_ << char_ << char_ << char_
157           , space, delimit_flag::dont_predelimit
158           , '1', '2', '3', '4', '5', '6', '7'));
159         BOOST_TEST(test_predelimited("1 2 3 4 5 6 7 8 "
160           , char_ << char_ << char_ << char_ << char_ << char_ << char_ << char_
161           , space, delimit_flag::dont_predelimit
162           , '1', '2', '3', '4', '5', '6', '7', '8'));
163         BOOST_TEST(test_predelimited("1 2 3 4 5 6 7 8 9 "
164           , char_ << char_ << char_ << char_ << char_ << char_ << char_ << char_ << char_
165           , space, delimit_flag::dont_predelimit
166           , '1', '2', '3', '4', '5', '6', '7', '8', '9'));
167         BOOST_TEST(test_predelimited("1 2 3 4 5 6 7 8 9 0 "
168           , char_ << char_ << char_ << char_ << char_ << char_ << char_ << char_ << char_ << char_
169           , space, delimit_flag::dont_predelimit
170           , '1', '2', '3', '4', '5', '6', '7', '8', '9', '0'));
171     }
172 
173     return boost::report_errors();
174 }
175 
176