@@ -565,6 +565,26 @@ impl PartialEq for Ipv4Addr {
565
565
}
566
566
}
567
567
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
+
568
588
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
569
589
impl Eq for Ipv4Addr { }
570
590
@@ -582,6 +602,26 @@ impl PartialOrd for Ipv4Addr {
582
602
}
583
603
}
584
604
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
+
585
625
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
586
626
impl Ord for Ipv4Addr {
587
627
fn cmp ( & self , other : & Ipv4Addr ) -> Ordering {
@@ -1040,6 +1080,26 @@ impl PartialEq for Ipv6Addr {
1040
1080
}
1041
1081
}
1042
1082
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
+
1043
1103
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
1044
1104
impl Eq for Ipv6Addr { }
1045
1105
@@ -1057,6 +1117,26 @@ impl PartialOrd for Ipv6Addr {
1057
1117
}
1058
1118
}
1059
1119
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
+
1060
1140
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
1061
1141
impl Ord for Ipv6Addr {
1062
1142
fn cmp ( & self , other : & Ipv6Addr ) -> Ordering {
@@ -1458,10 +1538,26 @@ mod tests {
1458
1538
}
1459
1539
1460
1540
#[ 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) ;
1465
1561
}
1466
1562
1467
1563
#[ test]
0 commit comments