rand.c: Implement the `passes' property of the `DSARand' generator.
[catacomb-python] / t / t-rand.py
index d8d7b00..7b19ec4 100644 (file)
@@ -105,6 +105,9 @@ class TestRandomGenerator (U.TestCase):
       rcls = C.gccrands[r]
       rng = rcls(T.span(rcls.keysz.default), **kw)
       me.assertTrue(rng.cryptop)
+      if kw:
+        rng = rcls(T.span(rcls.keysz.default))
+        me.check_rand(rng)
 
   def test_sslrand(me):
     rng = C.SSLRand(T.span(16), T.span(32), C.md5, C.sha)
@@ -119,9 +122,16 @@ class TestRandomGenerator (U.TestCase):
   def test_dsarand(me):
     seed = T.span(16)
     n = C.MP.loadb(seed)
-    rng = C.DSARand(seed)
+    rng = C.DSARand(seed, passes = 2)
     me.check_rand(rng)
-    me.assertEqual(rng.seed, (n + 153 + 3).storeb(16))
+    if T.MAXFIXNUM == (1 << 31) - 1: steps = 2*153, 3*153 + 1
+    elif T.MAXFIXNUM == (1 << 63) - 1: steps = 2*153 + 8, 3*153 + 8
+    else: steps = None
+    if steps is not None: me.assertEqual(rng.seed, (n + steps[0]).storeb(16))
+    me.assertEqual(rng.passes, 2);
+    rng.passes = 1
+    me.check_rand(rng)
+    if steps is not None: me.assertEqual(rng.seed, (n + steps[1]).storeb(16))
 
   def test_bbs(me):
     ev = T.EventRecorder()