diff options
Diffstat (limited to 'Build/source/libs/harfbuzz/harfbuzz-src/src/test-map.cc')
-rw-r--r-- | Build/source/libs/harfbuzz/harfbuzz-src/src/test-map.cc | 96 |
1 files changed, 92 insertions, 4 deletions
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/test-map.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/test-map.cc index fd2b2f0e642..721edefe37b 100644 --- a/Build/source/libs/harfbuzz/harfbuzz-src/src/test-map.cc +++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/test-map.cc @@ -25,9 +25,13 @@ #include "hb.hh" #include "hb-map.hh" +#include "hb-set.hh" #include <string> static const std::string invalid{"invalid"}; +static const hb_map_t invalid_map{}; +static const hb_set_t invalid_set{}; +static const hb_vector_t<unsigned> invalid_vector{}; int main (int argc, char **argv) @@ -57,13 +61,21 @@ main (int argc, char **argv) /* Test move constructor. */ { - hb_map_t v {hb_map_t {}}; + hb_map_t s {}; + s.set (1, 2); + hb_map_t v (std::move (s)); + assert (s.get_population () == 0); + assert (v.get_population () == 1); } /* Test move assignment. */ { + hb_map_t s {}; + s.set (1, 2); hb_map_t v; - v = hb_map_t {}; + v = std::move (s); + assert (s.get_population () == 0); + assert (v.get_population () == 1); } /* Test initializing from iterable. */ @@ -73,9 +85,15 @@ main (int argc, char **argv) s.set (1, 2); s.set (3, 4); - hb_map_t v (s); + hb_vector_t<hb_pair_t<hb_codepoint_t, hb_codepoint_t>> v (s); + hb_map_t v0 (v); + hb_map_t v1 (s); + hb_map_t v2 (std::move (s)); - assert (v.get_population () == 2); + assert (s.get_population () == 0); + assert (v0.get_population () == 2); + assert (v1.get_population () == 2); + assert (v2.get_population () == 2); } /* Test call fini() twice. */ @@ -135,5 +153,75 @@ main (int argc, char **argv) } } + /* Test hashing maps. */ + { + using pair = hb_pair_t<hb_codepoint_t, hb_codepoint_t>; + + hb_hashmap_t<hb_map_t, hb_map_t, const hb_map_t *, const hb_map_t *, &invalid_map, &invalid_map> m1; + hb_hashmap_t<hb_map_t, hb_map_t, std::nullptr_t, std::nullptr_t, nullptr, nullptr> m2; + + m1.set (hb_map_t (), hb_map_t {}); + m2.set (hb_map_t (), hb_map_t {}); + + m1.set (hb_map_t (), hb_map_t {pair (1u, 2u)}); + m2.set (hb_map_t (), hb_map_t {pair (1u, 2u)}); + + m1.set (hb_map_t {pair (1u, 2u)}, hb_map_t {pair (2u, 3u)}); + m2.set (hb_map_t {pair (1u, 2u)}, hb_map_t {pair (2u, 3u)}); + + /* Cannot override empty map. */ + assert (m1.get (hb_map_t ()) == hb_map_t ()); + assert (m2.get (hb_map_t ()) == hb_map_t ()); + + assert (m1.get (hb_map_t {pair (1u, 2u)}) == hb_map_t {pair (2u, 3u)}); + assert (m2.get (hb_map_t {pair (1u, 2u)}) == hb_map_t {pair (2u, 3u)}); + } + + /* Test hashing sets. */ + { + hb_hashmap_t<hb_set_t, hb_set_t, const hb_set_t *, const hb_set_t *, &invalid_set, &invalid_set> m1; + hb_hashmap_t<hb_set_t, hb_set_t, std::nullptr_t, std::nullptr_t, nullptr, nullptr> m2; + + m1.set (hb_set_t (), hb_set_t ()); + m2.set (hb_set_t (), hb_set_t ()); + + m1.set (hb_set_t (), hb_set_t {1}); + m2.set (hb_set_t (), hb_set_t {1}); + + m1.set (hb_set_t {1, 1000}, hb_set_t {2}); + m2.set (hb_set_t {1, 1000}, hb_set_t {2}); + + /* Cannot override empty set. */ + assert (m1.get (hb_set_t ()) == hb_set_t ()); + assert (m2.get (hb_set_t ()) == hb_set_t ()); + + assert (m1.get (hb_set_t {1000, 1}) == hb_set_t {2}); + assert (m2.get (hb_set_t {1000, 1}) == hb_set_t {2}); + } + + /* Test hashing vectors. */ + { + using vector_t = hb_vector_t<unsigned>; + + hb_hashmap_t<vector_t, vector_t, const vector_t *, const vector_t *, &invalid_vector, &invalid_vector> m1; + hb_hashmap_t<vector_t, vector_t, std::nullptr_t, std::nullptr_t, nullptr, nullptr> m2; + + m1.set (vector_t (), vector_t ()); + m2.set (vector_t (), vector_t ()); + + m1.set (vector_t (), vector_t {1}); + m2.set (vector_t (), vector_t {1}); + + m1.set (vector_t {1}, vector_t {2}); + m2.set (vector_t {1}, vector_t {2}); + + /* Cannot override empty vector. */ + assert (m1.get (vector_t ()) == vector_t ()); + assert (m2.get (vector_t ()) == vector_t ()); + + assert (m1.get (vector_t {1}) == vector_t {2}); + assert (m2.get (vector_t {1}) == vector_t {2}); + } + return 0; } |