using FluentAssertions; using PKHeX.Core; using Xunit; namespace PKHeX.Tests; public static class Xoroshiro128Tests { [Theory] [InlineData(1, 1, 0x339C61939607D435, 0xF4DD6E2E9698D1B0, 98, 1000)] public static void Forward(ulong s0, ulong s1, ulong n0, ulong n1, int frames, int loop) { var adv = GetFramesForward(s0, s1, n0, n1, loop); adv.Should().Be(frames); } [Theory] [InlineData(1, 1, 0x339C61939607D435, 0xF4DD6E2E9698D1B0, 98, 1000)] public static void Reverse(ulong s0, ulong s1, ulong n0, ulong n1, int frames, int loop) { var adv = GetFramesReverse(s0, s1, n0, n1, loop); adv.Should().Be(frames); } private static int GetFramesReverse(ulong s0, ulong s1, ulong n0, ulong n1, int loop) { var rand = new Xoroshiro128Plus(n0, n1); for (int i = 0; i < loop; i++) { _ = rand.Prev(); if (rand.GetState() == (s0, s1)) return i; } return -1; } private static int GetFramesForward(ulong s0, ulong s1, ulong n0, ulong n1, int loop) { var rand = new Xoroshiro128Plus(s0, s1); for (int i = 0; i < loop; i++) { _ = rand.Next(); if (rand.GetState() == (n0, n1)) return i; } return -1; } }