susumu.yata
null+****@clear*****
Thu May 16 21:05:27 JST 2013
susumu.yata 2013-05-16 21:05:27 +0900 (Thu, 16 May 2013) New Revision: 459adda1ab0471c554fb58d1068b6b90e2b0a9d6 https://github.com/groonga/grnxx/commit/459adda1ab0471c554fb58d1068b6b90e2b0a9d6 Message: Add tests for grnxx::Map. Modified files: test/test_map.cpp Modified: test/test_map.cpp (+148 -2) =================================================================== --- test/test_map.cpp 2013-05-16 20:59:37 +0900 (e2c36ec) +++ test/test_map.cpp 2013-05-16 21:05:27 +0900 (1b3eb06) @@ -16,12 +16,151 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include <cassert> +#include <memory> +#include <type_traits> +#include "grnxx/bytes.hpp" +#include "grnxx/geo_point.hpp" #include "grnxx/logger.hpp" +#include "grnxx/map.hpp" +#include "grnxx/storage.hpp" +#include "grnxx/time/periodic_clock.hpp" namespace { -// TODO +template <typename T> +void test_map_create(grnxx::MapType map_type) { + std::unique_ptr<grnxx::Storage> storage(grnxx::Storage::create(nullptr)); + std::unique_ptr<grnxx::Map<T>> map; + + map.reset(grnxx::Map<T>::create(map_type, storage.get(), + grnxx::STORAGE_ROOT_NODE_ID)); + assert(map); +} + +template <typename T> +void test_map_open(grnxx::MapType map_type) { + std::unique_ptr<grnxx::Storage> storage(grnxx::Storage::create(nullptr)); + std::unique_ptr<grnxx::Map<T>> map; + + map.reset(grnxx::Map<T>::create(map_type, storage.get(), + grnxx::STORAGE_ROOT_NODE_ID)); + assert(map); + const uint32_t storage_node_id = map->storage_node_id(); + map.reset(grnxx::Map<T>::open(storage.get(), storage_node_id)); + assert(map); +} + +template <typename T> +void test_map_unlink(grnxx::MapType map_type) { + std::unique_ptr<grnxx::Storage> storage(grnxx::Storage::create(nullptr)); + std::unique_ptr<grnxx::Map<T>> map; + + map.reset(grnxx::Map<T>::create(map_type, storage.get(), + grnxx::STORAGE_ROOT_NODE_ID)); + assert(map); + grnxx::StorageNode storage_node = storage->open_node(map->storage_node_id()); + assert(storage_node); + assert(grnxx::Map<T>::unlink(storage.get(), storage_node.id())); + assert(storage_node.status() == grnxx::STORAGE_NODE_UNLINKED); +} + +template <typename T> +void test_map_type(grnxx::MapType map_type) { + std::unique_ptr<grnxx::Storage> storage(grnxx::Storage::create(nullptr)); + std::unique_ptr<grnxx::Map<T>> map; + + map.reset(grnxx::Map<T>::create(map_type, storage.get(), + grnxx::STORAGE_ROOT_NODE_ID)); + assert(map); + assert(map->type() == map_type); +} + +template <typename T> +void test_map_storage_node_id(grnxx::MapType map_type) { + std::unique_ptr<grnxx::Storage> storage(grnxx::Storage::create(nullptr)); + std::unique_ptr<grnxx::Map<T>> map; + + map.reset(grnxx::Map<T>::create(map_type, storage.get(), + grnxx::STORAGE_ROOT_NODE_ID)); + assert(map); + grnxx::StorageNode storage_node = storage->open_node(map->storage_node_id()); + assert(storage_node); + assert(storage_node.status() == grnxx::STORAGE_NODE_ACTIVE); +} + +template <typename T> +void test_map_min_key_id(grnxx::MapType map_type) { + std::unique_ptr<grnxx::Storage> storage(grnxx::Storage::create(nullptr)); + std::unique_ptr<grnxx::Map<T>> map; + + map.reset(grnxx::Map<T>::create(map_type, storage.get(), + grnxx::STORAGE_ROOT_NODE_ID)); + assert(map); + assert(map->min_key_id() == grnxx::MAP_MIN_KEY_ID); + // TODO: Test after add and remove. +} + +template <typename T> +void test_map_max_key_id(grnxx::MapType map_type) { + std::unique_ptr<grnxx::Storage> storage(grnxx::Storage::create(nullptr)); + std::unique_ptr<grnxx::Map<T>> map; + + map.reset(grnxx::Map<T>::create(map_type, storage.get(), + grnxx::STORAGE_ROOT_NODE_ID)); + assert(map); + assert(map->max_key_id() == (grnxx::MAP_MIN_KEY_ID - 1)); + // TODO: Test after add and remove. +} + +template <typename T> +void test_map_next_key_id(grnxx::MapType map_type) { + std::unique_ptr<grnxx::Storage> storage(grnxx::Storage::create(nullptr)); + std::unique_ptr<grnxx::Map<T>> map; + + map.reset(grnxx::Map<T>::create(map_type, storage.get(), + grnxx::STORAGE_ROOT_NODE_ID)); + assert(map); + assert(map->next_key_id() == grnxx::MAP_MIN_KEY_ID); + // TODO: Test after add and remove. +} + +template <typename T> +void test_map_num_keys(grnxx::MapType map_type) { + std::unique_ptr<grnxx::Storage> storage(grnxx::Storage::create(nullptr)); + std::unique_ptr<grnxx::Map<T>> map; + + map.reset(grnxx::Map<T>::create(map_type, storage.get(), + grnxx::STORAGE_ROOT_NODE_ID)); + assert(map); + assert(map->num_keys() == 0); + // TODO: Test after add and remove. +} + +template <typename T> +void test_map(grnxx::MapType map_type) { + test_map_create<T>(map_type); + test_map_open<T>(map_type); + test_map_unlink<T>(map_type); + test_map_storage_node_id<T>(map_type); + test_map_type<T>(map_type); + test_map_min_key_id<T>(map_type); + test_map_max_key_id<T>(map_type); + test_map_next_key_id<T>(map_type); + test_map_num_keys<T>(map_type); +} + +template <typename T> +void test_map(T) { + GRNXX_NOTICE() << __PRETTY_FUNCTION__; + test_map<T>(grnxx::MAP_ARRAY); +} + +template <typename T, typename... U> +void test_map(T, U... args) { + test_map(T()); + test_map(args...); +} } // namespace @@ -30,7 +169,14 @@ int main() { grnxx::LOGGER_ENABLE_COUT); grnxx::Logger::set_max_level(grnxx::NOTICE_LOGGER); - // TODO + // Increment the reference count for grnxx::PeriodicClock. + grnxx::PeriodicClock clock; + + test_map(grnxx::int8_t(), grnxx::uint8_t(), + grnxx::int16_t(), grnxx::uint16_t(), + grnxx::int32_t(), grnxx::uint32_t(), + grnxx::int64_t(), grnxx::uint64_t(), + grnxx::GeoPoint()); return 0; } -------------- next part -------------- HTML����������������������������... ダウンロード