#include "../util.h" #pragma GCC diagnostic ignored "-Wshadow" #include #include void stress_test() { ll queries = 0; for (int tries = 0; tries < 2'000; tries++) { int n = Random::integer(1, 30)*1000; int m = Random::integer(1, 30); persistentArray got(m); vector cur(m); vector>> expected; for (int i = 0; i < n; i++) { int op = Random::integer(0, 20); if (op <= 10) { int j = Random::integer(0, m); double x = Random::real(-1'000, 1'000); auto t = got.set(j, x); if (!expected.empty() && t <= expected.rbegin()->first) cerr << "error: time travel" << FAIL; cur[j] = x; expected.emplace_back(t, cur); } else if (op <= 16) { if (ssize(expected) < 1) continue; int j = Random::integer(0, ssize(expected)); for (int k = 0; k < m; k++) { if (got.get(k, expected[j].first) != expected[j].second[k]) cerr << "got: " << got.get(k, expected[j].first) << ", expected: " << expected[j].second[k] << FAIL; } } else { if (ssize(expected) < 1) continue; int j = Random::integer(0, ssize(expected)); got.reset(expected[j].first); expected.resize(j + 1); cur = expected.back().second; } } queries += n; } cerr << "tested random queries: " << queries << endl; } int main() { stress_test(); }