11// SPDX-FileCopyrightText: 2023 smdn <smdn@smdn.jp>
22// SPDX-License-Identifier: MIT
3- #undef SYSTEM_NET_IPNETWORK // enable this when .NET 8 GA is released
4-
53using System ;
64using System . Collections . Generic ;
75using System . Linq ;
@@ -15,16 +13,87 @@ namespace Smdn.Net;
1513[ TestFixture ]
1614public partial class IPNetworkProfileTests {
1715#if SYSTEM_NET_IPNETWORK
18- [ Test ]
19- public void Create_FromIPNetwork_IPv4 ( )
16+ private static System . Collections . IEnumerable YieldTestCases_Create_FromIPNetwork_IPv4 ( )
2017 {
21- Assert . Fail ( "test not implemented" ) ;
18+ yield return new object [ ] {
19+ IPNetwork . Parse ( "192.168.0.0/24" ) ,
20+ new Action < IReadOnlyList < IPAddress > > ( static addresses => {
21+ Assert . That ( addresses . Count , Is . EqualTo ( 254 ) ) ;
22+ Assert . That ( addresses , Has . Member ( IPAddress . Parse ( "192.168.0.1" ) ) ) ;
23+ Assert . That ( addresses , Has . Member ( IPAddress . Parse ( "192.168.0.254" ) ) ) ;
24+ Assert . That ( addresses , Has . No . Member ( IPAddress . Parse ( "192.168.0.0" ) ) ) ;
25+ Assert . That ( addresses , Has . No . Member ( IPAddress . Parse ( "192.168.0.255" ) ) ) ;
26+ Assert . That ( addresses , Has . No . Member ( IPAddress . Parse ( "192.168.1.0" ) ) ) ;
27+ Assert . That ( addresses , Has . No . Member ( IPAddress . Parse ( "127.0.0.1" ) ) ) ;
28+ } )
29+ } ;
30+
31+ yield return new object [ ] {
32+ IPNetwork . Parse ( "192.168.0.0/30" ) ,
33+ new Action < IReadOnlyList < IPAddress > > ( static addresses => {
34+ Assert . That ( addresses . Count , Is . EqualTo ( 2 ) ) ;
35+ Assert . That ( addresses , Has . Member ( IPAddress . Parse ( "192.168.0.1" ) ) ) ;
36+ Assert . That ( addresses , Has . Member ( IPAddress . Parse ( "192.168.0.2" ) ) ) ;
37+ Assert . That ( addresses , Has . No . Member ( IPAddress . Parse ( "192.168.0.0" ) ) ) ;
38+ Assert . That ( addresses , Has . No . Member ( IPAddress . Parse ( "192.168.0.3" ) ) ) ;
39+ Assert . That ( addresses , Has . No . Member ( IPAddress . Parse ( "127.0.0.1" ) ) ) ;
40+ } )
41+ } ;
42+
43+ yield return new object [ ] {
44+ IPNetwork . Parse ( "192.168.0.0/20" ) ,
45+ new Action < IReadOnlyList < IPAddress > > ( static addresses => {
46+ Assert . That ( addresses . Count , Is . EqualTo ( 4094 ) ) ;
47+ Assert . That ( addresses , Has . Member ( IPAddress . Parse ( "192.168.0.1" ) ) ) ;
48+ Assert . That ( addresses , Has . Member ( IPAddress . Parse ( "192.168.0.255" ) ) ) ;
49+ Assert . That ( addresses , Has . Member ( IPAddress . Parse ( "192.168.15.0" ) ) ) ;
50+ Assert . That ( addresses , Has . Member ( IPAddress . Parse ( "192.168.15.254" ) ) ) ;
51+ Assert . That ( addresses , Has . No . Member ( IPAddress . Parse ( "192.168.0.0" ) ) ) ;
52+ Assert . That ( addresses , Has . No . Member ( IPAddress . Parse ( "192.168.15.255" ) ) ) ;
53+ Assert . That ( addresses , Has . No . Member ( IPAddress . Parse ( "127.0.0.1" ) ) ) ;
54+ } )
55+ } ;
56+
57+ yield return new object [ ] {
58+ IPNetwork . Parse ( "192.168.0.0/32" ) ,
59+ new Action < IReadOnlyList < IPAddress > > ( static addresses => {
60+ Assert . That ( addresses . Count , Is . EqualTo ( 1 ) ) ;
61+
62+ Assert . That ( addresses , Has . Member ( IPAddress . Parse ( "192.168.0.0" ) ) ) ;
63+ } )
64+ } ;
2265 }
2366
24- [ Test ]
25- public void Create_FromIPNetwork_IPv6 ( )
67+ [ TestCaseSource ( nameof ( YieldTestCases_Create_FromIPNetwork_IPv4 ) ) ]
68+ public void Create_FromIPNetwork_IPv4 (
69+ IPNetwork ipNetwork ,
70+ Action < IReadOnlyList < IPAddress > > assertAddresses
71+ )
2672 {
27- Assert . Fail ( "test not implemented" ) ;
73+ var profile = IPNetworkProfile . Create ( ipNetwork ) ;
74+
75+ Assert . That ( profile . NetworkInterface , Is . Null , nameof ( profile . NetworkInterface ) ) ;
76+
77+ var addresses = profile . GetAddressRange ( ) ? . ToList ( ) ;
78+
79+ Assert . That ( addresses , Is . Not . Null , nameof ( addresses ) ) ;
80+
81+ assertAddresses ( addresses ! ) ;
82+ }
83+
84+ private static System . Collections . IEnumerable YieldTestCases_Create_FromIPNetwork_IPv6 ( )
85+ {
86+ yield return new object ? [ ] { IPNetwork . Parse ( "2001:db8::/32" ) } ;
87+ yield return new object ? [ ] { IPNetwork . Parse ( "2001:db8:3c4d::/48" ) } ;
88+ yield return new object ? [ ] { IPNetwork . Parse ( "2001:db8:3c4d:15::/64" ) } ;
89+ }
90+
91+ [ TestCaseSource ( nameof ( YieldTestCases_Create_FromIPNetwork_IPv6 ) ) ]
92+ public void Create_FromIPNetwork_IPv6 ( IPNetwork network )
93+ {
94+ Assert . Throws < NotImplementedException > (
95+ ( ) => IPNetworkProfile . Create ( network : network )
96+ ) ;
2897 }
2998#endif
3099
0 commit comments