diff --git a/73_Reverse/csharp/Reverse/Reverse.Tests/Generators/PositiveIntegerGenerator.cs b/73_Reverse/csharp/Reverse/Reverse.Tests/Generators/PositiveIntegerGenerator.cs new file mode 100644 index 00000000..66889bb5 --- /dev/null +++ b/73_Reverse/csharp/Reverse/Reverse.Tests/Generators/PositiveIntegerGenerator.cs @@ -0,0 +1,10 @@ +using FsCheck; + +namespace Reverse.Tests.Generators +{ + public static class PositiveIntegerGenerator + { + public static Arbitrary Generate() => + Arb.Default.Int32().Filter(x => x > 0); + } +} diff --git a/73_Reverse/csharp/Reverse/Reverse.Tests/Reverse.Tests.csproj b/73_Reverse/csharp/Reverse/Reverse.Tests/Reverse.Tests.csproj index 97b7bcce..260de5e1 100644 --- a/73_Reverse/csharp/Reverse/Reverse.Tests/Reverse.Tests.csproj +++ b/73_Reverse/csharp/Reverse/Reverse.Tests/Reverse.Tests.csproj @@ -7,6 +7,7 @@ + diff --git a/73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs b/73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs index d00640da..a6beeeb3 100644 --- a/73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs +++ b/73_Reverse/csharp/Reverse/Reverse.Tests/ReverserTests.cs @@ -1,3 +1,5 @@ +using FsCheck.Xunit; +using Reverse.Tests.Generators; using System.Linq; using Xunit; @@ -48,6 +50,34 @@ namespace Reverse.Tests Assert.True(input.SequenceEqual(output)); } + + [Property(Arbitrary = new[] { typeof(PositiveIntegerGenerator) })] + public void CreateRandomArray_ReturnsRandomArrayOfSpecifiedLength() + { + var result = Reverser.CreateRandomArray(5); + + Assert.Equal(5, result.Length); + } + + [Property(Arbitrary = new[] { typeof(PositiveIntegerGenerator) })] + public void CreateRandomArray_MaxElementValueIsEqualToSize(int size) + { + var result = Reverser.CreateRandomArray(size); + + Assert.Equal(size, result.Max()); + } + + [Property(Arbitrary = new[] { typeof(PositiveIntegerGenerator) })] + public void CreateRandomArray_ReturnsRandomArrayWithDistinctElements(int size) + { + var array = Reverser.CreateRandomArray(size); + + var arrayGroup = array.GroupBy(x => x); + var duplicateFound = arrayGroup.Any(x => x.Count() > 1); + + Assert.False(duplicateFound); + } + [Theory] [InlineData(new int[] { 1 })] [InlineData(new int[] { 1, 2 })] diff --git a/73_Reverse/csharp/Reverse/Reverse/Reverser.cs b/73_Reverse/csharp/Reverse/Reverse/Reverser.cs index e37e3d2f..62db79f1 100644 --- a/73_Reverse/csharp/Reverse/Reverse/Reverser.cs +++ b/73_Reverse/csharp/Reverse/Reverse/Reverser.cs @@ -1,4 +1,6 @@ -namespace Reverse +using System; + +namespace Reverse { public class Reverser { @@ -18,6 +20,27 @@ } } + public static int[] CreateRandomArray(int size) + { + var array = new int[size]; + for (int i = 1; i <= size; i++) + { + array[i - 1] = i; + } + + var rnd = new Random(); + + for (int i = size; i > 1;) + { + int k = rnd.Next(i); + --i; + int temp = array[i]; + array[i] = array[k]; + array[k] = temp; + } + return array; + } + public static bool IsArrayInAscendingOrder(int[] array) { for (int i = 1; i < array.Length; i++)