[pygccxml-commit] SF.net SVN: pygccxml: [1158] pyplusplus_dev/unittests
Brought to you by:
mbaas,
roman_yakovenko
From: <rom...@us...> - 2007-11-19 21:05:04
|
Revision: 1158 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1158&view=rev Author: roman_yakovenko Date: 2007-11-19 13:05:05 -0800 (Mon, 19 Nov 2007) Log Message: ----------- adding new test case for reported bug Modified Paths: -------------- pyplusplus_dev/unittests/test_all.py Added Paths: ----------- pyplusplus_dev/unittests/data/include_exclude_bug_to_be_exported.hpp pyplusplus_dev/unittests/include_exclude_bug_tester.py Property Changed: ---------------- pyplusplus_dev/unittests/data/ Property changes on: pyplusplus_dev/unittests/data ___________________________________________________________________ Name: svn:ignore - *.obj call_policies_to_be_exported.os + *.obj call_policies_to_be_exported.os global_variables_to_be_exported.os member_functions_to_be_exported.os Added: pyplusplus_dev/unittests/data/include_exclude_bug_to_be_exported.hpp =================================================================== --- pyplusplus_dev/unittests/data/include_exclude_bug_to_be_exported.hpp (rev 0) +++ pyplusplus_dev/unittests/data/include_exclude_bug_to_be_exported.hpp 2007-11-19 21:05:05 UTC (rev 1158) @@ -0,0 +1,398 @@ +// Copyright 2004-2007 Roman Yakovenko. +// 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) + +//This file is base on OgreAny.h file, just slightly modified to remove dependencies. + +/* +----------------------------------------------------------------------------- +This source file is part of OGRE + (Object-oriented Graphics Rendering Engine) +For the latest info, see http://www.ogre3d.org/ + +Copyright (c) 2000-2006 Torus Knot Software Ltd +Also see acknowledgements in Readme.html + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU Lesser General Public License as published by the Free Software +Foundation; either version 2 of the License, or (at your option) Any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT +Any WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 59 Temple +Place - Suite 330, Boston, MA 02111-1307, USA, or go to +http://www.gnu.org/copyleft/lesser.txt. + +You may alternatively use this source under the terms of a specific version of +the OGRE Unrestricted License provided you have obtained such a license from +Torus Knot Software Ltd. +----------------------------------------------------------------------------- +*/ +// -- Based on boost::any, original copyright information follows -- +// Copyright Kevlin Henney, 2000, 2001, 2002. All rights reserved. +// +// 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) +// -- End original copyright -- + +#ifndef __OGRE_ANY_H__ +#define __OGRE_ANY_H__ + +#include <string> +#include <algorithm> +#include <stdexcept> +#include <typeinfo> + + +namespace Ogre +{ + /** Variant type that can hold Any other type. + */ + class Any + { + public: // constructors + + Any() + : mContent(0) + { + } + + template<typename ValueType> + explicit Any(const ValueType & value) + : mContent(new holder<ValueType>(value)) + { + } + + Any(const Any & other) + : mContent(other.mContent ? other.mContent->clone() : 0) + { + } + + virtual ~Any() + { + delete mContent; + } + + public: // modifiers + + Any& swap(Any & rhs) + { + std::swap(mContent, rhs.mContent); + return *this; + } + + template<typename ValueType> + Any& operator=(const ValueType & rhs) + { + Any(rhs).swap(*this); + return *this; + } + + Any & operator=(const Any & rhs) + { + Any(rhs).swap(*this); + return *this; + } + + public: // queries + + bool isEmpty() const + { + return !mContent; + } + + const std::type_info& getType() const + { + return mContent ? mContent->getType() : typeid(void); + } + + inline friend std::ostream& operator << + ( std::ostream& o, const Any& v ) + { + if (v.mContent) + v.mContent->writeToStream(o); + return o; + } + + + protected: // types + + class placeholder + { + public: // structors + + virtual ~placeholder() + { + } + + public: // queries + + virtual const std::type_info& getType() const = 0; + + virtual placeholder * clone() const = 0; + + virtual void writeToStream(std::ostream& o) = 0; + + }; + + template<typename ValueType> + class holder : public placeholder + { + public: // structors + + holder(const ValueType & value) + : held(value) + { + } + + public: // queries + + virtual const std::type_info & getType() const + { + return typeid(ValueType); + } + + virtual placeholder * clone() const + { + return new holder(held); + } + + virtual void writeToStream(std::ostream& o) + { + o << held; + } + + + public: // representation + + ValueType held; + + }; + + + + protected: // representation + placeholder * mContent; + + template<typename ValueType> + friend ValueType * any_cast(Any *); + + + public: + + template<typename ValueType> + ValueType operator()() const + { + if (!mContent) + { + throw std::runtime_error( "Bad cast from uninitialised Any" ); + } + else if(getType() == typeid(ValueType)) + { + return static_cast<Any::holder<ValueType> *>(mContent)->held; + } + else + { + throw std::runtime_error( "Bad cast from specific type" ); + } + } + + + + }; + + + /** Specialised Any class which has built in arithmetic operators, but can + hold only types which support operator +,-,* and / . + */ + class AnyNumeric : public Any + { + public: + AnyNumeric() + : Any() + { + } + + template<typename ValueType> + AnyNumeric(const ValueType & value) + + { + mContent = new numholder<ValueType>(value); + } + + AnyNumeric(const AnyNumeric & other) + : Any() + { + mContent = other.mContent ? other.mContent->clone() : 0; + } + protected: + class numplaceholder : public Any::placeholder + { + public: // structors + + ~numplaceholder() + { + } + virtual Any::placeholder* add(Any::placeholder* rhs) = 0; + virtual Any::placeholder* subtract(Any::placeholder* rhs) = 0; + virtual Any::placeholder* multiply(Any::placeholder* rhs) = 0; + virtual Any::placeholder* multiply(double factor) = 0; + virtual Any::placeholder* divide(Any::placeholder* rhs) = 0; + }; + + template<typename ValueType> + class numholder : public numplaceholder + { + public: // structors + + numholder(const ValueType & value) + : held(value) + { + } + + public: // queries + + virtual const std::type_info & getType() const + { + return typeid(ValueType); + } + + virtual placeholder * clone() const + { + return new numholder(held); + } + + virtual placeholder* add(placeholder* rhs) + { + return new numholder(held + static_cast<numholder*>(rhs)->held); + } + virtual placeholder* subtract(placeholder* rhs) + { + return new numholder(held - static_cast<numholder*>(rhs)->held); + } + virtual placeholder* multiply(placeholder* rhs) + { + return new numholder(held * static_cast<numholder*>(rhs)->held); + } + virtual placeholder* multiply(double factor) + { + return new numholder(held * factor); + } + virtual placeholder* divide(placeholder* rhs) + { + return new numholder(held / static_cast<numholder*>(rhs)->held); + } + virtual void writeToStream(std::ostream& o) + { + o << held; + } + + public: // representation + + ValueType held; + + }; + + /// Construct from holder + AnyNumeric(placeholder* pholder) + { + mContent = pholder; + } + + public: + AnyNumeric & operator=(const AnyNumeric & rhs) + { + AnyNumeric(rhs).swap(*this); + return *this; + } + AnyNumeric operator+(const AnyNumeric& rhs) const + { + return AnyNumeric( + static_cast<numplaceholder*>(mContent)->add(rhs.mContent)); + } + AnyNumeric operator-(const AnyNumeric& rhs) const + { + return AnyNumeric( + static_cast<numplaceholder*>(mContent)->subtract(rhs.mContent)); + } + AnyNumeric operator*(const AnyNumeric& rhs) const + { + return AnyNumeric( + static_cast<numplaceholder*>(mContent)->multiply(rhs.mContent)); + } + AnyNumeric operator*(double factor) const + { + return AnyNumeric( + static_cast<numplaceholder*>(mContent)->multiply(factor)); + } + AnyNumeric operator/(const AnyNumeric& rhs) const + { + return AnyNumeric( + static_cast<numplaceholder*>(mContent)->divide(rhs.mContent)); + } + AnyNumeric& operator+=(const AnyNumeric& rhs) + { + *this = AnyNumeric( + static_cast<numplaceholder*>(mContent)->add(rhs.mContent)); + return *this; + } + AnyNumeric& operator-=(const AnyNumeric& rhs) + { + *this = AnyNumeric( + static_cast<numplaceholder*>(mContent)->subtract(rhs.mContent)); + return *this; + } + AnyNumeric& operator*=(const AnyNumeric& rhs) + { + *this = AnyNumeric( + static_cast<numplaceholder*>(mContent)->multiply(rhs.mContent)); + return *this; + } + AnyNumeric& operator/=(const AnyNumeric& rhs) + { + *this = AnyNumeric( + static_cast<numplaceholder*>(mContent)->divide(rhs.mContent)); + return *this; + } + + + + + }; + + + template<typename ValueType> + ValueType * any_cast(Any * operand) + { + return operand && operand->getType() == typeid(ValueType) + ? &static_cast<Any::holder<ValueType> *>(operand->mContent)->held + : 0; + } + + template<typename ValueType> + const ValueType * any_cast(const Any * operand) + { + return any_cast<ValueType>(const_cast<Any *>(operand)); + } + + template<typename ValueType> + ValueType any_cast(const Any & operand) + { + const ValueType * result = any_cast<ValueType>(&operand); + if(!result) + { + throw std::runtime_error( "Bad cast from specific type" ); + } + return *result; + } + + +} + +#endif//__OGRE_ANY_H__ Added: pyplusplus_dev/unittests/include_exclude_bug_tester.py =================================================================== --- pyplusplus_dev/unittests/include_exclude_bug_tester.py (rev 0) +++ pyplusplus_dev/unittests/include_exclude_bug_tester.py 2007-11-19 21:05:05 UTC (rev 1158) @@ -0,0 +1,36 @@ +# Copyright 2004 Roman Yakovenko. +# 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) + +import os +import sys +import unittest +import fundamental_tester_base +from pyplusplus import code_creators + +class tester_t(fundamental_tester_base.fundamental_tester_base_t): + EXTENSION_NAME = 'include_exclude_bug' + + def __init__( self, *args ): + fundamental_tester_base.fundamental_tester_base_t.__init__( + self + , tester_t.EXTENSION_NAME + , *args ) + + def customize(self, mb ): + pass + + def run_tests( self, module): + pass + +def create_suite(): + suite = unittest.TestSuite() + suite.addTest( unittest.makeSuite(tester_t)) + return suite + +def run_suite(): + unittest.TextTestRunner(verbosity=2).run( create_suite() ) + +if __name__ == "__main__": + run_suite() Modified: pyplusplus_dev/unittests/test_all.py =================================================================== --- pyplusplus_dev/unittests/test_all.py 2007-11-15 15:37:20 UTC (rev 1157) +++ pyplusplus_dev/unittests/test_all.py 2007-11-19 21:05:05 UTC (rev 1158) @@ -92,6 +92,7 @@ import transfer_ownership_old_tester import transfer_ownership_tester import unicode_bug +import include_exclude_bug_tester @@ -175,6 +176,7 @@ , transfer_ownership_old_tester , transfer_ownership_tester , unicode_bug + , include_exclude_bug_tester ] class process_tester_runner_t( object ): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |