Commit 40c01a16 authored by Xavier Thompson's avatar Xavier Thompson

Update unit test for method call resolution according to MRO

parent c8a910fb
# mode: error
# tag: cpp, cpp11, pthread
# cython: experimental_cpp_class_def=True, language_level=2
cdef cypclass A:
void foo(self, int a):
pass
cdef cypclass B(A):
void foo(self, int a, int b):
pass
def test_hidden_overridden_methods():
cdef B b = B()
# A.foo is hidden by B.foo, regardless of signature
b.foo(1)
_ERRORS = u"""
17:9: Call with wrong number of arguments (expected 2, got 1)
"""
\ No newline at end of file
# mode: run
# tag: cpp, cpp11, pthread
# cython: experimental_cpp_class_def=True, language_level=2
cdef cypclass A nolock:
int a
__init__(self, int a):
self.a = a
A foo(self, int other):
return A(a + other)
cdef cypclass B(A) nolock:
int b
__init__(self, int b):
self.b = 10 + b
B foo(self, int other):
return B(b + other)
def test_hide_override():
"""
>>> test_hide_override()
21
"""
cdef B b1 = B(0)
# This should not result in a 'ambiguous overloaded method' compilation error
cdef B b2 = b1.foo(1)
return b2.b
\ No newline at end of file
# mode: run
# tag: cpp, cpp11, pthread
# cython: experimental_cpp_class_def=True, language_level=2
cdef cypclass A:
int foo(self, int a):
return a + 42
cdef cypclass B(A):
int foo(self, int a, int b):
return a + b
def test_resolve_unhidden_method():
"""
>>> test_resolve_unhidden_method()
43
"""
cdef B b = B()
# should resolve to A.foo
return b.foo(1)
cdef cypclass C:
int a
__init__(self, int a):
self.a = a
C foo(self, int other):
return C(a + other)
cdef cypclass D(C):
int b
__init__(self, int b):
self.b = 10 + b
D foo(self, int other):
return D(b + other)
def test_resolve_overriden_method():
"""
>>> test_resolve_overriden_method()
21
"""
cdef D d1 = D(0)
# should not resolve to D.foo
cdef D d2 = d1.foo(1)
return d2.b
cdef cypclass Left:
int foo(self):
return 1
cdef cypclass Right:
int foo(self):
return 2
cdef cypclass Derived(Left, Right):
pass
def test_resolve_multiple_inherited_methods():
"""
>>> test_resolve_multiple_inherited_methods()
1
"""
cdef Derived d = Derived()
# should resolve to Left.foo
cdef int r = d.foo()
return r
cdef cypclass Top:
int foo(self, int a, int b):
return 1
cdef cypclass Middle(Top):
int foo(self):
return 2
cdef cypclass Bottom(Middle):
int foo(self, int a):
return a + 10
def test_inherited_overloaded_method():
"""
>>> test_inherited_overloaded_method()
2
"""
cdef Bottom b = Bottom()
# should resolve to Middle.foo
cdef int r = b.foo()
return r
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment