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