ModernUO/Projects/Server.Tests/Tests/Collections/PooledRefQueueTests.cs
Kamron Batman bde5357f89
fix: Removes Moq due to privacy concerns (#1445)
Due to privacy/security concerns, Moq has been removed.

See: https://github.com/moq/moq/issues/1372
2023-08-09 08:12:45 -07:00

136 lines
3.8 KiB
C#

using System;
using Server.Collections;
using Server.Random;
using Xunit;
namespace Server.Tests;
public sealed class PooledRefQueueTests : IDisposable
{
private class MockedRandomSource(int queueCount, int mockedValue) : IRandomSource
{
private int _queueCount = queueCount;
private int _mockedValue = mockedValue;
public int Next() => throw new NotImplementedException();
public int Next(int maxValue) => _mockedValue;
public int Next(int minValue, int count) => throw new NotImplementedException();
public uint Next(uint maxValue) => throw new NotImplementedException();
public uint Next(uint minValue, uint count) => throw new NotImplementedException();
public long Next(long maxValue) => throw new NotImplementedException();
public long Next(long minValue, long count) => throw new NotImplementedException();
public double NextDouble() => throw new NotImplementedException();
public void NextBytes(Span<byte> buffer)
{
throw new NotImplementedException();
}
public int NextInt() => throw new NotImplementedException();
public uint NextUInt() => throw new NotImplementedException();
public ulong NextULong() => throw new NotImplementedException();
public bool NextBool() => throw new NotImplementedException();
public byte NextByte() => throw new NotImplementedException();
public float NextFloat() => throw new NotImplementedException();
public float NextFloatNonZero() => throw new NotImplementedException();
public double NextDoubleNonZero() => throw new NotImplementedException();
public double NextDoubleHighRes() => throw new NotImplementedException();
}
public void Dispose() => RandomSources.SetRng(null);
private static void PrepareRng(int queueCount, int rngValue)
{
var mockedRng = new MockedRandomSource(queueCount, rngValue);
RandomSources.SetRng(mockedRng);
}
[Fact]
public void TestPeekRandom1()
{
// Random value for _head = 0, _tail = 5, _size = 5,
using var queue = PooledRefQueue<int>.Create(10);
queue.Enqueue(0);
queue.Enqueue(1);
queue.Enqueue(2);
queue.Enqueue(3); // <-----
queue.Enqueue(4);
queue.Enqueue(5);
PrepareRng(6, 3);
Assert.Equal(3, queue.PeekRandom());
}
[Fact]
public void TestPeekRandom2()
{
// Random value for _head = 3, _tail = 10, _size = 7,
using var queue = PooledRefQueue<int>.Create(10);
queue.Enqueue(0);
queue.Enqueue(1);
queue.Enqueue(2);
queue.Enqueue(3);
queue.Enqueue(4);
queue.Enqueue(5);
queue.Enqueue(6); // <---
queue.Enqueue(7);
queue.Enqueue(8);
queue.Enqueue(9);
queue.Dequeue();
queue.Dequeue();
queue.Dequeue();
PrepareRng(7, 3);
Assert.Equal(6, queue.PeekRandom());
}
[Theory]
[InlineData(3, 6)]
[InlineData(8, 11)]
[InlineData(6, 9)]
[InlineData(7, 10)]
public void TestPeekRandom3(int rngValue, int expectedIndex)
{
// Random value for _head = 3, _tail = 2, _size = 10,
using var queue = PooledRefQueue<int>.Create(10);
queue.Enqueue(0);
queue.Enqueue(1);
queue.Enqueue(2);
queue.Enqueue(3);
queue.Enqueue(4);
queue.Enqueue(5);
queue.Enqueue(6);
queue.Enqueue(7);
queue.Enqueue(8);
queue.Enqueue(9);
queue.Dequeue();
queue.Dequeue();
queue.Dequeue();
queue.Enqueue(10);
queue.Enqueue(11);
queue.Enqueue(12);
PrepareRng(10, rngValue);
Assert.Equal(expectedIndex, queue.PeekRandom());
}
}