test_move_function.cpp

来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 125 行

CPP
125
字号
// Copyright (C) 2007-8 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 <boost/thread/thread.hpp>#include <boost/test/unit_test.hpp>#include <boost/thread/mutex.hpp>#include <boost/shared_ptr.hpp>void do_nothing(){}void test_thread_move_from_lvalue_on_construction(){    boost::thread src(do_nothing);    boost::thread::id src_id=src.get_id();    boost::thread dest(boost::move(src));    boost::thread::id dest_id=dest.get_id();    BOOST_CHECK(src_id==dest_id);    BOOST_CHECK(src.get_id()==boost::thread::id());    dest.join();}void test_thread_move_from_lvalue_on_assignment(){    boost::thread src(do_nothing);    boost::thread::id src_id=src.get_id();    boost::thread dest;    dest=boost::move(src);    boost::thread::id dest_id=dest.get_id();    BOOST_CHECK(src_id==dest_id);    BOOST_CHECK(src.get_id()==boost::thread::id());    dest.join();}boost::thread start_thread(){    return boost::thread(do_nothing);}void test_thread_move_from_rvalue_on_construction(){    boost::thread x(start_thread());    BOOST_CHECK(x.get_id()!=boost::thread::id());    x.join();}void test_thread_move_from_rvalue_using_explicit_move(){    boost::thread x(boost::move(start_thread()));    BOOST_CHECK(x.get_id()!=boost::thread::id());    x.join();}void test_unique_lock_move_from_lvalue_on_construction(){    boost::mutex m;    boost::unique_lock<boost::mutex> l(m);    BOOST_CHECK(l.owns_lock());    BOOST_CHECK(l.mutex()==&m);    boost::unique_lock<boost::mutex> l2(boost::move(l));    BOOST_CHECK(!l.owns_lock());    BOOST_CHECK(!l.mutex());    BOOST_CHECK(l2.owns_lock());    BOOST_CHECK(l2.mutex()==&m);}boost::unique_lock<boost::mutex> get_lock(boost::mutex& m){    return boost::unique_lock<boost::mutex>(m);}void test_unique_lock_move_from_rvalue_on_construction(){    boost::mutex m;    boost::unique_lock<boost::mutex> l(get_lock(m));    BOOST_CHECK(l.owns_lock());    BOOST_CHECK(l.mutex()==&m);}namespace user_test_ns{    template<typename T>    T move(T& t)    {        return t.move();    }    bool move_called=false;        struct nc:        public boost::shared_ptr<int>    {        nc move()        {            move_called=true;            return nc();        }    };}void test_move_for_user_defined_type_unaffected(){    user_test_ns::nc src;    user_test_ns::nc dest=move(src);    BOOST_CHECK(user_test_ns::move_called);}boost::unit_test_framework::test_suite* init_unit_test_suite(int, char*[]){    boost::unit_test_framework::test_suite* test =        BOOST_TEST_SUITE("Boost.Threads: thread move test suite");    test->add(BOOST_TEST_CASE(test_thread_move_from_lvalue_on_construction));    test->add(BOOST_TEST_CASE(test_thread_move_from_rvalue_on_construction));    test->add(BOOST_TEST_CASE(test_thread_move_from_rvalue_using_explicit_move));    test->add(BOOST_TEST_CASE(test_thread_move_from_lvalue_on_assignment));    test->add(BOOST_TEST_CASE(test_unique_lock_move_from_lvalue_on_construction));    test->add(BOOST_TEST_CASE(test_unique_lock_move_from_rvalue_on_construction));    test->add(BOOST_TEST_CASE(test_move_for_user_defined_type_unaffected));    return test;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?