diff options
Diffstat (limited to 'tests/run/cpp_stl_algo_sample.pyx')
-rw-r--r-- | tests/run/cpp_stl_algo_sample.pyx | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/tests/run/cpp_stl_algo_sample.pyx b/tests/run/cpp_stl_algo_sample.pyx new file mode 100644 index 000000000..4bc939049 --- /dev/null +++ b/tests/run/cpp_stl_algo_sample.pyx @@ -0,0 +1,41 @@ +# mode: run +# tag: cpp, cpp17 + +from libcpp.algorithm cimport sample +from libcpp.iterator cimport back_inserter +from libcpp.random cimport mt19937 +from libcpp.utility cimport move +from libcpp.vector cimport vector + + +def sample_multiple(population_size, int sample_size): + """ + >>> sample = sample_multiple(10, 7) + >>> len(sample), len(set(sample)) # Check sampling without replacement. + (7, 7) + """ + cdef: + vector[int] x, y + int i + mt19937 rd = mt19937(1) + + for i in range(population_size): + x.push_back(i) + sample(x.begin(), x.end(), back_inserter(y), sample_size, move(rd)) + return y + + +def sample_single(population_size): + """ + >>> 0 <= sample_single(10) < 10 + True + """ + cdef: + vector[int] x + int i + mt19937 rd = mt19937(1) + + for i in range(population_size): + x.push_back(i) + sample(x.begin(), x.end(), &i, 1, move(rd)) + return i |