2 * Copyright © 2021 Behdad Esfahbod
4 * This is part of HarfBuzz, a text shaping library.
6 * Permission is hereby granted, without written agreement and without
7 * license or royalty fees, to use, copy, modify, and distribute this
8 * software and its documentation for any purpose, provided that the
9 * above copyright notice and the following two paragraphs appear in
10 * all copies of this software.
12 * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
13 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
14 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
15 * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
18 * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
19 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
20 * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
21 * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
22 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
27 #include "hb-vector.hh"
34 main (int argc, char **argv)
36 assert (sizeof (hb_vector_t<int>) == sizeof (hb_sorted_vector_t<int>));
38 /* Test copy constructor. */
40 hb_vector_t<int> v1 {1, 2};
41 hb_vector_t<int> v2 {v1};
42 hb_vector_t<int> V2 {v1};
43 assert (v1.length == 2);
46 assert (v2.length == 2);
51 /* Test copy assignment. */
53 hb_vector_t<int> v1 {1, 2};
54 hb_vector_t<int> v2 = v1;
55 hb_vector_t<int> V2 = v1;
56 assert (v1.length == 2);
59 assert (v2.length == 2);
64 /* Test move constructor. */
66 hb_vector_t<int> s {1, 2};
67 hb_sorted_vector_t<int> S {1, 2};
68 hb_vector_t<int> v (std::move (s));
69 hb_sorted_vector_t<int> V (std::move (S));
70 assert (s.length == 0);
71 assert (S.length == 0);
72 assert (v.length == 2);
77 /* Test move assignment. */
79 hb_vector_t<int> s {1, 2};
80 hb_sorted_vector_t<int> S {1, 2};
82 hb_sorted_vector_t<int> V;
85 assert (s.length == 0);
86 assert (S.length == 0);
87 assert (v.length == 2);
88 assert (V.length == 2);
93 /* Test initializing from iterable. */
100 hb_vector_t<int> v (s);
101 hb_sorted_vector_t<int> V (s);
103 assert (v.length == 2);
104 assert (V.length == 2);
111 /* Test initializing from iterator. */
118 hb_vector_t<int> v (hb_iter (s));
119 hb_vector_t<int> V (hb_iter (s));
121 assert (v.length == 2);
122 assert (V.length == 2);
129 /* Test initializing from initializer list and swapping. */
131 hb_vector_t<int> v1 {1, 2, 3};
132 hb_vector_t<int> v2 {4, 5};
134 assert (v1.length == 2);
136 assert (v2.length == 3);
140 /* Test initializing sorted-vector from initializer list and swapping. */
142 hb_sorted_vector_t<int> v1 {1, 2, 3};
143 hb_sorted_vector_t<int> v2 {4, 5};
145 assert (v1.length == 2);
147 assert (v2.length == 3);
152 hb_vector_t<std::string> v;
155 for (unsigned i = 1; i < 100; i++)
161 hb_vector_t<std::string> v2;
165 v2.remove_ordered (50);
166 v2.remove_unordered (50);
170 hb_vector_t<hb_set_t> v;
171 hb_set_t s {1, 5, 7};
174 assert (s.get_population () == 3);
176 assert (s.get_population () == 0);
180 hb_vector_t<hb_map_t> v;
185 hb_vector_t<hb_map_t> v;