1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
- // test_singleton.cpp
- // (C) Copyright 2018 Robert Ramey - http://www.rrsd.com .
- // Use, modification and distribution is subject to 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)
- // should pass compilation and execution
- #include <iostream>
- #include <boost/serialization/singleton.hpp>
- #include "test_tools.hpp"
- static int i = 0;
- struct A {
- int m_id;
- A() : m_id(++i) {}
- ~A(){
- // verify that objects are destroyed in sequence reverse of construction
- if(i-- != m_id) std::terminate();
- }
- };
- struct B {
- int m_id;
- B() : m_id(++i) {}
- ~B(){
- // verify that objects are destroyed in sequence reverse of construction
- if(i-- != m_id) std::terminate();
- }
- };
- struct C {
- int m_id;
- C() : m_id(++i) {}
- ~C(){
- // verify that objects are destroyed in sequence reverse of construction
- if(i-- != m_id) std::terminate();
- }
- };
- struct D {
- int m_id;
- D(){
- // verify that only one object is indeed created
- const C & c = boost::serialization::singleton<C>::get_const_instance();
- const C & c1 = boost::serialization::singleton<C>::get_const_instance();
- BOOST_CHECK_EQUAL(&c, &c1);
- // verify that objects are created in sequence of definition
- BOOST_CHECK_EQUAL(c.m_id, 1);
- const B & b = boost::serialization::singleton<B>::get_const_instance();
- BOOST_CHECK_EQUAL(b.m_id, 2);
- const A & a = boost::serialization::singleton<A>::get_const_instance();
- BOOST_CHECK_EQUAL(a.m_id, 3);
- std::cout << a.m_id << b.m_id << c.m_id << '\n';
- m_id = ++i;
- }
- ~D(){
- // verify that objects are destroyed in sequence reverse of construction
- if(i-- != m_id) std::terminate();
- }
- };
- int test_main(int, char *[]){
- return 0;
- }
- // note: not a singleton
- D d;
|