00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 #include <boost/test/auto_unit_test.hpp>
00018 
00019 #include "Hex.hpp"
00020 #include "PatternState.hpp"
00021 
00022 using namespace benzene;
00023 
00024 
00025 
00026 namespace {
00027 
00028 BOOST_AUTO_TEST_CASE(PatternState_Tests)
00029 {
00030     
00031     
00032     
00033     
00034     
00035     std::string patstring 
00036         = "v:1,0,1,0,0;1,0,0,1,0;1,0,1,0,0;1,0,1,0,0;0,0,0,0,0;0,0,0,0,0;";
00037     Pattern pattern;
00038     BOOST_CHECK(pattern.unserialize(patstring));
00039     PatternSet patterns;
00040     pattern.setName("pat");
00041     patterns.push_back(pattern);
00042     pattern.mirror();
00043     pattern.setName("mpat");
00044     patterns.push_back(pattern);
00045     HashedPatternSet hashpat;
00046     hashpat.hash(patterns);
00047     
00048     StoneBoard brd(11, 11);
00049     PatternState pastate(brd);
00050     
00051     
00052     
00053     
00054     
00055     
00056     
00057     
00058     
00059     
00060     
00061     
00062     
00063     
00064     
00065     brd.PlayMove(WHITE, HEX_CELL_G4);
00066     brd.PlayMove(WHITE, HEX_CELL_H3);
00067     brd.PlayMove(WHITE, HEX_CELL_I4);
00068 
00069     brd.PlayMove(WHITE, HEX_CELL_G8);
00070     brd.PlayMove(WHITE, HEX_CELL_G9);
00071     brd.PlayMove(WHITE, HEX_CELL_I8);
00072 
00073     brd.PlayMove(WHITE, HEX_CELL_B4);
00074 
00075     brd.PlayMove(WHITE, HEX_CELL_J9);
00076     pastate.Update();
00077 
00078     std::vector<PatternHits> hits(FIRST_INVALID);
00079     bitset_t found = pastate.MatchOnBoard(brd.GetEmpty(), hashpat, 
00080                                           PatternState::MATCH_ALL, hits);
00081 
00082     
00083     BOOST_CHECK_EQUAL(found.count(), 6u);
00084     BOOST_CHECK(found.test(HEX_CELL_H4));
00085     BOOST_CHECK(found.test(HEX_CELL_H8));
00086     BOOST_CHECK(found.test(HEX_CELL_A5));
00087     BOOST_CHECK(found.test(HEX_CELL_K9));
00088                       
00089     
00090     BOOST_CHECK_EQUAL(hits[HEX_CELL_H4].size(), 1u);
00091     BOOST_CHECK_EQUAL(hits[HEX_CELL_H4][0].moves1().size(), 1u);
00092     BOOST_CHECK_EQUAL(hits[HEX_CELL_H4][0].moves1()[0], HEX_CELL_I3);
00093 
00094     
00095     BOOST_CHECK_EQUAL(hits[HEX_CELL_H8].size(), 1u);
00096     BOOST_CHECK_EQUAL(hits[HEX_CELL_H8][0].moves1().size(), 1u);
00097     BOOST_CHECK_EQUAL(hits[HEX_CELL_H8][0].moves1()[0], HEX_CELL_H9);
00098 
00099     
00100     BOOST_CHECK_EQUAL(hits[HEX_CELL_A5].size(), 1u);
00101     BOOST_CHECK_EQUAL(hits[HEX_CELL_A5][0].moves1().size(), 1u);
00102     BOOST_CHECK_EQUAL(hits[HEX_CELL_A5][0].moves1()[0], HEX_CELL_A4);
00103 
00104     BOOST_CHECK_EQUAL(hits[HEX_CELL_A4].size(), 1u);
00105     BOOST_CHECK_EQUAL(hits[HEX_CELL_A4][0].moves1().size(), 1u);
00106     BOOST_CHECK_EQUAL(hits[HEX_CELL_A4][0].moves1()[0], HEX_CELL_A5);
00107 
00108     
00109     BOOST_CHECK_EQUAL(hits[HEX_CELL_K9].size(), 1u);
00110     BOOST_CHECK_EQUAL(hits[HEX_CELL_K9][0].moves1().size(), 1u);
00111     BOOST_CHECK_EQUAL(hits[HEX_CELL_K9][0].moves1()[0], HEX_CELL_K8);
00112 
00113     BOOST_CHECK_EQUAL(hits[HEX_CELL_K8].size(), 1u);
00114     BOOST_CHECK_EQUAL(hits[HEX_CELL_K8][0].moves1().size(), 1u);
00115     BOOST_CHECK_EQUAL(hits[HEX_CELL_K8][0].moves1()[0], HEX_CELL_K9);
00116 }
00117 
00118 }
00119 
00120