+static int modinv(dstr *v)
+{
+ int ok = 1;
+ mp *x = *(mp **)v[0].buf;
+ mp *m = *(mp **)v[1].buf;
+ mp *r = *(mp **)v[2].buf;
+
+ mp *y = mp_modinv(MP_NEW, x, m);
+ if (!MP_EQ(y, r)) {
+ fputs("\n*** mp_modinv failed", stderr);
+ fputs("\nx = ", stderr); mp_writefile(x, stderr, 10);
+ fputs("\nm = ", stderr); mp_writefile(m, stderr, 10);
+ fputs("\nexpect = ", stderr); mp_writefile(r, stderr, 10);
+ fputs("\nresult = ", stderr); mp_writefile(y, stderr, 10);
+ ok = 0;
+ }
+ MP_DROP(x); MP_DROP(m); MP_DROP(r); MP_DROP(y);
+ assert(mparena_count(MPARENA_GLOBAL) == 0);
+ return (ok);
+}
+