diff --git a/exercises/pascals-triangle/Example.cs b/exercises/pascals-triangle/Example.cs index b2bfa7b103..75d551c0b4 100644 --- a/exercises/pascals-triangle/Example.cs +++ b/exercises/pascals-triangle/Example.cs @@ -1,15 +1,24 @@ using System.Collections.Generic; +using System; public static class PascalsTriangle { public static IEnumerable> Calculate(int rows) + { + if (rows < 0) + throw new ArgumentOutOfRangeException(); + + return IterateRows(rows); + } + + private static IEnumerable> IterateRows(int rows) { for (var i = 1; i <= rows; i++) { yield return Row(i); } } - + private static IEnumerable Row(int row) { yield return 1; diff --git a/exercises/pascals-triangle/PascalsTriangle.cs b/exercises/pascals-triangle/PascalsTriangle.cs index 2539674122..5d2235d607 100644 --- a/exercises/pascals-triangle/PascalsTriangle.cs +++ b/exercises/pascals-triangle/PascalsTriangle.cs @@ -7,4 +7,5 @@ public static IEnumerable> Calculate(int rows) { throw new NotImplementedException(); } + } \ No newline at end of file diff --git a/exercises/pascals-triangle/PascalsTriangleTest.cs b/exercises/pascals-triangle/PascalsTriangleTest.cs index 216e859b92..684580ba77 100644 --- a/exercises/pascals-triangle/PascalsTriangleTest.cs +++ b/exercises/pascals-triangle/PascalsTriangleTest.cs @@ -1,80 +1,47 @@ -using System; -using System.Collections.Generic; -using System.Linq; +// This file was auto-generated based on version 1.0.0 of the canonical data. + using Xunit; +using System; public class PascalsTriangleTest { [Fact] - public void One_row() + public void Zero_rows() + { + Assert.Empty(PascalsTriangle.Calculate(0)); + } + + [Fact(Skip = "Remove to run test")] + public void Single_row() { - var actual = PascalsTriangle.Calculate(1); var expected = new[] { new[] { 1 } }; - Assert.Equal(expected, actual, NestedEnumerableEqualityComparer.Instance); + Assert.Equal(expected, PascalsTriangle.Calculate(1)); } - + [Fact(Skip = "Remove to run test")] public void Two_rows() { - var actual = PascalsTriangle.Calculate(2).ToArray(); var expected = new[] { new[] { 1 }, new[] { 1, 1 } }; - Assert.Equal(expected, actual, NestedEnumerableEqualityComparer.Instance); + Assert.Equal(expected, PascalsTriangle.Calculate(2)); } [Fact(Skip = "Remove to run test")] public void Three_rows() { - var actual = PascalsTriangle.Calculate(3); var expected = new[] { new[] { 1 }, new[] { 1, 1 }, new[] { 1, 2, 1 } }; - Assert.Equal(expected, actual, NestedEnumerableEqualityComparer.Instance); + Assert.Equal(expected, PascalsTriangle.Calculate(3)); } [Fact(Skip = "Remove to run test")] public void Four_rows() { - var actual = PascalsTriangle.Calculate(4); var expected = new[] { new[] { 1 }, new[] { 1, 1 }, new[] { 1, 2, 1 }, new[] { 1, 3, 3, 1 } }; - Assert.Equal(expected, actual, NestedEnumerableEqualityComparer.Instance); - } - - [Fact(Skip = "Remove to run test")] - public void Five_rows() - { - var actual = PascalsTriangle.Calculate(5); - var expected = new[] { new[] { 1 }, new[] { 1, 1 }, new[] { 1, 2, 1 }, new[] { 1, 3, 3, 1 }, new[] { 1, 4, 6, 4, 1 } }; - Assert.Equal(expected, actual, NestedEnumerableEqualityComparer.Instance); + Assert.Equal(expected, PascalsTriangle.Calculate(4)); } [Fact(Skip = "Remove to run test")] - public void Twenty_rows() + public void Negative_rows() { - var actual = PascalsTriangle.Calculate(20).Last(); - var expected = new[] { 1, 19, 171, 969, 3876, 11628, 27132, 50388, 75582, 92378, 92378, 75582, 50388, 27132, 11628, 3876, 969, 171, 19, 1 }; - Assert.Equal(expected, actual); - } - - private class EnumerableEqualityComparer : IEqualityComparer> - { - public static readonly EnumerableEqualityComparer Instance = new EnumerableEqualityComparer(); - - public bool Equals(IEnumerable x, IEnumerable y) => x.SequenceEqual(y); - - public int GetHashCode(IEnumerable obj) - { - throw new NotImplementedException(); - } - } - - private class NestedEnumerableEqualityComparer : IEqualityComparer>> - { - public static readonly NestedEnumerableEqualityComparer Instance = new NestedEnumerableEqualityComparer(); - - public bool Equals(IEnumerable> x, IEnumerable> y) - => x.SequenceEqual(y, EnumerableEqualityComparer.Instance); - - public int GetHashCode(IEnumerable> obj) - { - throw new NotImplementedException(); - } + Assert.Throws(() => PascalsTriangle.Calculate(-1)); } } \ No newline at end of file diff --git a/generators/Exercises/PascalsTriangle.cs b/generators/Exercises/PascalsTriangle.cs new file mode 100644 index 0000000000..69cde4ade8 --- /dev/null +++ b/generators/Exercises/PascalsTriangle.cs @@ -0,0 +1,28 @@ +using System; +using System.Linq; +using Generators.Input; +using Newtonsoft.Json.Linq; + +namespace Generators.Exercises +{ + public class PascalsTriangle : Exercise + { + protected override void UpdateCanonicalData(CanonicalData canonicalData) + { + //remove null case until canonical data is updated + var cases = canonicalData.Cases.ToList(); + cases.RemoveAll(x => x.Properties["count"] == null); + canonicalData.Cases = cases.ToArray(); + + foreach (var canonicalDataCase in canonicalData.Cases) + { + canonicalDataCase.UseVariableForExpected = true; + canonicalDataCase.Property = "calculate"; + if (!(canonicalDataCase.Expected is JArray)) + canonicalDataCase.ExceptionThrown = typeof(ArgumentOutOfRangeException); + if (canonicalDataCase.Properties["count"] == null) + canonicalDataCase.Properties["count"] = -1; + } + } + } +} \ No newline at end of file