Skip to content

Commit 01a8c99

Browse files
authored
Merge pull request #100 from rsdn/feature/array-deconstruct
Enumerable desconstruct
2 parents ed161d4 + c271df2 commit 01a8c99

4 files changed

Lines changed: 833 additions & 0 deletions

File tree

CodeJam.Main.Tests/Collections/Enumerable/EnumerableExtensionTests.cs

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections.Generic;
23
using System.Linq;
34

45
using CodeJam.Strings;
@@ -123,5 +124,53 @@ public void IsLastForEmptyCollections()
123124
Assert.IsFalse(enSrc.IsLast("C", null), "#A07");
124125
Assert.IsFalse(enSrc.IsLast("C", StringComparer.OrdinalIgnoreCase), "#A08");
125126
}
127+
128+
[Test]
129+
public void DeconstructArray()
130+
{
131+
var array = new[] { 1, 2, 3, 4, 5 };
132+
Assert.IsTrue(array is (1, _, _, _, _));
133+
Assert.IsFalse(array is (2, _, _, _, _));
134+
Assert.IsTrue(array is (_, _, 3, _, _));
135+
Assert.IsFalse(array is (_, _, 5, _, _));
136+
Assert.IsTrue(array is (1, _, 3, _, _));
137+
Assert.IsFalse(array is (1, _, 5, _, _));
138+
Assert.IsTrue(array is (1, 2, 3, 4, 5));
139+
Assert.IsFalse(array is (1, 2, 3, 6, 5));
140+
}
141+
142+
[Test]
143+
public void DeconstructList()
144+
{
145+
IList<int> array = new[] { 1, 2, 3, 4, 5 };
146+
Assert.IsTrue(array is (1, _, _, _, _));
147+
Assert.IsFalse(array is (2, _, _, _, _));
148+
Assert.IsTrue(array is (_, _, 3, _, _));
149+
Assert.IsFalse(array is (_, _, 5, _, _));
150+
Assert.IsTrue(array is (1, _, 3, _, _));
151+
Assert.IsFalse(array is (1, _, 5, _, _));
152+
Assert.IsTrue(array is (1, 2, 3, 4, 5));
153+
Assert.IsFalse(array is (1, 2, 3, 6, 5));
154+
}
155+
156+
[Test]
157+
public void DeconstructEnumerable()
158+
{
159+
IEnumerable<int> array = new[] { 1, 2, 3, 4, 5 };
160+
Assert.IsTrue(array is (1, _, _, _, _));
161+
Assert.IsFalse(array is (2, _, _, _, _));
162+
Assert.IsTrue(array is (_, _, 3, _, _));
163+
Assert.IsFalse(array is (_, _, 5, _, _));
164+
Assert.IsTrue(array is (1, _, 3, _, _));
165+
Assert.IsFalse(array is (1, _, 5, _, _));
166+
Assert.IsTrue(array is (1, 2, 3, 4, 5));
167+
Assert.IsFalse(array is (1, 2, 3, 6, 5));
168+
169+
Assert.Throws<ArgumentException>(
170+
() =>
171+
{
172+
var b = array is (1, _, _, _, _, _);
173+
});
174+
}
126175
}
127176
}

CodeJam.Main/CodeJam.Main.csproj

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,11 @@
128128
<DependentUpon>Algorithms.EqualRange.tt</DependentUpon>
129129
<AutoGen>True</AutoGen>
130130
</Compile>
131+
<Compile Update="Collections\Enumerable\EnumerableExtensions.Deconstruct.generated.cs">
132+
<DesignTime>True</DesignTime>
133+
<AutoGen>True</AutoGen>
134+
<DependentUpon>EnumerableExtensions.Deconstruct.tt</DependentUpon>
135+
</Compile>
131136
<Compile Update="Dates\DateTimeCode.generated.cs">
132137
<AutoGen>True</AutoGen>
133138
<DependentUpon>DateTimeCode.tt</DependentUpon>
@@ -180,6 +185,10 @@
180185
<AutoGen>True</AutoGen>
181186
<DependentUpon>DebugCode.tt</DependentUpon>
182187
</Compile>
188+
<None Update="Collections\Enumerable\EnumerableExtensions.Deconstruct.tt">
189+
<Generator>TextTemplatingFileGenerator</Generator>
190+
<LastGenOutput>EnumerableExtensions.Deconstruct.generated.cs</LastGenOutput>
191+
</None>
183192
<None Update="Dates\DateTimeCode.tt">
184193
<LastGenOutput>DateTimeCode.generated.cs</LastGenOutput>
185194
<Generator>TextTemplatingFileGenerator</Generator>
@@ -215,6 +224,7 @@
215224
<Compile Update="Collections\Array\ArrayExtensions.generated.cs">
216225
<DependentUpon>ArrayExtensions.tt</DependentUpon>
217226
<AutoGen>True</AutoGen>
227+
<DesignTime>True</DesignTime>
218228
</Compile>
219229
<None Update="Collections\Array\ArrayExtensions.tt">
220230
<Generator>TextTemplatingFileGenerator</Generator>

0 commit comments

Comments
 (0)