4 #include <boost/test/unit_test.hpp>
5 #include "zypp/base/Logger.h"
6 #include "zypp/base/Flags.h"
9 using boost::unit_test::test_case;
25 ZYPP_DECLARE_FLAGS( TFlags, E );
26 ZYPP_DECLARE_OPERATORS_FOR_FLAGS( TFlags );
28 inline std::ostream & operator<<( std::ostream & str, const E & obj )
29 { return str << TFlags(obj); }
31 static const TFlags T_6( E::_4 | E::_2 );
32 static const TFlags T_7( E::_4 | E::_2 | E::_1 );
35 BOOST_AUTO_TEST_CASE(flags)
38 BOOST_CHECK_EQUAL( t0, 0 );
39 BOOST_CHECK_EQUAL( E::_0, t0 );
40 BOOST_CHECK_EQUAL( t0, E::_0 );
41 BOOST_CHECK_EQUAL( t0, TFlags(0) );
42 BOOST_CHECK_EQUAL( ~t0, ~0 );
43 BOOST_CHECK_EQUAL( ~~t0, 0 );
44 BOOST_CHECK_EQUAL( ~t0, ~E::_0 );
45 BOOST_CHECK_EQUAL( ~~t0, E::_0 );
47 BOOST_CHECK_EQUAL( TFlags::none(), TFlags(0) );
48 BOOST_CHECK_EQUAL( TFlags::all(), ~TFlags(0) );
51 BOOST_CHECK_EQUAL( t1, 1 );
52 BOOST_CHECK_EQUAL( t1, E::_1 );
53 BOOST_CHECK_EQUAL( t1, TFlags(1) );
56 //t = 1; // must not compile: assign from int_type
58 BOOST_CHECK_EQUAL( t, E::_2 );
60 BOOST_CHECK_EQUAL( t, T_6 );
63 t = ~E::_1; BOOST_CHECK_EQUAL( ~t, E::_1 );
64 t = E::_1 & E::_2; BOOST_CHECK_EQUAL( t, E::_0 );
65 t = E::_1 | E::_2; BOOST_CHECK_EQUAL( t, E::_3 );
66 t = E::_1 ^ E::_2; BOOST_CHECK_EQUAL( t, E::_3 );
69 t = E::_2 & T_6; BOOST_CHECK_EQUAL( t, E::_2 );
70 t = E::_2 | T_6; BOOST_CHECK_EQUAL( t, T_6 );
71 t = E::_2 ^ T_6; BOOST_CHECK_EQUAL( t, E::_4 );
74 t = ~T_7; BOOST_CHECK_EQUAL( ~t, T_7 );
75 t = T_7 & E::_2; BOOST_CHECK_EQUAL( t, E::_2 );
76 t = T_7 | E::_2; BOOST_CHECK_EQUAL( t, T_7 );
77 t = T_7 ^ E::_2; BOOST_CHECK_EQUAL( t, E::_5 );
80 t = T_7 & T_6; BOOST_CHECK_EQUAL( t, T_6 );
81 t = T_7 | T_6; BOOST_CHECK_EQUAL( t, T_7 );
82 t = T_7 ^ T_7; BOOST_CHECK_EQUAL( t, E::_0 );
85 BOOST_CHECK( ! t.testFlag( E::_0 ) ); // fails as t != 0
86 BOOST_CHECK( t.testFlag( E::_1 ) );
87 BOOST_CHECK( t.testFlag( E::_2 ) );
88 BOOST_CHECK( t.testFlag( E::_3 ) );
89 t.unsetFlag( E::_2 ); BOOST_CHECK( t.testFlag( E::_1 ) );
90 t.setFlag( E::_1, false ); BOOST_CHECK( t.testFlag( E::_0 ) ); // succeed as t == 0
91 t.setFlag( E::_3, true ); BOOST_CHECK( t.testFlag( E::_3 ) );