1*00b67f09SDavid van Moolenbroek //
2*00b67f09SDavid van Moolenbroek // Automated Testing Framework (atf)
3*00b67f09SDavid van Moolenbroek //
4*00b67f09SDavid van Moolenbroek // Copyright (c) 2007 The NetBSD Foundation, Inc.
5*00b67f09SDavid van Moolenbroek // All rights reserved.
6*00b67f09SDavid van Moolenbroek //
7*00b67f09SDavid van Moolenbroek // Redistribution and use in source and binary forms, with or without
8*00b67f09SDavid van Moolenbroek // modification, are permitted provided that the following conditions
9*00b67f09SDavid van Moolenbroek // are met:
10*00b67f09SDavid van Moolenbroek // 1. Redistributions of source code must retain the above copyright
11*00b67f09SDavid van Moolenbroek // notice, this list of conditions and the following disclaimer.
12*00b67f09SDavid van Moolenbroek // 2. Redistributions in binary form must reproduce the above copyright
13*00b67f09SDavid van Moolenbroek // notice, this list of conditions and the following disclaimer in the
14*00b67f09SDavid van Moolenbroek // documentation and/or other materials provided with the distribution.
15*00b67f09SDavid van Moolenbroek //
16*00b67f09SDavid van Moolenbroek // THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND
17*00b67f09SDavid van Moolenbroek // CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
18*00b67f09SDavid van Moolenbroek // INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19*00b67f09SDavid van Moolenbroek // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20*00b67f09SDavid van Moolenbroek // IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY
21*00b67f09SDavid van Moolenbroek // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22*00b67f09SDavid van Moolenbroek // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
23*00b67f09SDavid van Moolenbroek // GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24*00b67f09SDavid van Moolenbroek // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
25*00b67f09SDavid van Moolenbroek // IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
26*00b67f09SDavid van Moolenbroek // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27*00b67f09SDavid van Moolenbroek // IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28*00b67f09SDavid van Moolenbroek //
29*00b67f09SDavid van Moolenbroek
30*00b67f09SDavid van Moolenbroek #include <cstring>
31*00b67f09SDavid van Moolenbroek #include <set>
32*00b67f09SDavid van Moolenbroek #include <vector>
33*00b67f09SDavid van Moolenbroek
34*00b67f09SDavid van Moolenbroek #include "../macros.hpp"
35*00b67f09SDavid van Moolenbroek
36*00b67f09SDavid van Moolenbroek #include "text.hpp"
37*00b67f09SDavid van Moolenbroek
38*00b67f09SDavid van Moolenbroek // ------------------------------------------------------------------------
39*00b67f09SDavid van Moolenbroek // Test cases for the free functions.
40*00b67f09SDavid van Moolenbroek // ------------------------------------------------------------------------
41*00b67f09SDavid van Moolenbroek
42*00b67f09SDavid van Moolenbroek ATF_TEST_CASE(duplicate);
ATF_TEST_CASE_HEAD(duplicate)43*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_HEAD(duplicate)
44*00b67f09SDavid van Moolenbroek {
45*00b67f09SDavid van Moolenbroek set_md_var("descr", "Tests the duplicate function");
46*00b67f09SDavid van Moolenbroek }
ATF_TEST_CASE_BODY(duplicate)47*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_BODY(duplicate)
48*00b67f09SDavid van Moolenbroek {
49*00b67f09SDavid van Moolenbroek using atf::text::duplicate;
50*00b67f09SDavid van Moolenbroek
51*00b67f09SDavid van Moolenbroek const char* orig = "foo";
52*00b67f09SDavid van Moolenbroek
53*00b67f09SDavid van Moolenbroek char* copy = duplicate(orig);
54*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(std::strlen(copy), 3);
55*00b67f09SDavid van Moolenbroek ATF_REQUIRE(std::strcmp(copy, "foo") == 0);
56*00b67f09SDavid van Moolenbroek
57*00b67f09SDavid van Moolenbroek std::strcpy(copy, "bar");
58*00b67f09SDavid van Moolenbroek ATF_REQUIRE(std::strcmp(copy, "bar") == 0);
59*00b67f09SDavid van Moolenbroek ATF_REQUIRE(std::strcmp(orig, "foo") == 0);
60*00b67f09SDavid van Moolenbroek }
61*00b67f09SDavid van Moolenbroek
62*00b67f09SDavid van Moolenbroek ATF_TEST_CASE(join);
ATF_TEST_CASE_HEAD(join)63*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_HEAD(join)
64*00b67f09SDavid van Moolenbroek {
65*00b67f09SDavid van Moolenbroek set_md_var("descr", "Tests the join function");
66*00b67f09SDavid van Moolenbroek }
ATF_TEST_CASE_BODY(join)67*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_BODY(join)
68*00b67f09SDavid van Moolenbroek {
69*00b67f09SDavid van Moolenbroek using atf::text::join;
70*00b67f09SDavid van Moolenbroek
71*00b67f09SDavid van Moolenbroek // First set of tests using a non-sorted collection, std::vector.
72*00b67f09SDavid van Moolenbroek {
73*00b67f09SDavid van Moolenbroek std::vector< std::string > words;
74*00b67f09SDavid van Moolenbroek std::string str;
75*00b67f09SDavid van Moolenbroek
76*00b67f09SDavid van Moolenbroek words.clear();
77*00b67f09SDavid van Moolenbroek str = join(words, ",");
78*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(str, "");
79*00b67f09SDavid van Moolenbroek
80*00b67f09SDavid van Moolenbroek words.clear();
81*00b67f09SDavid van Moolenbroek words.push_back("");
82*00b67f09SDavid van Moolenbroek str = join(words, ",");
83*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(str, "");
84*00b67f09SDavid van Moolenbroek
85*00b67f09SDavid van Moolenbroek words.clear();
86*00b67f09SDavid van Moolenbroek words.push_back("");
87*00b67f09SDavid van Moolenbroek words.push_back("");
88*00b67f09SDavid van Moolenbroek str = join(words, ",");
89*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(str, ",");
90*00b67f09SDavid van Moolenbroek
91*00b67f09SDavid van Moolenbroek words.clear();
92*00b67f09SDavid van Moolenbroek words.push_back("foo");
93*00b67f09SDavid van Moolenbroek words.push_back("");
94*00b67f09SDavid van Moolenbroek words.push_back("baz");
95*00b67f09SDavid van Moolenbroek str = join(words, ",");
96*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(str, "foo,,baz");
97*00b67f09SDavid van Moolenbroek
98*00b67f09SDavid van Moolenbroek words.clear();
99*00b67f09SDavid van Moolenbroek words.push_back("foo");
100*00b67f09SDavid van Moolenbroek words.push_back("bar");
101*00b67f09SDavid van Moolenbroek words.push_back("baz");
102*00b67f09SDavid van Moolenbroek str = join(words, ",");
103*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(str, "foo,bar,baz");
104*00b67f09SDavid van Moolenbroek }
105*00b67f09SDavid van Moolenbroek
106*00b67f09SDavid van Moolenbroek // Second set of tests using a sorted collection, std::set.
107*00b67f09SDavid van Moolenbroek {
108*00b67f09SDavid van Moolenbroek std::set< std::string > words;
109*00b67f09SDavid van Moolenbroek std::string str;
110*00b67f09SDavid van Moolenbroek
111*00b67f09SDavid van Moolenbroek words.clear();
112*00b67f09SDavid van Moolenbroek str = join(words, ",");
113*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(str, "");
114*00b67f09SDavid van Moolenbroek
115*00b67f09SDavid van Moolenbroek words.clear();
116*00b67f09SDavid van Moolenbroek words.insert("");
117*00b67f09SDavid van Moolenbroek str = join(words, ",");
118*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(str, "");
119*00b67f09SDavid van Moolenbroek
120*00b67f09SDavid van Moolenbroek words.clear();
121*00b67f09SDavid van Moolenbroek words.insert("foo");
122*00b67f09SDavid van Moolenbroek words.insert("");
123*00b67f09SDavid van Moolenbroek words.insert("baz");
124*00b67f09SDavid van Moolenbroek str = join(words, ",");
125*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(str, ",baz,foo");
126*00b67f09SDavid van Moolenbroek
127*00b67f09SDavid van Moolenbroek words.clear();
128*00b67f09SDavid van Moolenbroek words.insert("foo");
129*00b67f09SDavid van Moolenbroek words.insert("bar");
130*00b67f09SDavid van Moolenbroek words.insert("baz");
131*00b67f09SDavid van Moolenbroek str = join(words, ",");
132*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(str, "bar,baz,foo");
133*00b67f09SDavid van Moolenbroek }
134*00b67f09SDavid van Moolenbroek }
135*00b67f09SDavid van Moolenbroek
136*00b67f09SDavid van Moolenbroek ATF_TEST_CASE(match);
ATF_TEST_CASE_HEAD(match)137*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_HEAD(match)
138*00b67f09SDavid van Moolenbroek {
139*00b67f09SDavid van Moolenbroek set_md_var("descr", "Tests the match function");
140*00b67f09SDavid van Moolenbroek }
ATF_TEST_CASE_BODY(match)141*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_BODY(match)
142*00b67f09SDavid van Moolenbroek {
143*00b67f09SDavid van Moolenbroek using atf::text::match;
144*00b67f09SDavid van Moolenbroek
145*00b67f09SDavid van Moolenbroek ATF_REQUIRE_THROW(std::runtime_error, match("", "["));
146*00b67f09SDavid van Moolenbroek
147*00b67f09SDavid van Moolenbroek ATF_REQUIRE(match("", ""));
148*00b67f09SDavid van Moolenbroek ATF_REQUIRE(!match("foo", ""));
149*00b67f09SDavid van Moolenbroek
150*00b67f09SDavid van Moolenbroek ATF_REQUIRE(match("", ".*"));
151*00b67f09SDavid van Moolenbroek ATF_REQUIRE(match("", "[a-z]*"));
152*00b67f09SDavid van Moolenbroek
153*00b67f09SDavid van Moolenbroek ATF_REQUIRE(match("hello", "hello"));
154*00b67f09SDavid van Moolenbroek ATF_REQUIRE(match("hello", "[a-z]+"));
155*00b67f09SDavid van Moolenbroek ATF_REQUIRE(match("hello", "^[a-z]+$"));
156*00b67f09SDavid van Moolenbroek
157*00b67f09SDavid van Moolenbroek ATF_REQUIRE(!match("hello", "helooo"));
158*00b67f09SDavid van Moolenbroek ATF_REQUIRE(!match("hello", "[a-z]+5"));
159*00b67f09SDavid van Moolenbroek ATF_REQUIRE(!match("hello", "^ [a-z]+$"));
160*00b67f09SDavid van Moolenbroek }
161*00b67f09SDavid van Moolenbroek
162*00b67f09SDavid van Moolenbroek ATF_TEST_CASE(split);
ATF_TEST_CASE_HEAD(split)163*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_HEAD(split)
164*00b67f09SDavid van Moolenbroek {
165*00b67f09SDavid van Moolenbroek set_md_var("descr", "Tests the split function");
166*00b67f09SDavid van Moolenbroek }
ATF_TEST_CASE_BODY(split)167*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_BODY(split)
168*00b67f09SDavid van Moolenbroek {
169*00b67f09SDavid van Moolenbroek using atf::text::split;
170*00b67f09SDavid van Moolenbroek
171*00b67f09SDavid van Moolenbroek std::vector< std::string > words;
172*00b67f09SDavid van Moolenbroek
173*00b67f09SDavid van Moolenbroek words = split("", " ");
174*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words.size(), 0);
175*00b67f09SDavid van Moolenbroek
176*00b67f09SDavid van Moolenbroek words = split(" ", " ");
177*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words.size(), 0);
178*00b67f09SDavid van Moolenbroek
179*00b67f09SDavid van Moolenbroek words = split(" ", " ");
180*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words.size(), 0);
181*00b67f09SDavid van Moolenbroek
182*00b67f09SDavid van Moolenbroek words = split("a b", " ");
183*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words.size(), 2);
184*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words[0], "a");
185*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words[1], "b");
186*00b67f09SDavid van Moolenbroek
187*00b67f09SDavid van Moolenbroek words = split("a b c d", " ");
188*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words.size(), 4);
189*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words[0], "a");
190*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words[1], "b");
191*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words[2], "c");
192*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words[3], "d");
193*00b67f09SDavid van Moolenbroek
194*00b67f09SDavid van Moolenbroek words = split("foo bar", " ");
195*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words.size(), 2);
196*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words[0], "foo");
197*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words[1], "bar");
198*00b67f09SDavid van Moolenbroek
199*00b67f09SDavid van Moolenbroek words = split("foo bar baz foobar", " ");
200*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words.size(), 4);
201*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words[0], "foo");
202*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words[1], "bar");
203*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words[2], "baz");
204*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words[3], "foobar");
205*00b67f09SDavid van Moolenbroek
206*00b67f09SDavid van Moolenbroek words = split(" foo bar", " ");
207*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words.size(), 2);
208*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words[0], "foo");
209*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words[1], "bar");
210*00b67f09SDavid van Moolenbroek
211*00b67f09SDavid van Moolenbroek words = split("foo bar", " ");
212*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words.size(), 2);
213*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words[0], "foo");
214*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words[1], "bar");
215*00b67f09SDavid van Moolenbroek
216*00b67f09SDavid van Moolenbroek words = split("foo bar ", " ");
217*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words.size(), 2);
218*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words[0], "foo");
219*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words[1], "bar");
220*00b67f09SDavid van Moolenbroek
221*00b67f09SDavid van Moolenbroek words = split(" foo bar ", " ");
222*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words.size(), 2);
223*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words[0], "foo");
224*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words[1], "bar");
225*00b67f09SDavid van Moolenbroek }
226*00b67f09SDavid van Moolenbroek
227*00b67f09SDavid van Moolenbroek ATF_TEST_CASE(split_delims);
ATF_TEST_CASE_HEAD(split_delims)228*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_HEAD(split_delims)
229*00b67f09SDavid van Moolenbroek {
230*00b67f09SDavid van Moolenbroek set_md_var("descr", "Tests the split function using different delimiters");
231*00b67f09SDavid van Moolenbroek }
ATF_TEST_CASE_BODY(split_delims)232*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_BODY(split_delims)
233*00b67f09SDavid van Moolenbroek {
234*00b67f09SDavid van Moolenbroek using atf::text::split;
235*00b67f09SDavid van Moolenbroek
236*00b67f09SDavid van Moolenbroek std::vector< std::string > words;
237*00b67f09SDavid van Moolenbroek
238*00b67f09SDavid van Moolenbroek words = split("", "/");
239*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words.size(), 0);
240*00b67f09SDavid van Moolenbroek
241*00b67f09SDavid van Moolenbroek words = split(" ", "/");
242*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words.size(), 1);
243*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words[0], " ");
244*00b67f09SDavid van Moolenbroek
245*00b67f09SDavid van Moolenbroek words = split(" ", "/");
246*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words.size(), 1);
247*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words[0], " ");
248*00b67f09SDavid van Moolenbroek
249*00b67f09SDavid van Moolenbroek words = split("a/b", "/");
250*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words.size(), 2);
251*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words[0], "a");
252*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words[1], "b");
253*00b67f09SDavid van Moolenbroek
254*00b67f09SDavid van Moolenbroek words = split("aLONGDELIMbcdLONGDELIMef", "LONGDELIM");
255*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words.size(), 3);
256*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words[0], "a");
257*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words[1], "bcd");
258*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(words[2], "ef");
259*00b67f09SDavid van Moolenbroek }
260*00b67f09SDavid van Moolenbroek
261*00b67f09SDavid van Moolenbroek ATF_TEST_CASE(trim);
ATF_TEST_CASE_HEAD(trim)262*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_HEAD(trim)
263*00b67f09SDavid van Moolenbroek {
264*00b67f09SDavid van Moolenbroek set_md_var("descr", "Tests the trim function");
265*00b67f09SDavid van Moolenbroek }
ATF_TEST_CASE_BODY(trim)266*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_BODY(trim)
267*00b67f09SDavid van Moolenbroek {
268*00b67f09SDavid van Moolenbroek using atf::text::trim;
269*00b67f09SDavid van Moolenbroek
270*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(trim(""), "");
271*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(trim(" "), "");
272*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(trim("\t"), "");
273*00b67f09SDavid van Moolenbroek
274*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(trim(" foo"), "foo");
275*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(trim("\t foo"), "foo");
276*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(trim(" \tfoo"), "foo");
277*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(trim("foo\t "), "foo");
278*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(trim("foo \t"), "foo");
279*00b67f09SDavid van Moolenbroek
280*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(trim("foo bar"), "foo bar");
281*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(trim("\t foo bar"), "foo bar");
282*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(trim(" \tfoo bar"), "foo bar");
283*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(trim("foo bar\t "), "foo bar");
284*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(trim("foo bar \t"), "foo bar");
285*00b67f09SDavid van Moolenbroek }
286*00b67f09SDavid van Moolenbroek
287*00b67f09SDavid van Moolenbroek ATF_TEST_CASE(to_bool);
ATF_TEST_CASE_HEAD(to_bool)288*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_HEAD(to_bool)
289*00b67f09SDavid van Moolenbroek {
290*00b67f09SDavid van Moolenbroek set_md_var("descr", "Tests the to_string function");
291*00b67f09SDavid van Moolenbroek }
ATF_TEST_CASE_BODY(to_bool)292*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_BODY(to_bool)
293*00b67f09SDavid van Moolenbroek {
294*00b67f09SDavid van Moolenbroek using atf::text::to_bool;
295*00b67f09SDavid van Moolenbroek
296*00b67f09SDavid van Moolenbroek ATF_REQUIRE(to_bool("true"));
297*00b67f09SDavid van Moolenbroek ATF_REQUIRE(to_bool("TRUE"));
298*00b67f09SDavid van Moolenbroek ATF_REQUIRE(to_bool("yes"));
299*00b67f09SDavid van Moolenbroek ATF_REQUIRE(to_bool("YES"));
300*00b67f09SDavid van Moolenbroek
301*00b67f09SDavid van Moolenbroek ATF_REQUIRE(!to_bool("false"));
302*00b67f09SDavid van Moolenbroek ATF_REQUIRE(!to_bool("FALSE"));
303*00b67f09SDavid van Moolenbroek ATF_REQUIRE(!to_bool("no"));
304*00b67f09SDavid van Moolenbroek ATF_REQUIRE(!to_bool("NO"));
305*00b67f09SDavid van Moolenbroek
306*00b67f09SDavid van Moolenbroek ATF_REQUIRE_THROW(std::runtime_error, to_bool(""));
307*00b67f09SDavid van Moolenbroek ATF_REQUIRE_THROW(std::runtime_error, to_bool("tru"));
308*00b67f09SDavid van Moolenbroek ATF_REQUIRE_THROW(std::runtime_error, to_bool("true2"));
309*00b67f09SDavid van Moolenbroek ATF_REQUIRE_THROW(std::runtime_error, to_bool("fals"));
310*00b67f09SDavid van Moolenbroek ATF_REQUIRE_THROW(std::runtime_error, to_bool("false2"));
311*00b67f09SDavid van Moolenbroek }
312*00b67f09SDavid van Moolenbroek
313*00b67f09SDavid van Moolenbroek ATF_TEST_CASE(to_bytes);
ATF_TEST_CASE_HEAD(to_bytes)314*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_HEAD(to_bytes)
315*00b67f09SDavid van Moolenbroek {
316*00b67f09SDavid van Moolenbroek set_md_var("descr", "Tests the to_bytes function");
317*00b67f09SDavid van Moolenbroek }
ATF_TEST_CASE_BODY(to_bytes)318*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_BODY(to_bytes)
319*00b67f09SDavid van Moolenbroek {
320*00b67f09SDavid van Moolenbroek using atf::text::to_bytes;
321*00b67f09SDavid van Moolenbroek
322*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(0, to_bytes("0"));
323*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(12345, to_bytes("12345"));
324*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(2 * 1024, to_bytes("2k"));
325*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(4 * 1024 * 1024, to_bytes("4m"));
326*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(int64_t(8) * 1024 * 1024 * 1024, to_bytes("8g"));
327*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(int64_t(16) * 1024 * 1024 * 1024 * 1024, to_bytes("16t"));
328*00b67f09SDavid van Moolenbroek
329*00b67f09SDavid van Moolenbroek ATF_REQUIRE_THROW_RE(std::runtime_error, "Empty", to_bytes(""));
330*00b67f09SDavid van Moolenbroek ATF_REQUIRE_THROW_RE(std::runtime_error, "Unknown size unit 'd'",
331*00b67f09SDavid van Moolenbroek to_bytes("12d"));
332*00b67f09SDavid van Moolenbroek ATF_REQUIRE_THROW(std::runtime_error, to_bytes(" "));
333*00b67f09SDavid van Moolenbroek ATF_REQUIRE_THROW(std::runtime_error, to_bytes(" k"));
334*00b67f09SDavid van Moolenbroek }
335*00b67f09SDavid van Moolenbroek
336*00b67f09SDavid van Moolenbroek ATF_TEST_CASE(to_string);
ATF_TEST_CASE_HEAD(to_string)337*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_HEAD(to_string)
338*00b67f09SDavid van Moolenbroek {
339*00b67f09SDavid van Moolenbroek set_md_var("descr", "Tests the to_string function");
340*00b67f09SDavid van Moolenbroek }
ATF_TEST_CASE_BODY(to_string)341*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_BODY(to_string)
342*00b67f09SDavid van Moolenbroek {
343*00b67f09SDavid van Moolenbroek using atf::text::to_string;
344*00b67f09SDavid van Moolenbroek
345*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(to_string('a'), "a");
346*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(to_string("a"), "a");
347*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(to_string(5), "5");
348*00b67f09SDavid van Moolenbroek }
349*00b67f09SDavid van Moolenbroek
350*00b67f09SDavid van Moolenbroek ATF_TEST_CASE(to_type);
ATF_TEST_CASE_HEAD(to_type)351*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_HEAD(to_type)
352*00b67f09SDavid van Moolenbroek {
353*00b67f09SDavid van Moolenbroek set_md_var("descr", "Tests the to_type function");
354*00b67f09SDavid van Moolenbroek }
ATF_TEST_CASE_BODY(to_type)355*00b67f09SDavid van Moolenbroek ATF_TEST_CASE_BODY(to_type)
356*00b67f09SDavid van Moolenbroek {
357*00b67f09SDavid van Moolenbroek using atf::text::to_type;
358*00b67f09SDavid van Moolenbroek
359*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(to_type< int >("0"), 0);
360*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(to_type< int >("1234"), 1234);
361*00b67f09SDavid van Moolenbroek ATF_REQUIRE_THROW(std::runtime_error, to_type< int >(" "));
362*00b67f09SDavid van Moolenbroek ATF_REQUIRE_THROW(std::runtime_error, to_type< int >("0 a"));
363*00b67f09SDavid van Moolenbroek ATF_REQUIRE_THROW(std::runtime_error, to_type< int >("a"));
364*00b67f09SDavid van Moolenbroek
365*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(to_type< float >("0.5"), 0.5);
366*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(to_type< float >("1234.5"), 1234.5);
367*00b67f09SDavid van Moolenbroek ATF_REQUIRE_THROW(std::runtime_error, to_type< float >("0.5 a"));
368*00b67f09SDavid van Moolenbroek ATF_REQUIRE_THROW(std::runtime_error, to_type< float >("a"));
369*00b67f09SDavid van Moolenbroek
370*00b67f09SDavid van Moolenbroek ATF_REQUIRE_EQ(to_type< std::string >("a"), "a");
371*00b67f09SDavid van Moolenbroek }
372*00b67f09SDavid van Moolenbroek
373*00b67f09SDavid van Moolenbroek // ------------------------------------------------------------------------
374*00b67f09SDavid van Moolenbroek // Main.
375*00b67f09SDavid van Moolenbroek // ------------------------------------------------------------------------
376*00b67f09SDavid van Moolenbroek
ATF_INIT_TEST_CASES(tcs)377*00b67f09SDavid van Moolenbroek ATF_INIT_TEST_CASES(tcs)
378*00b67f09SDavid van Moolenbroek {
379*00b67f09SDavid van Moolenbroek // Add the test cases for the free functions.
380*00b67f09SDavid van Moolenbroek ATF_ADD_TEST_CASE(tcs, duplicate);
381*00b67f09SDavid van Moolenbroek ATF_ADD_TEST_CASE(tcs, join);
382*00b67f09SDavid van Moolenbroek ATF_ADD_TEST_CASE(tcs, match);
383*00b67f09SDavid van Moolenbroek ATF_ADD_TEST_CASE(tcs, split);
384*00b67f09SDavid van Moolenbroek ATF_ADD_TEST_CASE(tcs, split_delims);
385*00b67f09SDavid van Moolenbroek ATF_ADD_TEST_CASE(tcs, trim);
386*00b67f09SDavid van Moolenbroek ATF_ADD_TEST_CASE(tcs, to_bool);
387*00b67f09SDavid van Moolenbroek ATF_ADD_TEST_CASE(tcs, to_bytes);
388*00b67f09SDavid van Moolenbroek ATF_ADD_TEST_CASE(tcs, to_string);
389*00b67f09SDavid van Moolenbroek ATF_ADD_TEST_CASE(tcs, to_type);
390*00b67f09SDavid van Moolenbroek }
391