cc-hash.c: New file containing hash-related code from hashsum and dsig.
[u/mdw/catacomb] / pgen.c
diff --git a/pgen.c b/pgen.c
index 86e31c1..1a2a8ac 100644 (file)
--- a/pgen.c
+++ b/pgen.c
@@ -7,7 +7,7 @@
  * (c) 1999 Straylight/Edgeware
  */
 
-/*----- Licensing notice --------------------------------------------------* 
+/*----- Licensing notice --------------------------------------------------*
  *
  * This file is part of Catacomb.
  *
  * it under the terms of the GNU Library General Public License as
  * published by the Free Software Foundation; either version 2 of the
  * License, or (at your option) any later version.
- * 
+ *
  * Catacomb is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Library General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU Library General Public
  * License along with Catacomb; if not, write to the Free
  * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
@@ -66,7 +66,7 @@ int pgen_filter(int rq, pgen_event *ev, void *p)
       rc = PGEN_ABORT;
       break;
   }
-       
+
   if (rc == PGEN_FAIL && !((f->step | f->f.m->v[0]) & 1))
     rc = pfilt_step(&f->f, 1);
   while (rc == PGEN_FAIL)
@@ -106,7 +106,7 @@ int pgen_jump(int rq, pgen_event *ev, void *p)
       pfilt_destroy(&f->f);
       return (PGEN_DONE);
   }
-       
+
   while (rc == PGEN_FAIL)
     rc = pfilt_jump(&f->f, f->j);
   ev->m = MP_COPY(f->f.m);
@@ -288,7 +288,7 @@ mp *pgen(const char *name, mp *d, mp *m, pgen_proc *event, void *ectx,
        if (p == P_TEST)
          act |= A_ENDTEST;
       }
-    }  
+    }
 
     /* --- Close down tester and stepper functions --- */
 
@@ -351,6 +351,31 @@ int pgen_primep(mp *p, grand *gr)
 
 #include <mLib/testrig.h>
 
+static int t_primep(dstr *v)
+{
+  mp *m = *(mp **)v[0].buf;
+  int e = *(int *)v[1].buf;
+  int r;
+  grand *rng;
+  int ok = 1;
+
+  rng = fibrand_create(0);
+  r = pgen_primep(m, rng);
+  GR_DESTROY(rng);
+  if (e != r) {
+    fputs("\n*** primep failed", stderr);
+    fputs("\nm = ", stderr); mp_writefile(m, stderr, 10);
+    fprintf(stderr, "\nexpected %d", e);
+    fprintf(stderr, "\nreported %d", r);
+    fputc('\n', stderr);
+    ok = 0;
+  }
+
+  mp_drop(m);
+  assert(mparena_count(MPARENA_GLOBAL) == 0);
+  return (ok);
+}
+
 static int verify(dstr *v)
 {
   mp *m = *(mp **)v[0].buf;
@@ -382,6 +407,7 @@ static int verify(dstr *v)
 
 static test_chunk tests[] = {
   { "pgen", verify, { &type_mp, &type_mp, 0 } },
+  { "primep", t_primep, { &type_mp, &type_int, 0 } },
   { 0, 0, { 0 } }
 };