libmoost
|
00001 /* vim:set ts=3 sw=3 sts=3 et: */ 00028 #include <boost/test/unit_test.hpp> 00029 #include <boost/test/test_tools.hpp> 00030 00031 #include "../../include/moost/container/lru.hpp" 00032 00033 using namespace moost::container; 00034 00035 BOOST_AUTO_TEST_SUITE( lru_test ) 00036 00037 struct Fixture 00038 { 00039 typedef lru<int, int> lru_t; 00040 lru_t lru_; 00041 int ret_val_; 00042 00043 Fixture() 00044 : lru_(3) 00045 { 00046 lru_.set_deleted_key(-1); 00047 } 00048 }; 00049 00050 BOOST_FIXTURE_TEST_CASE( test_empty, Fixture ) 00051 { 00052 BOOST_CHECK_EQUAL(lru_.get(3, ret_val_), false); 00053 } 00054 00055 // find nothing! 00056 BOOST_FIXTURE_TEST_CASE( test_nothing, Fixture ) 00057 { 00058 lru_.put(2, 4); 00059 BOOST_CHECK_EQUAL(lru_.get(3, ret_val_), false); 00060 } 00061 00062 // find something! 00063 BOOST_FIXTURE_TEST_CASE( test_something, Fixture ) 00064 { 00065 lru_.put(3, 4); 00066 BOOST_REQUIRE_EQUAL(lru_.get(3, ret_val_), true); 00067 BOOST_CHECK_EQUAL(ret_val_, 4); 00068 } 00069 00070 // evict! 00071 BOOST_FIXTURE_TEST_CASE( test_evict, Fixture ) 00072 { 00073 lru_.put(3, 4); 00074 lru_.put(4, 5); 00075 lru_.put(5, 6); 00076 lru_.put(7, 8); 00077 BOOST_REQUIRE_EQUAL(lru_.get(7, ret_val_), true); 00078 BOOST_CHECK_EQUAL(ret_val_, 8); 00079 BOOST_CHECK_EQUAL(lru_.get(3, ret_val_), false); 00080 } 00081 00082 // don't evict! 00083 BOOST_FIXTURE_TEST_CASE( test_dont_evict, Fixture ) 00084 { 00085 lru_.put(3, 4); 00086 lru_.put(4, 5); 00087 lru_.put(5, 6); 00088 lru_.put(3, 8); 00089 BOOST_REQUIRE_EQUAL(lru_.get(5, ret_val_), true); 00090 BOOST_CHECK_EQUAL(ret_val_, 6); 00091 BOOST_REQUIRE_EQUAL(lru_.get(3, ret_val_), true); 00092 BOOST_CHECK_EQUAL(ret_val_, 8); 00093 } 00094 00095 // push back twice! 00096 BOOST_FIXTURE_TEST_CASE( test_double_pushback, Fixture ) 00097 { 00098 lru_.put(3, 4); 00099 lru_.put(3, 5); 00100 BOOST_REQUIRE_EQUAL(lru_.get(3, ret_val_), true); 00101 BOOST_CHECK_EQUAL(ret_val_, 5); 00102 } 00103 00104 // test bump 00105 BOOST_FIXTURE_TEST_CASE( test_bump, Fixture ) 00106 { 00107 lru_.put(1, 5); 00108 lru_.put(2, 6); 00109 lru_.put(3, 7); 00110 00111 BOOST_CHECK(lru_.front() == *lru_.find(1)); 00112 BOOST_CHECK(lru_.back() == *lru_.find(3)); 00113 00114 lru_.bump(1); 00115 00116 BOOST_CHECK(lru_.front() == *lru_.find(2)); 00117 BOOST_CHECK(lru_.back() == *lru_.find(1)); 00118 00119 lru_t::mapped_type get_val = 0; 00120 lru_.get(3, get_val); 00121 00122 BOOST_CHECK_EQUAL(get_val, lru_.find(3)->second); 00123 BOOST_CHECK(lru_.front() == *lru_.find(2)); 00124 BOOST_CHECK(lru_.back() == *lru_.find(3)); 00125 00126 lru_t::mapped_type peek_val = 0; 00127 lru_.peek(1, peek_val); 00128 00129 BOOST_CHECK_EQUAL(peek_val, lru_.find(1)->second); 00130 BOOST_CHECK(lru_.front() == *lru_.find(2)); 00131 BOOST_CHECK(lru_.back() == *lru_.find(3)); 00132 } 00133 00134 // test indexer 00135 BOOST_FIXTURE_TEST_CASE( test_indexer, Fixture ) 00136 { 00137 lru_.put(5,2); 00138 lru_.put(6,3); 00139 lru_.put(7,4); 00140 00141 BOOST_CHECK_EQUAL(lru_[5], 2); 00142 BOOST_CHECK_EQUAL(lru_[6], 3); 00143 BOOST_CHECK_EQUAL(lru_[7], 4); 00144 00145 BOOST_CHECK_THROW(lru_[0], std::runtime_error) 00146 BOOST_CHECK_THROW(lru_[9], std::runtime_error) 00147 } 00148 00149 // test exists 00150 BOOST_FIXTURE_TEST_CASE( test_exists, Fixture ) 00151 { 00152 lru_.put(5,2); 00153 lru_.put(6,3); 00154 lru_.put(7,4); 00155 00156 BOOST_CHECK_EQUAL(lru_.exists(0), false); 00157 BOOST_CHECK_EQUAL(lru_.exists(1), false); 00158 BOOST_CHECK_EQUAL(lru_.exists(2), false); 00159 BOOST_CHECK_EQUAL(lru_.exists(3), false); 00160 BOOST_CHECK_EQUAL(lru_.exists(4), false); 00161 00162 BOOST_CHECK_EQUAL(lru_.exists(5), true); 00163 BOOST_CHECK_EQUAL(lru_.exists(6), true); 00164 BOOST_CHECK_EQUAL(lru_.exists(7), true); 00165 00166 BOOST_CHECK_EQUAL(lru_.exists(8), false); 00167 BOOST_CHECK_EQUAL(lru_.exists(9), false); 00168 00169 lru_.erase(5); 00170 lru_.erase(6); 00171 lru_.erase(7); 00172 00173 BOOST_CHECK_EQUAL(lru_.exists(5), false); 00174 BOOST_CHECK_EQUAL(lru_.exists(6), false); 00175 BOOST_CHECK_EQUAL(lru_.exists(7), false); 00176 } 00177 00178 BOOST_AUTO_TEST_SUITE_END()