#cython: language_level=2
# mode: run
# ticket: 653
cimport cython
cdef class MyList(list):
def test_append(self, x):
"""
>>> l = MyList()
>>> type(l) is MyList
True
>>> list(l)
[]
>>> l.test_append(5)
>>> list(l)
[5]
"""
self.append(x)
cdef class MyDict(dict):
@cython.test_assert_path_exists("//ComprehensionNode//AttributeNode",
"//ComprehensionNode//AttributeNode[@attribute='items']")
@cython.test_fail_if_path_exists("//ComprehensionNode//CMethodSelfCloneNode")
def test_items(self):
"""
>>> MyDict(a=1, b=2).test_items()
[('a', 1), ('b', 2)]
"""
l = [ (key, value) for key, value in self.items() ]
l.sort()
return l
def test_values(self):
"""
>>> MyDict(a=1, b=2).test_values()
[1, 2]
"""
l = [ v for v in self.values() ]
l.sort()
return l
@cython.final
cdef class MyDictFinal(dict):
@cython.test_assert_path_exists("//ComprehensionNode//CMethodSelfCloneNode")
def test_items(self):
"""
>>> MyDictFinal(a=1, b=2).test_items()
[('a', 1), ('b', 2)]
"""
l = [ (key, value) for key, value in self.items() ]
l.sort()
return l
def test_values(self):
"""
>>> MyDictFinal(a=1, b=2).test_values()
[1, 2]
"""
l = [ v for v in self.values() ]
l.sort()
return l
cdef class MyDict2(MyDict):
@cython.test_assert_path_exists("//ComprehensionNode//AttributeNode",
"//ComprehensionNode//AttributeNode[@attribute='items']")
@cython.test_fail_if_path_exists("//ComprehensionNode//CMethodSelfCloneNode")
def test_items(self):
"""
>>> MyDict2(a=1, b=2).test_items()
[('a', 1), ('b', 2)]
"""
l = [ (key, value) for key, value in self.items() ]
l.sort()
return l
def test_values(self):
"""
>>> MyDict2(a=1, b=2).test_values()
[1, 2]
"""
l = [ v for v in self.values() ]
l.sort()
return l
@cython.final
cdef class MyDict2Final(MyDict):
@cython.test_assert_path_exists("//ComprehensionNode//CMethodSelfCloneNode")
def test_items(self):
"""
>>> MyDict2Final(a=1, b=2).test_items()
[('a', 1), ('b', 2)]
"""
l = [ (key, value) for key, value in self.items() ]
l.sort()
return l
def test_values(self):
"""
>>> MyDict2Final(a=1, b=2).test_values()
[1, 2]
"""
l = [ v for v in self.values() ]
l.sort()
return l
@cython.final
cdef class MyDictOverride(dict):
def items(self):
return [(1,2), (3,4)]
@cython.test_assert_path_exists("//ComprehensionNode//AttributeNode",
"//ComprehensionNode//AttributeNode[@attribute='items']")
@cython.test_fail_if_path_exists("//ComprehensionNode//CMethodSelfCloneNode")
def test_items(self):
"""
>>> MyDictOverride(a=1, b=2).test_items()
[(1, 2), (3, 4)]
"""
l = [ (key, value) for key, value in self.items() ]
l.sort()
return l
def test_values(self):
"""
>>> MyDictOverride(a=1, b=2).test_values()
[1, 2]
"""
l = [ v for v in self.values() ]
l.sort()
return l
@cython.final
cdef class MyDictOverride2(MyDict):
def items(self):
return [(1,2), (3,4)]
@cython.test_assert_path_exists("//ComprehensionNode//AttributeNode",
"//ComprehensionNode//AttributeNode[@attribute='items']")
@cython.test_fail_if_path_exists("//ComprehensionNode//CMethodSelfCloneNode")
def test_items(self):
"""
>>> MyDictOverride2(a=1, b=2).test_items()
[(1, 2), (3, 4)]
"""
l = [ (key, value) for key, value in self.items() ]
l.sort()
return l
def test_values(self):
"""
>>> MyDictOverride2(a=1, b=2).test_values()
[1, 2]
"""
l = [ v for v in self.values() ]
l.sort()
return l