Imported Upstream version 16.3.2
[platform/upstream/libzypp.git] / tests / zypp / SetTracker_test.cc
1 #include <set>
2 #include <boost/test/auto_unit_test.hpp>
3 #include "zypp/base/LogTools.h"
4 #include "zypp/base/SetTracker.h"
5
6 typedef std::set<int> SetType;
7 namespace std
8 {
9   inline ostream & operator<<( ostream & str, const SetType & obj )
10   { return zypp::dumpRangeLine( str, obj.begin(), obj.end() );  }
11 }
12 typedef zypp::base::SetTracker<SetType> Tracker;
13
14 std::set<int> s;
15 std::set<int> s1        ({1});
16 std::set<int> s2        ({2});
17 std::set<int> s3        ({3});
18 std::set<int> s12       ({1,2});
19 std::set<int> s13       ({1,3});
20 std::set<int> s23       ({2,3});
21 std::set<int> s123      ({1,2,3});
22
23
24 BOOST_AUTO_TEST_CASE(basic)
25 {
26   Tracker t;
27   BOOST_CHECK_EQUAL( t.current(),       s       );
28   BOOST_CHECK_EQUAL( t.added(),         s       );
29   BOOST_CHECK_EQUAL( t.removed(),       s       );
30
31   BOOST_CHECK( t.add( 1 ) );
32   BOOST_CHECK_EQUAL( t.current(),       s1      );
33   BOOST_CHECK_EQUAL( t.added(),         s1      );
34   BOOST_CHECK_EQUAL( t.removed(),       s       );
35
36   BOOST_CHECK( !t.add( 1 ) );
37   BOOST_CHECK_EQUAL( t.current(),       s1      );
38   BOOST_CHECK_EQUAL( t.added(),         s1      );
39   BOOST_CHECK_EQUAL( t.removed(),       s       );
40
41   BOOST_CHECK( t.add( 2 ) );
42   BOOST_CHECK_EQUAL( t.current(),       s12     );
43   BOOST_CHECK_EQUAL( t.added(),         s12     );
44   BOOST_CHECK_EQUAL( t.removed(),       s       );
45
46   BOOST_CHECK( t.remove( 1 ) );
47   BOOST_CHECK_EQUAL( t.current(),       s2      );
48   BOOST_CHECK_EQUAL( t.added(),         s2      );
49   BOOST_CHECK_EQUAL( t.removed(),       s       );
50
51   BOOST_CHECK( t.set( s3 ) );
52   BOOST_CHECK_EQUAL( t.current(),       s3      );
53   BOOST_CHECK_EQUAL( t.added(),         s3      );
54   BOOST_CHECK_EQUAL( t.removed(),       s       );
55
56   BOOST_CHECK( t.add( 2 ) );
57   BOOST_CHECK_EQUAL( t.current(),       s23     );
58   BOOST_CHECK_EQUAL( t.added(),         s23     );
59   BOOST_CHECK_EQUAL( t.removed(),       s       );
60
61   BOOST_CHECK( t.remove( 2 ) );
62   BOOST_CHECK_EQUAL( t.current(),       s3      );
63   BOOST_CHECK_EQUAL( t.added(),         s3      );
64   BOOST_CHECK_EQUAL( t.removed(),       s       );
65
66   BOOST_CHECK( ! t.remove( 2 ) );
67   BOOST_CHECK_EQUAL( t.current(),       s3      );
68   BOOST_CHECK_EQUAL( t.added(),         s3      );
69   BOOST_CHECK_EQUAL( t.removed(),       s       );
70
71   BOOST_CHECK( t.set( s ) );
72   BOOST_CHECK_EQUAL( t.current(),       s       );
73   BOOST_CHECK_EQUAL( t.added(),         s       );
74   BOOST_CHECK_EQUAL( t.removed(),       s       );
75
76   //----------------------------------------------------------------------
77
78   BOOST_CHECK( t.setInitial( s2 ) );
79   BOOST_CHECK_EQUAL( t.current(),       s2      );
80   BOOST_CHECK_EQUAL( t.added(),         s       );
81   BOOST_CHECK_EQUAL( t.removed(),       s       );
82
83   BOOST_CHECK( t.set( s13 ) );
84   BOOST_CHECK_EQUAL( t.current(),       s13     );
85   BOOST_CHECK_EQUAL( t.added(),         s13     );
86   BOOST_CHECK_EQUAL( t.removed(),       s2      );
87
88   BOOST_CHECK( t.set( s123 ) );
89   BOOST_CHECK_EQUAL( t.current(),       s123    );
90   BOOST_CHECK_EQUAL( t.added(),         s13     );
91   BOOST_CHECK_EQUAL( t.removed(),       s       );
92
93   BOOST_CHECK( t.set( s ) );
94   BOOST_CHECK_EQUAL( t.current(),       s       );
95   BOOST_CHECK_EQUAL( t.added(),         s       );
96   BOOST_CHECK_EQUAL( t.removed(),       s2      );
97
98   BOOST_CHECK( t.set( s2 ) );
99   BOOST_CHECK_EQUAL( t.current(),       s2      );
100   BOOST_CHECK_EQUAL( t.added(),         s       );
101   BOOST_CHECK_EQUAL( t.removed(),       s       );
102
103 }