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

Back to archive index

null+****@clear***** null+****@clear*****
2011年 11月 11日 (金) 09:27:50 JST


Susumu Yata	2011-11-11 00:27:50 +0000 (Fri, 11 Nov 2011)

  New Revision: 54b06d713b9d3db42d1772f661ab0241a2de3cd0

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

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

  Modified: test/unit/core/dat/test-key-cursor.cpp (+266 -0)
===================================================================
--- test/unit/core/dat/test-key-cursor.cpp    2011-11-10 12:42:54 +0000 (f99d9fd)
+++ test/unit/core/dat/test-key-cursor.cpp    2011-11-11 00:27:50 +0000 (c3081be)
@@ -23,6 +23,272 @@
 #include <dat/key-cursor.hpp>
 #include <dat/trie.hpp>
 
+#include <cstring>
+
+namespace
+{
+  void create_trie(grn::dat::Trie *trie)
+  {
+    trie->create();
+    trie->insert("Werdna", std::strlen("Werdna"));  // ID: 1, 7th
+    trie->insert("Trebor", std::strlen("Trebor"));  // ID: 2, 6th
+    trie->insert("Human", std::strlen("Human"));    // ID: 3, 5th
+    trie->insert("Elf", std::strlen("Elf"));        // ID: 4, 2nd
+    trie->insert("Dwarf", std::strlen("Dward"));    // ID: 5, 1st
+    trie->insert("Gnome", std::strlen("Gnome"));    // ID: 6, 3rd
+    trie->insert("Hobbit", std::strlen("Hobbit"));  // ID: 7, 4th
+  }
+}
+
 namespace test_dat_key_cursor
 {
+  void test_null(void)
+  {
+    grn::dat::Trie trie;
+    create_trie(&trie);
+
+    grn::dat::KeyCursor cursor;
+    cursor.open(trie, grn::dat::String(), 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().id(), grn::dat::UInt32(6));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(7));
+    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);
+  }
+
+  void test_min(void)
+  {
+    grn::dat::Trie trie;
+    create_trie(&trie);
+
+    grn::dat::KeyCursor cursor;
+
+    cursor.open(trie, grn::dat::String("Hobbit"), grn::dat::String());
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(7));
+    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("T"), grn::dat::String());
+    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("Z"), grn::dat::String());
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+  }
+
+  void test_max_by_str(void)
+  {
+    grn::dat::Trie trie;
+    create_trie(&trie);
+
+    grn::dat::KeyCursor cursor;
+
+    cursor.open(trie, grn::dat::String(), grn::dat::String("Elf"));
+    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(), grn::dat::String("F"));
+    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(), grn::dat::String("A"));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+  }
+
+  void test_min_max(void)
+  {
+    grn::dat::Trie trie;
+    create_trie(&trie);
+
+    grn::dat::KeyCursor cursor;
+    cursor.open(trie, grn::dat::String("Gnome"), grn::dat::String("Trebor"));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(6));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(7));
+    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().is_valid(), false);
+  }
+
+  void test_offset(void)
+  {
+    grn::dat::Trie trie;
+    create_trie(&trie);
+
+    grn::dat::KeyCursor cursor;
+
+    cursor.open(trie, grn::dat::String("Hobbit"), grn::dat::String("Trebor"), 0);
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(7));
+    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().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String(), grn::dat::String(), 5);
+    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("Gnome"), grn::dat::String("Trebor"), 2);
+    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().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String("Gnome"), grn::dat::String("Trebor"), 100);
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+  }
+
+  void test_limit(void)
+  {
+    grn::dat::Trie trie;
+    create_trie(&trie);
+
+    grn::dat::KeyCursor cursor;
+
+    cursor.open(trie, grn::dat::String("Gnome"), grn::dat::String("Werdna"),
+                0, grn::dat::UINT32_MAX);
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(6));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(7));
+    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("Gnome"), grn::dat::String("Werdna"),
+                0, 3);
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(6));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(7));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(3));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String("A"), grn::dat::String("Z"), 3, 2);
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(7));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(3));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String("A"), grn::dat::String("Z"), 0, 0);
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+  }
+
+  void test_ascending_cursor(void)
+  {
+    grn::dat::Trie trie;
+    create_trie(&trie);
+
+    grn::dat::KeyCursor cursor;
+
+    cursor.open(trie, grn::dat::String(), grn::dat::String(),
+                0, grn::dat::UINT32_MAX, grn::dat::ASCENDING_CURSOR);
+    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().id(), grn::dat::UInt32(6));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(7));
+    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("Elf"), grn::dat::String("Human"),
+                0, grn::dat::UINT32_MAX, grn::dat::ASCENDING_CURSOR);
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(4));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(6));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(7));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(3));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String("Dwarf"), grn::dat::String("Trebor"),
+                3, 2, grn::dat::ASCENDING_CURSOR);
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(7));
+    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::KeyCursor cursor;
+
+    cursor.open(trie, grn::dat::String(), grn::dat::String(),
+                0, grn::dat::UINT32_MAX, grn::dat::DESCENDING_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().id(), grn::dat::UInt32(7));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(6));
+    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().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String("Elf"), grn::dat::String("Human"),
+                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(7));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(6));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(4));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String("Dwarf"), grn::dat::String("Trebor"),
+                3, 2, grn::dat::DESCENDING_CURSOR);
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(6));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(4));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+  }
+
+  void test_except_boundary(void)
+  {
+    grn::dat::Trie trie;
+    create_trie(&trie);
+
+    grn::dat::KeyCursor cursor;
+
+    cursor.open(trie, grn::dat::String(), grn::dat::String(),
+                0, grn::dat::UINT32_MAX,
+                grn::dat::EXCEPT_LOWER_BOUND | grn::dat::EXCEPT_UPPER_BOUND);
+    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().id(), grn::dat::UInt32(6));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(7));
+    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("Dwarf"), grn::dat::String("Werdna"),
+                0, grn::dat::UINT32_MAX,
+                grn::dat::EXCEPT_LOWER_BOUND | grn::dat::EXCEPT_UPPER_BOUND);
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(4));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(6));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(7));
+    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().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String("Elf"), grn::dat::String("Trebor"),
+                2, 100, grn::dat::EXCEPT_LOWER_BOUND);
+    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().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String("Elf"), grn::dat::String("Trebor"),
+                2, 100, grn::dat::EXCEPT_UPPER_BOUND);
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(7));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(3));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+
+    cursor.open(trie, grn::dat::String("Fighter"), grn::dat::String("Samurai"),
+                0, grn::dat::UINT32_MAX,
+                grn::dat::EXCEPT_LOWER_BOUND | grn::dat::EXCEPT_UPPER_BOUND);
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(6));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(7));
+    cppcut_assert_equal(cursor.next().id(), grn::dat::UInt32(3));
+    cppcut_assert_equal(cursor.next().is_valid(), false);
+  }
 }




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