[Groonga-commit] groonga/grnxx [master] Add a test for grnxx::alpha::DoubleArray::remove().

Back to archive index

susumu.yata null+****@clear*****
Thu Jan 31 11:35:53 JST 2013


susumu.yata	2013-01-31 11:35:53 +0900 (Thu, 31 Jan 2013)

  New Revision: 09db9d711c7a7c902c42aad3bbf9e0a304ffab77
  https://github.com/groonga/grnxx/commit/09db9d711c7a7c902c42aad3bbf9e0a304ffab77

  Log:
    Add a test for grnxx::alpha::DoubleArray::remove().

  Modified files:
    test/test_alpha_double_array.cpp

  Modified: test/test_alpha_double_array.cpp (+105 -24)
===================================================================
--- test/test_alpha_double_array.cpp    2013-01-31 11:35:35 +0900 (b0cf26f)
+++ test/test_alpha_double_array.cpp    2013-01-31 11:35:53 +0900 (05e12a0)
@@ -19,6 +19,7 @@
 #include <random>
 #include <string>
 #include <unordered_set>
+#include <vector>
 
 #include "alpha/double_array.hpp"
 #include "logger.hpp"
@@ -31,41 +32,50 @@ void test_basics() {
   grnxx::alpha::DoubleArray da;
   da.create(pool);
 
-  std::uint64_t key_id;
-  assert(!da.search("apple", 5, &key_id));
+  std::vector<std::string> keys;
+  keys.push_back("apple");
+  keys.push_back("banana");
+  keys.push_back("strawberry");
 
-  assert(da.insert("apple", 5, &key_id));
-  GRNXX_NOTICE() << "key_id = " << key_id;
-
-  assert(!da.insert("apple", 5, &key_id));
-
-  assert(da.search("apple", 5, &key_id));
-  GRNXX_NOTICE() << "key_id = " << key_id;
-
-  assert(da.insert("banana", 6, &key_id));
-  GRNXX_NOTICE() << "key_id = " << key_id;
+  for (std::size_t i = 0; i < keys.size(); ++i) {
+    assert(!da.search(keys[i].c_str(), keys[i].length()));
+  }
 
-  assert(!da.insert("banana", 6, &key_id));
+  for (std::size_t i = 0; i < keys.size(); ++i) {
+    std::uint64_t key_id;
+    assert(da.insert(keys[i].c_str(), keys[i].length(), &key_id));
+    assert(key_id == i);
+  }
 
-  assert(da.insert("orange", 6, &key_id));
-  GRNXX_NOTICE() << "key_id = " << key_id;
+  for (std::size_t i = 0; i < keys.size(); ++i) {
+    std::uint64_t key_id;
+    assert(da.search(keys[i].c_str(), keys[i].length(), &key_id));
+    assert(key_id == i);
+  }
 
-  assert(!da.insert("orange", 6, &key_id));
+  for (std::size_t i = 0; i < keys.size(); ++i) {
+    assert(!da.insert(keys[i].c_str(), keys[i].length()));
+  }
 
-  assert(da.search("banana", 6, &key_id));
-  GRNXX_NOTICE() << "key_id = " << key_id;
+  for (std::size_t i = 0; i < keys.size(); ++i) {
+    assert(da.remove(keys[i].c_str(), keys[i].length()));
+  }
 
-  assert(da.search("orange", 6, &key_id));
-  GRNXX_NOTICE() << "key_id = " << key_id;
+  for (std::size_t i = 0; i < keys.size(); ++i) {
+    assert(!da.search(keys[i].c_str(), keys[i].length()));
+  }
 
-  assert(da.insert("oracle", 6, &key_id));
-  GRNXX_NOTICE() << "key_id = " << key_id;
+  for (std::size_t i = 0; i < keys.size(); ++i) {
+    assert(!da.remove(keys[i].c_str(), keys[i].length()));
+  }
 
-  assert(!da.insert("oracle", 6, &key_id));
+  for (std::size_t i = 0; i < keys.size(); ++i) {
+    assert(da.insert(keys[i].c_str(), keys[i].length()));
+  }
 }
 
 void test_insert() {
-  constexpr std::size_t NUM_KEYS = 1 << 16;
+  constexpr std::size_t NUM_KEYS = 1 << 12;
   constexpr std::size_t MIN_LENGTH = 1;
   constexpr std::size_t MAX_LENGTH = 10;
 
@@ -119,6 +129,76 @@ void test_insert() {
   }
 }
 
+void test_remove() {
+  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 * 2));
+    assert(da.insert(false_keys[i].c_str(), false_keys[i].length(), &key_id));
+    assert(key_id == ((i * 2) + 1));
+  }
+
+  for (std::size_t i = 0; i < NUM_KEYS; ++i) {
+    assert(da.remove((i * 2) + 1));
+  }
+
+  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.insert(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.remove(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()));
+  }
+}
+
 int main() {
   grnxx::Logger::set_flags(grnxx::LOGGER_WITH_ALL |
                            grnxx::LOGGER_ENABLE_COUT);
@@ -127,6 +207,7 @@ int main() {
   test_basics();
 
   test_insert();
+  test_remove();
 
   return 0;
 }
-------------- next part --------------
HTML����������������������������...
Télécharger 



More information about the Groonga-commit mailing list
Back to archive index