summaryrefslogtreecommitdiff
path: root/test/other
diff options
context:
space:
mode:
authormzuenni <michi.zuendorf@gmail.com>2024-08-30 15:04:20 +0200
committermzuenni <michi.zuendorf@gmail.com>2024-08-30 15:04:20 +0200
commitac2d9ad3f2c88bc12420fc439e8d0b4775a11169 (patch)
tree256c13ae0a321e3a705bde52ee679131b9f864d5 /test/other
parent00b01a954304e50904de97b25639c535e16f259e (diff)
various small improvements
Diffstat (limited to 'test/other')
-rw-r--r--test/other/recover.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/test/other/recover.cpp b/test/other/recover.cpp
new file mode 100644
index 0000000..fa491e8
--- /dev/null
+++ b/test/other/recover.cpp
@@ -0,0 +1,34 @@
+#include "../util.h"
+#include <other/recover.cpp>
+#include <math/shortModInv.cpp>
+
+void stress_test() {
+ ll queries = 0;
+ timer t;
+ for (int i = 0; i < 1000; i++) {
+ ll p = Random::prime<ll>(10000);
+ for (ll j = 0; 2*j*j < p; j++) {
+ for (ll b = 1; 2*b*b < p; b++) {
+ if (gcd(j, b) != 1) continue;
+ for (ll a : {-j, j}) {
+ ll c = a * multInv(b, p);
+
+ t.start();
+ auto [x, y] = recover(c, p);
+ t.stop();
+
+ if (a != x || b != y) cerr << "got: " << x << "/" << y << ", expected: " << a << "/" << b << FAIL;
+ queries++;
+ }
+ }
+ }
+
+ }
+ cerr << "tested random queries: " << queries << endl;
+ if (t.time > 500) cerr << "too slow: " << t.time << FAIL;
+ cerr << "tested performance: " << t.time << "ms" << endl;
+}
+
+int main() {
+ stress_test();
+}