|
|
@ -0,0 +1,86 @@ |
|
|
|
#include "gp/containers/array.hpp"
|
|
|
|
#include "gp/containers/vector.hpp"
|
|
|
|
#include "gp/algorithms/partition.hpp"
|
|
|
|
#include "test_scaffold.h"
|
|
|
|
#include "allocator.hpp"
|
|
|
|
#include <memory>
|
|
|
|
|
|
|
|
#include <random>
|
|
|
|
#include <iostream>
|
|
|
|
#include <string>
|
|
|
|
#include <algorithm>
|
|
|
|
|
|
|
|
typedef std::mt19937_64 cheap_rand; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct partition_array_test : public test_scaffold { |
|
|
|
uint32_t seed; |
|
|
|
|
|
|
|
partition_array_test() { |
|
|
|
name = __FILE__ ":1_seed"; |
|
|
|
seed = std::random_device{}(); |
|
|
|
name += std::to_string(seed); |
|
|
|
} |
|
|
|
|
|
|
|
virtual int run() { |
|
|
|
cheap_rand setter(seed); |
|
|
|
|
|
|
|
for(int i = 0; i < 250; ++i) { |
|
|
|
gp::array<uint32_t, 200> ary; |
|
|
|
for(auto& elem : ary) { |
|
|
|
elem = setter(); |
|
|
|
} |
|
|
|
|
|
|
|
auto pivot = gp::hoare_partition(ary.begin(), ary.end(), [](const auto& v){return v % 2;}); |
|
|
|
|
|
|
|
for(auto it = ary.begin(); it != pivot;++it) { |
|
|
|
gp_config::assertion(!!(*it % 2), "partition failed"); |
|
|
|
} |
|
|
|
|
|
|
|
for(auto it = pivot; it != ary.end();++it) { |
|
|
|
gp_config::assertion(!(*it % 2), "partition failed"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return 0; |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
append_test dummy_s5f468e43(new partition_array_test{}); |
|
|
|
|
|
|
|
|
|
|
|
struct partition_array_lomuto_test : public test_scaffold { |
|
|
|
uint32_t seed; |
|
|
|
|
|
|
|
partition_array_lomuto_test() { |
|
|
|
name = __FILE__ ":2_seed"; |
|
|
|
seed = std::random_device{}(); |
|
|
|
name += std::to_string(seed); |
|
|
|
} |
|
|
|
|
|
|
|
virtual int run() { |
|
|
|
cheap_rand setter(seed); |
|
|
|
|
|
|
|
for(int i = 0; i < 250; ++i) { |
|
|
|
gp::array<uint32_t, 200> ary; |
|
|
|
for(auto& elem : ary) { |
|
|
|
elem = setter(); |
|
|
|
} |
|
|
|
|
|
|
|
auto pivot = gp::lomuto_partition(ary.begin(), ary.end(), [](const auto& v){return v % 2;}); |
|
|
|
|
|
|
|
for(auto it = ary.begin(); it != pivot;++it) { |
|
|
|
gp_config::assertion(!!(*it % 2), "partition failed"); |
|
|
|
} |
|
|
|
|
|
|
|
for(auto it = pivot; it != ary.end();++it) { |
|
|
|
gp_config::assertion(!(*it % 2), "partition failed"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return 0; |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
append_test dummy_lcvudg8e43(new partition_array_lomuto_test{}); |