Port Ruby test of vector<shared_ptr<>> to Python

This test code tests the upcast code:
  swig_assert_equal_simple(-1, base_num2([Derived(7)]))
Although there is no explicit memory leak fix test, it does at least run the code.

Handling of None needs fixing in Python (it is working in Ruby)
Note that the Ruby implementation has a partial template specialization
for shared_ptr, whereas the Python implementation is in the generic
code!

Issue #1512
This commit is contained in:
William S Fulton 2020-02-13 19:09:27 +00:00
parent 339d427910
commit fc2f0204ba
1 changed files with 63 additions and 0 deletions

View File

@ -0,0 +1,63 @@
from cpp11_shared_ptr_upcast import *
# This is a port from the Ruby equivalent test and some tests ported from
# Examples/test-suite/ruby/cpp11_shared_ptr_upcast_runme.rb are not working and commented out with:
# not working:
def swig_assert_equal_simple(expected, got):
if expected != got:
raise RuntimeError("Expected: {}. Got: {}")
# non-overloaded
swig_assert_equal_simple(7, derived_num1(Derived(7)))
swig_assert_equal_simple(7, derived_num2([Derived(7)]))
swig_assert_equal_simple(7, derived_num3({0: Derived(7)}))
swig_assert_equal_simple(-1, base_num1(Derived(7)))
swig_assert_equal_simple(-1, base_num2([Derived(7)]))
swig_assert_equal_simple(-1, base_num3({0: Derived(7)}))
swig_assert_equal_simple(999, derived_num1(None))
# not working: swig_assert_equal_simple(999, derived_num2([None]))
# not working: swig_assert_equal_simple(999, derived_num3({0: None}))
swig_assert_equal_simple(999, base_num1(None))
# not working: swig_assert_equal_simple(999, base_num2([None]))
# not working: swig_assert_equal_simple(999, base_num3({0: None}))
# overloaded
swig_assert_equal_simple(7, derived_num(Derived(7)))
swig_assert_equal_simple(7, derived_num([Derived(7)]))
swig_assert_equal_simple(7, derived_num({0: Derived(7)}))
swig_assert_equal_simple(-1, base_num(Derived(7)))
swig_assert_equal_simple(-1, base_num([Derived(7)]))
swig_assert_equal_simple(-1, base_num({0: Derived(7)}))
# ptr to shared_ptr
swig_assert_equal_simple(7, derived2_num1(Derived2(7)))
swig_assert_equal_simple(7, derived2_num2([Derived2(7)]))
swig_assert_equal_simple(7, derived2_num3({0: Derived2(7)}))
swig_assert_equal_simple(-1, base2_num1(Derived2(7)))
# not working: try:
# not working: # Upcast for pointers to shared_ptr in this generic framework has not been implemented
# not working: swig_assert_equal_simple(-1, base2_num2([Derived2(7)]))
# not working: raise RuntimeError, "Failed to catch TypeError"
# not working: except TypeError:
# not working: pass
# not working: try:
# not working: # Upcast for pointers to shared_ptr in this generic framework has not been implemented
# not working: swig_assert_equal_simple(-1, base2_num3({0: Derived2(7)}))
# not working: raise RuntimeError, "Failed to catch TypeError"
# not working: except TypeError:
# not working: pass
swig_assert_equal_simple(888, derived2_num1(None))
swig_assert_equal_simple(999, derived2_num2([None])) # although 888 would be more consistent
swig_assert_equal_simple(999, derived2_num3({0: None})) # although 888 would be more consistent
swig_assert_equal_simple(888, base2_num1(None))
swig_assert_equal_simple(999, base2_num2([None])) # although 888 would be more consistent
swig_assert_equal_simple(999, base2_num3({0: None})) # although 888 would be more consistent