alpar@906: /* -*- C++ -*-
alpar@906:  *
alpar@1956:  * This file is a part of LEMON, a generic C++ optimization library
alpar@1956:  *
alpar@2553:  * Copyright (C) 2003-2008
alpar@1956:  * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
alpar@1359:  * (Egervary Research Group on Combinatorial Optimization, EGRES).
alpar@906:  *
alpar@906:  * Permission to use, modify and distribute this software is granted
alpar@906:  * provided that this copyright notice appears in all copies. For
alpar@906:  * precise terms see the accompanying LICENSE file.
alpar@906:  *
alpar@906:  * This software is provided "AS IS" with no warranty of any kind,
alpar@906:  * express or implied, and with no claim as to its suitability for any
alpar@906:  * purpose.
alpar@906:  *
alpar@906:  */
alpar@906: 
beckerjc@483: #include <iostream>
beckerjc@483: 
alpar@921: #include <lemon/maps.h>
alpar@921: #include <lemon/unionfind.h>
alpar@774: #include "test_tools.h"
beckerjc@483: 
alpar@921: using namespace lemon;
beckerjc@483: using namespace std;
beckerjc@483: 
deba@2308: typedef UnionFindEnum<StdMap<int, int> > UFE;
beckerjc@483: 
beckerjc@483: void print(UFE const &ufe) {
alpar@774:   cout << "Print the classes of the structure:" << endl;
beckerjc@483:   int i = 1;
deba@2205:   for (UFE::ClassIt cit(ufe); cit != INVALID; ++cit) {
beckerjc@483:     cout << "  " << i << " (" << cit << "):" << flush;
deba@2205:     for (UFE::ItemIt iit(ufe, cit); iit != INVALID; ++iit) {
beckerjc@483:       cout << " " << iit << flush;
beckerjc@483:     }
beckerjc@483:     cout << endl;
beckerjc@483:     i++;
beckerjc@483:   }
beckerjc@483:   cout << "done" << endl;
beckerjc@483: }
beckerjc@483: 
beckerjc@483: 
beckerjc@483: int main() {
deba@2205:   StdMap<int, int> base;
beckerjc@483:   UFE U(base);
beckerjc@483: 
alpar@1569:   U.insert(1);
alpar@1569:   U.insert(2);
beckerjc@483: 
deba@2505:   check(U.join(1,2) != -1,"Test failed.");
beckerjc@483: 
beckerjc@483:   U.insert(3);
beckerjc@483:   U.insert(4);
beckerjc@483:   U.insert(5);
beckerjc@483:   U.insert(6);
beckerjc@483:   U.insert(7);
beckerjc@483: 
beckerjc@483: 
deba@2505:   check(U.join(1,4) != -1,"Test failed.");
deba@2505:   check(U.join(2,4) == -1,"Test failed.");
deba@2505:   check(U.join(3,5) != -1,"Test failed.");
beckerjc@483: 
deba@2505: 
deba@2505:   U.insert(8,U.find(5));
deba@2505: 
deba@2505: 
deba@2505:   check(U.size(U.find(4)) == 3,"Test failed.");
deba@2505:   check(U.size(U.find(5)) == 3,"Test failed.");
deba@2505:   check(U.size(U.find(6)) == 1,"Test failed.");
deba@2505:   check(U.size(U.find(2)) == 3,"Test failed.");
deba@2505: 
beckerjc@483: 
beckerjc@483:   U.insert(9);
deba@2505:   U.insert(10,U.find(9));
deba@2205: 
beckerjc@483: 
deba@2505:   check(U.join(8,10) != -1,"Test failed.");
beckerjc@483: 
beckerjc@483: 
deba@2505:   check(U.size(U.find(4)) == 3,"Test failed.");
deba@2505:   check(U.size(U.find(9)) == 5,"Test failed.");
beckerjc@483: 
deba@2505:   check(U.size(U.find(8)) == 5,"Test failed.");
beckerjc@483: 
beckerjc@483:   U.erase(9);
alpar@1569:   U.erase(1);
beckerjc@483: 
deba@2505:   check(U.size(U.find(10)) == 4,"Test failed.");
deba@2505:   check(U.size(U.find(2)) == 2,"Test failed.");
beckerjc@483: 
alpar@1569:   U.erase(6);
deba@2505:   U.split(U.find(8));
beckerjc@483: 
beckerjc@483: 
deba@2505:   check(U.size(U.find(4)) == 2,"Test failed.");
deba@2505:   check(U.size(U.find(3)) == 1,"Test failed.");
deba@2505:   check(U.size(U.find(2)) == 2,"Test failed.");
beckerjc@483: 
beckerjc@483: 
deba@2505:   check(U.join(3,4) != -1,"Test failed.");
deba@2505:   check(U.join(2,4) == -1,"Test failed.");
beckerjc@483: 
beckerjc@483: 
deba@2505:   check(U.size(U.find(4)) == 3,"Test failed.");
deba@2505:   check(U.size(U.find(3)) == 3,"Test failed.");
deba@2505:   check(U.size(U.find(2)) == 3,"Test failed.");
beckerjc@483: 
deba@2505:   U.eraseClass(U.find(4));
deba@2505:   U.eraseClass(U.find(7));
beckerjc@483: 
deba@2505:   return 0;
beckerjc@483: }