From c88d85b0cbb066cc6a1173781eed521b2ee942c1 Mon Sep 17 00:00:00 2001 From: Ahmet Inan Date: Sat, 9 Mar 2024 20:58:12 +0100 Subject: [PATCH] added test for quick select --- tests/quick_select_test.cc | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 tests/quick_select_test.cc diff --git a/tests/quick_select_test.cc b/tests/quick_select_test.cc new file mode 100644 index 0000000..4696f9e --- /dev/null +++ b/tests/quick_select_test.cc @@ -0,0 +1,38 @@ +/* +Test for the Quick select algorithm + +Copyright 2024 Ahmet Inan +*/ + +#include +#include +#include +#include +#include +#include "quick_select.hh" + +int main() +{ + const int MAX_N = 1 << 16; + unsigned seed = 42; + if (1) { + std::random_device rd; + seed = rd(); + } + typedef std::default_random_engine generator; + typedef std::uniform_int_distribution distribution; + auto rand = std::bind(distribution(1, MAX_N), generator(seed)); + int a[MAX_N], b[MAX_N]; + for (int loop = 0; loop < 10000; ++loop) { + int size = rand(); + for (int i = 0; i < size; ++i) + a[i] = b[i] = rand(); + int k = rand() % size; + std::nth_element(a, a+k, a+size); + int v = DSP::quick_select(b, k, size); + assert(v == a[k]); + } + std::cerr << "Quick select algorithm test passed!" << std::endl; + return 0; +} +