diff options
Diffstat (limited to 'tests/run/cpp_stl_algo_partitioning_ops.pyx')
-rw-r--r-- | tests/run/cpp_stl_algo_partitioning_ops.pyx | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/tests/run/cpp_stl_algo_partitioning_ops.pyx b/tests/run/cpp_stl_algo_partitioning_ops.pyx new file mode 100644 index 000000000..1de80d84b --- /dev/null +++ b/tests/run/cpp_stl_algo_partitioning_ops.pyx @@ -0,0 +1,90 @@ +# mode: run +# tag: cpp, werror, cpp11, no-cpp-locals + +from __future__ import print_function + +from libcpp cimport bool +from libcpp.algorithm cimport is_partitioned, partition, partition_copy, stable_partition, partition_point +from libcpp.algorithm cimport for_each, copy, reverse +from libcpp.iterator cimport back_inserter +from libcpp.vector cimport vector + + +cdef bool is_even(int i): + return i % 2 == 0 + + +def test_is_partitioned(): + """ + >>> test_is_partitioned() + False + True + False + """ + cdef vector[int] values = range(10) + print(is_partitioned(values.begin(), values.end(), is_even)) + + partition(values.begin(), values.end(), &is_even) + print(is_partitioned(values.begin(), values.end(), is_even)) + + reverse(values.begin(), values.end()) + print(is_partitioned(values.begin(), values.end(), is_even)) + + +cdef int print_int(int v) except -1: + print(v, end=" ") + + +def print_partition(vector[int] values): + """ + Test partition. + + >> print_partition(range(10)) + 0 8 2 6 4 * 5 3 7 1 9 + """ + it = partition(values.begin(), values.end(), &is_even) + for_each(values.begin(), it, &print_int) + print("*", end=" ") + for_each(it, values.end(), &print_int) + print() + + +def partition_ints_even(vector[int] values): + """ + Test partition_copy. + + >>> partition_ints_even(range(10)) + ([0, 2, 4, 6, 8], [1, 3, 5, 7, 9]) + """ + cdef vector[int] even_values, odd_values + partition_copy(values.begin(), values.end(), back_inserter(even_values), back_inserter(odd_values), &is_even) + return even_values, odd_values + + +cdef bool is_positive(int v): + return v > 0 + + +def partition_ints_positive(vector[int] values): + """ + Test stable_partition. + + >>> partition_ints_positive([0, 0, 3, 0, 2, 4, 5, 0, 7]) + [3, 2, 4, 5, 7, 0, 0, 0, 0] + """ + stable_partition(values.begin(), values.end(), &is_positive) + return values + + +def partition_point_ints_even(vector[int] values): + """ + Test partition_point. + + >>> partition_point_ints_even([0, 8, 2, 6, 4, 5, 3, 7, 1, 9]) + ([0, 8, 2, 6, 4], [5, 3, 7, 1, 9]) + """ + it = partition_point(values.begin(), values.end(), is_even) + cdef vector[int] even_values, odd_values + copy(values.begin(), it, back_inserter(even_values)) + copy(it, values.end(), back_inserter(odd_values)) + return even_values, odd_values |