Main   Namespaces   Classes   Hierarchy   Annotated   Files   Compound   Global   Pages  

UnionFindTest.cpp

Go to the documentation of this file.
00001 //---------------------------------------------------------------------------
00002 /** @file UnionFindTest.cpp
00003  */
00004 //---------------------------------------------------------------------------
00005 
00006 #include <boost/test/auto_unit_test.hpp>
00007 
00008 #include "Hex.hpp"
00009 #include "UnionFind.hpp"
00010 
00011 using namespace benzene;
00012 
00013 //---------------------------------------------------------------------------
00014 
00015 namespace {
00016 
00017 BOOST_AUTO_TEST_CASE(UnionFind_AllTests)
00018 {
00019     UnionFind<14> uf;
00020     int root;
00021     
00022     // test that Clear method sets all elements to be their own root
00023     uf.Clear();
00024     BOOST_CHECK_EQUAL(uf.GetRoot(0), 0);
00025     BOOST_CHECK_EQUAL(uf.GetRoot(1), 1);
00026     BOOST_CHECK_EQUAL(uf.GetRoot(7), 7);
00027     BOOST_CHECK_EQUAL(uf.GetRoot(13), 13);
00028     BOOST_CHECK(uf.IsRoot(0));
00029     BOOST_CHECK(uf.IsRoot(1));
00030     BOOST_CHECK(uf.IsRoot(7));
00031     BOOST_CHECK(uf.IsRoot(13));
00032     
00033     // test UnionGroups merges two, no effect on others
00034     uf.UnionGroups(7, 12);
00035     BOOST_CHECK(uf.IsRoot(7) != uf.IsRoot(12));
00036     BOOST_CHECK_EQUAL(uf.GetRoot(7), uf.GetRoot(12));
00037     BOOST_CHECK(uf.IsRoot(0));
00038     BOOST_CHECK(uf.IsRoot(1));
00039     BOOST_CHECK(uf.IsRoot(13));
00040     
00041     uf.UnionGroups(0, 1);
00042     BOOST_CHECK(uf.IsRoot(0) != uf.IsRoot(1));
00043     BOOST_CHECK_EQUAL(uf.GetRoot(0), uf.GetRoot(1));
00044     BOOST_CHECK_EQUAL(uf.GetRoot(7), uf.GetRoot(12));
00045     BOOST_CHECK(uf.IsRoot(13));
00046     
00047     // test merging with self has no effect
00048     uf.UnionGroups(0, 1);
00049     BOOST_CHECK(uf.IsRoot(0) != uf.IsRoot(1));
00050     BOOST_CHECK_EQUAL(uf.GetRoot(0), uf.GetRoot(1));
00051     BOOST_CHECK_EQUAL(uf.GetRoot(7), uf.GetRoot(12));
00052     BOOST_CHECK(uf.IsRoot(13));
00053     
00054     // test merging of groups
00055     uf.UnionGroups(7, 1);
00056     root = uf.GetRoot(0);
00057     BOOST_CHECK_EQUAL(root, uf.GetRoot(1));
00058     BOOST_CHECK_EQUAL(root, uf.GetRoot(7));
00059     BOOST_CHECK_EQUAL(root, uf.GetRoot(12));
00060     BOOST_CHECK(0==root || 1==root || 7==root || 12==root);
00061     BOOST_CHECK(uf.IsRoot(6));
00062     BOOST_CHECK(uf.IsRoot(8));
00063     BOOST_CHECK(uf.IsRoot(13));
00064     
00065     // test that GetRoot does not affect group membership
00066     root = uf.GetRoot(12);
00067     root = uf.GetRoot(1);
00068     root = uf.GetRoot(13);
00069     root = uf.GetRoot(0);
00070     BOOST_CHECK_EQUAL(root, uf.GetRoot(1));
00071     BOOST_CHECK_EQUAL(root, uf.GetRoot(7));
00072     BOOST_CHECK_EQUAL(root, uf.GetRoot(12));
00073     BOOST_CHECK(0==root || 1==root || 7==root || 12==root);
00074     BOOST_CHECK(uf.IsRoot(6));
00075     BOOST_CHECK(uf.IsRoot(8));
00076     BOOST_CHECK(uf.IsRoot(13));
00077     
00078     // test Clear resets properly to individual sets
00079     uf.Clear();
00080     BOOST_CHECK(uf.IsRoot(0));
00081     BOOST_CHECK(uf.IsRoot(1));
00082     BOOST_CHECK(uf.IsRoot(7));
00083     BOOST_CHECK(uf.IsRoot(13));
00084     BOOST_CHECK(uf.GetRoot(7) != uf.GetRoot(12));
00085 }
00086 
00087 }
00088 
00089 //---------------------------------------------------------------------------


6 Jan 2011 Doxygen 1.6.3