]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/tools/quickbook/test/unit/values_test.cpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / tools / quickbook / test / unit / values_test.cpp
1 /*=============================================================================
2 Copyright (c) 2010-2011 Daniel James
3
4 Use, modification and distribution is subject to the Boost Software
5 License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
6 http://www.boost.org/LICENSE_1_0.txt)
7 =============================================================================*/
8
9 // Some very light testing for quickbook::value and friends.
10 // Just for a few issues that came up during development.
11
12 #include <boost/detail/lightweight_test.hpp>
13 #include <boost/range/algorithm/equal.hpp>
14 #include <vector>
15 #include "values.hpp"
16 #include "files.hpp"
17
18 void empty_tests()
19 {
20 quickbook::value q;
21 BOOST_TEST(q.empty());
22 BOOST_TEST(!q.is_list());
23 BOOST_TEST(!q.is_encoded());
24 }
25
26 void qbk_tests()
27 {
28 std::string source = "Source";
29 quickbook::value q;
30 {
31 quickbook::file_ptr fake_file = new quickbook::file(
32 "(fake file)", source, 105u);
33 q = quickbook::qbk_value(
34 fake_file,
35 fake_file->source().begin(),
36 fake_file->source().end());
37 }
38 BOOST_TEST_EQ(q.get_quickbook(), quickbook::string_view(source));
39 }
40
41 void sort_test()
42 {
43 quickbook::value_builder b;
44 b.insert(quickbook::encoded_value("a", 10));
45 b.insert(quickbook::encoded_value("b", 2));
46 b.insert(quickbook::encoded_value("c", 5));
47 b.insert(quickbook::encoded_value("d", 8));
48 b.sort_list();
49
50 quickbook::value_consumer c = b.release();
51 BOOST_TEST(c.check(2)); BOOST_TEST_EQ(c.consume(2).get_encoded(), "b");
52 BOOST_TEST(c.check(5)); c.consume(5);
53 BOOST_TEST(c.check(8)); c.consume(8);
54 BOOST_TEST(c.check(10)); c.consume(10);
55 BOOST_TEST(!c.check());
56 }
57
58 void multiple_list_test()
59 {
60 quickbook::value_builder list1;
61 quickbook::value_builder list2;
62
63 list1.insert(quickbook::encoded_value("b", 10));
64
65 {
66 quickbook::value p1 = quickbook::encoded_value("a", 5);
67 list1.insert(p1);
68 list2.insert(p1);
69 }
70
71 list2.insert(quickbook::encoded_value("c", 3));
72
73 quickbook::value_consumer l1 = list1.release();
74 quickbook::value_consumer l2 = list2.release();
75
76 BOOST_TEST(l1.check(10));
77 BOOST_TEST_EQ(l1.consume(10).get_encoded(), "b");
78 BOOST_TEST(l1.check(5));
79 BOOST_TEST_EQ(l1.consume(5).get_encoded(), "a");
80 BOOST_TEST(!l1.check());
81
82 BOOST_TEST(l2.check(5));
83 BOOST_TEST_EQ(l2.consume(5).get_encoded(), "a");
84 BOOST_TEST(l2.check(3));
85 BOOST_TEST_EQ(l2.consume(3).get_encoded(), "c");
86 BOOST_TEST(!l2.check());
87 }
88
89 void equality_tests()
90 {
91 std::vector<quickbook::value> distinct_values;
92
93 quickbook::value_builder builder;
94 quickbook::value nil;
95
96 // 0: nil
97 distinct_values.push_back(nil);
98
99 // 1: []
100 distinct_values.push_back(builder.release());
101
102 // 2: [nil]
103 builder.insert(nil);
104 distinct_values.push_back(builder.release());
105
106 for(std::size_t i = 0; i < distinct_values.size(); ++i) {
107 for(std::size_t j = 0; j < distinct_values.size(); ++j) {
108 if ((i == j) != (distinct_values[i] == distinct_values[j])) {
109 BOOST_ERROR("Value mismatch.");
110 BOOST_LIGHTWEIGHT_TEST_OSTREAM
111 << "\tat " << i << ", " << j << std::endl;
112 }
113 }
114 }
115 }
116
117 int main()
118 {
119 empty_tests();
120 qbk_tests();
121 sort_test();
122 multiple_list_test();
123 equality_tests();
124
125 return boost::report_errors();
126 }