00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #include <boost/test/auto_unit_test.hpp>
00015
00016 #include "VCList.hpp"
00017 #include "ChangeLog.hpp"
00018
00019 using namespace benzene;
00020
00021
00022
00023 namespace {
00024
00025 BOOST_AUTO_TEST_CASE(VCList_Basic)
00026 {
00027 HexPoint x = HEX_CELL_A1;
00028 HexPoint y = HEX_CELL_A2;
00029
00030 VCList vl(x, y, 2);
00031
00032
00033 BOOST_CHECK(vl.empty());
00034 BOOST_CHECK_EQUAL(vl.size(), 0);
00035
00036
00037 bitset_t b1;
00038 b1.set(FIRST_CELL);
00039 VC v1(x, y, b1, VC_RULE_BASE);
00040 BOOST_CHECK_EQUAL(vl.add(v1, NULL), VCList::ADDED_INSIDE_SOFT_LIMIT);
00041 BOOST_CHECK(!vl.empty());
00042 BOOST_CHECK_EQUAL(vl.size(), 1);
00043
00044 BOOST_CHECK_EQUAL(vl.hardIntersection(), v1.carrier());
00045 BOOST_CHECK_EQUAL(vl.getUnion(), v1.carrier());
00046
00047
00048 BOOST_CHECK_EQUAL(vl.add(v1, NULL), VCList::ADD_FAILED);
00049 BOOST_CHECK(!vl.empty());
00050 BOOST_CHECK_EQUAL(vl.size(), 1);
00051
00052
00053 bitset_t b2;
00054 b2.set(FIRST_CELL);
00055 b2.set(FIRST_CELL+1);
00056 VC v2(x, y, b2, VC_RULE_BASE);
00057 BOOST_CHECK_EQUAL(vl.add(v2, NULL), VCList::ADD_FAILED);
00058 BOOST_CHECK(!vl.empty());
00059 BOOST_CHECK_EQUAL(vl.size(), 1);
00060
00061
00062 bitset_t b3;
00063 b3.set(FIRST_CELL+1);
00064 b3.set(FIRST_CELL+2);
00065 b3.set(FIRST_CELL+3);
00066 VC v3(x, y, b3, VC_RULE_BASE);
00067 BOOST_CHECK_EQUAL(vl.add(v3, NULL), VCList::ADDED_INSIDE_SOFT_LIMIT);
00068 BOOST_CHECK(!vl.empty());
00069 BOOST_CHECK_EQUAL(vl.size(), 2);
00070
00071
00072 VCList::const_iterator it = vl.begin();
00073 BOOST_CHECK_EQUAL(*it, v1);
00074 ++it;
00075 BOOST_CHECK_EQUAL(*it, v3);
00076 ++it;
00077 BOOST_CHECK(it == vl.end());
00078
00079 BOOST_CHECK_EQUAL(vl.hardIntersection(), v1.carrier() & v3.carrier());
00080 BOOST_CHECK_EQUAL(vl.getUnion(), v1.carrier() | v3.carrier());
00081
00082
00083
00084 bitset_t b4;
00085 b4.set(FIRST_CELL+1);
00086 b4.set(FIRST_CELL+2);
00087 VC v4(x, y, b4, VC_RULE_BASE);
00088 BOOST_CHECK_EQUAL(vl.add(v4, NULL), VCList::ADDED_INSIDE_SOFT_LIMIT);
00089 BOOST_CHECK(!vl.empty());
00090 BOOST_CHECK_EQUAL(vl.size(), 2);
00091
00092
00093 it = vl.begin();
00094 BOOST_CHECK_EQUAL(*it, v1);
00095 ++it;
00096 BOOST_CHECK_EQUAL(*it, v4);
00097 ++it;
00098 BOOST_CHECK(it == vl.end());
00099
00100 BOOST_CHECK_EQUAL(vl.hardIntersection(), v1.carrier() & v4.carrier());
00101 BOOST_CHECK_EQUAL(vl.getUnion(), v1.carrier() | v4.carrier());
00102
00103
00104
00105 bitset_t b5;
00106 b5.set(FIRST_CELL+1);
00107 b5.set(FIRST_CELL+3);
00108 b5.set(FIRST_CELL+5);
00109 VC v5(x, y, b5, VC_RULE_BASE);
00110 BOOST_CHECK_EQUAL(vl.add(v5, NULL), VCList::ADDED_INSIDE_HARD_LIMIT);
00111 BOOST_CHECK(!vl.empty());
00112 BOOST_CHECK_EQUAL(vl.size(), 3);
00113
00114
00115 it = vl.begin();
00116 BOOST_CHECK_EQUAL(*it, v1);
00117 ++it;
00118 BOOST_CHECK_EQUAL(*it, v4);
00119 ++it;
00120 BOOST_CHECK_EQUAL(*it, v5);
00121 ++it;
00122 BOOST_CHECK(it == vl.end());
00123
00124 BOOST_CHECK_EQUAL(vl.softIntersection(), v1.carrier() & v4.carrier());
00125 BOOST_CHECK_EQUAL(vl.hardIntersection(),
00126 v1.carrier() & v4.carrier() & v5.carrier());
00127 BOOST_CHECK_EQUAL(vl.getUnion(), v1.carrier()|v4.carrier()|v5.carrier());
00128
00129
00130 bitset_t remove;
00131 remove.set(FIRST_CELL+2);
00132 remove.set(FIRST_EDGE);
00133 std::list<VC> removed;
00134 BOOST_CHECK_EQUAL(vl.removeAllContaining(remove, removed, NULL), 1);
00135 BOOST_CHECK_EQUAL(*removed.begin(), v4);
00136 BOOST_CHECK_EQUAL(vl.size(), 2);
00137
00138
00139 it = vl.begin();
00140 BOOST_CHECK_EQUAL(*it, v1);
00141 ++it;
00142 BOOST_CHECK_EQUAL(*it, v5);
00143 ++it;
00144 BOOST_CHECK(it == vl.end());
00145
00146 BOOST_CHECK_EQUAL(vl.hardIntersection(), v1.carrier() & v5.carrier());
00147 BOOST_CHECK_EQUAL(vl.getUnion(), v1.carrier() | v5.carrier());
00148
00149
00150 BOOST_CHECK(!vl.remove(v4, NULL));
00151 BOOST_CHECK(vl.remove(v1, NULL));
00152 BOOST_CHECK_EQUAL(vl.size(), 1);
00153
00154
00155 it = vl.begin();
00156 BOOST_CHECK_EQUAL(*it, v5);
00157 ++it;
00158 BOOST_CHECK(it == vl.end());
00159
00160 BOOST_CHECK_EQUAL(vl.hardIntersection(), v5.carrier());
00161 BOOST_CHECK_EQUAL(vl.getUnion(), v5.carrier());
00162 }
00163
00164 }
00165
00166