| @ -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{}); | |||||