|
|
|
@ -27,11 +27,6 @@ |
|
|
|
|
#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) |
|
|
|
|
{ |
|
|
|
@ -127,19 +122,19 @@ main (int argc, char **argv) |
|
|
|
|
|
|
|
|
|
/* Test class key / value types. */ |
|
|
|
|
{ |
|
|
|
|
hb_hashmap_t<hb_bytes_t, int, std::nullptr_t, int, nullptr, 0> m1; |
|
|
|
|
hb_hashmap_t<int, hb_bytes_t, int, std::nullptr_t, 0, nullptr> m2; |
|
|
|
|
hb_hashmap_t<hb_bytes_t, hb_bytes_t, std::nullptr_t, std::nullptr_t, nullptr, nullptr> m3; |
|
|
|
|
hb_hashmap_t<hb_bytes_t, int> m1; |
|
|
|
|
hb_hashmap_t<int, hb_bytes_t> m2; |
|
|
|
|
hb_hashmap_t<hb_bytes_t, hb_bytes_t> m3; |
|
|
|
|
assert (m1.get_population () == 0); |
|
|
|
|
assert (m2.get_population () == 0); |
|
|
|
|
assert (m3.get_population () == 0); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
{ |
|
|
|
|
hb_hashmap_t<int, int, int, int, 0, 0> m0; |
|
|
|
|
hb_hashmap_t<std::string, int, const std::string*, int, &invalid, 0> m1; |
|
|
|
|
hb_hashmap_t<int, std::string, int, const std::string*, 0, &invalid> m2; |
|
|
|
|
hb_hashmap_t<std::string, std::string, const std::string*, const std::string*, &invalid, &invalid> m3; |
|
|
|
|
hb_hashmap_t<int, int> m0; |
|
|
|
|
hb_hashmap_t<std::string, int> m1; |
|
|
|
|
hb_hashmap_t<int, std::string> m2; |
|
|
|
|
hb_hashmap_t<std::string, std::string> m3; |
|
|
|
|
|
|
|
|
|
std::string s; |
|
|
|
|
for (unsigned i = 1; i < 1000; i++) |
|
|
|
@ -156,82 +151,60 @@ main (int argc, char **argv) |
|
|
|
|
{ |
|
|
|
|
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; |
|
|
|
|
hb_hashmap_t<hb_map_t, hb_map_t> m1; |
|
|
|
|
|
|
|
|
|
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 ()) == hb_map_t {pair (1u, 2u)}); |
|
|
|
|
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; |
|
|
|
|
hb_hashmap_t<hb_set_t, hb_set_t> m1; |
|
|
|
|
|
|
|
|
|
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 ()) == hb_set_t {1}); |
|
|
|
|
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; |
|
|
|
|
hb_hashmap_t<vector_t, vector_t> m1; |
|
|
|
|
|
|
|
|
|
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 ()) == vector_t {1}); |
|
|
|
|
assert (m1.get (vector_t {1}) == vector_t {2}); |
|
|
|
|
assert (m2.get (vector_t {1}) == vector_t {2}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* Test hb::shared_ptr. */ |
|
|
|
|
hb_hash (hb::shared_ptr<hb_set_t> ()); |
|
|
|
|
#if 0 |
|
|
|
|
{ |
|
|
|
|
hb_hashmap_t<hb::shared_ptr<hb_set_t>, hb::shared_ptr<hb_set_t>, std::nullptr_t, std::nullptr_t, nullptr, nullptr> m; |
|
|
|
|
hb_hashmap_t<hb::shared_ptr<hb_set_t>, hb::shared_ptr<hb_set_t>> m; |
|
|
|
|
|
|
|
|
|
m.get (hb::shared_ptr<hb_set_t> ()); |
|
|
|
|
m.get (hb::shared_ptr<hb_set_t> (hb_set_get_empty ())); |
|
|
|
|
m.iter (); |
|
|
|
|
} |
|
|
|
|
/* Test hb::unique_ptr. */ |
|
|
|
|
hb_hash (hb::unique_ptr<hb_set_t> ()); |
|
|
|
|
{ |
|
|
|
|
hb_hashmap_t<hb::unique_ptr<hb_set_t>, hb::unique_ptr<hb_set_t>> m; |
|
|
|
|
|
|
|
|
|
m.get (hb::unique_ptr<hb_set_t> ()); |
|
|
|
|
m.get (hb::unique_ptr<hb_set_t> (hb_set_get_empty ())); |
|
|
|
|
m.iter_ref (); |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|