Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Xavier Thompson
cython
Commits
7677b120
Commit
7677b120
authored
Dec 29, 2020
by
Xavier Thompson
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add unit tests for 'consume' operations
parent
30f17717
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
663 additions
and
0 deletions
+663
-0
tests/run/cypclass_consume.pyx
tests/run/cypclass_consume.pyx
+517
-0
tests/run/cypclass_consume_refcount.pyx
tests/run/cypclass_consume_refcount.pyx
+146
-0
No files found.
tests/run/cypclass_consume.pyx
0 → 100644
View file @
7677b120
# mode: run
# tag: cpp, cpp11, pthread
# cython: experimental_cpp_class_def=True, language_level=2
from
libcythonplus.dict
cimport
cypdict
from
libcythonplus.list
cimport
cyplist
from
libcythonplus.set
cimport
cypset
cdef
cypclass
Leaf
activable
:
int
value
def
test_consume_isolated_leaf
():
"""
>>> test_consume_isolated_leaf()
0
"""
try
:
l
=
consume
Leaf
()
return
0
except
TypeError
as
e
:
print
(
e
)
return
-
1
def
test_consume_isolated_named_leaf
():
"""
>>> test_consume_isolated_named_leaf()
0
"""
leaf
=
Leaf
()
try
:
l
=
consume
leaf
if
leaf
is
not
NULL
:
return
-
1
return
0
except
TypeError
as
e
:
print
(
e
)
return
-
2
def
test_consume_aliased_leaf
():
"""
>>> test_consume_aliased_leaf()
'consume' operand is not isolated
0
"""
leaf
=
Leaf
()
leaf2
=
leaf
try
:
l
=
consume
leaf
return
-
1
except
TypeError
as
e
:
print
(
e
)
return
0
def
test_nogil_consume_isolated_leaf
():
"""
>>> test_nogil_consume_isolated_leaf()
0
"""
try
:
with
nogil
:
l
=
consume
Leaf
()
return
0
except
TypeError
as
e
:
print
(
e
)
return
-
1
def
test_nogil_consume_aliased_leaf
():
"""
>>> test_nogil_consume_aliased_leaf()
'consume' operand is not isolated
0
"""
leaf
=
Leaf
()
leaf2
=
leaf
try
:
with
nogil
:
l
=
consume
leaf
return
-
1
except
TypeError
as
e
:
print
(
e
)
return
0
cdef
cypclass
Field
:
Field
foo
(
self
,
Field
other
):
return
other
cdef
cypclass
Origin
:
Field
field
__init__
(
self
):
self
.
field
=
Field
()
def
test_consume_isolated_origin
():
"""
>>> test_consume_isolated_origin()
0
"""
try
:
o
=
consume
Origin
()
return
0
except
TypeError
as
e
:
print
(
e
)
return
-
1
def
test_consume_origin_with_aliased_field
():
"""
>>> test_consume_origin_with_aliased_field()
'consume' operand is not isolated
0
"""
origin
=
Origin
()
field
=
origin
.
field
try
:
o
=
consume
origin
return
-
1
except
TypeError
as
e
:
print
(
e
)
return
0
def
test_consume_field
():
"""
>>> test_consume_field()
0
"""
origin
=
Origin
()
try
:
f
=
consume
origin
.
field
if
origin
.
field
is
not
NULL
:
return
-
1
return
0
except
TypeError
as
e
:
print
(
e
)
return
-
2
def
test_consume_field_from_temporary_origin
():
"""
>>> test_consume_field_from_temporary_origin()
0
"""
try
:
f
=
consume
Origin
().
field
return
0
except
TypeError
as
e
:
print
(
e
)
return
-
1
def
test_consume_aliased_field
():
"""
>>> test_consume_aliased_field()
'consume' operand is not isolated
0
"""
origin
=
Origin
()
field
=
origin
.
field
try
:
f
=
consume
origin
.
field
return
-
1
except
TypeError
as
e
:
print
(
e
)
return
0
cdef
cypclass
DoubleOrigin
(
Origin
):
Field
field2
__init__
(
self
):
self
.
field2
=
self
.
field
=
Field
()
def
test_consume_isolated_double_origin
():
"""
>>> test_consume_isolated_double_origin()
0
"""
try
:
o
=
consume
DoubleOrigin
()
return
0
except
TypeError
as
e
:
print
(
e
)
return
-
1
def
test_consume_double_origin_with_aliased_field
():
"""
>>> test_consume_double_origin_with_aliased_field()
'consume' operand is not isolated
0
"""
origin
=
DoubleOrigin
()
field
=
origin
.
field
try
:
o
=
consume
origin
return
-
1
except
TypeError
as
e
:
print
(
e
)
return
0
def
test_consume_field_from_double_origin
():
"""
>>> test_consume_field_from_double_origin()
'consume' operand is not isolated
0
"""
try
:
f
=
consume
DoubleOrigin
().
field
return
-
1
except
TypeError
as
e
:
print
(
e
)
return
0
cdef
cypclass
Cycle
:
Cycle
field
__init__
(
self
):
self
.
field
=
self
def
test_consume_isolated_cycle
():
"""
>>> test_consume_isolated_cycle()
0
"""
try
:
c
=
consume
Cycle
()
return
0
except
TypeError
as
e
:
print
(
e
)
return
-
1
cdef
iso
Leaf
consume_arg
(
Leaf
arg
)
except
NULL
:
return
consume
arg
def
test_consume_isolated_arg
():
"""
>>> test_consume_isolated_arg()
0
"""
try
:
l
=
consume_arg
(
Leaf
())
return
0
except
TypeError
as
e
:
print
(
e
)
return
-
1
def
test_consume_aliased_arg
():
"""
>>> test_consume_aliased_arg()
'consume' operand is not isolated
0
"""
leaf
=
Leaf
()
try
:
l
=
consume_arg
(
leaf
)
return
-
1
except
TypeError
as
e
:
print
(
e
)
return
0
def
test_consume_isolated_leaf_list
():
"""
>>> test_consume_isolated_leaf_list()
0
"""
leaflist
=
cyplist
[
Leaf
]()
for
i
in
range
(
5
):
leaflist
.
append
(
Leaf
())
try
:
l
=
consume
leaflist
return
0
except
TypeError
as
e
:
print
(
e
)
return
-
1
def
test_consume_leaf_list_with_aliased_element
():
"""
>>> test_consume_leaf_list_with_aliased_element()
'consume' operand is not isolated
0
"""
leaflist
=
cyplist
[
Leaf
]()
for
i
in
range
(
5
):
leaflist
.
append
(
Leaf
())
leaf
=
leaflist
[
0
]
try
:
l
=
consume
leaflist
return
-
1
except
TypeError
as
e
:
print
(
e
)
return
0
def
test_consume_isolated_leaf_set
():
"""
>>> test_consume_isolated_leaf_set()
0
"""
leafset
=
cypset
[
Leaf
]()
for
i
in
range
(
5
):
leafset
.
add
(
Leaf
())
try
:
s
=
consume
leafset
return
0
except
TypeError
as
e
:
print
(
e
)
return
-
1
def
test_consume_leaf_set_with_aliased_element
():
"""
>>> test_consume_leaf_set_with_aliased_element()
'consume' operand is not isolated
0
"""
leafset
=
cypset
[
Leaf
]()
for
i
in
range
(
4
):
leafset
.
add
(
Leaf
())
leaf
=
Leaf
()
leafset
.
add
(
leaf
)
try
:
s
=
consume
leafset
return
-
1
except
TypeError
as
e
:
print
(
e
)
return
0
def
test_consume_isolated_leaf_dict
():
"""
>>> test_consume_isolated_leaf_set()
0
"""
leafdict
=
cypdict
[
Leaf
,
Leaf
]()
for
i
in
range
(
5
):
leafdict
[
Leaf
()]
=
Leaf
()
try
:
d
=
consume
leafdict
return
0
except
TypeError
as
e
:
print
(
e
)
return
-
1
def
test_consume_leaf_dict_with_aliased_key
():
"""
>>> test_consume_leaf_dict_with_aliased_key()
'consume' operand is not isolated
0
"""
leafdict
=
cypdict
[
Leaf
,
Leaf
]()
for
i
in
range
(
5
):
leafdict
[
Leaf
()]
=
Leaf
()
leaf
=
Leaf
()
leafdict
[
leaf
]
=
Leaf
()
try
:
d
=
consume
leafdict
return
-
1
except
TypeError
as
e
:
print
(
e
)
return
0
def
test_consume_leaf_dict_with_aliased_value
():
"""
>>> test_consume_leaf_dict_with_aliased_value()
'consume' operand is not isolated
0
"""
leafdict
=
cypdict
[
Leaf
,
Leaf
]()
for
i
in
range
(
5
):
leafdict
[
Leaf
()]
=
Leaf
()
leaf
=
Leaf
()
leafdict
[
Leaf
()]
=
leaf
try
:
d
=
consume
leafdict
return
-
1
except
TypeError
as
e
:
print
(
e
)
return
0
def
test_consume_isolated_nested_container
():
"""
>>> test_consume_isolated_nested_container()
0
"""
nestedlist
=
cyplist
[
cyplist
[
Leaf
]]()
for
i
in
range
(
5
):
innerlist
=
cyplist
[
Leaf
]()
for
i
in
range
(
5
):
innerlist
.
append
(
Leaf
())
nestedlist
.
append
(
innerlist
)
del
innerlist
try
:
l
=
consume
nestedlist
return
0
except
TypeError
as
e
:
print
(
e
)
return
-
1
def
test_consume_nested_container_with_aliased_leaf
():
"""
>>> test_consume_nested_container_with_aliased_leaf()
'consume' operand is not isolated
0
"""
nestedlist
=
cyplist
[
cyplist
[
Leaf
]]()
for
i
in
range
(
5
):
innerlist
=
cyplist
[
Leaf
]()
for
i
in
range
(
5
):
innerlist
.
append
(
Leaf
())
nestedlist
.
append
(
innerlist
)
leaf
=
nestedlist
[
0
][
0
]
try
:
l
=
consume
nestedlist
return
-
1
except
TypeError
as
e
:
print
(
e
)
return
0
def
test_consume_nested_container_with_aliased_list
():
"""
>>> test_consume_nested_container_with_aliased_list()
'consume' operand is not isolated
0
"""
nestedlist
=
cyplist
[
cyplist
[
Leaf
]]()
for
i
in
range
(
5
):
innerlist
=
cyplist
[
Leaf
]()
for
i
in
range
(
5
):
innerlist
.
append
(
Leaf
())
nestedlist
.
append
(
innerlist
)
leaflist
=
nestedlist
[
0
]
try
:
l
=
consume
nestedlist
return
-
1
except
TypeError
as
e
:
print
(
e
)
return
0
cdef
cypclass
Template
[
T
]:
T
field
def
test_consume_isolated_template
():
"""
>>> test_consume_isolated_template()
0
"""
template
=
Template
[
Leaf
]()
template
.
field
=
Leaf
()
try
:
t
=
consume
template
return
0
except
TypeError
as
e
:
print
(
e
)
return
-
1
def
test_consume_template_with_aliased_field
():
"""
>>> test_consume_template_with_aliased_field()
'consume' operand is not isolated
0
"""
template
=
Template
[
Leaf
]()
leaf
=
Leaf
()
template
.
field
=
leaf
try
:
t
=
consume
template
return
-
1
except
TypeError
as
e
:
print
(
e
)
return
0
def
test_consume_template_with_aliased_locked_field
():
"""
>>> test_consume_template_with_aliased_locked_field()
0
"""
template
=
<
Template
[
locked
Leaf
]
>
new
Template
[
locked
Leaf
]()
leaf
=
<
locked
Leaf
>
consume
Leaf
()
template
.
field
=
leaf
try
:
t
=
consume
template
return
0
except
TypeError
as
e
:
print
(
e
)
return
-
1
def
test_consume_template_with_aliased_active_field
():
"""
>>> test_consume_template_with_aliased_active_field()
0
"""
template
=
<
Template
[
active
Leaf
]
>
new
Template
[
active
Leaf
]()
leaf
=
activate
(
consume
Leaf
())
template
.
field
=
leaf
try
:
t
=
consume
template
return
0
except
TypeError
as
e
:
print
(
e
)
return
-
1
tests/run/cypclass_consume_refcount.pyx
0 → 100644
View file @
7677b120
# mode: run
# tag: cpp, cpp11, pthread
# cython: experimental_cpp_class_def=True, language_level=2
cdef
cypclass
Refcounted
:
__dealloc__
(
self
)
with
gil
:
print
(
"Refcounted destroyed"
)
def
test_consume_name
():
"""
>>> test_consume_name()
Refcounted destroyed
0
"""
r0
=
Refcounted
()
if
Cy_GETREF
(
r0
)
!=
2
:
return
-
1
cdef
Refcounted
r1
=
consume
r0
if
r0
is
not
NULL
:
return
-
2
if
Cy_GETREF
(
r1
)
!=
2
:
return
-
3
return
0
def
test_consume_iso_name
():
"""
>>> test_consume_iso_name()
Refcounted destroyed
0
"""
cdef
iso
Refcounted
r0
=
consume
Refcounted
()
cdef
Refcounted
r1
=
consume
r0
if
r0
is
not
NULL
:
return
-
2
if
Cy_GETREF
(
r1
)
!=
2
:
return
-
3
return
0
def
test_consume_and_drop_name
():
"""
>>> test_consume_and_drop_name()
Refcounted destroyed
consumed
0
"""
r
=
Refcounted
()
if
Cy_GETREF
(
r
)
!=
2
:
return
-
1
consume
r
print
(
"consumed"
)
if
r
is
not
NULL
:
return
-
2
return
0
def
test_consume_constructed
():
"""
>>> test_consume_constructed()
Refcounted destroyed
0
"""
cdef
Refcounted
r
=
consume
Refcounted
()
if
Cy_GETREF
(
r
)
!=
2
:
return
-
1
return
0
def
test_consume_iso_constructed
():
"""
>>> test_consume_iso_constructed()
Refcounted destroyed
0
"""
cdef
Refcounted
r
=
consume
new
Refcounted
()
if
Cy_GETREF
(
r
)
!=
2
:
return
-
1
return
0
def
test_consume_and_drop_constructed
():
"""
>>> test_consume_and_drop_constructed()
Refcounted destroyed
consumed
0
"""
consume
Refcounted
()
print
(
"consumed"
)
return
0
cdef
cypclass
Origin
:
Refcounted
field
__init__
(
self
):
self
.
field
=
Refcounted
()
cdef
cypclass
OriginIso
:
iso
Refcounted
field
__init__
(
self
):
self
.
field
=
consume
Refcounted
()
def
test_consume_field
():
"""
>>> test_consume_field()
Refcounted destroyed
0
"""
cdef
Refcounted
r
=
consume
Origin
().
field
if
Cy_GETREF
(
r
)
!=
2
:
return
-
1
return
0
def
test_consume_iso_field
():
"""
>>> test_consume_iso_field()
Refcounted destroyed
0
"""
cdef
Refcounted
r
=
consume
OriginIso
().
field
if
Cy_GETREF
(
r
)
!=
2
:
return
-
1
return
0
def
test_consume_and_drop_field
():
"""
>>> test_consume_and_drop_field()
Refcounted destroyed
consumed
0
"""
consume
Origin
().
field
print
(
"consumed"
)
return
0
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment