-
Notifications
You must be signed in to change notification settings - Fork 73
/
Copy pathpartial_eq.rs
66 lines (60 loc) · 2.21 KB
/
partial_eq.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
//! Implements `PartialEq` for vector types.
macro_rules! impl_cmp_partial_eq {
(
[$elem_ty:ident; $elem_count:expr]:
$id:ident | $test_tt:tt |
($true:expr, $false:expr)
) => {
// FIXME: https://github.com/rust-lang-nursery/rust-clippy/issues/2892
#[cfg_attr(feature = "cargo-clippy", allow(clippy::partialeq_ne_impl))]
impl crate::cmp::PartialEq<$id> for $id {
#[inline]
fn eq(&self, other: &Self) -> bool {
$id::eq(*self, *other).all()
}
#[inline]
fn ne(&self, other: &Self) -> bool {
$id::ne(*self, *other).any()
}
}
// FIXME: https://github.com/rust-lang-nursery/rust-clippy/issues/2892
#[cfg_attr(feature = "cargo-clippy", allow(clippy::partialeq_ne_impl))]
impl crate::cmp::PartialEq<LexicographicallyOrdered<$id>>
for LexicographicallyOrdered<$id>
{
#[inline]
fn eq(&self, other: &Self) -> bool {
self.0 == other.0
}
#[inline]
fn ne(&self, other: &Self) -> bool {
self.0 != other.0
}
}
test_if!{
$test_tt:
paste::item! {
pub mod [<$id _cmp_PartialEq>] {
use super::*;
#[cfg_attr(not(target_arch = "wasm32"), test)] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
fn partial_eq() {
let a = $id::splat($false);
let b = $id::splat($true);
assert!(a != b);
assert!(!(a == b));
assert!(a == a);
assert!(!(a != a));
if $id::lanes() > 1 {
let a = $id::splat($false).replace(0, $true);
let b = $id::splat($true);
assert!(a != b);
assert!(!(a == b));
assert!(a == a);
assert!(!(a != a));
}
}
}
}
}
};
}