diff options
Diffstat (limited to 'tests/run/cpp_stl_algo_minmax_ops.pyx')
-rw-r--r-- | tests/run/cpp_stl_algo_minmax_ops.pyx | 143 |
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 |