• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 <vector>
13 #include <boost/detail/lightweight_test.hpp>
14 #include <boost/range/algorithm/equal.hpp>
15 #include "files.hpp"
16 #include "values.hpp"
17 
empty_tests()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 
qbk_tests()26 void qbk_tests()
27 {
28     std::string source = "Source";
29     quickbook::value q;
30     {
31         quickbook::file_ptr fake_file =
32             new quickbook::file("(fake file)", source, 105u);
33         q = quickbook::qbk_value(
34             fake_file, fake_file->source().begin(), fake_file->source().end());
35     }
36     BOOST_TEST_EQ(q.get_quickbook(), quickbook::string_view(source));
37 }
38 
sort_test()39 void sort_test()
40 {
41     quickbook::value_builder b;
42     b.insert(quickbook::encoded_value("a", 10));
43     b.insert(quickbook::encoded_value("b", 2));
44     b.insert(quickbook::encoded_value("c", 5));
45     b.insert(quickbook::encoded_value("d", 8));
46     b.sort_list();
47 
48     quickbook::value_consumer c = b.release();
49     BOOST_TEST(c.check(2));
50     BOOST_TEST_EQ(c.consume(2).get_encoded(), "b");
51     BOOST_TEST(c.check(5));
52     c.consume(5);
53     BOOST_TEST(c.check(8));
54     c.consume(8);
55     BOOST_TEST(c.check(10));
56     c.consume(10);
57     BOOST_TEST(!c.check());
58 }
59 
multiple_list_test()60 void multiple_list_test()
61 {
62     quickbook::value_builder list1;
63     quickbook::value_builder list2;
64 
65     list1.insert(quickbook::encoded_value("b", 10));
66 
67     {
68         quickbook::value p1 = quickbook::encoded_value("a", 5);
69         list1.insert(p1);
70         list2.insert(p1);
71     }
72 
73     list2.insert(quickbook::encoded_value("c", 3));
74 
75     quickbook::value_consumer l1 = list1.release();
76     quickbook::value_consumer l2 = list2.release();
77 
78     BOOST_TEST(l1.check(10));
79     BOOST_TEST_EQ(l1.consume(10).get_encoded(), "b");
80     BOOST_TEST(l1.check(5));
81     BOOST_TEST_EQ(l1.consume(5).get_encoded(), "a");
82     BOOST_TEST(!l1.check());
83 
84     BOOST_TEST(l2.check(5));
85     BOOST_TEST_EQ(l2.consume(5).get_encoded(), "a");
86     BOOST_TEST(l2.check(3));
87     BOOST_TEST_EQ(l2.consume(3).get_encoded(), "c");
88     BOOST_TEST(!l2.check());
89 }
90 
equality_tests()91 void equality_tests()
92 {
93     std::vector<quickbook::value> distinct_values;
94 
95     quickbook::value_builder builder;
96     quickbook::value nil;
97 
98     // 0: nil
99     distinct_values.push_back(nil);
100 
101     // 1: []
102     distinct_values.push_back(builder.release());
103 
104     // 2: [nil]
105     builder.insert(nil);
106     distinct_values.push_back(builder.release());
107 
108     for (std::size_t i = 0; i < distinct_values.size(); ++i) {
109         for (std::size_t j = 0; j < distinct_values.size(); ++j) {
110             if ((i == j) != (distinct_values[i] == distinct_values[j])) {
111                 BOOST_ERROR("Value mismatch.");
112                 BOOST_LIGHTWEIGHT_TEST_OSTREAM << "\tat " << i << ", " << j
113                                                << std::endl;
114             }
115         }
116     }
117 }
118 
main()119 int main()
120 {
121     empty_tests();
122     qbk_tests();
123     sort_test();
124     multiple_list_test();
125     equality_tests();
126 
127     return boost::report_errors();
128 }
129