// (C) Copyright 2006 Anthony Williams // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include #include template struct test_initially_locked { void operator()() const { Mutex m; Lock lock(m); BOOST_CHECK(lock); BOOST_CHECK(lock.locked()); } }; template struct test_initially_locked_with_bool_parameter_true { void operator()() const { Mutex m; Lock lock(m,true); BOOST_CHECK(lock); BOOST_CHECK(lock.locked()); } }; template struct test_initially_unlocked_with_bool_parameter_false { void operator()() const { Mutex m; Lock lock(m,false); BOOST_CHECK(!lock); BOOST_CHECK(!lock.locked()); } }; template struct test_unlocked_after_unlock_called { void operator()() const { Mutex m; Lock lock(m,true); lock.unlock(); BOOST_CHECK(!lock); BOOST_CHECK(!lock.locked()); } }; template struct test_locked_after_lock_called { void operator()() const { Mutex m; Lock lock(m,false); lock.lock(); BOOST_CHECK(lock); BOOST_CHECK(lock.locked()); } }; template struct test_throws_if_lock_called_when_already_locked { void operator()() const { Mutex m; Lock lock(m,true); BOOST_CHECK_THROW( lock.lock(), boost::lock_error ); } }; template struct test_throws_if_unlock_called_when_already_unlocked { void operator()() const { Mutex m; Lock lock(m,true); lock.unlock(); BOOST_CHECK_THROW( lock.unlock(), boost::lock_error ); } }; boost::unit_test_framework::test_suite* init_unit_test_suite(int, char*[]) { boost::unit_test_framework::test_suite* test = BOOST_TEST_SUITE("Boost.Threads: lock concept test suite"); test->add(BOOST_TEST_CASE((test_initially_locked()))); test->add(BOOST_TEST_CASE((test_initially_locked_with_bool_parameter_true()))); test->add(BOOST_TEST_CASE((test_initially_unlocked_with_bool_parameter_false()))); test->add(BOOST_TEST_CASE((test_unlocked_after_unlock_called()))); test->add(BOOST_TEST_CASE((test_locked_after_lock_called()))); test->add(BOOST_TEST_CASE((test_throws_if_lock_called_when_already_locked()))); test->add(BOOST_TEST_CASE((test_throws_if_unlock_called_when_already_unlocked()))); test->add(BOOST_TEST_CASE((test_initially_locked()))); test->add(BOOST_TEST_CASE((test_initially_locked_with_bool_parameter_true()))); test->add(BOOST_TEST_CASE((test_initially_unlocked_with_bool_parameter_false()))); test->add(BOOST_TEST_CASE((test_unlocked_after_unlock_called()))); test->add(BOOST_TEST_CASE((test_locked_after_lock_called()))); test->add(BOOST_TEST_CASE((test_throws_if_lock_called_when_already_locked()))); test->add(BOOST_TEST_CASE((test_throws_if_unlock_called_when_already_unlocked()))); test->add(BOOST_TEST_CASE((test_initially_locked()))); test->add(BOOST_TEST_CASE((test_initially_locked_with_bool_parameter_true()))); test->add(BOOST_TEST_CASE((test_initially_unlocked_with_bool_parameter_false()))); test->add(BOOST_TEST_CASE((test_unlocked_after_unlock_called()))); test->add(BOOST_TEST_CASE((test_locked_after_lock_called()))); test->add(BOOST_TEST_CASE((test_throws_if_lock_called_when_already_locked()))); test->add(BOOST_TEST_CASE((test_throws_if_unlock_called_when_already_unlocked()))); return test; }