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
Gwenaël Samain
cython
Commits
1692f0e5
Commit
1692f0e5
authored
9 years ago
by
Stefan Behnel
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
merge two test files that both test the min-max optimisation
parent
64c51006
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
207 additions
and
200 deletions
+207
-200
tests/run/builtin_min_max.pyx
tests/run/builtin_min_max.pyx
+207
-0
tests/run/min_max_optimization.pyx
tests/run/min_max_optimization.pyx
+0
-200
No files found.
tests/run/builtin_min_max.pyx
View file @
1692f0e5
# mode: run
# tag: optimisation
cimport
cython
class
loud_list
(
list
):
def
__len__
(
self
):
print
"calling __len__"
return
super
(
loud_list
,
self
).
__len__
()
# min()
@
cython
.
test_assert_path_exists
(
"//CondExprNode"
)
...
...
@@ -20,6 +29,7 @@ def min3(a,b,c):
"""
return
min
(
a
,
b
,
c
)
@
cython
.
test_assert_path_exists
(
"//CondExprNode"
)
@
cython
.
test_fail_if_path_exists
(
"//SimpleCallNode"
)
def
min3_list
(
a
,
b
,
c
):
...
...
@@ -37,6 +47,7 @@ def min3_list(a,b,c):
"""
return
min
([
a
,
b
,
c
])
@
cython
.
test_assert_path_exists
(
"//CondExprNode"
)
@
cython
.
test_fail_if_path_exists
(
"//SimpleCallNode"
)
def
min3_tuple
(
a
,
b
,
c
):
...
...
@@ -54,6 +65,7 @@ def min3_tuple(a,b,c):
"""
return
min
((
a
,
b
,
c
))
@
cython
.
test_assert_path_exists
(
"//CondExprNode"
)
@
cython
.
test_fail_if_path_exists
(
"//SimpleCallNode"
)
def
min3_typed
(
int
a
,
int
b
,
int
c
):
...
...
@@ -71,6 +83,7 @@ def min3_typed(int a, int b, int c):
"""
return
min
(
a
,
b
,
c
)
@
cython
.
test_assert_path_exists
(
"//CondExprNode"
)
@
cython
.
test_fail_if_path_exists
(
"//SimpleCallNode"
)
def
literal_min3
():
...
...
@@ -80,6 +93,86 @@ def literal_min3():
"""
return
min
(
1
,
2
,
3
),
min
(
2
,
1
,
3
),
min
(
2
,
3
,
1
),
min
(
3
,
1
,
2
),
min
(
3
,
2
,
1
)
@
cython
.
test_assert_path_exists
(
'//PrintStatNode//CondExprNode'
)
@
cython
.
test_fail_if_path_exists
(
'//PrintStatNode//SimpleCallNode//CoerceToPyTypeNode'
,
'//PrintStatNode//SimpleCallNode//ConstNode'
)
def
test_min2
():
"""
>>> test_min2()
1
1
1
1
1
calling __len__
1
calling __len__
1
"""
cdef
int
my_int
=
1
cdef
object
my_pyint
=
2
cdef
object
my_list
=
loud_list
([
1
,
2
,
3
])
print
min
(
1
,
2
)
print
min
(
2
,
my_int
)
print
min
(
my_int
,
2
)
print
min
(
my_int
,
my_pyint
)
print
min
(
my_pyint
,
my_int
)
print
min
(
my_int
,
len
(
my_list
))
print
min
(
len
(
my_list
),
my_int
)
@
cython
.
test_assert_path_exists
(
'//PrintStatNode//CondExprNode'
)
@
cython
.
test_fail_if_path_exists
(
'//PrintStatNode//SimpleCallNode//CoerceToPyTypeNode'
,
'//PrintStatNode//SimpleCallNode//ConstNode'
)
def
test_min3
():
"""
>>> test_min3()
calling __len__
1
calling __len__
calling __len__
2
"""
cdef
int
my_int
=
1
cdef
object
my_pyint
=
2
cdef
object
my_list
=
loud_list
([
1
,
2
,
3
])
print
min
(
my_int
,
my_pyint
,
len
(
my_list
))
print
min
(
my_pyint
,
my_list
.
__len__
(),
len
(
my_list
))
@
cython
.
test_assert_path_exists
(
'//PrintStatNode//CondExprNode'
)
@
cython
.
test_fail_if_path_exists
(
'//PrintStatNode//SimpleCallNode//CoerceToPyTypeNode'
,
'//PrintStatNode//SimpleCallNode//ConstNode'
)
def
test_minN
():
"""
>>> test_minN()
calling __len__
0
calling __len__
0
calling __len__
0
"""
cdef
int
my_int
=
1
cdef
object
my_pyint
=
2
cdef
object
my_list
=
loud_list
([
1
,
2
,
3
])
print
min
(
my_int
,
2
,
my_int
,
0
,
my_pyint
,
my_int
,
len
(
my_list
))
print
min
(
my_int
,
my_int
,
0
,
my_pyint
,
my_int
,
len
(
my_list
))
print
min
(
my_int
,
my_int
,
2
,
my_int
,
0
,
my_pyint
,
my_int
,
len
(
my_list
))
# max()
@
cython
.
test_assert_path_exists
(
"//CondExprNode"
)
...
...
@@ -99,6 +192,7 @@ def max3(a,b,c):
"""
return
max
(
a
,
b
,
c
)
@
cython
.
test_assert_path_exists
(
"//CondExprNode"
)
@
cython
.
test_fail_if_path_exists
(
"//SimpleCallNode"
)
def
max3_typed
(
int
a
,
int
b
,
int
c
):
...
...
@@ -116,6 +210,7 @@ def max3_typed(int a, int b, int c):
"""
return
max
(
a
,
b
,
c
)
@
cython
.
test_assert_path_exists
(
"//CondExprNode"
)
@
cython
.
test_fail_if_path_exists
(
"//SimpleCallNode"
)
def
literal_max3
():
...
...
@@ -124,3 +219,115 @@ def literal_max3():
(3, 3, 3, 3, 3)
"""
return
max
(
1
,
2
,
3
),
max
(
2
,
1
,
3
),
max
(
2
,
3
,
1
),
max
(
3
,
1
,
2
),
max
(
3
,
2
,
1
)
def
max1
(
x
):
"""
>>> max1([1, 2, 3])
3
>>> max1([2])
2
"""
return
max
(
x
)
@
cython
.
test_assert_path_exists
(
'//PrintStatNode//CondExprNode'
)
@
cython
.
test_fail_if_path_exists
(
'//PrintStatNode//SimpleCallNode//CoerceToPyTypeNode'
,
'//PrintStatNode//SimpleCallNode//ConstNode'
)
def
test_max2
():
"""
>>> test_max2()
2
2
2
2
2
calling __len__
3
calling __len__
3
"""
cdef
int
my_int
=
1
cdef
object
my_pyint
=
2
cdef
object
my_list
=
loud_list
([
1
,
2
,
3
])
print
max
(
1
,
2
)
print
max
(
2
,
my_int
)
print
max
(
my_int
,
2
)
print
max
(
my_int
,
my_pyint
)
print
max
(
my_pyint
,
my_int
)
print
max
(
my_int
,
len
(
my_list
))
print
max
(
len
(
my_list
),
my_int
)
@
cython
.
test_assert_path_exists
(
'//PrintStatNode//CondExprNode'
)
@
cython
.
test_fail_if_path_exists
(
'//PrintStatNode//SimpleCallNode//CoerceToPyTypeNode'
,
'//PrintStatNode//SimpleCallNode//ConstNode'
)
def
test_max3
():
"""
>>> test_max3()
calling __len__
3
calling __len__
calling __len__
3
"""
cdef
int
my_int
=
1
cdef
object
my_pyint
=
2
cdef
object
my_list
=
loud_list
([
1
,
2
,
3
])
print
max
(
my_int
,
my_pyint
,
len
(
my_list
))
print
max
(
my_pyint
,
my_list
.
__len__
(),
len
(
my_list
))
@
cython
.
test_assert_path_exists
(
'//PrintStatNode//CondExprNode'
)
@
cython
.
test_fail_if_path_exists
(
'//PrintStatNode//SimpleCallNode//CoerceToPyTypeNode'
,
'//PrintStatNode//SimpleCallNode//ConstNode'
)
def
test_maxN
():
"""
>>> test_maxN()
calling __len__
3
calling __len__
3
calling __len__
3
"""
cdef
int
my_int
=
1
cdef
object
my_pyint
=
2
cdef
object
my_list
=
loud_list
([
1
,
2
,
3
])
print
max
(
my_int
,
2
,
my_int
,
0
,
my_pyint
,
my_int
,
len
(
my_list
))
print
max
(
my_int
,
my_int
,
0
,
my_pyint
,
my_int
,
len
(
my_list
))
print
max
(
my_int
,
my_int
,
2
,
my_int
,
0
,
my_pyint
,
my_int
,
len
(
my_list
))
'''
# ticket 772
# FIXME: signed vs. unsigned fails to safely handle intermediate results
@cython.test_assert_path_exists("//CondExprNode")
@cython.test_fail_if_path_exists("//SimpleCallNode")
def max3_typed_signed_unsigned(int a, unsigned int b, int c):
"""
>>> max3_typed_signed_unsigned(1,2,-3)
2
>>> max3_typed_signed_unsigned(-2,3,1)
3
>>> max3_typed_signed_unsigned(-2,1,-3)
1
>>> max3_typed_signed_unsigned(3,-1,2)
3
>>> max3_typed_signed_unsigned(-3,2,1)
2
"""
return max(a,b,c)
'''
This diff is collapsed.
Click to expand it.
tests/run/min_max_optimization.pyx
deleted
100644 → 0
View file @
64c51006
cimport
cython
class
loud_list
(
list
):
def
__len__
(
self
):
print
"calling __len__"
return
super
(
loud_list
,
self
).
__len__
()
# max()
def
test_max1
(
x
):
"""
>>> test_max1([1, 2, 3])
3
>>> test_max1([2])
2
"""
return
max
(
x
)
@
cython
.
test_assert_path_exists
(
'//PrintStatNode//CondExprNode'
)
@
cython
.
test_fail_if_path_exists
(
'//PrintStatNode//SimpleCallNode//CoerceToPyTypeNode'
,
'//PrintStatNode//SimpleCallNode//ConstNode'
)
def
test_max2
():
"""
>>> test_max2()
2
2
2
2
2
calling __len__
3
calling __len__
3
"""
cdef
int
my_int
=
1
cdef
object
my_pyint
=
2
cdef
object
my_list
=
loud_list
([
1
,
2
,
3
])
print
max
(
1
,
2
)
print
max
(
2
,
my_int
)
print
max
(
my_int
,
2
)
print
max
(
my_int
,
my_pyint
)
print
max
(
my_pyint
,
my_int
)
print
max
(
my_int
,
len
(
my_list
))
print
max
(
len
(
my_list
),
my_int
)
@
cython
.
test_assert_path_exists
(
'//PrintStatNode//CondExprNode'
)
@
cython
.
test_fail_if_path_exists
(
'//PrintStatNode//SimpleCallNode//CoerceToPyTypeNode'
,
'//PrintStatNode//SimpleCallNode//ConstNode'
)
def
test_max3
():
"""
>>> test_max3()
calling __len__
3
calling __len__
calling __len__
3
"""
cdef
int
my_int
=
1
cdef
object
my_pyint
=
2
cdef
object
my_list
=
loud_list
([
1
,
2
,
3
])
print
max
(
my_int
,
my_pyint
,
len
(
my_list
))
print
max
(
my_pyint
,
my_list
.
__len__
(),
len
(
my_list
))
@
cython
.
test_assert_path_exists
(
'//PrintStatNode//CondExprNode'
)
@
cython
.
test_fail_if_path_exists
(
'//PrintStatNode//SimpleCallNode//CoerceToPyTypeNode'
,
'//PrintStatNode//SimpleCallNode//ConstNode'
)
def
test_maxN
():
"""
>>> test_maxN()
calling __len__
3
calling __len__
3
calling __len__
3
"""
cdef
int
my_int
=
1
cdef
object
my_pyint
=
2
cdef
object
my_list
=
loud_list
([
1
,
2
,
3
])
print
max
(
my_int
,
2
,
my_int
,
0
,
my_pyint
,
my_int
,
len
(
my_list
))
print
max
(
my_int
,
my_int
,
0
,
my_pyint
,
my_int
,
len
(
my_list
))
print
max
(
my_int
,
my_int
,
2
,
my_int
,
0
,
my_pyint
,
my_int
,
len
(
my_list
))
# min()
@
cython
.
test_assert_path_exists
(
'//PrintStatNode//CondExprNode'
)
@
cython
.
test_fail_if_path_exists
(
'//PrintStatNode//SimpleCallNode//CoerceToPyTypeNode'
,
'//PrintStatNode//SimpleCallNode//ConstNode'
)
def
test_min2
():
"""
>>> test_min2()
1
1
1
1
1
calling __len__
1
calling __len__
1
"""
cdef
int
my_int
=
1
cdef
object
my_pyint
=
2
cdef
object
my_list
=
loud_list
([
1
,
2
,
3
])
print
min
(
1
,
2
)
print
min
(
2
,
my_int
)
print
min
(
my_int
,
2
)
print
min
(
my_int
,
my_pyint
)
print
min
(
my_pyint
,
my_int
)
print
min
(
my_int
,
len
(
my_list
))
print
min
(
len
(
my_list
),
my_int
)
@
cython
.
test_assert_path_exists
(
'//PrintStatNode//CondExprNode'
)
@
cython
.
test_fail_if_path_exists
(
'//PrintStatNode//SimpleCallNode//CoerceToPyTypeNode'
,
'//PrintStatNode//SimpleCallNode//ConstNode'
)
def
test_min3
():
"""
>>> test_min3()
calling __len__
1
calling __len__
calling __len__
2
"""
cdef
int
my_int
=
1
cdef
object
my_pyint
=
2
cdef
object
my_list
=
loud_list
([
1
,
2
,
3
])
print
min
(
my_int
,
my_pyint
,
len
(
my_list
))
print
min
(
my_pyint
,
my_list
.
__len__
(),
len
(
my_list
))
@
cython
.
test_assert_path_exists
(
'//PrintStatNode//CondExprNode'
)
@
cython
.
test_fail_if_path_exists
(
'//PrintStatNode//SimpleCallNode//CoerceToPyTypeNode'
,
'//PrintStatNode//SimpleCallNode//ConstNode'
)
def
test_minN
():
"""
>>> test_minN()
calling __len__
0
calling __len__
0
calling __len__
0
"""
cdef
int
my_int
=
1
cdef
object
my_pyint
=
2
cdef
object
my_list
=
loud_list
([
1
,
2
,
3
])
print
min
(
my_int
,
2
,
my_int
,
0
,
my_pyint
,
my_int
,
len
(
my_list
))
print
min
(
my_int
,
my_int
,
0
,
my_pyint
,
my_int
,
len
(
my_list
))
print
min
(
my_int
,
my_int
,
2
,
my_int
,
0
,
my_pyint
,
my_int
,
len
(
my_list
))
'''
# ticket 772
# FIXME: signed vs. unsigned fails to safely handle intermediate results
@cython.test_assert_path_exists("//CondExprNode")
@cython.test_fail_if_path_exists("//SimpleCallNode")
def max3_typed_signed_unsigned(int a, unsigned int b, int c):
"""
>>> max3_typed_signed_unsigned(1,2,-3)
2
>>> max3_typed_signed_unsigned(-2,3,1)
3
>>> max3_typed_signed_unsigned(-2,1,-3)
1
>>> max3_typed_signed_unsigned(3,-1,2)
3
>>> max3_typed_signed_unsigned(-3,2,1)
2
"""
return max(a,b,c)
'''
This diff is collapsed.
Click to expand it.
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