This commit is contained in:
neuecc 2022-02-15 08:26:45 +09:00
parent 9c930a6cab
commit 0b41113d67
3 changed files with 54 additions and 0 deletions

View File

@ -157,6 +157,11 @@ namespace ObservableCollections
public RingBufferSpan<T> GetSpan()
{
if (count == 0)
{
return new RingBufferSpan<T>(Array.Empty<T>(), Array.Empty<T>(), 0);
}
var start = head & mask;
var end = (head + count) & mask;
@ -206,6 +211,8 @@ namespace ObservableCollections
public IEnumerable<T> Reverse()
{
if (count == 0) yield break;
var start = head & mask;
var end = (head + count) & mask;

View File

@ -157,6 +157,11 @@ namespace ObservableCollections
public RingBufferSpan<T> GetSpan()
{
if (count == 0)
{
return new RingBufferSpan<T>(Array.Empty<T>(), Array.Empty<T>(), 0);
}
var start = head & mask;
var end = (head + count) & mask;
@ -206,6 +211,8 @@ namespace ObservableCollections
public IEnumerable<T> Reverse()
{
if (count == 0) yield break;
var start = head & mask;
var end = (head + count) & mask;

View File

@ -126,6 +126,46 @@ namespace ObservableCollections.Tests
}
[Fact]
public void Iteration()
{
var empty = new RingBuffer<int>();
empty.ToArray().Should().BeEmpty();
for (int i = 0; i < 10; i++)
{
var buffer = new RingBuffer<int>();
for (int j = 0; j < i; j++)
{
buffer.AddLast(j);
}
buffer.ToArray().Should().Equal(Enumerable.Range(0, i).ToArray());
}
for (int i = 0; i < 10; i++)
{
var buffer = new RingBuffer<int>();
for (int j = 0; j < i; j++)
{
buffer.AddFirst(j);
}
buffer.ToArray().Should().Equal(Enumerable.Range(0, i).Reverse().ToArray());
}
}
[Fact]
public void RandomIteration()
{
var buffer = new RingBuffer<int>();
buffer.AddFirst(10);
buffer.AddLast(20);
buffer.AddLast(30);
buffer.AddFirst(40);
buffer.ToArray().Should().Equal(40, 10, 20, 30);
}
[Fact]
public void BinarySearchTest()
{