* roottypes.cs: Rename from tree.cs.
[mono.git] / mcs / class / corlib / 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.Generator;
13 using NUnit.Framework;
14
15 namespace MonoTests.Mono.Math {
16
17         [TestFixture]
18         public class SearchGenerator_Test : SequentialSearchPrimeGeneratorBase {
19
20                 struct ContextData {
21                         public ContextData (int bits, uint testData)
22                         {
23                                 this.bits = bits; this.testData = testData;
24                         }
25                         public int bits;
26                         public uint testData;
27                 }
28
29                 protected override BigInteger GenerateSearchBase (int bits, object Context)
30                 {
31                         BigInteger ret = base.GenerateSearchBase (bits, Context);
32
33                         ContextData ctx = (ContextData)Context;
34
35                         
36                         Assertion.AssertEquals (ctx.bits, bits);
37                         uint d = ctx.testData;
38
39                         for (uint i = (uint)bits - 2; d > 0; i--, d >>= 1)
40                                 ret.setBit (i, (d&1) == 1);
41
42                         return ret;
43                         
44                 }
45
46                 protected override bool IsPrimeAcceptable (BigInteger bi, object Context)
47                 {
48                         return bi.testBit (1);
49                 }
50
51                 [Test]
52                 public void TestPrimeGeneration ()
53                 {
54                         Random r = new Random ();
55                         for (int i = 0; i < 5; i++) {
56                                 ContextData ctx = new ContextData (128, (uint)r.Next (int.MinValue, int.MaxValue));
57                                 BigInteger p = GenerateNewPrime (128, ctx);
58                                 Assertion.Assert (p.testBit (1));
59                                 uint d = ctx.testData;
60                                 for (uint j = 128 - 2; d > 0; j--, d >>= 1)
61                                         Assertion.AssertEquals ((d&1) == 1, p.testBit (j));
62                         }
63                 }
64         }
65 }