|
|
- #include "gp/containers/dynarray.hpp"
- #include "gp/containers/vector.hpp"
- #include "gp/algorithms/sort.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 dynarray_test : public test_scaffold {
- uint32_t seed;
-
- dynarray_test() {
- name = __FILE__ ":1_seed";
- seed = std::random_device{}();
- name += std::to_string(seed);
- }
-
- virtual int run() {
- using val = gp::dynarray<int, 100>;
- cheap_rand setter(seed);
-
- std::unique_ptr<gp::array<char, 4096*4096>> store = std::make_unique<gp::array<char, 4096*4096>>();
- gp::buddy alloc{&*store->begin(), store->size()};
-
- gp::vector<val> vals{alloc};
- std::uniform_int_distribution<int> dist(0,99);
- for(int i = 0; i < 1000; i++) {
- val insert{};
- int max = dist(setter);
- for(int b = 0; b < max; b++) {
- insert.emplace_back(b);
- }
- vals.emplace_back(insert);
- }
-
- for(int i = 0; i < vals.size(); i++) {
- for(int j = i+1; j < vals.size(); j++) {
- if(!(vals[i] != vals[j])) {
- if(vals[i] == vals[j]) {
- vals.remove(vals.begin()+j);
- j--;
- }
- }
- }
- }
-
- gp::sort(vals.begin(), vals.end(), [](const val& a, const val& b){
- return a.size() < b.size();
- });
-
- return vals.size() > 100;
- }
- };
-
- append_test dummy_afdglys543(new dynarray_test{});
-
- struct dynarray2_test : public test_scaffold {
- uint32_t seed;
-
- dynarray2_test() {
- name = __FILE__ ":2_seed";
- seed = std::random_device{}();
- name += std::to_string(seed);
- }
-
- virtual int run() {
- using val = gp::dynarray<int, 100>;
- cheap_rand setter(seed);
-
- std::unique_ptr<gp::array<char, 4096*4096>> store = std::make_unique<gp::array<char, 4096*4096>>();
- gp::buddy alloc{&*store->begin(), store->size()};
-
- gp::vector<val> vals{alloc};
- std::uniform_int_distribution<int> dist(0,49);
- std::uniform_int_distribution<int> coin(false,true);
- bool happened = false;
- for(int i = 0; i < 1000; i++) {
- val a;
- if(coin(setter)) {
- a.emplace_back(dist(setter));
- }
- a.emplace_back(dist(setter));
- for(int j = 0; j < 1000; j++) {
- val b;
- if(coin(setter)) {
- b.emplace_back(dist(setter));
- }
- b.emplace_back(dist(setter));
- if(a == b) {
- if(! (a != b)) {
- happened = true;
- }
- }
- }
- }
-
- return !happened;
- }
- };
-
- append_test dummy_5dfqlys543(new dynarray2_test{});
|