[Groonga-commit] groonga/groonga [master] added a test for grn::dat::Trie::lcp_search().

Back to archive index

null+****@clear***** null+****@clear*****
2011年 12月 27日 (火) 13:28:55 JST


Susumu Yata	2011-12-27 13:28:55 +0900 (Tue, 27 Dec 2011)

  New Revision: ace0f288084233c19cefa6495b735a2ee991e6f1

  Log:
    added a test for grn::dat::Trie::lcp_search().

  Modified files:
    test/unit/core/dat/test-trie.cpp

  Modified: test/unit/core/dat/test-trie.cpp (+50 -0)
===================================================================
--- test/unit/core/dat/test-trie.cpp    2011-12-27 13:27:57 +0900 (509a570)
+++ test/unit/core/dat/test-trie.cpp    2011-12-27 13:28:55 +0900 (1d87132)
@@ -252,6 +252,56 @@ namespace test_dat_trie
     }
   }
 
+  void test_lcp_search(void)
+  {
+    grn::dat::Trie trie;
+    trie.create();
+
+    cppcut_assert_equal(true, trie.insert("012", 3));
+    cppcut_assert_equal(true, trie.insert("01234", 5));
+    cppcut_assert_equal(true, trie.insert("0123456", 7));
+
+    cppcut_assert_equal(false, trie.lcp_search("01", 2));
+    cppcut_assert_equal(true, trie.lcp_search("012", 3));
+    cppcut_assert_equal(true, trie.lcp_search("0123", 4));
+    cppcut_assert_equal(false, trie.lcp_search("12345", 5));
+
+    grn::dat::UInt32 key_pos = grn::dat::UINT32_MAX;
+
+    cppcut_assert_equal(false, trie.lcp_search("01", 2, &key_pos));
+    cppcut_assert_equal(grn::dat::UINT32_MAX, key_pos);
+
+    cppcut_assert_equal(true, trie.lcp_search("012", 3, &key_pos));
+    cppcut_assert_equal(true, trie.get_key(key_pos).is_valid());
+    cppcut_assert_equal(static_cast<grn::dat::UInt32>(1),
+                        trie.get_key(key_pos).id());
+
+    cppcut_assert_equal(true, trie.lcp_search("012345", 6, &key_pos));
+    cppcut_assert_equal(true, trie.get_key(key_pos).is_valid());
+    cppcut_assert_equal(static_cast<grn::dat::UInt32>(2),
+                        trie.get_key(key_pos).id());
+
+    cppcut_assert_equal(true, trie.lcp_search("0123456789", 10, &key_pos));
+    cppcut_assert_equal(true, trie.get_key(key_pos).is_valid());
+    cppcut_assert_equal(static_cast<grn::dat::UInt32>(3),
+                        trie.get_key(key_pos).id());
+
+    std::vector<std::string> keys;
+    create_keys(&keys, 1000, 1, 16);
+
+    for (std::size_t i = 0; i < keys.size(); ++i) {
+      const char * const ptr = keys[i].c_str();
+      const uint32_t length = static_cast<uint32_t>(keys[i].length());
+      grn::dat::UInt32 key_pos_inserted;
+      trie.insert(ptr, length, &key_pos_inserted);
+
+      grn::dat::UInt32 key_pos_found;
+      cppcut_assert_equal(true,
+                          trie.lcp_search(ptr, length, &key_pos_found));
+      cppcut_assert_equal(key_pos_inserted, key_pos_found);
+    }
+  }
+
   void test_remove(void)
   {
     std::vector<std::string> keys;




Groonga-commit メーリングリストの案内
Back to archive index