susumu.yata
null+****@clear*****
Thu Jan 31 14:01:36 JST 2013
susumu.yata 2013-01-31 14:01:36 +0900 (Thu, 31 Jan 2013) New Revision: 61732d33aef468d815ebad7be9b04626666311e7 https://github.com/groonga/grnxx/commit/61732d33aef468d815ebad7be9b04626666311e7 Log: Add a test for grnxx::alpha::DoubleArray::update(). Modified files: test/test_alpha_double_array.cpp Modified: test/test_alpha_double_array.cpp (+79 -0) =================================================================== --- test/test_alpha_double_array.cpp 2013-01-31 14:01:17 +0900 (05e12a0) +++ test/test_alpha_double_array.cpp 2013-01-31 14:01:36 +0900 (4454744) @@ -72,6 +72,21 @@ void test_basics() { for (std::size_t i = 0; i < keys.size(); ++i) { assert(da.insert(keys[i].c_str(), keys[i].length())); } + + std::vector<std::string> new_keys; + new_keys.push_back("dog"); + new_keys.push_back("monkey"); + new_keys.push_back("bird"); + + for (std::size_t i = 0; i < keys.size(); ++i) { + assert(da.update(keys[i].c_str(), keys[i].length(), + new_keys[i].c_str(), new_keys[i].length())); + } + + for (std::size_t i = 0; i < keys.size(); ++i) { + assert(!da.search(keys[i].c_str(), keys[i].length())); + assert(da.search(new_keys[i].c_str(), new_keys[i].length())); + } } void test_insert() { @@ -199,6 +214,69 @@ void test_remove() { } } +void test_update() { + constexpr std::size_t NUM_KEYS = 1 << 12; + constexpr std::size_t MIN_LENGTH = 1; + constexpr std::size_t MAX_LENGTH = 10; + + std::mt19937 random; + + grnxx::io::Pool pool; + pool.open(grnxx::io::POOL_TEMPORARY); + + grnxx::alpha::DoubleArray da; + da.create(pool); + + std::vector<std::string> true_keys(NUM_KEYS); + std::vector<std::string> false_keys(NUM_KEYS); + { + std::unordered_set<std::string> keys; + while (keys.size() < (NUM_KEYS * 2)) { + std::string key; + key.resize(MIN_LENGTH + (random() % (MAX_LENGTH - MIN_LENGTH + 1))); + for (std::size_t j = 0; j < key.length(); ++j) { + key[j] = '0' + (random() % 10); + } + keys.insert(key); + } + auto it = keys.begin(); + for (std::size_t i = 0; i < NUM_KEYS; ++i) { + true_keys[i] = *it; + ++it; + false_keys[i] = *it; + ++it; + } + } + + for (std::size_t i = 0; i < NUM_KEYS; ++i) { + std::uint64_t key_id; + assert(da.insert(true_keys[i].c_str(), true_keys[i].length(), &key_id)); + assert(key_id == i); + } + + for (std::size_t i = 0; i < NUM_KEYS; ++i) { + assert(!da.update(i, true_keys[i].c_str(), true_keys[i].length())); + assert(da.update(i, false_keys[i].c_str(), false_keys[i].length())); + } + + for (std::size_t i = 0; i < NUM_KEYS; ++i) { + assert(!da.search(true_keys[i].c_str(), true_keys[i].length())); + assert(da.search(false_keys[i].c_str(), false_keys[i].length())); + } + + for (std::size_t i = 0; i < NUM_KEYS; ++i) { + assert(!da.update(true_keys[i].c_str(), true_keys[i].length(), + false_keys[i].c_str(), false_keys[i].length())); + assert(da.update(false_keys[i].c_str(), false_keys[i].length(), + true_keys[i].c_str(), true_keys[i].length())); + } + + for (std::size_t i = 0; i < NUM_KEYS; ++i) { + assert(da.search(true_keys[i].c_str(), true_keys[i].length())); + assert(!da.search(false_keys[i].c_str(), false_keys[i].length())); + } +} + int main() { grnxx::Logger::set_flags(grnxx::LOGGER_WITH_ALL | grnxx::LOGGER_ENABLE_COUT); @@ -208,6 +286,7 @@ int main() { test_insert(); test_remove(); + test_update(); return 0; } -------------- next part -------------- HTML����������������������������...Download