X-Git-Url: https://git.distorted.org.uk/~mdw/catacomb/blobdiff_plain/e2f967aeff8b2c0b42d0b0a209f47543d61e48b1..a938be516ed8fd8313ff3d061dd4b0f2d9acfa0e:/math/pgen.c diff --git a/math/pgen.c b/math/pgen.c index f10d585f..f10c163e 100644 --- a/math/pgen.c +++ b/math/pgen.c @@ -118,6 +118,7 @@ int pgen_jump(int rq, pgen_event *ev, void *p) int pgen_test(int rq, pgen_event *ev, void *p) { rabin *r = p; + mp *a = MP_NEW; int rc = PGEN_ABORT; switch (rq) { @@ -126,13 +127,8 @@ int pgen_test(int rq, pgen_event *ev, void *p) rc = PGEN_TRY; break; case PGEN_TRY: - if (!ev->tests) - rc = rabin_rtest(r, MP_TWO); - else { - mp *a = mprand_range(MP_NEW, ev->m, ev->r, 0); - rc = rabin_rtest(r, a); - mp_drop(a); - } + a = mprand_range(a, ev->m, ev->r, 0); + rc = rabin_rtest(r, a); break; case PGEN_DONE: rabin_destroy(r); @@ -140,6 +136,7 @@ int pgen_test(int rq, pgen_event *ev, void *p) break; } + mp_drop(a); return (rc); } @@ -283,7 +280,7 @@ mp *pgen(const char *name, mp *d, mp *m, pgen_proc *event, void *ectx, rc = PGEN_ABORT; if (!(act & A_DONE)) { act |= A_ENDSTEP | A_DONE; - if (p == P_TEST) + if (p == P_TEST && rq != PGEN_BEGIN) act |= A_ENDTEST; } }