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); + } }