1 #![allow(renamed_and_removed_lints)] // clippy::cyclomatic_complexity → clippy::cognitive_complexity
2 #![allow(clippy::cyclomatic_complexity)]
3 #![allow(clippy::cognitive_complexity)]
4 #![allow(clippy::trivially_copy_pass_by_ref)]
5 #![allow(clippy::unknown_clippy_lints)]
7 #[cfg(feature = "use_core")]
11 extern crate derivative
;
13 #[derive(PartialEq, Eq, Derivative)]
14 #[derivative(PartialOrd, Ord)]
21 #[derivative(PartialEq, PartialOrd, Ord, Eq)]
23 struct WithPtr
<T
: ?Sized
> {
24 #[derivative(PartialEq(bound = ""))]
25 #[derivative(PartialOrd(bound = ""))]
26 #[derivative(Ord(bound = ""))]
27 #[derivative(Eq(bound = ""))]
31 #[derive(PartialEq, Eq, Derivative)]
32 #[derivative(PartialOrd, Ord)]
36 #[derive(PartialEq, Eq, Derivative)]
37 #[derivative(PartialOrd, Ord)]
40 #[derivative(PartialOrd = "ignore")]
41 #[derivative(Ord = "ignore")]
45 #[derive(PartialEq, Eq, Derivative)]
46 #[derivative(PartialOrd, Ord)]
49 #[derivative(PartialOrd = "ignore")]
50 #[derivative(Ord = "ignore")]
55 #[derive(PartialEq, Eq, Derivative)]
56 #[derivative(PartialOrd, Ord)]
60 PartialOrd(compare_with
= "partial_cmp_tenth"),
61 Ord(compare_with
= "cmp_tenth")
66 fn partial_cmp_tenth(lhs
: &u8, rhs
: &u8) -> std
::option
::Option
<std
::cmp
::Ordering
> {
70 Some((lhs
/ 10).cmp(&(rhs
/ 10)))
73 fn cmp_tenth(lhs
: &u8, rhs
: &u8) -> std
::cmp
::Ordering
{
74 (lhs
/ 10).cmp(&(rhs
/ 10))
78 #[derivative(PartialOrd, Ord, PartialEq, Eq)]
83 PartialOrd(compare_with
= "dummy_partial_cmp", bound
= ""),
84 Ord(compare_with
= "dummy_cmp", bound
= "")
89 fn dummy_partial_cmp
<T
>(_
: &T
, _
: &T
) -> std
::option
::Option
<std
::cmp
::Ordering
> {
90 Some(std
::cmp
::Ordering
::Less
)
92 fn dummy_cmp
<T
>(_
: &T
, _
: &T
) -> std
::cmp
::Ordering
{
93 std
::cmp
::Ordering
::Less
99 #[derivative(PartialEq, PartialOrd, Ord, Eq)]
101 struct GenericIgnore
<T
> {
103 #[derivative(PartialEq = "ignore")]
104 #[derivative(PartialOrd = "ignore")]
105 #[derivative(Ord = "ignore")]
111 #[derive(Clone, Copy)]
116 impl SomeTrait
for SomeType {}
120 use std
::cmp
::Ordering
;
123 Foo { foo: 7 }
.partial_cmp(&Foo { foo: 42 }
),
127 Foo { foo: 42 }
.partial_cmp(&Foo { foo: 42 }
),
128 Some(Ordering
::Equal
)
131 Foo { foo: 42 }
.partial_cmp(&Foo { foo: 7 }
),
132 Some(Ordering
::Greater
)
134 assert_eq
!(Foo { foo: 7 }
.cmp(&Foo { foo: 42 }
), Ordering
::Less
);
135 assert_eq
!(Foo { foo: 42 }
.cmp(&Foo { foo: 42 }
), Ordering
::Equal
);
136 assert_eq
!(Foo { foo: 42 }
.cmp(&Foo { foo: 7 }
), Ordering
::Greater
);
138 let pointers
: [*const dyn SomeTrait
; 2] = [&SomeType { foo: 1 }
, &SomeType { foo: 0 }
];
139 let ptr1
: *const dyn SomeTrait
= pointers
[0];
140 let ptr2
: *const dyn SomeTrait
= pointers
[1];
141 let (ptr1
, ptr2
) = (std
::cmp
::min(ptr1
, ptr2
), std
::cmp
::max(ptr1
, ptr2
));
143 WithPtr { foo: ptr1 }
.partial_cmp(&WithPtr { foo: ptr1 }
),
144 Some(Ordering
::Equal
)
147 WithPtr { foo: ptr1 }
.cmp(&WithPtr { foo: ptr1 }
),
151 WithPtr { foo: ptr1 }
.partial_cmp(&WithPtr { foo: ptr2 }
),
155 WithPtr { foo: ptr1 }
.cmp(&WithPtr { foo: ptr2 }
),
159 assert_eq
!(Empty
.partial_cmp(&Empty
), Some(Ordering
::Equal
));
161 AllIgnored { foo: 0 }
.partial_cmp(&AllIgnored { foo: 42 }
),
162 Some(Ordering
::Equal
)
165 OneIgnored { foo: 0, bar: 6 }
.partial_cmp(&OneIgnored { foo: 42, bar: 7 }
),
169 OneIgnored { foo: 0, bar: 6 }
.partial_cmp(&OneIgnored { foo: 42, bar: 6 }
),
170 Some(Ordering
::Equal
)
173 OneIgnored { foo: 0, bar: 7 }
.partial_cmp(&OneIgnored { foo: 42, bar: 6 }
),
174 Some(Ordering
::Greater
)
176 assert_eq
!(Empty
.cmp(&Empty
), Ordering
::Equal
);
178 AllIgnored { foo: 0 }
.cmp(&AllIgnored { foo: 42 }
),
182 OneIgnored { foo: 0, bar: 6 }
.cmp(&OneIgnored { foo: 42, bar: 7 }
),
186 OneIgnored { foo: 0, bar: 6 }
.cmp(&OneIgnored { foo: 42, bar: 6 }
),
190 OneIgnored { foo: 0, bar: 7 }
.cmp(&OneIgnored { foo: 42, bar: 6 }
),
195 Option
::None
::<u8>.partial_cmp(&Option
::Some(7)),
199 Option
::Some(6).partial_cmp(&Option
::Some(7)),
203 Option
::Some(42).partial_cmp(&Option
::Some(42)),
204 Some(Ordering
::Equal
)
207 Option
::None
::<u8>.partial_cmp(&Option
::None
::<u8>),
208 Some(Ordering
::Equal
)
211 Option
::Some(7).partial_cmp(&Option
::Some(6)),
212 Some(Ordering
::Greater
)
215 Option
::Some(7).partial_cmp(&Option
::None
::<u8>),
216 Some(Ordering
::Greater
)
218 assert_eq
!(Option
::None
::<u8>.cmp(&Option
::Some(7)), Ordering
::Less
);
219 assert_eq
!(Option
::Some(6).cmp(&Option
::Some(7)), Ordering
::Less
);
220 assert_eq
!(Option
::Some(42).cmp(&Option
::Some(42)), Ordering
::Equal
);
221 assert_eq
!(Option
::None
::<u8>.cmp(&Option
::None
::<u8>), Ordering
::Equal
);
222 assert_eq
!(Option
::Some(7).cmp(&Option
::Some(6)), Ordering
::Greater
);
223 assert_eq
!(Option
::Some(7).cmp(&Option
::None
::<u8>), Ordering
::Greater
);
225 assert_eq
!(Tenth(0).partial_cmp(&Tenth(67)), None
);
226 assert_eq
!(Tenth(42).partial_cmp(&Tenth(67)), Some(Ordering
::Less
));
227 assert_eq
!(Tenth(60).partial_cmp(&Tenth(67)), Some(Ordering
::Equal
));
228 assert_eq
!(Tenth(100).partial_cmp(&Tenth(67)), Some(Ordering
::Greater
));
229 assert_eq
!(Tenth(42).cmp(&Tenth(67)), Ordering
::Less
);
230 assert_eq
!(Tenth(60).cmp(&Tenth(67)), Ordering
::Equal
);
231 assert_eq
!(Tenth(100).cmp(&Tenth(67)), Ordering
::Greater
);
234 Generic(SomeType { foo: 0 }
).partial_cmp(&Generic(SomeType { foo: 0 }
)),
238 Generic(SomeType { foo: 0 }
).cmp(&Generic(SomeType { foo: 0 }
)),
247 .cmp(&GenericIgnore
{
258 .partial_cmp(&GenericIgnore
{
262 Some(Ordering
::Equal
)