00001 //---------------------------------------------------------------------------- 00002 /** @file 00003 */ 00004 //---------------------------------------------------------------------------- 00005 00006 #include <boost/test/auto_unit_test.hpp> 00007 00008 #include "ChangeLog.hpp" 00009 00010 using namespace benzene; 00011 00012 //--------------------------------------------------------------------------- 00013 00014 namespace { 00015 00016 BOOST_AUTO_TEST_CASE(ChangeLog_InitialState) 00017 { 00018 ChangeLog<float> cl; 00019 BOOST_CHECK(cl.empty()); 00020 BOOST_CHECK_EQUAL(cl.size(), 0); 00021 } 00022 00023 BOOST_AUTO_TEST_CASE(ChangeLog_PushPopTopAndClear) 00024 { 00025 ChangeLog<float> cl; 00026 cl.push(ChangeLog<float>::ADD, 0.1f); 00027 cl.push(ChangeLog<float>::REMOVE, 0.2f); 00028 cl.push(ChangeLog<float>::REMOVE, 0.3f); 00029 cl.push(ChangeLog<float>::MARKER, 0.4f); 00030 BOOST_CHECK(!cl.empty()); 00031 BOOST_CHECK_EQUAL(cl.size(), 4); 00032 // testing topAction and topData 00033 BOOST_CHECK_EQUAL(cl.topAction(), ChangeLog<float>::MARKER); 00034 BOOST_CHECK_EQUAL(cl.topData(), 0.4f); 00035 BOOST_CHECK(!cl.empty()); 00036 BOOST_CHECK_EQUAL(cl.size(), 4); 00037 00038 cl.clear(); 00039 cl.push(ChangeLog<float>::MARKER, 1.0f); 00040 cl.push(ChangeLog<float>::ADD, 1.1f); 00041 BOOST_CHECK_EQUAL(cl.topAction(), ChangeLog<float>::ADD); 00042 BOOST_CHECK_EQUAL(cl.topData(), 1.1f); 00043 cl.push(ChangeLog<float>::REMOVE, 1.2f); 00044 BOOST_CHECK(!cl.empty()); 00045 BOOST_CHECK_EQUAL(cl.size(), 3); 00046 cl.pop(); 00047 cl.pop(); 00048 BOOST_CHECK(!cl.empty()); 00049 BOOST_CHECK_EQUAL(cl.size(), 1); 00050 BOOST_CHECK_EQUAL(cl.topAction(), ChangeLog<float>::MARKER); 00051 BOOST_CHECK_EQUAL(cl.topData(), 1.0f); 00052 cl.pop(); 00053 BOOST_CHECK_EQUAL(cl.size(), 0); 00054 // check clear on empty changelog, ensure does not affect activation 00055 BOOST_CHECK(cl.empty()); 00056 cl.clear(); 00057 BOOST_CHECK(cl.empty()); 00058 } 00059 00060 BOOST_AUTO_TEST_CASE(ChangeLog_Dump) 00061 { 00062 ChangeLog<float> cl; 00063 BOOST_CHECK_EQUAL(cl.dump(), ""); 00064 cl.push(ChangeLog<float>::ADD, 2.0f); 00065 cl.push(ChangeLog<float>::MARKER, 2.1f); 00066 cl.push(ChangeLog<float>::REMOVE, 2.2f); 00067 std::ostringstream s; 00068 s << "0: ADD: 2" << std::endl 00069 << "1: MARKER" << std::endl 00070 << "2: REMOVE: 2.2" << std::endl; 00071 BOOST_CHECK_EQUAL(cl.dump(), s.str()); 00072 } 00073 00074 } 00075 00076 //---------------------------------------------------------------------------