00001 #include <boost/test/unit_test.hpp>
00002 #include <boost/algorithm/string.hpp>
00003 #include "GenericRecord.hpp"
00004 #include "Converter.hpp"
00005 #include <cstdio>
00006
00007 using namespace aitools::invertedindex;
00008
00009 BOOST_AUTO_TEST_SUITE(generic_record);
00010
00011 BOOST_AUTO_TEST_CASE(default_ctor)
00012 {
00013 GenericRecord record;
00014 BOOST_CHECK(record.key().empty());
00015 BOOST_CHECK(record.value().empty());
00016 }
00017
00018 BOOST_AUTO_TEST_CASE(explicit_ctor)
00019 {
00020 ByteBuffer value(10);
00021 std::string key("key");
00022 GenericRecord record(key, value);
00023 BOOST_CHECK_EQUAL(record.key(), key);
00024 BOOST_CHECK_EQUAL(record.value(), value);
00025 }
00026
00027 BOOST_AUTO_TEST_CASE(copy_ctor)
00028 {
00029 ByteBuffer value(10);
00030 std::string key("key");
00031 GenericRecord record(key, value);
00032 GenericRecord deep_copy(record);
00033 BOOST_CHECK_EQUAL(deep_copy, record);
00034 }
00035
00036 BOOST_AUTO_TEST_CASE(assignment_operator)
00037 {
00038 ByteBuffer value(10);
00039 std::string key("key");
00040 GenericRecord record(key, value);
00041 GenericRecord deep_copy = record;
00042 BOOST_CHECK_EQUAL(deep_copy, record);
00043 }
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054 BOOST_AUTO_TEST_CASE(write)
00055 {
00056 unsigned num(100);
00057 unsigned offset(0);
00058 GenericRecord record;
00059 FILE* file(std::tmpfile());
00060 BOOST_CHECK(file != NULL);
00061 for (unsigned i(0); i != num; ++i)
00062 {
00063 record.value().resize(i);
00064 record.key().assign(Converter::ui32_to_str(i));
00065 BOOST_CHECK(record.write(file));
00066 offset += record.size();
00067 }
00068 BOOST_CHECK_EQUAL(std::ftell(file), offset);
00069 std::fclose(file);
00070 }
00071
00072 BOOST_AUTO_TEST_CASE(read)
00073 {
00074 unsigned num(100);
00075 unsigned offset(0);
00076 GenericRecord record;
00077 FILE* file(std::tmpfile());
00078 BOOST_CHECK(file != NULL);
00079 for (unsigned i(0); i != num; ++i)
00080 {
00081 record.value().resize(i);
00082 record.key().assign(Converter::ui32_to_str(i));
00083 BOOST_CHECK(record.write(file));
00084 offset += record.size();
00085 }
00086 BOOST_CHECK_EQUAL(std::ftell(file), offset);
00087 std::rewind(file);
00088 for (unsigned i(0); i != num; ++i)
00089 {
00090 BOOST_CHECK(record.read(file));
00091 BOOST_CHECK_EQUAL(record.value().size(), i);
00092 BOOST_CHECK(record.key() == Converter::ui32_to_str(i));
00093 BOOST_CHECK_EQUAL(record.key(), Converter::ui32_to_str(i));
00094 }
00095 BOOST_CHECK_EQUAL(std::ftell(file), offset);
00096 std::fclose(file);
00097 }
00098
00099 BOOST_AUTO_TEST_SUITE_END();