@@ -565,6 +565,26 @@ impl PartialEq for Ipv4Addr {
565565 }
566566}
567567
568+ #[ stable( feature = "ip_cmp" , since = "1.15.0" ) ]
569+ impl PartialEq < Ipv4Addr > for IpAddr {
570+ fn eq ( & self , other : & Ipv4Addr ) -> bool {
571+ match * self {
572+ IpAddr :: V4 ( ref v4) => v4 == other,
573+ IpAddr :: V6 ( _) => false ,
574+ }
575+ }
576+ }
577+
578+ #[ stable( feature = "ip_cmp" , since = "1.15.0" ) ]
579+ impl PartialEq < IpAddr > for Ipv4Addr {
580+ fn eq ( & self , other : & IpAddr ) -> bool {
581+ match * other {
582+ IpAddr :: V4 ( ref v4) => self == v4,
583+ IpAddr :: V6 ( _) => false ,
584+ }
585+ }
586+ }
587+
568588#[ stable( feature = "rust1" , since = "1.0.0" ) ]
569589impl Eq for Ipv4Addr { }
570590
@@ -582,6 +602,26 @@ impl PartialOrd for Ipv4Addr {
582602 }
583603}
584604
605+ #[ stable( feature = "ip_cmp" , since = "1.15.0" ) ]
606+ impl PartialOrd < Ipv4Addr > for IpAddr {
607+ fn partial_cmp ( & self , other : & Ipv4Addr ) -> Option < Ordering > {
608+ match * self {
609+ IpAddr :: V4 ( ref v4) => v4. partial_cmp ( other) ,
610+ IpAddr :: V6 ( _) => Some ( Ordering :: Greater ) ,
611+ }
612+ }
613+ }
614+
615+ #[ stable( feature = "ip_cmp" , since = "1.15.0" ) ]
616+ impl PartialOrd < IpAddr > for Ipv4Addr {
617+ fn partial_cmp ( & self , other : & IpAddr ) -> Option < Ordering > {
618+ match * other {
619+ IpAddr :: V4 ( ref v4) => self . partial_cmp ( v4) ,
620+ IpAddr :: V6 ( _) => Some ( Ordering :: Less ) ,
621+ }
622+ }
623+ }
624+
585625#[ stable( feature = "rust1" , since = "1.0.0" ) ]
586626impl Ord for Ipv4Addr {
587627 fn cmp ( & self , other : & Ipv4Addr ) -> Ordering {
@@ -1040,6 +1080,26 @@ impl PartialEq for Ipv6Addr {
10401080 }
10411081}
10421082
1083+ #[ stable( feature = "ip_cmp" , since = "1.15.0" ) ]
1084+ impl PartialEq < IpAddr > for Ipv6Addr {
1085+ fn eq ( & self , other : & IpAddr ) -> bool {
1086+ match * other {
1087+ IpAddr :: V4 ( _) => false ,
1088+ IpAddr :: V6 ( ref v6) => self == v6,
1089+ }
1090+ }
1091+ }
1092+
1093+ #[ stable( feature = "ip_cmp" , since = "1.15.0" ) ]
1094+ impl PartialEq < Ipv6Addr > for IpAddr {
1095+ fn eq ( & self , other : & Ipv6Addr ) -> bool {
1096+ match * self {
1097+ IpAddr :: V4 ( _) => false ,
1098+ IpAddr :: V6 ( ref v6) => v6 == other,
1099+ }
1100+ }
1101+ }
1102+
10431103#[ stable( feature = "rust1" , since = "1.0.0" ) ]
10441104impl Eq for Ipv6Addr { }
10451105
@@ -1057,6 +1117,26 @@ impl PartialOrd for Ipv6Addr {
10571117 }
10581118}
10591119
1120+ #[ stable( feature = "ip_cmp" , since = "1.15.0" ) ]
1121+ impl PartialOrd < Ipv6Addr > for IpAddr {
1122+ fn partial_cmp ( & self , other : & Ipv6Addr ) -> Option < Ordering > {
1123+ match * self {
1124+ IpAddr :: V4 ( _) => Some ( Ordering :: Less ) ,
1125+ IpAddr :: V6 ( ref v6) => v6. partial_cmp ( other) ,
1126+ }
1127+ }
1128+ }
1129+
1130+ #[ stable( feature = "ip_cmp" , since = "1.15.0" ) ]
1131+ impl PartialOrd < IpAddr > for Ipv6Addr {
1132+ fn partial_cmp ( & self , other : & IpAddr ) -> Option < Ordering > {
1133+ match * other {
1134+ IpAddr :: V4 ( _) => Some ( Ordering :: Greater ) ,
1135+ IpAddr :: V6 ( ref v6) => self . partial_cmp ( v6) ,
1136+ }
1137+ }
1138+ }
1139+
10601140#[ stable( feature = "rust1" , since = "1.0.0" ) ]
10611141impl Ord for Ipv6Addr {
10621142 fn cmp ( & self , other : & Ipv6Addr ) -> Ordering {
@@ -1458,10 +1538,26 @@ mod tests {
14581538 }
14591539
14601540 #[ test]
1461- fn ord ( ) {
1462- assert ! ( Ipv4Addr :: new( 100 , 64 , 3 , 3 ) < Ipv4Addr :: new( 192 , 0 , 2 , 2 ) ) ;
1463- assert ! ( "2001:db8:f00::1002" . parse:: <Ipv6Addr >( ) . unwrap( ) <
1464- "2001:db8:f00::2001" . parse:: <Ipv6Addr >( ) . unwrap( ) ) ;
1541+ fn cmp ( ) {
1542+ let v41 = Ipv4Addr :: new ( 100 , 64 , 3 , 3 ) ;
1543+ let v42 = Ipv4Addr :: new ( 192 , 0 , 2 , 2 ) ;
1544+ let v61 = "2001:db8:f00::1002" . parse :: < Ipv6Addr > ( ) . unwrap ( ) ;
1545+ let v62 = "2001:db8:f00::2001" . parse :: < Ipv6Addr > ( ) . unwrap ( ) ;
1546+ assert ! ( v41 < v42) ;
1547+ assert ! ( v61 < v62) ;
1548+
1549+ assert_eq ! ( v41, IpAddr :: V4 ( v41) ) ;
1550+ assert_eq ! ( v61, IpAddr :: V6 ( v61) ) ;
1551+ assert ! ( v41 != IpAddr :: V4 ( v42) ) ;
1552+ assert ! ( v61 != IpAddr :: V6 ( v62) ) ;
1553+
1554+ assert ! ( v41 < IpAddr :: V4 ( v42) ) ;
1555+ assert ! ( v61 < IpAddr :: V6 ( v62) ) ;
1556+ assert ! ( IpAddr :: V4 ( v41) < v42) ;
1557+ assert ! ( IpAddr :: V6 ( v61) < v62) ;
1558+
1559+ assert ! ( v41 < IpAddr :: V6 ( v61) ) ;
1560+ assert ! ( IpAddr :: V4 ( v41) < v61) ;
14651561 }
14661562
14671563 #[ test]
0 commit comments