]> git.donarmstrong.com Git - lilypond.git/blob - flower/test-std.cc
* flower/include/std-vector.hh
[lilypond.git] / flower / test-std.cc
1 #if !STD_VECTOR
2 #define Array flower_vector
3 #endif
4 #include "std-vector.hh"
5
6 #include "parray.hh"
7
8 #include <iostream>
9
10 #include <boost/test/auto_unit_test.hpp>
11 #include <boost/test/floating_point_comparison.hpp>
12
13 using boost::unit_test::test_suite;
14
15 #if !STD_VECTOR
16 #define vector flower_vector
17 #endif
18
19 template<typename T>
20 void
21 print (vector<T> v)
22 {
23   for (vsize i = 0; i < v.size (); i++)
24     cout << "v[" << i << "] = " << v[i] << endl;
25   cout << endl;
26 }
27
28 template<typename T>
29 void
30 print (Link_array<T> v)
31 {
32   for (vsize i = 0; i < v.size (); i++)
33     cout << "v[" << i << "] = " << *v[i] << endl;
34   cout << endl;
35 }
36
37
38 BOOST_AUTO_UNIT_TEST (vector_erase)
39 {
40   vector<int> v;
41   v.push_back (0);
42   v.push_back (1);
43   BOOST_CHECK_EQUAL (v.size (), vsize (2));
44   v.erase (v.begin () + 1);
45   BOOST_CHECK_EQUAL (v.size (), vsize (1));
46   BOOST_CHECK_EQUAL (v.back (), 0);
47
48   v.push_back (1);
49   BOOST_CHECK_EQUAL (v.size (), vsize (2));
50   v.erase (v.begin () + 0);
51   BOOST_CHECK_EQUAL (v.size (), vsize (1));
52   BOOST_CHECK_EQUAL (v.back (), 1);
53 }
54
55 BOOST_AUTO_UNIT_TEST (vector_slice)
56 {
57   vector<int> v;
58   v.push_back (0);
59   v.push_back (1);
60   v.push_back (2);
61   v.push_back (3);
62 #if VECTOR_SLICE
63   BOOST_CHECK_EQUAL (v.slice (0, 0).size (), vsize (0));
64   BOOST_CHECK_EQUAL (v.slice (0, v.size ()).size (), v.size ());
65   BOOST_CHECK_EQUAL (v.slice (1, 2).size (), vsize (1));
66 #else
67   BOOST_CHECK_EQUAL (vector<int> (v.begin (), v.begin ()).size (), vsize (0));
68   BOOST_CHECK_EQUAL (vector<int> (v.begin (), v.end ()).size (), v.size ());
69   BOOST_CHECK_EQUAL (vector<int> (v.begin () + 1, v.begin () + 2).size (),
70                      vsize (1));
71 #endif
72 }
73
74 BOOST_AUTO_UNIT_TEST (vector_sorting)
75 {
76   vector<int> v;
77   v.push_back (2);
78   v.push_back (1);
79   v.push_back (0);
80 #if VECTOR_SORT
81   v.sort (default_compare);
82 #else
83   vector_sort (v, default_compare);
84 #endif
85   BOOST_CHECK_EQUAL (v[0], 0);
86   BOOST_CHECK_EQUAL (v[1], 1);
87   BOOST_CHECK_EQUAL (v[2], 2);
88 }
89
90 BOOST_AUTO_UNIT_TEST (vector_insert)
91 {
92   vector<int> v;
93   v.push_back (0);
94 #if VECTOR_INSERT
95   v.insert (1, 0);
96 #else
97   v.insert (v.begin (), 1);
98 #endif  
99   BOOST_CHECK_EQUAL (v[0], 1);
100 #if VECTOR_INSERT
101   v.insert (2, v.size ());
102 #else
103   v.insert (v.end (), 2);
104 #endif  
105   BOOST_CHECK_EQUAL (v.back (), 2);
106   vector<int> u;
107   u.insert (u.begin (), v.begin (), v.end ());
108   BOOST_CHECK_EQUAL (u.size (), v.size ());
109   u.clear ();
110   u.insert (u.end (), v.begin (), v.end ());
111   BOOST_CHECK_EQUAL (u.size (), v.size ());
112   u.clear ();
113 }
114
115 BOOST_AUTO_UNIT_TEST (parray_concat)
116 {
117   Link_array<int> u, v;
118   int a[5] = { 0, 1, 2, 3, 4 };
119   u.push_back (&a[0]);
120   u.push_back (&a[1]);
121   u.push_back (&a[2]);
122   v.push_back (&a[3]);
123   v.push_back (&a[4]);
124   u.concat (v);
125   BOOST_CHECK_EQUAL (u[0], &a[0]);
126   BOOST_CHECK_EQUAL (u[1], &a[1]);
127   BOOST_CHECK_EQUAL (u[2], &a[2]);
128   BOOST_CHECK_EQUAL (u[3], &a[3]);
129   BOOST_CHECK_EQUAL (u[4], &a[4]);
130   BOOST_CHECK_EQUAL (u.size (), vsize (5));
131   u.concat (v);
132   BOOST_CHECK_EQUAL (u.size (), vsize (7));
133
134   u.clear ();
135   v.clear ();
136   v.push_back (&a[0]);
137   v.push_back (&a[1]);
138   v.push_back (&a[2]);
139   v.push_back (&a[3]);
140   v.push_back (&a[4]);
141   u.concat (v);
142   BOOST_CHECK_EQUAL (u[0], &a[0]);
143   BOOST_CHECK_EQUAL (u[1], &a[1]);
144   BOOST_CHECK_EQUAL (u[2], &a[2]);
145   BOOST_CHECK_EQUAL (u[3], &a[3]);
146   BOOST_CHECK_EQUAL (u[4], &a[4]);
147   BOOST_CHECK_EQUAL (u.size (), vsize (5));
148 }
149
150 test_suite*
151 init_unit_test_suite (int, char**)
152 {
153   test_suite *test = BOOST_TEST_SUITE("std::Flower");
154   test->add (BOOST_TEST_CASE (vector_erase));
155   test->add (BOOST_TEST_CASE (vector_slice));
156   test->add (BOOST_TEST_CASE (vector_sorting));
157   test->add (BOOST_TEST_CASE (vector_insert));
158   test->add (BOOST_TEST_CASE (parray_concat));
159   return test;
160 }