[ruby] add tests for upcasting std::shared_ptr within std containers.
This commit is contained in:
parent
50e495c453
commit
a84ea749b3
3 changed files with 110 additions and 0 deletions
97
Examples/test-suite/cpp11_shared_ptr_upcast.i
Normal file
97
Examples/test-suite/cpp11_shared_ptr_upcast.i
Normal file
|
|
@ -0,0 +1,97 @@
|
||||||
|
%module cpp11_shared_ptr_upcast
|
||||||
|
|
||||||
|
%{
|
||||||
|
#include <set>
|
||||||
|
#include <map>
|
||||||
|
#include <memory>
|
||||||
|
#include <unordered_set>
|
||||||
|
#include <unordered_map>
|
||||||
|
#include <vector>
|
||||||
|
%}
|
||||||
|
|
||||||
|
%include std_vector.i
|
||||||
|
%include std_map.i
|
||||||
|
%include std_shared_ptr.i
|
||||||
|
|
||||||
|
%{
|
||||||
|
|
||||||
|
class Base {
|
||||||
|
public:
|
||||||
|
Base() : m(-1) {}
|
||||||
|
Base(int i) : m(i) {}
|
||||||
|
int get_m() { return m; }
|
||||||
|
int m;
|
||||||
|
};
|
||||||
|
|
||||||
|
class Derived : public Base {
|
||||||
|
public:
|
||||||
|
Derived() : n(-2) {}
|
||||||
|
Derived(int i) : n(i) {}
|
||||||
|
int get_n() { return n; }
|
||||||
|
int n;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef std::shared_ptr<Base> BasePtr;
|
||||||
|
typedef std::shared_ptr<Derived> DerivedPtr;
|
||||||
|
|
||||||
|
int derived_num(DerivedPtr v) {
|
||||||
|
return (*v).get_n();
|
||||||
|
}
|
||||||
|
|
||||||
|
int derived_num(std::vector<DerivedPtr> v) {
|
||||||
|
return (*v[0]).get_n();
|
||||||
|
}
|
||||||
|
|
||||||
|
int derived_num(std::map<int, DerivedPtr> v) {
|
||||||
|
return (*v[0]).get_n();
|
||||||
|
}
|
||||||
|
|
||||||
|
int base_num(BasePtr v) {
|
||||||
|
return (*v).get_m();
|
||||||
|
}
|
||||||
|
|
||||||
|
int base_num(std::vector<BasePtr > v) {
|
||||||
|
return (*v[0]).get_m();
|
||||||
|
}
|
||||||
|
|
||||||
|
int base_num(std::map<int, BasePtr > v) {
|
||||||
|
return (*v[0]).get_m();
|
||||||
|
}
|
||||||
|
|
||||||
|
%}
|
||||||
|
|
||||||
|
|
||||||
|
%shared_ptr(Base);
|
||||||
|
%shared_ptr(Derived);
|
||||||
|
|
||||||
|
%template(BaseList) std::vector<std::shared_ptr<Base> >;
|
||||||
|
%template(DerivedList) std::vector<std::shared_ptr<Derived> >;
|
||||||
|
|
||||||
|
%template(BaseMap) std::map<int, std::shared_ptr<Base> >;
|
||||||
|
%template(DerivedMap) std::map<int, std::shared_ptr<Derived> >;
|
||||||
|
|
||||||
|
class Base {
|
||||||
|
public:
|
||||||
|
Base();
|
||||||
|
int get_m();
|
||||||
|
int m;
|
||||||
|
};
|
||||||
|
|
||||||
|
class Derived : public Base {
|
||||||
|
public:
|
||||||
|
Derived();
|
||||||
|
Derived(int i);
|
||||||
|
int get_n();
|
||||||
|
int n;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef std::shared_ptr<Base> BasePtr;
|
||||||
|
typedef std::shared_ptr<Derived> DerivedPtr;
|
||||||
|
|
||||||
|
int derived_num(DerivedPtr);
|
||||||
|
int derived_num(std::vector<std::shared_ptr<Derived> > v);
|
||||||
|
int derived_num(std::map<int, DerivedPtr> v);
|
||||||
|
int base_num(BasePtr);
|
||||||
|
int base_num(std::vector<std::shared_ptr<Base> > v);
|
||||||
|
int base_num(std::map<int, BasePtr > v);
|
||||||
|
|
||||||
|
|
@ -31,6 +31,7 @@ CPP_TEST_CASES = \
|
||||||
|
|
||||||
CPP11_TEST_CASES = \
|
CPP11_TEST_CASES = \
|
||||||
cpp11_hash_tables \
|
cpp11_hash_tables \
|
||||||
|
cpp11_shared_ptr_upcast
|
||||||
|
|
||||||
C_TEST_CASES += \
|
C_TEST_CASES += \
|
||||||
li_cstring \
|
li_cstring \
|
||||||
|
|
|
||||||
12
Examples/test-suite/ruby/cpp11_shared_ptr_upcast_runme.rb
Normal file
12
Examples/test-suite/ruby/cpp11_shared_ptr_upcast_runme.rb
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
require 'swig_assert'
|
||||||
|
require 'cpp11_shared_ptr_upcast'
|
||||||
|
|
||||||
|
|
||||||
|
include Cpp11_shared_ptr_upcast
|
||||||
|
|
||||||
|
simple_assert_equal( 7, derived_num(Derived.new(7)) )
|
||||||
|
simple_assert_equal( 7, derived_num([Derived.new(7)]) )
|
||||||
|
simple_assert_equal( 7, derived_num({0 => Derived.new(7)}) )
|
||||||
|
simple_assert_equal(-1, base_num(Derived.new(7)) )
|
||||||
|
simple_assert_equal(-1, base_num([Derived.new(7)]) )
|
||||||
|
simple_assert_equal(-1, base_num({0 => Derived.new(7)}) )
|
||||||
Loading…
Add table
Add a link
Reference in a new issue