namespace QWERTYkez.Mensura.Tests; public class CollectionsRootOfSquareExtensionsTest { [Fact] public void Sqrt_Array_ShouldCalculateCorrectly() { // Arrange Length[] source = [new(4), new(9), new(16)]; // Act Length[] result = source.Sqrt(); // Assert Assert.Equal(2, result[0]._Value); Assert.Equal(3, result[1]._Value); Assert.Equal(4, result[2]._Value); } [Fact] public void Sqrt_NullableArray_ShouldHandleNulls() { // Arrange Length?[] source = [new(25), null, new(100)]; // Act Length?[] result = source.Sqrt(); // Assert Assert.Equal(5, result[0]?._Value); Assert.Equal(0, result[1]?._Value); Assert.Equal(10, result[2]?._Value); } [Fact] public void Sqrt_List_ShouldReturnCorrectList() { // Arrange var source = new List { new(1), new(4), new(9) }; // Act var result = source.Sqrt(); // Assert Assert.Equal(3, result.Count); Assert.Equal(1, result[0]._Value); Assert.Equal(2, result[1]._Value); Assert.Equal(3, result[2]._Value); } [Fact] public void Sqrt_DestinationTooShort_ShouldThrowArgumentException() { // Arrange Length[] source = [new(4), new(9)]; Length[] dest = new Length[1]; // Слишком мало // Act & Assert Assert.Throws(() => source.AsSpan().Sqrt(dest.AsSpan())); } [Fact] public void Sqrt_IEnumerable_ShouldWorkWithGenericCollection() { // Arrange IEnumerable source = new HashSet { new(16), new(64) }; // Act var result = source.Sqrt().ToList(); // Assert Assert.Contains(result, x => x._Value == 4); Assert.Contains(result, x => x._Value == 8); } }