libmoost
/home/mhx/git/github/libmoost/test/container/resource_stack.cpp
Go to the documentation of this file.
00001 /* vim:set ts=3 sw=3 sts=3 et: */
00028 #include <boost/test/unit_test.hpp>
00029 #include <boost/test/test_tools.hpp>
00030 
00031 #include <vector>
00032 #include "../../include/moost/container/resource_stack.hpp"
00033 
00034 using namespace moost::container;
00035 
00036 BOOST_AUTO_TEST_SUITE( resource_stack_test )
00037 
00038 struct Fixture
00039 {
00040    resource_stack<int> resource_stack_;
00041 
00042    Fixture()
00043    {
00044      resource_stack_.add_resource(boost::shared_ptr<int>(new int(3)));
00045      resource_stack_.add_resource(boost::shared_ptr<int>(new int(5)));
00046    }
00047 };
00048 
00049 BOOST_FIXTURE_TEST_CASE( test_initial, Fixture )
00050 {
00051   BOOST_CHECK_EQUAL(resource_stack_.size(), 2);
00052   BOOST_CHECK_EQUAL(resource_stack_.total_size(), 2);
00053 }
00054 
00055 // find nothing!
00056 BOOST_FIXTURE_TEST_CASE( test_get_resource, Fixture )
00057 {
00058   resource_stack<int>::scoped_resource sr(resource_stack_);
00059 
00060   BOOST_CHECK_EQUAL(resource_stack_.size(), 1);
00061   BOOST_CHECK_EQUAL(*sr, 5);
00062   BOOST_CHECK_EQUAL(resource_stack_.total_size(), 2);
00063 
00064   resource_stack<int>::scoped_resource sr2(resource_stack_, false);
00065   BOOST_CHECK_EQUAL(resource_stack_.size(), 0);
00066   BOOST_CHECK_EQUAL(*sr2, 3);
00067   BOOST_CHECK_EQUAL(resource_stack_.total_size(), 2);
00068 
00069   BOOST_CHECK_THROW(
00070     resource_stack<int>::scoped_resource sr3(resource_stack_, false),
00071     no_resource_available
00072   );
00073 }
00074 
00075 // find something!
00076 BOOST_FIXTURE_TEST_CASE( test_get_multiple, Fixture )
00077 {
00078   resource_stack<int>::scoped_resource sr(resource_stack_);
00079 
00080   BOOST_CHECK_EQUAL(resource_stack_.size(), 1);
00081   BOOST_CHECK_EQUAL(*sr, 5);
00082 
00083   resource_stack<int>::scoped_resource sr2(resource_stack_);
00084 
00085   BOOST_CHECK_EQUAL(resource_stack_.size(), 0);
00086   BOOST_CHECK_EQUAL(*sr2, 3);
00087   BOOST_CHECK_EQUAL(resource_stack_.total_size(), 2);
00088 }
00089 
00090 // find nothing! (bounds search)
00091 BOOST_FIXTURE_TEST_CASE( test_release, Fixture )
00092 {
00093   resource_stack<int>::scoped_resource sr(resource_stack_);
00094 
00095   {
00096     resource_stack<int>::scoped_resource sr2(resource_stack_);
00097   }
00098   BOOST_CHECK_EQUAL(resource_stack_.size(), 1);
00099   BOOST_CHECK_EQUAL(*sr, 5);
00100 
00101   resource_stack<int>::scoped_resource sr3(resource_stack_);
00102   BOOST_CHECK_EQUAL(resource_stack_.size(), 0);
00103   BOOST_CHECK_EQUAL(*sr3, 3);
00104   BOOST_CHECK_EQUAL(resource_stack_.total_size(), 2);
00105 }
00106 
00107 BOOST_AUTO_TEST_SUITE_END()