+static int todd(dstr *v)
+{
+ mp *a = *(mp **)v[0].buf;
+ size_t rs = *(uint32 *)v[1].buf;
+ mp *rt = *(mp **)v[2].buf;
+ int ok = 1;
+ mp *t;
+ size_t s;
+ t = mp_odd(MP_NEW, a, &s);
+ if (s != rs || !MP_EQ(t, rt)) {
+ ok = 0;
+ fprintf(stderr, "\n*** odd failed");
+ fputs("\n*** a = ", stderr); mp_writefile(a, stderr, 10);
+ fprintf(stderr, "\n*** s = %lu", (unsigned long)s);
+ fputs("\n*** t = ", stderr); mp_writefile(t, stderr, 10);
+ fprintf(stderr, "\n*** rs = %lu", (unsigned long)rs);
+ fputs("\n*** rt = ", stderr); mp_writefile(rt, stderr, 10);
+ fputc('\n', stderr);
+ }
+ mp_drop(a);
+ mp_drop(rt);
+ mp_drop(t);
+ return (ok);
+}
+