susumu.yata
null+****@clear*****
Fri Aug 16 18:20:02 JST 2013
susumu.yata 2013-08-16 18:20:02 +0900 (Fri, 16 Aug 2013) New Revision: a0e2dc371d6293fa2c01e2b76e67b2baf2cdd254 https://github.com/groonga/grnxx/commit/a0e2dc371d6293fa2c01e2b76e67b2baf2cdd254 Message: Add a test for grnxx::map::Pool::defrag(). Modified files: test/test_map_pool.cpp Modified: test/test_map_pool.cpp (+31 -1) =================================================================== --- test/test_map_pool.cpp 2013-08-16 18:19:36 +0900 (3ef62a9) +++ test/test_map_pool.cpp 2013-08-16 18:20:02 +0900 (5738cad) @@ -404,7 +404,37 @@ void test_map_pool_add() { template <typename T> void test_map_pool_defrag() { - // TODO + std::unique_ptr<grnxx::Storage> storage(grnxx::Storage::create(nullptr)); + std::unique_ptr<grnxx::map::Pool<T>> pool( + grnxx::map::Pool<T>::create(storage.get(), + grnxx::STORAGE_ROOT_NODE_ID)); + std::vector<T> keys; + std::vector<std::int64_t> key_ids; + generate_random_keys(get_num_keys<T>(), &keys); + for (std::uint64_t i = 0; i < keys.size(); ++i) { + const std::int64_t key_id = pool->add(keys[i]); + key_ids.push_back(key_id); + } + pool->defrag(); + for (std::uint64_t i = 0; i < keys.size(); ++i) { + T stored_key; + assert(pool->get(key_ids[i], &stored_key)); + assert(grnxx::map::Helper<T>::equal_to(stored_key, keys[i])); + } + for (std::uint64_t i = 0; i < keys.size(); i += 4) { + pool->unset(key_ids[i + 1]); + pool->unset(key_ids[i + 2]); + pool->unset(key_ids[i + 3]); + } + pool->defrag(); + for (std::uint64_t i = 0; i < keys.size(); i += 4) { + T stored_key; + assert(pool->get(key_ids[i], &stored_key)); + assert(grnxx::map::Helper<T>::equal_to(stored_key, keys[i])); + assert(!pool->get_bit(key_ids[i + 1])); + assert(!pool->get_bit(key_ids[i + 2])); + assert(!pool->get_bit(key_ids[i + 3])); + } } template <typename T> -------------- next part -------------- HTML����������������������������... Descargar