summaryrefslogtreecommitdiff
path: root/tests/run/cpp_stl_algo_minmax_ops.pyx
diff options
context:
space:
mode:
Diffstat (limited to 'tests/run/cpp_stl_algo_minmax_ops.pyx')
-rw-r--r--tests/run/cpp_stl_algo_minmax_ops.pyx143
1 files changed, 143 insertions, 0 deletions
diff --git a/tests/run/cpp_stl_algo_minmax_ops.pyx b/tests/run/cpp_stl_algo_minmax_ops.pyx
new file mode 100644
index 000000000..1606b3889
--- /dev/null
+++ b/tests/run/cpp_stl_algo_minmax_ops.pyx
@@ -0,0 +1,143 @@
+# mode: run
+# tag: cpp, werror, cpp17, cppexecpolicies
+
+from cython.operator cimport dereference as deref
+
+from libcpp cimport bool
+from libcpp.algorithm cimport (min_element, max_element, minmax, minmax_element,
+ clamp)
+from libcpp.vector cimport vector
+from libcpp.pair cimport pair
+from libcpp.execution cimport seq
+
+
+cdef bool less(int a, int b):
+ return a < b
+
+def test_min_element(vector[int] v):
+ """
+ Test min_element.
+
+ >>> test_min_element([0, 1, 2, 3, 4, 5])
+ 0
+ """
+ cdef vector[int].iterator it = min_element(v.begin(), v.end())
+ return deref(it)
+
+def test_min_element_with_pred(vector[int] v):
+ """
+ Test min_element with binary predicate.
+
+ >>> test_min_element_with_pred([0, 1, 2, 3, 4, 5])
+ 0
+ """
+ cdef vector[int].iterator it = min_element(v.begin(), v.end(), less)
+ return deref(it)
+
+def test_min_element_with_exec(vector[int] v):
+ """
+ Test min_element with execution policy.
+
+ >>> test_min_element_with_exec([0, 1, 2, 3, 4, 5])
+ 0
+ """
+ cdef vector[int].iterator it = min_element(seq, v.begin(), v.end())
+ return deref(it)
+
+def test_max_element(vector[int] v):
+ """
+ Test max_element.
+
+ >>> test_max_element([0, 1, 2, 3, 4, 5])
+ 5
+ """
+ cdef vector[int].iterator it = max_element(v.begin(), v.end())
+ return deref(it)
+
+def test_max_element_with_pred(vector[int] v):
+ """
+ Test max_element with binary predicate.
+
+ >>> test_max_element_with_pred([0, 1, 2, 3, 4, 5])
+ 5
+ """
+ cdef vector[int].iterator it = max_element(v.begin(), v.end(), less)
+ return deref(it)
+
+def test_max_element_with_exec(vector[int] v):
+ """
+ Test max_element with execution policy.
+
+ >>> test_max_element_with_exec([0, 1, 2, 3, 4, 5])
+ 5
+ """
+ cdef vector[int].iterator it = max_element(seq, v.begin(), v.end())
+ return deref(it)
+
+def test_minmax(int a, int b):
+ """
+ Test minmax.
+
+ >>> test_minmax(10, 20)
+ [10, 20]
+ """
+ cdef pair[int, int] p = minmax(a, b)
+ return [p.first, p.second]
+
+def test_minmax_with_pred(int a, int b):
+ """
+ Test minmax with binary predicate.
+
+ >>> test_minmax_with_pred(10, 20)
+ [10, 20]
+ """
+ cdef pair[int, int] p = minmax(a, b, less)
+ return [p.first, p.second]
+
+def test_minmax_element(vector[int] v):
+ """
+ Test minmax_element.
+
+ >>> test_minmax_element([0, 1, 2, 3, 4, 5])
+ [0, 5]
+ """
+ cdef pair[vector[int].iterator, vector[int].iterator] p = minmax_element(v.begin(), v.end())
+ return [deref(p.first), deref(p.second)]
+
+def test_minmax_element_with_pred(vector[int] v):
+ """
+ Test minmax_element with binary predicate.
+
+ >>> test_minmax_element_with_pred([0, 1, 2, 3, 4, 5])
+ [0, 5]
+ """
+ cdef pair[vector[int].iterator, vector[int].iterator] p = minmax_element(v.begin(), v.end(), less)
+ return [deref(p.first), deref(p.second)]
+
+def test_minmax_element_with_exec(vector[int] v):
+ """
+ Test minmax_element with execution policy.
+
+ >>> test_minmax_element_with_exec([0, 1, 2, 3, 4, 5])
+ [0, 5]
+ """
+ cdef pair[vector[int].iterator, vector[int].iterator] p = minmax_element(seq, v.begin(), v.end())
+ return [deref(p.first), deref(p.second)]
+
+def test_clamp(int v, int lo, int hi):
+ """
+ Test clamp.
+
+ >>> test_clamp(-129, -128, 255)
+ -128
+ """
+ return clamp(v, lo, hi)
+
+def test_clamp_with_pred(int v, int lo, int hi):
+ """
+ Test clamp with binary predicate
+
+ >>> test_clamp_with_pred(-129, -128, 255)
+ -128
+ """
+ return clamp(v, lo, hi, less) \ No newline at end of file