@@ -551,6 +551,26 @@ impl PartialEq for Ipv4Addr {
551551 }
552552}
553553
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+
554574#[ stable( feature = "rust1" , since = "1.0.0" ) ]
555575impl Eq for Ipv4Addr { }
556576
@@ -568,6 +588,26 @@ impl PartialOrd for Ipv4Addr {
568588 }
569589}
570590
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+
571611#[ stable( feature = "rust1" , since = "1.0.0" ) ]
572612impl Ord for Ipv4Addr {
573613 fn cmp ( & self , other : & Ipv4Addr ) -> Ordering {
@@ -1026,6 +1066,26 @@ impl PartialEq for Ipv6Addr {
10261066 }
10271067}
10281068
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+
10291089#[ stable( feature = "rust1" , since = "1.0.0" ) ]
10301090impl Eq for Ipv6Addr { }
10311091
@@ -1043,6 +1103,26 @@ impl PartialOrd for Ipv6Addr {
10431103 }
10441104}
10451105
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+
10461126#[ stable( feature = "rust1" , since = "1.0.0" ) ]
10471127impl Ord for Ipv6Addr {
10481128 fn cmp ( & self , other : & Ipv6Addr ) -> Ordering {
@@ -1444,10 +1524,26 @@ mod tests {
14441524 }
14451525
14461526 #[ 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) ;
14511547 }
14521548
14531549 #[ test]
0 commit comments