]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/property_tree/test/test_property_tree.cpp
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / boost / libs / property_tree / test / test_property_tree.cpp
CommitLineData
7c673cae
FG
1// ----------------------------------------------------------------------------
2// Copyright (C) 2002-2006 Marcin Kalicinski
3//
4// Distributed under the Boost Software License, Version 1.0.
5// (See accompanying file LICENSE_1_0.txt or copy at
6// http://www.boost.org/LICENSE_1_0.txt)
7//
8// For more information, see www.boost.org
9// ----------------------------------------------------------------------------
10#include "test_utils.hpp"
11#include <boost/any.hpp>
12#include <boost/range.hpp>
13#include <list>
14#include <cmath>
7c673cae
FG
15
16// If using VC, disable some warnings that trip in boost::serialization bowels
17#ifdef BOOST_MSVC
18 #pragma warning(disable:4267) // Narrowing conversion
19 #pragma warning(disable:4996) // Deprecated functions
20#endif
21
22#include <boost/archive/text_iarchive.hpp>
23#include <boost/archive/text_oarchive.hpp>
24#include <boost/archive/binary_iarchive.hpp>
25#include <boost/archive/binary_oarchive.hpp>
26#include <boost/archive/xml_iarchive.hpp>
27#include <boost/archive/xml_oarchive.hpp>
28#include <boost/property_tree/ptree_serialization.hpp>
29
30// Predicate for sorting keys
31template<class Ptree>
32struct SortPred
33{
34 bool operator()(const typename Ptree::value_type &v1,
35 const typename Ptree::value_type &v2) const
36 {
37 return v1.first < v2.first;
38 }
39};
40
41// Predicate for sorting keys in reverse
42template<class Ptree>
43struct SortPredRev
44{
45 bool operator()(const typename Ptree::value_type &v1,
46 const typename Ptree::value_type &v2) const
47 {
48 return v1.first > v2.first;
49 }
50};
51
52// Custom translator that works with boost::any instead of std::string
53template <typename E>
54struct any_translator
55{
56 typedef boost::any internal_type;
57 typedef E external_type;
58
59 boost::optional<E> get_value(const internal_type &v) {
60 if(const E *p = boost::any_cast<E>(&v)) {
61 return *p;
62 }
63 return boost::optional<E>();
64 }
65 boost::optional<internal_type> put_value(const E &v) {
66 return boost::any(v);
67 }
68};
69
70namespace boost { namespace property_tree {
71 template <typename E>
72 struct translator_between<boost::any, E>
73 {
74 typedef any_translator<E> type;
75 };
76}}
77
78// Include char tests, case sensitive
79#define CHTYPE char
80#define T(s) s
81#define PTREE boost::property_tree::ptree
82#define NOCASE 0
83#define WIDECHAR 0
84# include "test_property_tree.hpp"
85#undef CHTYPE
86#undef T
87#undef PTREE
88#undef NOCASE
89#undef WIDECHAR
90
91// Include wchar_t tests, case sensitive
92#ifndef BOOST_NO_CWCHAR
93# define CHTYPE wchar_t
94# define T(s) L ## s
95# define PTREE boost::property_tree::wptree
96# define NOCASE 0
97# define WIDECHAR 1
98# include "test_property_tree.hpp"
99# undef CHTYPE
100# undef T
101# undef PTREE
102# undef NOCASE
103# undef WIDECHAR
104#endif
105
106// Include char tests, case insensitive
107#define CHTYPE char
108#define T(s) s
109#define PTREE boost::property_tree::iptree
110#define NOCASE 1
111# define WIDECHAR 0
112# include "test_property_tree.hpp"
113#undef CHTYPE
114#undef T
115#undef PTREE
116#undef NOCASE
117#undef WIDECHAR
118
119// Include wchar_t tests, case insensitive
120#ifndef BOOST_NO_CWCHAR
121# define CHTYPE wchar_t
122# define T(s) L ## s
123# define PTREE boost::property_tree::wiptree
124# define NOCASE 1
125# define WIDECHAR 1
126# include "test_property_tree.hpp"
127# undef CHTYPE
128# undef T
129# undef PTREE
130# undef NOCASE
131# undef WIDECHAR
132#endif
133
134template <typename Ptree>
135void run_tests(Ptree* pt)
136{
137 test_debug(pt);
138 test_constructor_destructor_assignment(pt);
139 test_insertion(pt);
140 test_erasing(pt);
141 test_clear(pt);
142 test_pushpop(pt);
143 test_container_iteration(pt);
144 test_swap(pt);
145 test_sort_reverse(pt);
146 test_case(pt);
147 test_comparison(pt);
148 test_front_back(pt);
149 test_get_put(pt);
150 test_get_child_put_child(pt);
151 test_equal_range(pt);
152 test_path_separator(pt);
153 test_path(pt);
154 test_precision(pt);
155 test_locale(pt);
156 test_custom_data_type(pt);
157 test_empty_size_max_size(pt);
158 test_ptree_bad_path(pt);
159 test_ptree_bad_data(pt);
160 test_serialization(pt);
161 test_bool(pt);
162 test_char(pt);
163 test_float(pt);
164 test_sort(pt);
165 test_leaks(pt); // must be a final test
166}
167
1e59de90 168int main(int, char *[])
7c673cae
FG
169{
170
171 using namespace boost::property_tree;
172
173 // char tests, case sensitive
174 {
175 ptree *pt = 0;
176 run_tests(pt);
177 }
178
179 // wchar_t tests, case sensitive
180#ifndef BOOST_NO_CWCHAR
181 {
182 wptree *pt = 0;
183 run_tests(pt);
184 }
185#endif
186
187 // char tests, case insensitive
188 {
189 iptree *pt = 0;
190 run_tests(pt);
191 }
192
193 // wchar_t tests, case insensitive
194#ifndef BOOST_NO_CWCHAR
195 {
196 wiptree *pt = 0;
197 run_tests(pt);
198 }
199#endif
200
1e59de90 201 return boost::report_errors();
7c673cae 202}