• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*=============================================================================
2     Copyright (c) 2001-2015 Joel de Guzman
3     http://spirit.sourceforge.net/
4 
5     Distributed under the Boost Software License, Version 1.0. (See accompanying
6     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7 =============================================================================*/
8 
9 #include <boost/detail/lightweight_test.hpp>
10 #include <boost/spirit/home/x3.hpp>
11 
12 #include <iostream>
13 #include "test.hpp"
14 
15 int
main()16 main()
17 {
18     using spirit_test::test;
19     using spirit_test::test_attr;
20     using boost::spirit::x3::no_case;
21 
22     BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(no_case['x']);
23 
24     {
25         using namespace boost::spirit::x3::ascii;
26         BOOST_TEST(test("x", no_case[char_]));
27         BOOST_TEST(test("X", no_case[char_('x')]));
28         BOOST_TEST(test("X", no_case[char_('X')]));
29         BOOST_TEST(test("x", no_case[char_('X')]));
30         BOOST_TEST(test("x", no_case[char_('x')]));
31         BOOST_TEST(!test("z", no_case[char_('X')]));
32         BOOST_TEST(!test("z", no_case[char_('x')]));
33         BOOST_TEST(test("x", no_case[char_('a', 'z')]));
34         BOOST_TEST(test("X", no_case[char_('a', 'z')]));
35         BOOST_TEST(!test("a", no_case[char_('b', 'z')]));
36         BOOST_TEST(!test("z", no_case[char_('a', 'y')]));
37     }
38     {
39         using namespace boost::spirit::x3::ascii;
40         BOOST_TEST(test("X", no_case['x']));
41         BOOST_TEST(test("X", no_case['X']));
42         BOOST_TEST(test("x", no_case['X']));
43         BOOST_TEST(test("x", no_case['x']));
44         BOOST_TEST(!test("z", no_case['X']));
45         BOOST_TEST(!test("z", no_case['x']));
46     }
47 
48     {
49         using namespace boost::spirit::x3::iso8859_1;
50         BOOST_TEST(test("X", no_case[char_("a-z")]));
51         BOOST_TEST(!test("1", no_case[char_("a-z")]));
52     }
53 
54     { // test extended ASCII characters
55         using namespace boost::spirit::x3::iso8859_1;
56         BOOST_TEST(test("\xC1", no_case[char_('\xE1')]));
57 
58         BOOST_TEST(test("\xC9", no_case[char_("\xE5-\xEF")]));
59         BOOST_TEST(!test("\xFF", no_case[char_("\xE5-\xEF")]));
60 
61         BOOST_TEST(test("\xC1\xE1", no_case[lit("\xE1\xC1")]));
62         BOOST_TEST(test("\xE1\xE1", no_case[no_case[lit("\xE1\xC1")]]));
63     }
64 
65     {
66         using namespace boost::spirit::x3::ascii;
67         BOOST_TEST(test("Bochi Bochi", no_case[lit("bochi bochi")]));
68         BOOST_TEST(test("BOCHI BOCHI", no_case[lit("bochi bochi")]));
69         BOOST_TEST(!test("Vavoo", no_case[lit("bochi bochi")]));
70     }
71 
72     {
73         // should work!
74         using namespace boost::spirit::x3::ascii;
75         BOOST_TEST(test("x", no_case[no_case[char_]]));
76         BOOST_TEST(test("x", no_case[no_case[char_('x')]]));
77         BOOST_TEST(test("yabadabadoo", no_case[no_case[lit("Yabadabadoo")]]));
78     }
79 
80     {
81         using namespace boost::spirit::x3::ascii;
82         BOOST_TEST(test("X", no_case[alnum]));
83         BOOST_TEST(test("6", no_case[alnum]));
84         BOOST_TEST(!test(":", no_case[alnum]));
85 
86         BOOST_TEST(test("X", no_case[lower]));
87         BOOST_TEST(test("x", no_case[lower]));
88         BOOST_TEST(test("X", no_case[upper]));
89         BOOST_TEST(test("x", no_case[upper]));
90         BOOST_TEST(!test(":", no_case[lower]));
91         BOOST_TEST(!test(":", no_case[upper]));
92     }
93 
94     {
95         using namespace boost::spirit::x3::iso8859_1;
96         BOOST_TEST(test("X", no_case[alnum]));
97         BOOST_TEST(test("6", no_case[alnum]));
98         BOOST_TEST(!test(":", no_case[alnum]));
99 
100         BOOST_TEST(test("X", no_case[lower]));
101         BOOST_TEST(test("x", no_case[lower]));
102         BOOST_TEST(test("X", no_case[upper]));
103         BOOST_TEST(test("x", no_case[upper]));
104         BOOST_TEST(!test(":", no_case[lower]));
105         BOOST_TEST(!test(":", no_case[upper]));
106     }
107 
108     {
109         using namespace boost::spirit::x3::standard;
110         BOOST_TEST(test("X", no_case[alnum]));
111         BOOST_TEST(test("6", no_case[alnum]));
112         BOOST_TEST(!test(":", no_case[alnum]));
113 
114         BOOST_TEST(test("X", no_case[lower]));
115         BOOST_TEST(test("x", no_case[lower]));
116         BOOST_TEST(test("X", no_case[upper]));
117         BOOST_TEST(test("x", no_case[upper]));
118         BOOST_TEST(!test(":", no_case[lower]));
119         BOOST_TEST(!test(":", no_case[upper]));
120     }
121 
122     {
123         // chsets
124         namespace standard = boost::spirit::x3::standard;
125         namespace standard_wide = boost::spirit::x3::standard_wide;
126 
127         BOOST_TEST(test("x", no_case[standard::char_("a-z")]));
128         BOOST_TEST(test("X", no_case[standard::char_("a-z")]));
129         BOOST_TEST(test(L"X", no_case[standard_wide::char_(L"a-z")]));
130         BOOST_TEST(test(L"X", no_case[standard_wide::char_(L"X")]));
131     }
132 
133     {
134         using namespace boost::spirit::x3::standard;
135         std::string s("bochi bochi");
136         BOOST_TEST(test("Bochi Bochi", no_case[lit(s.c_str())]));
137         BOOST_TEST(test("Bochi Bochi", no_case[lit(s)]));
138         BOOST_TEST(test("Bochi Bochi", no_case[s.c_str()]));
139         BOOST_TEST(test("Bochi Bochi", no_case[s]));
140     }
141 
142     {
143         {
144             using namespace boost::spirit::x3::standard;
145             BOOST_TEST(!test("ą", no_case['a']));
146         }
147     }
148 
149     return boost::report_errors();
150 }
151