|
34 | 34 | //! ```
|
35 | 35 |
|
36 | 36 | use core::borrow::{Borrow, BorrowMut};
|
| 37 | +use core::cmp::Ordering; |
37 | 38 | use core::fmt;
|
38 | 39 | use core::iter::FusedIterator;
|
39 | 40 | use core::mem::MaybeUninit;
|
@@ -957,33 +958,35 @@ impl<T: PartialEq, const N: usize> PartialEq for Deque<T, N> {
|
957 | 958 | }
|
958 | 959 | let (sa, sb) = self.as_slices();
|
959 | 960 | let (oa, ob) = other.as_slices();
|
960 |
| - if sa.len() == oa.len() { |
961 |
| - sa == oa && sb == ob |
962 |
| - } else if sa.len() < oa.len() { |
963 |
| - // Always divisible in three sections, for example: |
964 |
| - // self: [a b c|d e f] |
965 |
| - // other: [0 1 2 3|4 5] |
966 |
| - // front = 3, mid = 1, |
967 |
| - // [a b c] == [0 1 2] && [d] == [3] && [e f] == [4 5] |
968 |
| - let front = sa.len(); |
969 |
| - let mid = oa.len() - front; |
970 |
| - |
971 |
| - let (oa_front, oa_mid) = oa.split_at(front); |
972 |
| - let (sb_mid, sb_back) = sb.split_at(mid); |
973 |
| - debug_assert_eq!(sa.len(), oa_front.len()); |
974 |
| - debug_assert_eq!(sb_mid.len(), oa_mid.len()); |
975 |
| - debug_assert_eq!(sb_back.len(), ob.len()); |
976 |
| - sa == oa_front && sb_mid == oa_mid && sb_back == ob |
977 |
| - } else { |
978 |
| - let front = oa.len(); |
979 |
| - let mid = sa.len() - front; |
980 |
| - |
981 |
| - let (sa_front, sa_mid) = sa.split_at(front); |
982 |
| - let (ob_mid, ob_back) = ob.split_at(mid); |
983 |
| - debug_assert_eq!(sa_front.len(), oa.len()); |
984 |
| - debug_assert_eq!(sa_mid.len(), ob_mid.len()); |
985 |
| - debug_assert_eq!(sb.len(), ob_back.len()); |
986 |
| - sa_front == oa && sa_mid == ob_mid && sb == ob_back |
| 961 | + match sa.len().cmp(&oa.len()) { |
| 962 | + Ordering::Equal => sa == oa && sb == ob, |
| 963 | + Ordering::Less => { |
| 964 | + // Always divisible in three sections, for example: |
| 965 | + // self: [a b c|d e f] |
| 966 | + // other: [0 1 2 3|4 5] |
| 967 | + // front = 3, mid = 1, |
| 968 | + // [a b c] == [0 1 2] && [d] == [3] && [e f] == [4 5] |
| 969 | + let front = sa.len(); |
| 970 | + let mid = oa.len() - front; |
| 971 | + |
| 972 | + let (oa_front, oa_mid) = oa.split_at(front); |
| 973 | + let (sb_mid, sb_back) = sb.split_at(mid); |
| 974 | + debug_assert_eq!(sa.len(), oa_front.len()); |
| 975 | + debug_assert_eq!(sb_mid.len(), oa_mid.len()); |
| 976 | + debug_assert_eq!(sb_back.len(), ob.len()); |
| 977 | + sa == oa_front && sb_mid == oa_mid && sb_back == ob |
| 978 | + } |
| 979 | + Ordering::Greater => { |
| 980 | + let front = oa.len(); |
| 981 | + let mid = sa.len() - front; |
| 982 | + |
| 983 | + let (sa_front, sa_mid) = sa.split_at(front); |
| 984 | + let (ob_mid, ob_back) = ob.split_at(mid); |
| 985 | + debug_assert_eq!(sa_front.len(), oa.len()); |
| 986 | + debug_assert_eq!(sa_mid.len(), ob_mid.len()); |
| 987 | + debug_assert_eq!(sb.len(), ob_back.len()); |
| 988 | + sa_front == oa && sa_mid == ob_mid && sb == ob_back |
| 989 | + } |
987 | 990 | }
|
988 | 991 | }
|
989 | 992 | }
|
|
0 commit comments