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); } }