00001 #include <boost/test/unit_test.hpp>
00002 #include "PostlistBuilder.hpp"
00003 #include "ValueTypes.hpp"
00004 #include "Converter.hpp"
00005 #include "Postlist.hpp"
00006
00007 using namespace aitools::invertedindex;
00008
00009 BOOST_AUTO_TEST_SUITE(postlist);
00010
00011 BOOST_AUTO_TEST_CASE(get_next_from_empty)
00012 {
00013
00014 ShortIntFloat value;
00015 PostlistBuilder builder;
00016 Postlist<ShortIntFloat> postlist(builder.build());
00017 BOOST_CHECK_EQUAL(postlist.length(), 0);
00018 BOOST_CHECK(!postlist.next(value));
00019 BOOST_CHECK(postlist.is_empty());
00020
00021
00022 postlist.reset();
00023 BOOST_CHECK(!postlist.next(value));
00024 }
00025
00026 BOOST_AUTO_TEST_CASE(get_next_constant_value_size)
00027 {
00028
00029 ByteBuffer buffer;
00030 ShortIntFloat value;
00031 unsigned length(10000);
00032 PostlistBuilder builder;
00033 for (unsigned i(0); i != length; ++i)
00034 {
00035 value.e1() = i;
00036 value.to_bytes(buffer);
00037 builder.append(buffer);
00038 }
00039 Postlist<ShortIntFloat> postlist(builder.build());
00040 BOOST_CHECK_EQUAL(postlist.length(), length);
00041 BOOST_CHECK(!postlist.is_empty());
00042 for (unsigned i(0); i != length; ++i)
00043 {
00044 BOOST_CHECK(postlist.next(value));
00045 BOOST_CHECK_EQUAL(value.e1(), i);
00046 }
00047 BOOST_CHECK(!postlist.next(value));
00048
00049
00050 postlist.reset();
00051 for (unsigned i(0); i != length; ++i)
00052 {
00053 BOOST_CHECK(postlist.next(value));
00054 BOOST_CHECK_EQUAL(value.e1(), i);
00055 }
00056 BOOST_CHECK(!postlist.next(value));
00057 }
00058
00059 BOOST_AUTO_TEST_CASE(get_next_variable_value_size)
00060 {
00061
00062 IntString value;
00063 ByteBuffer buffer;
00064 unsigned length(10000);
00065 PostlistBuilder builder;
00066 for (unsigned i(0); i != length; ++i)
00067 {
00068 value.e1() = i;
00069 value.e2() = Converter::ui32_to_str(i);
00070 value.to_bytes(buffer);
00071 builder.append(buffer);
00072 }
00073 Postlist<IntString> postlist(builder.build());
00074 BOOST_CHECK_EQUAL(postlist.length(), length);
00075 BOOST_CHECK(!postlist.is_empty());
00076 for (unsigned i(0); i != length; ++i)
00077 {
00078 BOOST_CHECK(postlist.next(value));
00079 BOOST_CHECK_EQUAL(value.e1(), i);
00080 BOOST_CHECK_EQUAL(value.e2(), Converter::ui32_to_str(i));
00081 }
00082 BOOST_CHECK(!postlist.next(value));
00083
00084
00085 postlist.reset();
00086 for (unsigned i(0); i != length; ++i)
00087 {
00088 BOOST_CHECK(postlist.next(value));
00089 BOOST_CHECK_EQUAL(value.e1(), i);
00090 BOOST_CHECK_EQUAL(value.e2(), Converter::ui32_to_str(i));
00091 }
00092 BOOST_CHECK(!postlist.next(value));
00093 }
00094
00095 BOOST_AUTO_TEST_CASE(is_paged_constant_value_size)
00096 {
00097 ByteBuffer buffer;
00098 IntIntFloat value;
00099 PostlistBuilder builder;
00100 unsigned length(1000000);
00101 for (unsigned i(0); i != length; ++i)
00102 {
00103 value.e1() = i;
00104 value.to_bytes(buffer);
00105 builder.append(buffer);
00106 }
00107 Postlist<IntIntFloat> postlist(builder.build());
00108 BOOST_CHECK_EQUAL(postlist.length(), length);
00109 BOOST_CHECK(postlist.is_paged());
00110 for (unsigned i(0); i != length; ++i)
00111 {
00112 BOOST_CHECK(postlist.next(value));
00113 BOOST_CHECK_EQUAL(value.e1(), i);
00114 }
00115 BOOST_CHECK(!postlist.next(value));
00116
00117
00118 postlist.reset();
00119 for (unsigned i(0); i != length; ++i)
00120 {
00121 BOOST_CHECK(postlist.next(value));
00122 BOOST_CHECK_EQUAL(value.e1(), i);
00123 }
00124 BOOST_CHECK(!postlist.next(value));
00125 }
00126
00127 BOOST_AUTO_TEST_CASE(is_paged_variable_value_size)
00128 {
00129 IntString value;
00130 ByteBuffer buffer;
00131 PostlistBuilder builder;
00132 unsigned length(2000000);
00133 for (unsigned i(0); i != length; ++i)
00134 {
00135 value.e1() = i;
00136 value.e2() = Converter::ui32_to_str(i);
00137 value.to_bytes(buffer);
00138 builder.append(buffer);
00139 }
00140 Postlist<IntString> postlist(builder.build());
00141 BOOST_CHECK_EQUAL(postlist.length(), length);
00142 BOOST_CHECK(postlist.is_paged());
00143 for (unsigned i(0); i != length; ++i)
00144 {
00145 BOOST_CHECK(postlist.next(value));
00146 BOOST_CHECK_EQUAL(value.e1(), i);
00147 BOOST_CHECK_EQUAL(value.e2(), Converter::ui32_to_str(i));
00148 }
00149 BOOST_CHECK(!postlist.next(value));
00150
00151
00152 postlist.reset();
00153 for (unsigned i(0); i != length; ++i)
00154 {
00155 BOOST_CHECK(postlist.next(value));
00156 BOOST_CHECK_EQUAL(value.e1(), i);
00157 BOOST_CHECK_EQUAL(value.e2(), Converter::ui32_to_str(i));
00158 }
00159 BOOST_CHECK(!postlist.next(value));
00160 }
00161
00162 BOOST_AUTO_TEST_SUITE_END();