summaryrefslogtreecommitdiff
path: root/tests/run/cpp_stl_algo_sample.pyx
diff options
context:
space:
mode:
Diffstat (limited to 'tests/run/cpp_stl_algo_sample.pyx')
-rw-r--r--tests/run/cpp_stl_algo_sample.pyx41
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