diff --git a/crates/cxx-qt-lib/src/core/qlist/mod.rs b/crates/cxx-qt-lib/src/core/qlist/mod.rs index b61030298..91b035997 100644 --- a/crates/cxx-qt-lib/src/core/qlist/mod.rs +++ b/crates/cxx-qt-lib/src/core/qlist/mod.rs @@ -76,6 +76,42 @@ where } } +impl PartialEq<[U]> for QList +where + T: QListElement + PartialEq, +{ + fn eq(&self, other: &[U]) -> bool { + self.len() as usize == other.len() && self.iter().eq(other.iter()) + } +} + +impl PartialEq<&[U]> for QList +where + T: QListElement + PartialEq, +{ + fn eq(&self, other: &&[U]) -> bool { + *self == **other + } +} + +impl PartialEq<[U; N]> for QList +where + T: QListElement + PartialEq, +{ + fn eq(&self, other: &[U; N]) -> bool { + *self == other[..] + } +} + +impl PartialEq<&[U; N]> for QList +where + T: QListElement + PartialEq, +{ + fn eq(&self, other: &&[U; N]) -> bool { + *self == other[..] + } +} + impl Eq for QList where T: QListElement + Eq {} impl fmt::Debug for QList @@ -469,6 +505,8 @@ impl_qlist_element!(u64, qlist_u64, "QList_u64"); mod test { use super::*; + const EMPTY: [u8; 0] = []; + #[test] fn qlist_from_array_to_vec() { let array = [0, 1, 2]; @@ -482,4 +520,86 @@ mod test { let qlist = QList::::from([0, 1, 2]); assert_eq!(crate::serde_impl::roundtrip(&qlist), qlist); } + + #[test] + fn qlist_eq() { + let qlist = QList::::from([0, 1, 2]); + + assert_eq!(qlist, [0, 1, 2]); + assert_eq!(qlist, &[0, 1, 2]); + + assert_eq!(qlist, [0, 1, 2][..]); + assert_eq!(qlist, &[0, 1, 2][..]); + + let vec = vec![0, 1, 2]; + assert_eq!(qlist, vec[..]); + assert_eq!(qlist, vec.as_slice()); + } + + #[test] + fn qlist_eq_empty() { + let qlist = QList::::default(); + + assert_eq!(qlist, EMPTY); + assert_eq!(qlist, &EMPTY); + assert_eq!(qlist, EMPTY[..]); + assert_eq!(qlist, &EMPTY[..]); + } + + #[test] + fn qlist_ne_empty() { + let qlist = QList::::default(); + + assert_ne!(qlist, [1]); + assert_ne!(qlist, &[1]); + + assert_ne!(qlist, [2][..]); + assert_ne!(qlist, &[2][..]); + } + + #[test] + fn qlist_ne_different_contents() { + let qlist = QList::::from([0, 1, 2]); + + assert_ne!(qlist, [0, 1, 3]); + assert_ne!(qlist, &[0, 1, 3]); + + assert_ne!(qlist, [2, 1, 0][..]); + assert_ne!(qlist, &[2, 1, 0][..]); + + let vec = vec![1, 2, 0]; + assert_ne!(qlist, vec[..]); + assert_ne!(qlist, vec.as_slice()); + } + + #[test] + fn qlist_ne_different_lengths() { + let qlist = QList::::from([0, 1, 2]); + + assert_ne!(qlist, [0, 1]); + assert_ne!(qlist, &[0, 1, 2, 3]); + + assert_ne!(qlist, [0, 1][..]); + assert_ne!(qlist, &[0, 1, 2, 3][..]); + + assert_ne!(qlist, EMPTY[..]); + assert_ne!(qlist, &EMPTY[..]); + assert_ne!(qlist, EMPTY); + assert_ne!(qlist, &EMPTY); + } + + #[test] + fn qlist_eq_qstrings() { + let qlist = QList::::from([QString::from("a"), QString::from("b")]); + + assert_eq!(qlist, [QString::from("a"), QString::from("b")]); + assert_eq!(qlist, &[QString::from("a"), QString::from("b")]); + assert_eq!(qlist, [QString::from("a"), QString::from("b")][..]); + assert_eq!(qlist, &[QString::from("a"), QString::from("b")][..]); + + assert_ne!(qlist, [QString::from("a"), QString::from("c")]); + assert_ne!(qlist, &[QString::from("a"), QString::from("c")]); + assert_ne!(qlist, [QString::from("a"), QString::from("c")][..]); + assert_ne!(qlist, &[QString::from("a"), QString::from("c")][..]); + } }