null+****@clear*****
null+****@clear*****
2011年 11月 10日 (木) 10:13:24 JST
Susumu Yata 2011-11-10 01:13:24 +0000 (Thu, 10 Nov 2011) New Revision: 21663ae519ca314a929630b840844daa905e1172 Merged 770d028: Merge branch 'master' of github.com:groonga/groonga Log: add a test of grn::dat::CursorFactory. Added files: test/unit/core/dat/test-cursor-factory.cpp Modified files: test/unit/core/dat/Makefile.am Modified: test/unit/core/dat/Makefile.am (+2 -2) =================================================================== --- test/unit/core/dat/Makefile.am 2011-11-10 01:08:18 +0000 (eb162b7) +++ test/unit/core/dat/Makefile.am 2011-11-10 01:13:24 +0000 (dd6e71e) @@ -4,6 +4,7 @@ noinst_LTLIBRARIES = \ test-base.la \ test-block.la \ test-check.la \ + test-cursor-factory.la \ test-entry.la \ test-header.la \ test-key.la \ @@ -11,7 +12,6 @@ noinst_LTLIBRARIES = \ test-string.la \ test-vector.la -# test-cursor-factory.la \ # test-file.la \ # test-id-cursor.la \ # test-key-cursor.la \ @@ -44,7 +44,7 @@ test_array_la_SOURCES = test-array.cpp test_base_la_SOURCES = test-base.cpp test_block_la_SOURCES = test-block.cpp test_check_la_SOURCES = test-check.cpp -#test_cursor_factory_la_SOURCES = test-cursor-factory.cpp +test_cursor_factory_la_SOURCES = test-cursor-factory.cpp test_entry_la_SOURCES = test-entry.cpp #test_file_la_SOURCES = test-file.cpp test_header_la_SOURCES = test-header.cpp Added: test/unit/core/dat/test-cursor-factory.cpp (+108 -0) 100644 =================================================================== --- /dev/null +++ test/unit/core/dat/test-cursor-factory.cpp 2011-11-10 01:13:24 +0000 (a831dff) @@ -0,0 +1,108 @@ +/* -*- c-basic-offset: 2; coding: utf-8 -*- */ +/* + Copyright (C) 2011 Brazil + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License version 2.1 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include <gcutter.h> +#include <cppcutter.h> + +#include <grn-assertions.h> +#include <dat/cursor-factory.hpp> +#include <dat/trie.hpp> + +#include <memory> + +namespace +{ + void create_trie(grn::dat::Trie *trie) + { + trie->create(); + cppcut_assert_equal(trie->insert("apple", 5), true); + cppcut_assert_equal(trie->insert("orange", 6), true); + cppcut_assert_equal(trie->insert("banana", 6), true); + cppcut_assert_equal(trie->insert("melon", 5), true); + } +} + +namespace test_dat_cursor_factory +{ + void test_key_range_cursor(void) + { + grn::dat::Trie trie; + create_trie(&trie); + + std::auto_ptr<grn::dat::Cursor> cursor(grn::dat::CursorFactory::open( + trie, "apple", 5, "melon", 5, 1, 2, + grn::dat::KEY_RANGE_CURSOR | grn::dat::EXCEPT_LOWER_BOUND | + grn::dat::EXCEPT_UPPER_BOUND)); + cut_assert(cursor.get() != static_cast<grn::dat::Cursor *>(NULL)); + + cppcut_assert_equal(cursor->offset(), static_cast<grn::dat::UInt32>(1)); + cppcut_assert_equal(cursor->limit(), static_cast<grn::dat::UInt32>(2)); + cppcut_assert_equal(cursor->flags(), + grn::dat::KEY_RANGE_CURSOR | grn::dat::ASCENDING_CURSOR | + grn::dat::EXCEPT_LOWER_BOUND | grn::dat::EXCEPT_UPPER_BOUND); + } + + void test_id_range_cursor(void) + { + grn::dat::Trie trie; + create_trie(&trie); + + std::auto_ptr<grn::dat::Cursor> cursor(grn::dat::CursorFactory::open( + trie, "apple", 5, "melon", 5, 1, 2, + grn::dat::ID_RANGE_CURSOR | grn::dat::ASCENDING_CURSOR)); + cut_assert(cursor.get() != static_cast<grn::dat::Cursor *>(NULL)); + + cppcut_assert_equal(cursor->offset(), static_cast<grn::dat::UInt32>(1)); + cppcut_assert_equal(cursor->limit(), static_cast<grn::dat::UInt32>(2)); + cppcut_assert_equal(cursor->flags(), + grn::dat::ID_RANGE_CURSOR | grn::dat::ASCENDING_CURSOR); + } + + void test_prefix_cursor(void) + { + grn::dat::Trie trie; + create_trie(&trie); + + std::auto_ptr<grn::dat::Cursor> cursor(grn::dat::CursorFactory::open( + trie, NULL, 3, "apple", 5, 0, 1, + grn::dat::PREFIX_CURSOR | grn::dat::DESCENDING_CURSOR)); + cut_assert(cursor.get() != static_cast<grn::dat::Cursor *>(NULL)); + + cppcut_assert_equal(cursor->offset(), static_cast<grn::dat::UInt32>(0)); + cppcut_assert_equal(cursor->limit(), static_cast<grn::dat::UInt32>(1)); + cppcut_assert_equal(cursor->flags(), + grn::dat::PREFIX_CURSOR | grn::dat::DESCENDING_CURSOR); + } + + void test_predictive_cursor(void) + { + grn::dat::Trie trie; + create_trie(&trie); + + std::auto_ptr<grn::dat::Cursor> cursor(grn::dat::CursorFactory::open( + trie, "apple", 5, NULL, 0, 1, 2, + grn::dat::PREDICTIVE_CURSOR | grn::dat::EXCEPT_EXACT_MATCH)); + cut_assert(cursor.get() != static_cast<grn::dat::Cursor *>(NULL)); + + cppcut_assert_equal(cursor->offset(), static_cast<grn::dat::UInt32>(1)); + cppcut_assert_equal(cursor->limit(), static_cast<grn::dat::UInt32>(2)); + cppcut_assert_equal(cursor->flags(), + grn::dat::PREDICTIVE_CURSOR | + grn::dat::ASCENDING_CURSOR | grn::dat::EXCEPT_EXACT_MATCH); + } +}