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