Imported Upstream version 1.72.0
[platform/upstream/boost.git] / libs / spirit / test / x3 / no_case.cpp
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
16 main()
17 {
18     using spirit_test::test;
19     using spirit_test::test_attr;
20     using boost::spirit::x3::no_case;
21
22     {
23         using namespace boost::spirit::x3::ascii;
24         BOOST_TEST(test("x", no_case[char_]));
25         BOOST_TEST(test("X", no_case[char_('x')]));
26         BOOST_TEST(test("X", no_case[char_('X')]));
27         BOOST_TEST(test("x", no_case[char_('X')]));
28         BOOST_TEST(test("x", no_case[char_('x')]));
29         BOOST_TEST(!test("z", no_case[char_('X')]));
30         BOOST_TEST(!test("z", no_case[char_('x')]));
31         BOOST_TEST(test("x", no_case[char_('a', 'z')]));
32         BOOST_TEST(test("X", no_case[char_('a', 'z')]));
33         BOOST_TEST(!test("a", no_case[char_('b', 'z')]));
34         BOOST_TEST(!test("z", no_case[char_('a', 'y')]));
35     }
36     {
37         using namespace boost::spirit::x3::ascii;
38         BOOST_TEST(test("X", no_case['x']));
39         BOOST_TEST(test("X", no_case['X']));
40         BOOST_TEST(test("x", no_case['X']));
41         BOOST_TEST(test("x", no_case['x']));
42         BOOST_TEST(!test("z", no_case['X']));
43         BOOST_TEST(!test("z", no_case['x']));
44     }
45
46     {
47         using namespace boost::spirit::x3::iso8859_1;
48         BOOST_TEST(test("X", no_case[char_("a-z")]));
49         BOOST_TEST(!test("1", no_case[char_("a-z")]));
50     }
51
52     { // test extended ASCII characters
53         using namespace boost::spirit::x3::iso8859_1;
54         BOOST_TEST(test("\xC1", no_case[char_('\xE1')]));
55
56         BOOST_TEST(test("\xC9", no_case[char_("\xE5-\xEF")]));
57         BOOST_TEST(!test("\xFF", no_case[char_("\xE5-\xEF")]));
58
59         BOOST_TEST(test("\xC1\xE1", no_case[lit("\xE1\xC1")]));
60         BOOST_TEST(test("\xE1\xE1", no_case[no_case[lit("\xE1\xC1")]]));
61     }
62
63     {
64         using namespace boost::spirit::x3::ascii;
65         BOOST_TEST(test("Bochi Bochi", no_case[lit("bochi bochi")]));
66         BOOST_TEST(test("BOCHI BOCHI", no_case[lit("bochi bochi")]));
67         BOOST_TEST(!test("Vavoo", no_case[lit("bochi bochi")]));
68     }
69
70     {
71         // should work!
72         using namespace boost::spirit::x3::ascii;
73         BOOST_TEST(test("x", no_case[no_case[char_]]));
74         BOOST_TEST(test("x", no_case[no_case[char_('x')]]));
75         BOOST_TEST(test("yabadabadoo", no_case[no_case[lit("Yabadabadoo")]]));
76     }
77
78     {
79         using namespace boost::spirit::x3::ascii;
80         BOOST_TEST(test("X", no_case[alnum]));
81         BOOST_TEST(test("6", no_case[alnum]));
82         BOOST_TEST(!test(":", no_case[alnum]));
83
84         BOOST_TEST(test("X", no_case[lower]));
85         BOOST_TEST(test("x", no_case[lower]));
86         BOOST_TEST(test("X", no_case[upper]));
87         BOOST_TEST(test("x", no_case[upper]));
88         BOOST_TEST(!test(":", no_case[lower]));
89         BOOST_TEST(!test(":", no_case[upper]));
90     }
91
92     {
93         using namespace boost::spirit::x3::iso8859_1;
94         BOOST_TEST(test("X", no_case[alnum]));
95         BOOST_TEST(test("6", no_case[alnum]));
96         BOOST_TEST(!test(":", no_case[alnum]));
97
98         BOOST_TEST(test("X", no_case[lower]));
99         BOOST_TEST(test("x", no_case[lower]));
100         BOOST_TEST(test("X", no_case[upper]));
101         BOOST_TEST(test("x", no_case[upper]));
102         BOOST_TEST(!test(":", no_case[lower]));
103         BOOST_TEST(!test(":", no_case[upper]));
104     }
105
106     {
107         using namespace boost::spirit::x3::standard;
108         BOOST_TEST(test("X", no_case[alnum]));
109         BOOST_TEST(test("6", no_case[alnum]));
110         BOOST_TEST(!test(":", no_case[alnum]));
111
112         BOOST_TEST(test("X", no_case[lower]));
113         BOOST_TEST(test("x", no_case[lower]));
114         BOOST_TEST(test("X", no_case[upper]));
115         BOOST_TEST(test("x", no_case[upper]));
116         BOOST_TEST(!test(":", no_case[lower]));
117         BOOST_TEST(!test(":", no_case[upper]));
118     }
119
120     {
121         // chsets
122         namespace standard = boost::spirit::x3::standard;
123         namespace standard_wide = boost::spirit::x3::standard_wide;
124
125         BOOST_TEST(test("x", no_case[standard::char_("a-z")]));
126         BOOST_TEST(test("X", no_case[standard::char_("a-z")]));
127         BOOST_TEST(test(L"X", no_case[standard_wide::char_(L"a-z")]));
128         BOOST_TEST(test(L"X", no_case[standard_wide::char_(L"X")]));
129     }
130
131     {
132         using namespace boost::spirit::x3::standard;
133         std::string s("bochi bochi");
134         BOOST_TEST(test("Bochi Bochi", no_case[lit(s.c_str())]));
135         BOOST_TEST(test("Bochi Bochi", no_case[lit(s)]));
136         BOOST_TEST(test("Bochi Bochi", no_case[s.c_str()]));
137         BOOST_TEST(test("Bochi Bochi", no_case[s]));
138     }
139
140     {
141         {
142             using namespace boost::spirit::x3::standard;
143             BOOST_TEST(!test("ą", no_case['a']));
144         }
145     }
146
147     return boost::report_errors();
148 }