/* * Boost.Extension / construction test case * * (C) Copyright Jeremy Pack 2007 * 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) * * See http://www.boost.org/ for latest version. */ #include #include #define BOOST_TEST_MAIN #include #include #include using namespace boost::extensions; class Base { public: Base(int i) : value_(i) {} Base(float j) : value_(int(j)) {} Base() : value_(23) {} Base(int i, float j) : value_(int(j) * i) {} virtual int getValue() {return value_;} virtual ~Base() {} private: int value_; }; class Derived : public Base { public: virtual ~Derived() {} Derived(int i) : Base(float(i * 3)) {} Derived(float j) : Base(int(j)) {} Derived() : Base(2, 23.0f) {} Derived(int i, float j) : Base() {} virtual int getValue() {return 2 * Base::getValue();} }; BOOST_AUTO_TEST_CASE(CorrectConstructor) { factory_map m; m.get()["Derived"].set(); m.get()["Derived"].set(); m.get()["Derived"].set(); m.get()["Derived"].set(); m.get()["Base"].set(); m.get()["Base"].set(); m.get()["Base"].set(); m.get()["Base"].set(); std::auto_ptr b1(m.get() ["Derived"].create(2.0f)); BOOST_CHECK_EQUAL(b1->getValue(), 4); std::auto_ptr b2(m.get() ["Derived"].create()); BOOST_CHECK_EQUAL(b2->getValue(), 92); std::auto_ptr b3(m.get() ["Base"].create(4, 5.0f)); BOOST_CHECK_EQUAL(b3->getValue(), 20.0f); }