95dee3c1af590e64f4f9035d8a2ef9df0a51ca2b
[platform/upstream/libzypp.git] / tests / zypp / Flags_test.cc
1 //
2 // tests for Flags
3 //
4 #include <boost/test/auto_unit_test.hpp>
5 #include "zypp/base/Logger.h"
6 #include "zypp/base/Flags.h"
7 #include <iostream>
8
9 using boost::unit_test::test_case;
10 using std::cout;
11 using std::endl;
12 using namespace zypp;
13
14 enum TBits
15 {
16   T_0   = 0,
17   T_1   = 1 << 0,
18   T_2   = 1 << 1,
19   T_3   = T_2 | T_1,
20   T_4   = 1 << 2,
21   T_5   = T_4 | T_1,
22   T_8   = 1 << 3,
23 };
24
25 ZYPP_DECLARE_FLAGS( TFlags, TBits );
26 ZYPP_DECLARE_OPERATORS_FOR_FLAGS( TFlags );
27
28 static const TFlags T_6( T_4 | T_2 );
29 static const TFlags T_7( T_4 | T_2 | T_1 );
30
31 BOOST_AUTO_TEST_CASE(flags)
32 {
33   TFlags t0;
34   BOOST_CHECK_EQUAL( t0, 0 );
35   BOOST_CHECK_EQUAL( t0, T_0 );
36   BOOST_CHECK_EQUAL( t0, TFlags(0) );
37   BOOST_CHECK_EQUAL( ~t0, ~0 );
38   BOOST_CHECK_EQUAL( ~~t0, 0 );
39   BOOST_CHECK_EQUAL( ~t0, ~T_0 );
40   BOOST_CHECK_EQUAL( ~~t0, T_0 );
41
42   TFlags t1( T_1 );
43   BOOST_CHECK_EQUAL( t1, 1 );
44   BOOST_CHECK_EQUAL( t1, T_1 );
45   BOOST_CHECK_EQUAL( t1, TFlags(1) );
46
47   TFlags t;
48   // t = 1;     // must not compile: assign from int_type
49   t = T_2;      // = enum
50   BOOST_CHECK_EQUAL( t, T_2 );
51   t = T_6;      // = TFlags
52   BOOST_CHECK_EQUAL( t, T_6 );
53
54   // enum op enum
55   t = ~T_1;      BOOST_CHECK_EQUAL( ~t, T_1 );
56   t = T_1 & T_2; BOOST_CHECK_EQUAL( t, T_0 );
57   t = T_1 | T_2; BOOST_CHECK_EQUAL( t, T_3 );
58   t = T_1 ^ T_2; BOOST_CHECK_EQUAL( t, T_3 );
59
60   // enum op TFlags
61   t = T_2 & T_6; BOOST_CHECK_EQUAL( t, T_2 );
62   t = T_2 | T_6; BOOST_CHECK_EQUAL( t, T_6 );
63   t = T_2 ^ T_6; BOOST_CHECK_EQUAL( t, T_4 );
64
65   // TFlags op enum
66   t = ~T_7;      BOOST_CHECK_EQUAL( ~t, T_7 );
67   t = T_7 & T_2; BOOST_CHECK_EQUAL( t, T_2 );
68   t = T_7 | T_2; BOOST_CHECK_EQUAL( t, T_7 );
69   t = T_7 ^ T_2; BOOST_CHECK_EQUAL( t, T_5 );
70
71   // TFlags op enum
72   t = T_7 & T_6; BOOST_CHECK_EQUAL( t, T_6 );
73   t = T_7 | T_6; BOOST_CHECK_EQUAL( t, T_7 );
74   t = T_7 ^ T_7; BOOST_CHECK_EQUAL( t, T_0 );
75
76
77   t = T_3;
78   BOOST_CHECK( t.testFlag( T_1 ) );
79   BOOST_CHECK( t.testFlag( T_2 ) );
80   BOOST_CHECK( t.testFlag( T_3 ) );
81   t.unsetFlag( T_2 );           BOOST_CHECK( t.testFlag( T_1 ) );
82   t.setFlag( T_1, false );      BOOST_CHECK( t.testFlag( T_0 ) );
83   t.setFlag( T_3, true );       BOOST_CHECK( t.testFlag( T_3 ) );
84 }