return (rc);
}
+/* --- @pgen_simulbailliepswtest@ --- *
+ *
+ * Test a collection of numbers simultaneously.
+ */
+
+int pgen_simulbailliepswtest(int rq, pgen_event *ev, void *p)
+{
+ pgen_simulctx *ss = p;
+ pgen_simulprime *sp;
+ int rc = -1;
+ unsigned i;
+ rabin r;
+
+ assert(ss->n);
+ switch (rq) {
+ case PGEN_BEGIN:
+ if (ev->tests != 2) rc = PGEN_ABORT;
+ else rc = PGEN_TRY;
+ break;
+
+ case PGEN_DONE:
+ rc = PGEN_DONE;
+ break;
+
+ case PGEN_TRY:
+ switch (ev->tests) {
+ case 2:
+ for (i = 0; i < ss->n; i++) {
+ sp = &ss->v[i];
+ rabin_create(&r, sp->p.m);
+ rc = rabin_test(&r, MP_TWO);
+ rabin_destroy(&r);
+ if (rc != PGEN_PASS) break;
+ }
+ break;
+ case 1:
+ for (i = 0; i < ss->n; i++) {
+ sp = &ss->v[i];
+ rc = pgen_granfrob(sp->p.m, 0, 0);
+ if (rc != PGEN_PASS) break;
+ }
+ break;
+ default:
+ rc = PGEN_ABORT;
+ break;
+ }
+ }
+ return (rc);
+}
+
/*----- That's all, folks -------------------------------------------------*/