Main   Namespaces   Classes   Hierarchy   Annotated   Files   Compound   Global   Pages  

InferiorCellsTest.cpp

Go to the documentation of this file.
00001 //----------------------------------------------------------------------------
00002 /** @file
00003  */
00004 //----------------------------------------------------------------------------
00005 
00006 #include <boost/test/auto_unit_test.hpp>
00007 
00008 #include "Hex.hpp"
00009 #include "InferiorCells.hpp"
00010 
00011 using namespace benzene;
00012 
00013 //---------------------------------------------------------------------------
00014 
00015 namespace {
00016 
00017 BOOST_AUTO_TEST_CASE(InferiorCells_Basic)
00018 {
00019     
00020 }
00021 
00022 BOOST_AUTO_TEST_CASE(InferiorCells_Dominated) 
00023 {
00024     HexPoint a1 = HEX_CELL_A1;
00025     HexPoint b1 = HEX_CELL_B1;
00026     HexPoint c1 = HEX_CELL_C1;   
00027     HexPoint a2 = HEX_CELL_A2;
00028     HexPoint b2 = HEX_CELL_B2;
00029     HexPoint c2 = HEX_CELL_C2;
00030     HexPoint a3 = HEX_CELL_A3;
00031     HexPoint b3 = HEX_CELL_B3;
00032     HexPoint c3 = HEX_CELL_C3;
00033     InferiorCells inf;
00034     bitset_t dom;
00035 
00036     //   a1 -> b1 <- c1
00037     inf.Clear();
00038     inf.AddDominated(a1, b1);
00039     inf.AddDominated(c1, b1);
00040     dom = inf.Dominated();
00041     BOOST_CHECK_EQUAL(dom.count(), 2u);
00042     BOOST_CHECK(dom.test(a1));
00043     BOOST_CHECK(dom.test(c1));
00044     BOOST_CHECK(!dom.test(b1));
00045                 
00046     //   a1 <- b1 -> c1
00047     inf.Clear();
00048     inf.AddDominated(b1, a1);
00049     inf.AddDominated(b1, c1);
00050     dom = inf.Dominated();
00051     BOOST_CHECK_EQUAL(dom.count(), 1u);
00052     BOOST_CHECK(!dom.test(a1));
00053     BOOST_CHECK(!dom.test(c1));
00054     BOOST_CHECK(dom.test(b1));
00055     
00056     //
00057     //   a1 -> b1 -> c1  (a1, b1 should be dominated).
00058     //  
00059     //   a2 -> b2 -> c2 -> c3  (a2 should be dominated).
00060     //              (vul)
00061     //
00062     inf.Clear();
00063     inf.AddDominated(a1, b1);
00064     inf.AddDominated(b1, c1);
00065 
00066     inf.AddDominated(a2, b2);
00067     inf.AddDominated(b2, c2);
00068     inf.AddVulnerable(c2, c3);
00069 
00070     dom = inf.Dominated();
00071     BOOST_CHECK(dom.test(a1));
00072     BOOST_CHECK(dom.test(b1));
00073     BOOST_CHECK(!dom.test(c1));
00074     
00075     BOOST_CHECK(dom.test(a2));
00076     BOOST_CHECK(!dom.test(b2));
00077     BOOST_CHECK(!dom.test(c2));    
00078     BOOST_CHECK(!dom.test(c3));
00079 
00080     // 
00081     //    +----+ 
00082     //    v    |
00083     //   a1 -> b1
00084     // 
00085     inf.Clear();
00086     inf.AddDominated(a1, b1);
00087     inf.AddDominated(b1, a1);
00088     dom = inf.Dominated();
00089     BOOST_CHECK_EQUAL(dom.count(), 1u);
00090     BOOST_CHECK(dom.test(a1) != dom.test(b1));
00091 
00092     //
00093     //    +----------+
00094     //    v          |
00095     //   a1 -> b1 -> c1 
00096     //         ^
00097     //         a2
00098     //         ^
00099     //         b2
00100     // 
00101     inf.Clear();
00102     inf.AddDominated(a1, b1);
00103     inf.AddDominated(b1, c1);
00104     inf.AddDominated(c1, a1);
00105     inf.AddDominated(b2, a2);
00106     inf.AddDominated(a2, b1);
00107     dom = inf.Dominated();
00108 
00109     BOOST_CHECK_EQUAL(dom.count(), 4u);
00110     BOOST_CHECK(dom.test(b2));
00111     BOOST_CHECK(dom.test(a2));
00112     BOOST_CHECK(!dom.test(a1) || !dom.test(b1) || !dom.test(c1));
00113 
00114     //
00115     //    +----------+      +----+
00116     //    v          |      v    |
00117     //   a1 -> b1 -> c1 -> a3 -> b3
00118     //         ^
00119     //         a2
00120     //         ^
00121     //         b2
00122     // 
00123     inf.AddDominated(c1, a3);
00124     inf.AddDominated(a3, b3);
00125     inf.AddDominated(b3, a3);
00126     dom = inf.Dominated();
00127     
00128     BOOST_CHECK_EQUAL(dom.count(), 6u);
00129     BOOST_CHECK(dom.test(b2));
00130     BOOST_CHECK(dom.test(a2));
00131     BOOST_CHECK(dom.test(a1));
00132     BOOST_CHECK(dom.test(b1));
00133     BOOST_CHECK(dom.test(c1));
00134     BOOST_CHECK(dom.test(a3) != dom.test(b3));
00135 
00136 
00137     // 
00138     //    +----+    
00139     //    v    |    
00140     //   a1 -> b1 -> c1
00141     //          ^    |
00142     //          +----+ 
00143     // 
00144     inf.Clear();
00145     inf.AddDominated(a1, b1);
00146     inf.AddDominated(b1, a1);
00147     inf.AddDominated(b1, c1);
00148     inf.AddDominated(c1, b1);
00149     dom = inf.Dominated();
00150     BOOST_CHECK_EQUAL(dom.count(), 2u);
00151     BOOST_CHECK(!dom.test(a1) || !dom.test(b1) || !dom.test(c1));
00152     
00153 }
00154 
00155 }
00156 
00157 //---------------------------------------------------------------------------


6 Jan 2011 Doxygen 1.6.3