Skip to content

Commit 9d4e2a8

Browse files
committed
Fix bug where Extract with an "Any" network would throw. Also fix an incorrect exception being thrown on AddressFamily mismatch.
1 parent 7743397 commit 9d4e2a8

2 files changed

Lines changed: 22 additions & 2 deletions

File tree

IPNetworkHelper.Tests/NetworkHelperTests.cs

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ public void SplitThrowsOnUnsplittableNetworkIPv6()
114114

115115

116116
[TestMethod]
117-
[ExpectedException(typeof(IPNetworkNotInIPNetworkException))]
117+
[ExpectedException(typeof(AddressFamilyMismatchException))]
118118
public void ExtractThrowsOnAddressFamilyMismatch()
119119
{
120120
var ipv4 = IPNetwork.Parse("192.168.0.0/24");
@@ -143,6 +143,16 @@ public void ExtractThrowsOnDifferentNetwork()
143143
network.Extract(different).ToArray();
144144
}
145145

146+
[TestMethod]
147+
public void ExtractIPv4Prefix()
148+
{
149+
var network = IPNetwork.Parse("192.168.0.0/16");
150+
151+
var result = network.Extract(20).ToArray();
152+
153+
Assert.IsTrue(result.Length == 5);
154+
}
155+
146156
[TestMethod]
147157
public void ExtractIPv4()
148158
{
@@ -167,6 +177,16 @@ public void ExtractSelfReturnsSelfIPv4()
167177
Assert.IsTrue(result.Select((n, i) => expected[i].Equals(n)).All(v => true));
168178
}
169179

180+
[TestMethod]
181+
public void ExtractIPv6Prefix()
182+
{
183+
var network = IPNetwork.Parse("1111:2222::/32");
184+
185+
var result = network.Extract(64).ToArray();
186+
187+
Assert.IsTrue(result.Length == 33);
188+
}
189+
170190
[TestMethod]
171191
public void ExtractIPv6()
172192
{

IPNetworkHelper/NetworkHelper.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ public static IEnumerable<IPNetwork> Extract(this IPNetwork network, int prefixL
127127
/// <param name="desiredNetwork">The subnet to extract from the network.</param>
128128
/// <returns>Returns all subnets after taking the desired subnet, including the desired subnet.</returns>
129129
public static IEnumerable<IPNetwork> Extract(this IPNetwork network, IPNetwork desiredNetwork)
130-
=> Extract(network, [desiredNetwork]);
130+
=> ExtractImpl(network, desiredNetwork).OrderBy(i => i, IPNetworkComparer.Default);
131131

132132
/// <summary>
133133
/// Extracts the given subnets from the network and returns all subnets after taking the desired subnet, including the desired subnets.

0 commit comments

Comments
 (0)