From fc2f0204ba735ea9374933ff947d48fbec0b2deb Mon Sep 17 00:00:00 2001 From: William S Fulton Date: Thu, 13 Feb 2020 19:09:27 +0000 Subject: [PATCH] Port Ruby test of vector> 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 --- .../python/cpp11_shared_ptr_upcast_runme.py | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 Examples/test-suite/python/cpp11_shared_ptr_upcast_runme.py diff --git a/Examples/test-suite/python/cpp11_shared_ptr_upcast_runme.py b/Examples/test-suite/python/cpp11_shared_ptr_upcast_runme.py new file mode 100644 index 000000000..08546a45e --- /dev/null +++ b/Examples/test-suite/python/cpp11_shared_ptr_upcast_runme.py @@ -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