ex-col-00-flexarraystring/FlexArray.Test/FlexArrayStringTests.cs
2024-11-27 17:34:00 +01:00

183 lines
4.4 KiB
C#

namespace FlexArray.Test;
public class FlexArrayStringTests
{
// Constructor tests
[Fact]
public void Construction_NoSize()
{
var array = new FlexArrayString();
array.Should().NotBeNull();
array.Count.Should().Be(0, "no items added yet");
array.Capacity.Should().Be(FlexArrayString.DefaultStartSize, "default capacity");
}
[Theory]
[InlineData(0)]
[InlineData(4)]
[InlineData(20)]
[InlineData(100_000)]
public void Construction_WithSize(int size)
{
var array = new FlexArrayString(size);
array.Should().NotBeNull();
array.Count.Should().Be(0, "no items added yet");
array.Capacity.Should().Be(size, "initial capacity set to specified size");
}
[Fact]
public void Construction_WithInvalidSize()
{
var array = new FlexArrayString(-5);
array.Should().NotBeNull();
array.Count.Should().Be(0);
array.Capacity.Should().Be(0, "negative size provided => set to 0");
}
// Add tests
[Fact]
public void AddItem_Single()
{
var array = new FlexArrayString();
array.Add("Hello");
array.Count.Should().Be(1, "one item added");
array.Capacity.Should().Be(FlexArrayString.DefaultStartSize, "capacity unchanged");
}
[Fact]
public void AddItem_Multiple_NoGrowth()
{
var array = new FlexArrayString();
array.Add("Hello");
array.Add("World");
array.Add("!");
array.Count.Should().Be(3, "three items added");
array.Capacity.Should().Be(FlexArrayString.DefaultStartSize, "no growth required yet");
}
[Fact]
public void AddItem_Multiple_Growth()
{
var array = new FlexArrayString();
void AddItems(int count)
{
for (var i = 0; i < count; i++)
{
// random string
array.Add(Guid.NewGuid().ToString());
}
}
AddItems(FlexArrayString.DefaultStartSize);
array.Capacity.Should().Be(FlexArrayString.DefaultStartSize);
AddItems(2);
array.Capacity.Should().BeGreaterThan(FlexArrayString.DefaultStartSize, "capacity exceeded, had to grow");
array.Count.Should().Be(FlexArrayString.DefaultStartSize + 2);
}
// Contains tests
[Fact]
public void Contains_Success()
{
var array = new FlexArrayString();
array.Add("Goodbye");
array.Add("World");
array.Add("!");
array.Add("bye...");
array.Contains("!")
.Should().BeTrue();
}
[Fact]
public void Contains_Success_AfterGrowth()
{
var array = new FlexArrayString();
for (var i = 0; i <= FlexArrayString.DefaultStartSize; i++)
{
array.Add(i.ToString());
}
array.Contains(array[FlexArrayString.DefaultStartSize - 1])
.Should().BeTrue();
}
[Fact]
public void Contains_Empty()
{
var array = new FlexArrayString();
array.Contains("Hi!")
.Should().BeFalse("collection is empty");
}
[Fact]
public void Contains_NotFound()
{
var array = new FlexArrayString();
array.Add("Hello");
array.Add("World");
array.Contains("!")
.Should().BeFalse("not contained in list");
}
// Indexer tests
[Fact]
public void Indexer_Simple()
{
var array = new FlexArrayString();
array.Add("Goodbye World!");
array[0].Should().Be("Goodbye World!");
}
[Fact]
public void Indexer_Multiple()
{
var array = new FlexArrayString();
for (var i = 0; i < 100; i++)
{
array.Add((i+1).ToString());
}
array[20].Should().Be("21");
array[88].Should().Be("89");
}
[Theory]
[InlineData(-1, "negative index")]
[InlineData(2, "index too high")]
[InlineData(10, "index too high")]
public void Indexer_InvalidIndex(int index, string reason)
{
var array = new FlexArrayString();
array.Add("Hello");
array[index].Should().Be(String.Empty, reason);
}
[Fact]
public void Iterate()
{
var array = new FlexArrayString();
for (var i = 0; i < 10; i++)
{
array.Add(i.ToString());
}
for (var i = 0; i < 10; i++)
{
array[i].Should().Be(i.ToString());
}
}
}