00001 #include <boost/test/unit_test.hpp>
00002 #include "PostlistBuilder.hpp"
00003
00004 using namespace aitools::invertedindex;
00005
00006 BOOST_AUTO_TEST_SUITE(iterator);
00007
00008 BOOST_AUTO_TEST_CASE(get_next_from_empty)
00009 {
00010
00011 PostlistBuilder builder;
00012 Iterator::SharedPointer iterator(builder.build());
00013 BOOST_CHECK_EQUAL(iterator->length(), 0);
00014 BOOST_CHECK(!iterator->is_valid());
00015
00016
00017 iterator->rewind();
00018 BOOST_CHECK(!iterator->is_valid());
00019 }
00020
00021 BOOST_AUTO_TEST_CASE(get_next_constant_entry_size)
00022 {
00023
00024 unsigned length(100);
00025 ByteBuffer buffer(10);
00026 PostlistBuilder builder;
00027 for (unsigned i(0); i != length; ++i)
00028 {
00029 builder.append(buffer);
00030 }
00031 Iterator::SharedPointer iterator(builder.build());
00032 BOOST_CHECK_EQUAL(iterator->length(), length);
00033 for (unsigned i(0); i != length; ++i)
00034 {
00035 BOOST_CHECK(iterator->is_valid());
00036 BOOST_CHECK_EQUAL(iterator->size(), 10);
00037 iterator->advance();
00038 }
00039 BOOST_CHECK(!iterator->is_valid());
00040
00041
00042 iterator->rewind();
00043 for (unsigned i(0); i != length; ++i)
00044 {
00045 BOOST_CHECK(iterator->is_valid());
00046 BOOST_CHECK_EQUAL(iterator->size(), 10);
00047 iterator->advance();
00048 }
00049 BOOST_CHECK(!iterator->is_valid());
00050 }
00051
00052 BOOST_AUTO_TEST_CASE(get_next_variable_entry_size)
00053 {
00054
00055 unsigned length(100);
00056 ByteBuffer buffer(10);
00057 PostlistBuilder builder;
00058 for (unsigned i(0); i != length; ++i)
00059 {
00060 buffer.resize(i);
00061 builder.append(buffer);
00062 }
00063 Iterator::SharedPointer iterator(builder.build());
00064 BOOST_CHECK_EQUAL(iterator->length(), length);
00065 for (unsigned i(0); i != length; ++i)
00066 {
00067 BOOST_CHECK(iterator->is_valid());
00068 BOOST_CHECK_EQUAL(iterator->size(), i);
00069 iterator->advance();
00070 }
00071 BOOST_CHECK(!iterator->is_valid());
00072
00073
00074 iterator->rewind();
00075 for (unsigned i(0); i != length; ++i)
00076 {
00077 BOOST_CHECK(iterator->is_valid());
00078 BOOST_CHECK_EQUAL(iterator->size(), i);
00079 iterator->advance();
00080 }
00081 BOOST_CHECK(!iterator->is_valid());
00082 }
00083
00084 BOOST_AUTO_TEST_CASE(is_paged_constant_entry_size)
00085 {
00086 ByteBuffer buffer(110);
00087 unsigned length(100000);
00088 PostlistBuilder builder;
00089 for (unsigned i(0); i != length; ++i)
00090 {
00091 builder.append(buffer);
00092 }
00093 Iterator::SharedPointer iterator(builder.build());
00094 BOOST_CHECK_EQUAL(iterator->length(), length);
00095 BOOST_CHECK(iterator->is_paged());
00096 for (unsigned i(0); i != length; ++i)
00097 {
00098 BOOST_CHECK(iterator->is_valid());
00099 BOOST_CHECK_EQUAL(iterator->size(), 110);
00100 iterator->advance();
00101 }
00102 BOOST_CHECK(!iterator->is_valid());
00103
00104
00105 iterator->rewind();
00106 for (unsigned i(0); i != length; ++i)
00107 {
00108 BOOST_CHECK(iterator->is_valid());
00109 BOOST_CHECK_EQUAL(iterator->size(), 110);
00110 iterator->advance();
00111 }
00112 BOOST_CHECK(!iterator->is_valid());
00113 }
00114
00115 BOOST_AUTO_TEST_CASE(is_paged_variable_entry_size)
00116 {
00117 ByteBuffer buffer;
00118 unsigned length(5000);
00119 PostlistBuilder builder;
00120 for (unsigned i(0); i != length; ++i)
00121 {
00122 buffer.resize(i);
00123 builder.append(buffer);
00124 }
00125 Iterator::SharedPointer iterator(builder.build());
00126 BOOST_CHECK_EQUAL(iterator->length(), length);
00127 BOOST_CHECK(iterator->is_paged());
00128 for (unsigned i(0); i != length; ++i)
00129 {
00130 BOOST_CHECK(iterator->is_valid());
00131 BOOST_CHECK_EQUAL(iterator->size(), i);
00132 iterator->advance();
00133 }
00134 BOOST_CHECK(!iterator->is_valid());
00135
00136
00137 iterator->rewind();
00138 for (unsigned i(0); i != length; ++i)
00139 {
00140 BOOST_CHECK(iterator->is_valid());
00141 BOOST_CHECK_EQUAL(iterator->size(), i);
00142 iterator->advance();
00143 }
00144 BOOST_CHECK(!iterator->is_valid());
00145 }
00146
00147 BOOST_AUTO_TEST_SUITE_END();