using FluentAssertions; using PerfectNumbers.Core.Gpu.Accelerators; using Xunit; namespace PerfectNumbers.Core.Tests; public class MersenneDivisorCyclesTests { public static IEnumerable Divisors() => new[] { new object[] {3UL, 2UL}, new object[] {7UL, 3UL}, new object[] {11UL, 10UL}, }; [Theory] [Trait("Category", "Fast")] [MemberData(nameof(Divisors))] public void CalculateCycleLength_returns_expected_value(ulong divisor, ulong expected) { var gpu = PrimeOrderCalculatorAccelerator.Rent(1); try { MontgomeryDivisorData divisorData = MontgomeryDivisorData.FromModulus(divisor); MersenneDivisorCyclesCpu.CalculateCycleLength(divisor, divisorData).Should().Be(expected); MersenneDivisorCyclesGpu.CalculateCycleLength(gpu, divisor, divisorData).Should().Be(expected); } finally { PrimeOrderCalculatorAccelerator.Return(gpu); } } }