@@ -551,6 +551,26 @@ impl PartialEq for Ipv4Addr {
551
551
}
552
552
}
553
553
554
+ #[ stable( feature = "ip_cmp" , since = "1.15.0" ) ]
555
+ impl PartialEq < Ipv4Addr > for IpAddr {
556
+ fn eq ( & self , other : & Ipv4Addr ) -> bool {
557
+ match * self {
558
+ IpAddr :: V4 ( ref v4) => v4 == other,
559
+ IpAddr :: V6 ( _) => false ,
560
+ }
561
+ }
562
+ }
563
+
564
+ #[ stable( feature = "ip_cmp" , since = "1.15.0" ) ]
565
+ impl PartialEq < IpAddr > for Ipv4Addr {
566
+ fn eq ( & self , other : & IpAddr ) -> bool {
567
+ match * other {
568
+ IpAddr :: V4 ( ref v4) => self == v4,
569
+ IpAddr :: V6 ( _) => false ,
570
+ }
571
+ }
572
+ }
573
+
554
574
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
555
575
impl Eq for Ipv4Addr { }
556
576
@@ -568,6 +588,26 @@ impl PartialOrd for Ipv4Addr {
568
588
}
569
589
}
570
590
591
+ #[ stable( feature = "ip_cmp" , since = "1.15.0" ) ]
592
+ impl PartialOrd < Ipv4Addr > for IpAddr {
593
+ fn partial_cmp ( & self , other : & Ipv4Addr ) -> Option < Ordering > {
594
+ match * self {
595
+ IpAddr :: V4 ( ref v4) => v4. partial_cmp ( other) ,
596
+ IpAddr :: V6 ( _) => Some ( Ordering :: Greater ) ,
597
+ }
598
+ }
599
+ }
600
+
601
+ #[ stable( feature = "ip_cmp" , since = "1.15.0" ) ]
602
+ impl PartialOrd < IpAddr > for Ipv4Addr {
603
+ fn partial_cmp ( & self , other : & IpAddr ) -> Option < Ordering > {
604
+ match * other {
605
+ IpAddr :: V4 ( ref v4) => self . partial_cmp ( v4) ,
606
+ IpAddr :: V6 ( _) => Some ( Ordering :: Less ) ,
607
+ }
608
+ }
609
+ }
610
+
571
611
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
572
612
impl Ord for Ipv4Addr {
573
613
fn cmp ( & self , other : & Ipv4Addr ) -> Ordering {
@@ -1026,6 +1066,26 @@ impl PartialEq for Ipv6Addr {
1026
1066
}
1027
1067
}
1028
1068
1069
+ #[ stable( feature = "ip_cmp" , since = "1.15.0" ) ]
1070
+ impl PartialEq < IpAddr > for Ipv6Addr {
1071
+ fn eq ( & self , other : & IpAddr ) -> bool {
1072
+ match * other {
1073
+ IpAddr :: V4 ( _) => false ,
1074
+ IpAddr :: V6 ( ref v6) => self == v6,
1075
+ }
1076
+ }
1077
+ }
1078
+
1079
+ #[ stable( feature = "ip_cmp" , since = "1.15.0" ) ]
1080
+ impl PartialEq < Ipv6Addr > for IpAddr {
1081
+ fn eq ( & self , other : & Ipv6Addr ) -> bool {
1082
+ match * self {
1083
+ IpAddr :: V4 ( _) => false ,
1084
+ IpAddr :: V6 ( ref v6) => v6 == other,
1085
+ }
1086
+ }
1087
+ }
1088
+
1029
1089
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
1030
1090
impl Eq for Ipv6Addr { }
1031
1091
@@ -1043,6 +1103,26 @@ impl PartialOrd for Ipv6Addr {
1043
1103
}
1044
1104
}
1045
1105
1106
+ #[ stable( feature = "ip_cmp" , since = "1.15.0" ) ]
1107
+ impl PartialOrd < Ipv6Addr > for IpAddr {
1108
+ fn partial_cmp ( & self , other : & Ipv6Addr ) -> Option < Ordering > {
1109
+ match * self {
1110
+ IpAddr :: V4 ( _) => Some ( Ordering :: Less ) ,
1111
+ IpAddr :: V6 ( ref v6) => v6. partial_cmp ( other) ,
1112
+ }
1113
+ }
1114
+ }
1115
+
1116
+ #[ stable( feature = "ip_cmp" , since = "1.15.0" ) ]
1117
+ impl PartialOrd < IpAddr > for Ipv6Addr {
1118
+ fn partial_cmp ( & self , other : & IpAddr ) -> Option < Ordering > {
1119
+ match * other {
1120
+ IpAddr :: V4 ( _) => Some ( Ordering :: Greater ) ,
1121
+ IpAddr :: V6 ( ref v6) => self . partial_cmp ( v6) ,
1122
+ }
1123
+ }
1124
+ }
1125
+
1046
1126
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
1047
1127
impl Ord for Ipv6Addr {
1048
1128
fn cmp ( & self , other : & Ipv6Addr ) -> Ordering {
@@ -1444,10 +1524,26 @@ mod tests {
1444
1524
}
1445
1525
1446
1526
#[ test]
1447
- fn ord ( ) {
1448
- assert ! ( Ipv4Addr :: new( 100 , 64 , 3 , 3 ) < Ipv4Addr :: new( 192 , 0 , 2 , 2 ) ) ;
1449
- assert ! ( "2001:db8:f00::1002" . parse:: <Ipv6Addr >( ) . unwrap( ) <
1450
- "2001:db8:f00::2001" . parse:: <Ipv6Addr >( ) . unwrap( ) ) ;
1527
+ fn cmp ( ) {
1528
+ let v41 = Ipv4Addr :: new ( 100 , 64 , 3 , 3 ) ;
1529
+ let v42 = Ipv4Addr :: new ( 192 , 0 , 2 , 2 ) ;
1530
+ let v61 = "2001:db8:f00::1002" . parse :: < Ipv6Addr > ( ) . unwrap ( ) ;
1531
+ let v62 = "2001:db8:f00::2001" . parse :: < Ipv6Addr > ( ) . unwrap ( ) ;
1532
+ assert ! ( v41 < v42) ;
1533
+ assert ! ( v61 < v62) ;
1534
+
1535
+ assert_eq ! ( v41, IpAddr :: V4 ( v41) ) ;
1536
+ assert_eq ! ( v61, IpAddr :: V6 ( v61) ) ;
1537
+ assert ! ( v41 != IpAddr :: V4 ( v42) ) ;
1538
+ assert ! ( v61 != IpAddr :: V6 ( v62) ) ;
1539
+
1540
+ assert ! ( v41 < IpAddr :: V4 ( v42) ) ;
1541
+ assert ! ( v61 < IpAddr :: V6 ( v62) ) ;
1542
+ assert ! ( IpAddr :: V4 ( v41) < v42) ;
1543
+ assert ! ( IpAddr :: V6 ( v61) < v62) ;
1544
+
1545
+ assert ! ( v41 < IpAddr :: V6 ( v61) ) ;
1546
+ assert ! ( IpAddr :: V4 ( v41) < v61) ;
1451
1547
}
1452
1548
1453
1549
#[ test]
0 commit comments