Merge pull request #3106 from lambdageek/dev/monoerror-unhandled
[mono.git] / mcs / class / Mono.Security / Test / Mono.Math / SearchGeneratorTest.cs
1 //
2 // MonoTests.Mono.Math.PrimeTestingTest.cs
3 //
4 // Authors:
5 //      Ben Maurer
6 //
7 // Copyright (c) 2003 Ben Maurer. All rights reserved
8 //
9
10 using System;
11 using Mono.Math;
12 using Mono.Math.Prime;
13 using Mono.Math.Prime.Generator;
14 using NUnit.Framework;
15
16 namespace MonoTests.Mono.Math {
17
18         [TestFixture]
19         public class SearchGenerator_Test : SequentialSearchPrimeGeneratorBase {
20
21                 struct ContextData {
22                         public ContextData (int bits, uint testData)
23                         {
24                                 this.bits = bits; this.testData = testData;
25                         }
26                         public int bits;
27                         public uint testData;
28                 }
29
30                 protected override BigInteger GenerateSearchBase (int bits, object Context)
31                 {
32                         BigInteger ret = base.GenerateSearchBase (bits, Context);
33
34                         ContextData ctx = (ContextData)Context;
35
36                         
37                         Assert.AreEqual (ctx.bits, bits);
38                         uint d = ctx.testData;
39
40                         for (uint i = (uint)bits - 2; d > 0; i--, d >>= 1)
41                                 ret.SetBit (i, (d&1) == 1);
42
43                         return ret;
44                         
45                 }
46
47                 public override PrimalityTest PrimalityTest {
48                         get {
49                                 return new PrimalityTest (PrimalityTests.SmallPrimeSppTest);
50                         }
51                 }
52
53                 protected override bool IsPrimeAcceptable (BigInteger bi, object Context)
54                 {
55                         return bi.TestBit (1);
56                 }
57
58                 [Test]
59                 public void TestPrimeGeneration ()
60                 {
61                         Random r = new Random ();
62                         for (int i = 0; i < 5; i++) {
63                                 ContextData ctx = new ContextData (128, (uint)r.Next (int.MinValue, int.MaxValue));
64                                 BigInteger p = GenerateNewPrime (128, ctx);
65                                 Assert.IsTrue (p.TestBit (1));
66                                 uint d = ctx.testData;
67                                 for (uint j = 128 - 2; d > 0; j--, d >>= 1)
68                                         Assert.AreEqual ((d&1) == 1, p.TestBit (j));
69                         }
70                 }
71         }
72 }