VCSetTest.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006 #include <boost/test/auto_unit_test.hpp>
00007
00008 #include "BitsetIterator.hpp"
00009 #include "VCBuilder.hpp"
00010 #include "VCSet.hpp"
00011 #include "ChangeLog.hpp"
00012
00013 using namespace benzene;
00014
00015
00016
00017 namespace {
00018
00019 BOOST_AUTO_TEST_CASE(VCSet_CheckCopy)
00020 {
00021 StoneBoard bd(11, 11);
00022 VCSet con1(bd.Const(), BLACK);
00023 con1.Add(VC(NORTH, SOUTH), 0);
00024 VCSet con2(con1);
00025 BOOST_CHECK(con1 == con2);
00026
00027 con1.Add(VC(NORTH, HEX_CELL_A1), 0);
00028 BOOST_CHECK(con1 != con2);
00029
00030 con2 = con1;
00031 BOOST_CHECK(con1 == con2);
00032
00033 con1.Add(VC(NORTH, HEX_CELL_C1), 0);
00034 BOOST_CHECK(con1 != con2);
00035 }
00036
00037
00038 BOOST_AUTO_TEST_CASE(VCSet_CheckRevert)
00039 {
00040 StoneBoard bd(11, 11);
00041 bd.PlayMove(BLACK, HEX_CELL_A9);
00042 bd.PlayMove(WHITE, HEX_CELL_F5);
00043 bd.PlayMove(BLACK, HEX_CELL_I4);
00044 bd.PlayMove(WHITE, HEX_CELL_H6);
00045 Groups groups;
00046 GroupBuilder::Build(bd, groups);
00047 PatternState patterns(bd);
00048 patterns.Update();
00049
00050 ChangeLog<VC> cl;
00051 VCSet con1(bd.Const(), BLACK);
00052 con1.SetSoftLimit(VC::FULL, 10);
00053 con1.SetSoftLimit(VC::SEMI, 25);
00054 VCSet con2(con1);
00055
00056 VCBuilderParam param;
00057 param.max_ors = 4;
00058 param.and_over_edge = true;
00059 param.use_greedy_union = true;
00060
00061 VCBuilder builder(param);
00062 builder.Build(con1, groups, patterns);
00063 builder.Build(con2, groups, patterns);
00064 BOOST_CHECK(con1 == con2);
00065
00066 #if 0
00067 for (BitsetIterator p(bd.getEmpty()); p; ++p) {
00068 bitset_t added[BLACK_AND_WHITE];
00069 added[BLACK].set(*p);
00070 bd.absorb();
00071 bd.PlayMove(BLACK, *p);
00072 bd.absorb(*p);
00073
00074 builder.Build(con2, bd, added, &cl);
00075
00076
00077
00078 con2.Revert(cl);
00079 bd.undoMove(*p);
00080
00081 BOOST_CHECK(cl.empty());
00082 BOOST_CHECK(VCSetUtil::EqualOnGroups(con1, con2, bd));
00083 }
00084 #endif
00085 }
00086
00087 }
00088
00089