44 lines
1.2 KiB
C#
44 lines
1.2 KiB
C#
using System.Numerics;
|
|
using FluentAssertions;
|
|
using PerfectNumbers.Core.Cpu;
|
|
using Xunit;
|
|
|
|
namespace PerfectNumbers.Core.Tests;
|
|
|
|
public class BitTreeSolverTests
|
|
{
|
|
[Fact]
|
|
public void BitTree_FindsKnownDivisor()
|
|
{
|
|
// 2^11-1 = 2047 = 23 * 89, so k=1 yields divisor 23.
|
|
var tester = new MersenneNumberDivisorByDivisorCpuTesterWithForBitTreeDivisorSetForCpuOrder
|
|
{
|
|
DivisorLimit = new BigInteger(1000),
|
|
MinK = BigInteger.One,
|
|
};
|
|
|
|
bool isPrime = tester.IsPrime(11, out bool exhausted, out BigInteger divisor);
|
|
|
|
isPrime.Should().BeFalse();
|
|
exhausted.Should().BeTrue();
|
|
divisor.Should().Be(23);
|
|
}
|
|
|
|
[Fact]
|
|
public void BitTree_ReportsPrimeWhenNoDivisorFound()
|
|
{
|
|
// 2^5-1 = 31 is prime.
|
|
var tester = new MersenneNumberDivisorByDivisorCpuTesterWithForBitTreeDivisorSetForCpuOrder
|
|
{
|
|
DivisorLimit = new BigInteger(10_000),
|
|
MinK = BigInteger.One,
|
|
};
|
|
|
|
bool isPrime = tester.IsPrime(5, out bool exhausted, out BigInteger divisor);
|
|
|
|
isPrime.Should().BeTrue();
|
|
exhausted.Should().BeTrue();
|
|
divisor.Should().Be(BigInteger.Zero);
|
|
}
|
|
}
|