[Groonga-commit] groonga/groonga [master] add a test of grn::dat::PredictiveCursor.

Back to archive index

null+****@clear***** null+****@clear*****
2011年 11月 11日 (金) 10:46:35 JST


Susumu Yata	2011-11-11 01:46:35 +0000 (Fri, 11 Nov 2011)

  New Revision: a4eeed6270ddeead8ffafc60dd5232b5d0ad5609

  Log:
    add a test of grn::dat::PredictiveCursor.

  Modified files:
    test/unit/core/dat/test-predictive-cursor.cpp

  Modified: test/unit/core/dat/test-predictive-cursor.cpp (+302 -0)
===================================================================
--- test/unit/core/dat/test-predictive-cursor.cpp    2011-11-11 01:13:05 +0000 (69759ce)
+++ test/unit/core/dat/test-predictive-cursor.cpp    2011-11-11 01:46:35 +0000 (805a059)
@@ -23,6 +23,308 @@
 #include <dat/predictive-cursor.hpp>
 #include <dat/trie.hpp>
 
+#include <cstring>
+
+namespace
+{
+  void create_trie(grn::dat::Trie *trie)
+  {
+    trie->create();
+    trie->insert("北斗", std::strlen("北斗"));                      // ID: 1, 2nd
+    trie->insert("北斗神拳", std::strlen("北斗神拳"));              // ID: 2, 3rd
+    trie->insert("北斗神拳伝承者", std::strlen("北斗神拳伝承者"));  // ID: 3, 4th
+    trie->insert("南斗聖拳", std::strlen("南斗聖拳"));              // ID: 4, 6th
+    trie->insert("南斗孤鷲拳", std::strlen("南斗孤鷲拳"));          // ID: 5, 5th
+    trie->insert("元斗皇拳", std::strlen("元斗皇拳"));              // ID: 6, 1st
+  }
+}
+
 namespace test_dat_predictive_cursor
 {
+  void test_null(void)
+  {
+    grn::dat::Trie trie;
+    create_trie(&trie);
+
+    grn::dat::PredictiveCursor cursor;
+    cursor.open(trie, grn::dat::String());
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(6));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(1));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(2));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(3));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(5));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(4));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+  }
+
+  void test_str(void)
+  {
+    grn::dat::Trie trie;
+    create_trie(&trie);
+
+    grn::dat::PredictiveCursor cursor;
+
+    cursor.open(trie, grn::dat::String("北斗"));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(1));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(2));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(3));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String("北斗神拳"));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(2));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(3));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String("北斗神拳伝承者"));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(3));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String("南斗"));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(5));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(4));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String("南斗聖拳"));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(4));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String("南斗水鳥拳"));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String("元斗"));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(6));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+  }
+
+  void test_offset(void)
+  {
+    grn::dat::Trie trie;
+    create_trie(&trie);
+
+    grn::dat::PredictiveCursor cursor;
+
+    cursor.open(trie, grn::dat::String(), 0);
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(6));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(1));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(2));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(3));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(5));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(4));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String(), 3);
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(3));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(5));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(4));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String("北斗"), 2);
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(3));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String("北斗"), 5);
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+  }
+
+  void test_limit(void)
+  {
+    grn::dat::Trie trie;
+    create_trie(&trie);
+
+    grn::dat::PredictiveCursor cursor;
+
+    cursor.open(trie, grn::dat::String(), 0, grn::dat::UINT32_MAX);
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(6));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(1));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(2));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(3));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(5));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(4));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String(), 0, 4);
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(6));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(1));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(2));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(3));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String(), 2, 3);
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(2));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(3));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(5));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String("北斗"), 0, 2);
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(1));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(2));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String("北斗"), 1, 1);
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(2));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String("南斗"), 0, 0);
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String("北斗"), 1, 100);
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(2));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(3));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+  }
+
+  void test_ascending_cursor(void)
+  {
+    grn::dat::Trie trie;
+    create_trie(&trie);
+
+    grn::dat::PredictiveCursor cursor;
+
+    cursor.open(trie, grn::dat::String(), 0, grn::dat::UINT32_MAX,
+                grn::dat::ASCENDING_CURSOR);
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(6));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(1));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(2));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(3));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(5));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(4));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String(), 3, grn::dat::UINT32_MAX,
+                grn::dat::ASCENDING_CURSOR);
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(3));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(5));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(4));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String(), 3, 2,
+                grn::dat::ASCENDING_CURSOR);
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(3));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(5));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String("北斗"), 0, grn::dat::UINT32_MAX,
+                grn::dat::ASCENDING_CURSOR);
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(1));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(2));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(3));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+  }
+
+  void test_descending_cursor(void)
+  {
+    grn::dat::Trie trie;
+    create_trie(&trie);
+
+    grn::dat::PredictiveCursor cursor;
+
+    cursor.open(trie, grn::dat::String(), 0, grn::dat::UINT32_MAX,
+                grn::dat::DESCENDING_CURSOR);
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(4));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(5));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(3));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(2));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(1));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(6));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String(), 3, grn::dat::UINT32_MAX,
+                grn::dat::DESCENDING_CURSOR);
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(2));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(1));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(6));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String(), 3, 2,
+                grn::dat::DESCENDING_CURSOR);
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(2));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(1));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String("北斗"), 0, grn::dat::UINT32_MAX,
+                grn::dat::DESCENDING_CURSOR);
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(3));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(2));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(1));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String("北斗"), 2, grn::dat::UINT32_MAX,
+                grn::dat::DESCENDING_CURSOR);
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(1));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String("北斗"), 0, 1,
+                grn::dat::DESCENDING_CURSOR);
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(3));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String("北斗"), 3, grn::dat::UINT32_MAX,
+                grn::dat::DESCENDING_CURSOR);
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String("北斗"), 0, 0,
+                grn::dat::DESCENDING_CURSOR);
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+  }
+
+  void test_except_boundary(void)
+  {
+    grn::dat::Trie trie;
+    create_trie(&trie);
+
+    grn::dat::PredictiveCursor cursor;
+
+    cursor.open(trie, grn::dat::String(), 0, grn::dat::UINT32_MAX,
+                grn::dat::EXCEPT_EXACT_MATCH);
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(6));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(1));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(2));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(3));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(5));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(4));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String("北"), 0, grn::dat::UINT32_MAX,
+                grn::dat::EXCEPT_EXACT_MATCH);
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(1));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(2));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(3));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String("北斗"), 0, grn::dat::UINT32_MAX,
+                grn::dat::EXCEPT_EXACT_MATCH);
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(2));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(3));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String("北斗神"), 0, grn::dat::UINT32_MAX,
+                grn::dat::EXCEPT_EXACT_MATCH);
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(2));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(3));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String("北斗神拳"), 0, grn::dat::UINT32_MAX,
+                grn::dat::EXCEPT_EXACT_MATCH);
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(3));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String("北斗神拳伝承"), 0, grn::dat::UINT32_MAX,
+                grn::dat::EXCEPT_EXACT_MATCH);
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(3));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String("北斗神拳伝承者"), 0, grn::dat::UINT32_MAX,
+                grn::dat::EXCEPT_EXACT_MATCH);
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String("北斗"), 1, grn::dat::UINT32_MAX,
+                grn::dat::EXCEPT_EXACT_MATCH);
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(3));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String("北斗"), 0, 1,
+                grn::dat::EXCEPT_EXACT_MATCH);
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(2));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+  }
 }




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