123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- # Copyright David Abrahams 2004. 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)
- '''
- >>> from virtual_functions_ext import *
- >>> class C1(concrete):
- ... def f(self, y):
- ... return concrete.f(self, Y(-y.value()))
- >>> class C2(concrete):
- ... pass
- >>> class A1(abstract):
- ... def f(self, y):
- ... return y.value() * 2
- ... def g(self, y):
- ... return self
- >>> class A2(abstract):
- ... pass
- >>> y1 = Y(16)
- >>> y2 = Y(17)
- #
- # Test abstract with f,g overridden
- #
- >>> a1 = A1(42)
- >>> a1.value()
- 42
- # Call f,g indirectly from C++
- >>> a1.call_f(y1)
- 32
- >>> assert type(a1.call_g(y1)) is abstract
- # Call f directly from Python
- >>> a1.f(y2)
- 34
- #
- # Test abstract with f not overridden
- #
- >>> a2 = A2(42)
- >>> a2.value()
- 42
- # Call f indirectly from C++
- >>> try: a2.call_f(y1)
- ... except AttributeError: pass
- ... else: print('no exception')
- # Call f directly from Python
- >>> try: a2.call_f(y2)
- ... except AttributeError: pass
- ... else: print('no exception')
- ############# Concrete Tests ############
- #
- # Test concrete with f overridden
- #
- >>> c1 = C1(42)
- >>> c1.value()
- 42
- # Call f indirectly from C++
- >>> c1.call_f(y1)
- -16
- # Call f directly from Python
- >>> c1.f(y2)
- -17
- #
- # Test concrete with f not overridden
- #
- >>> c2 = C2(42)
- >>> c2.value()
- 42
- # Call f indirectly from C++
- >>> c2.call_f(y1)
- 16
- # Call f directly from Python
- >>> c2.f(y2)
- 17
- '''
- def run(args = None):
- import sys
- import doctest
- if args is not None:
- sys.argv = args
- return doctest.testmod(sys.modules.get(__name__))
-
- if __name__ == '__main__':
- print("running...")
- import sys
- status = run()[0]
- if (status == 0): print("Done.")
- sys.exit(status)
|