1
0
mirror of https://github.com/JKorf/CryptoExchange.Net.git synced 2026-08-11 16:32:57 +00:00
Files
CryptoExchange.Net/CryptoExchange.Net.UnitTests/AsyncResetEventTests.cs
T
2026-08-05 17:53:43 +02:00

154 lines
4.0 KiB
C#

using CryptoExchange.Net.Objects;
using NUnit.Framework;
using NUnit.Framework.Legacy;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
namespace CryptoExchange.Net.UnitTests
{
[TestFixture()]
public class AsyncResetEventTests
{
[Test]
public async Task InitialFalseAndResetFalse_Should_BothCompleteAfterSingleSet()
{
var evnt = new AsyncResetEvent(false, false);
var waiter1 = evnt.WaitAsync();
var waiter2 = evnt.WaitAsync();
evnt.Set();
var result1 = await waiter1;
var result2 = await waiter2;
Assert.That(result1);
Assert.That(result2);
}
[Test]
public async Task InitialTrueAndResetFalse_Should_BothCompleteImmediately()
{
var evnt = new AsyncResetEvent(true, false);
var waiter1 = evnt.WaitAsync();
var waiter2 = evnt.WaitAsync();
var result1 = await waiter1;
var result2 = await waiter2;
Assert.That(result1);
Assert.That(result2);
}
[Test]
public async Task InitialFalseAndResetTrue_Should_CompleteEachAfterASet()
{
var evnt = new AsyncResetEvent(false, true);
var waiter1 = evnt.WaitAsync();
var waiter2 = evnt.WaitAsync();
evnt.Set();
var result1 = await waiter1;
Assert.That(result1);
Assert.That(waiter2.Status != TaskStatus.RanToCompletion);
evnt.Set();
var result2 = await waiter2;
Assert.That(result2);
}
[Test]
public async Task InitialTrueAndResetTrue_Should_CompleteFirstImmediatelyAndSecondAfterSet()
{
var evnt = new AsyncResetEvent(true, true);
var waiter1 = evnt.WaitAsync();
var waiter2 = evnt.WaitAsync();
var result1 = await waiter1;
Assert.That(result1);
Assert.That(waiter2.Status != TaskStatus.RanToCompletion);
evnt.Set();
var result2 = await waiter2;
Assert.That(result2);
}
[Test]
public async Task Awaiting10TimesOnSameEvent_Should_AllCompleteAfter10Sets()
{
var evnt = new AsyncResetEvent(false, true);
var waiters = new List<Task<bool>>();
for (var i = 0; i < 10; i++)
{
waiters.Add(evnt.WaitAsync());
}
var remaining = waiters.ToList();
for (var i = 0; i < 10; i++)
{
evnt.Set();
var completed = await Task.WhenAny(remaining);
Assert.That(await completed, Is.True);
remaining.Remove(completed);
Assert.That(remaining.Count(w => w.IsCompleted), Is.Zero);
}
Assert.That(remaining, Is.Empty);
}
[Test]
public async Task WaitingShorterThanTimeout_Should_ReturnTrue()
{
var evnt = new AsyncResetEvent(false, true);
var waiter1 = evnt.WaitAsync(TimeSpan.FromMilliseconds(100));
await Task.Delay(50);
evnt.Set();
var result1 = await waiter1;
Assert.That(result1);
}
[Test]
public async Task WaitingLongerThanTimeout_Should_ReturnFalse()
{
var evnt = new AsyncResetEvent(false, true);
var waiter1 = evnt.WaitAsync(TimeSpan.FromMilliseconds(100));
var result1 = await waiter1;
ClassicAssert.False(result1);
}
[Test]
public async Task CancellingWait_Should_ReturnFalse()
{
var evnt = new AsyncResetEvent(false, true);
var waiter1 = evnt.WaitAsync(ct: new CancellationTokenSource(50).Token);
var result1 = await waiter1;
ClassicAssert.False(result1);
}
}
}