Add shared_ptr non-overloaded upcast tests

This commit is contained in:
William S Fulton 2017-04-07 07:34:58 +01:00
commit bd233408e8
2 changed files with 65 additions and 21 deletions

View file

@ -31,33 +31,58 @@ public:
int n;
};
typedef std::shared_ptr<Base> BasePtr;
typedef std::shared_ptr<Derived> DerivedPtr;
typedef std::shared_ptr<Base> BasePtr;
typedef std::shared_ptr<Derived> DerivedPtr;
int derived_num(DerivedPtr v) {
return (*v).get_n();
}
// non-overloaded
int derived_num1(DerivedPtr v) {
return (*v).get_n();
}
int derived_num(std::vector<DerivedPtr> v) {
return (*v[0]).get_n();
}
int derived_num2(std::vector<DerivedPtr> v) {
return (*v[0]).get_n();
}
int derived_num(std::map<int, DerivedPtr> v) {
return (*v[0]).get_n();
}
int derived_num3(std::map<int, DerivedPtr> v) {
return (*v[0]).get_n();
}
int base_num(BasePtr v) {
return (*v).get_m();
}
int base_num1(BasePtr v) {
return (*v).get_m();
}
int base_num(std::vector<BasePtr > v) {
return (*v[0]).get_m();
}
int base_num2(std::vector<BasePtr > v) {
return (*v[0]).get_m();
}
int base_num(std::map<int, BasePtr > v) {
return (*v[0]).get_m();
}
int base_num3(std::map<int, BasePtr > v) {
return (*v[0]).get_m();
}
// overloaded
int derived_num(DerivedPtr v) {
return derived_num1(v);
}
int derived_num(std::vector<DerivedPtr> v) {
return derived_num2(v);
}
int derived_num(std::map<int, DerivedPtr> v) {
return derived_num3(v);
}
int base_num(BasePtr v) {
return base_num1(v);
}
int base_num(std::vector<BasePtr > v) {
return base_num2(v);
}
int base_num(std::map<int, BasePtr > v) {
return base_num3(v);
}
%}
@ -88,10 +113,18 @@ public:
typedef std::shared_ptr<Base> BasePtr;
typedef std::shared_ptr<Derived> DerivedPtr;
// non-overloaded
int derived_num1(DerivedPtr);
int derived_num2(std::vector<std::shared_ptr<Derived> > v);
int derived_num3(std::map<int, DerivedPtr> v);
int base_num1(BasePtr);
int base_num2(std::vector<std::shared_ptr<Base> > v);
int base_num3(std::map<int, BasePtr > v);
// overloaded
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);

View file

@ -4,9 +4,20 @@ require 'cpp11_shared_ptr_upcast'
include Cpp11_shared_ptr_upcast
# non-overloaded
simple_assert_equal( 7, derived_num1(Derived.new(7)) )
simple_assert_equal( 7, derived_num2([Derived.new(7)]) )
simple_assert_equal( 7, derived_num3({0 => Derived.new(7)}) )
simple_assert_equal(-1, base_num1(Derived.new(7)) )
simple_assert_equal(-1, base_num2([Derived.new(7)]) )
simple_assert_equal(-1, base_num3({0 => Derived.new(7)}) )
# overloaded
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)}) )