From 0869d708775f102cfd2c0b461149ca9f4bfb91aa Mon Sep 17 00:00:00 2001 From: Jorge Aparicio <jorge@japaric.io> Date: Thu, 21 Dec 2017 13:57:43 +0100 Subject: [PATCH] impl Debug, PartialEq & Eq --- src/vec.rs | 59 ++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 51 insertions(+), 8 deletions(-) diff --git a/src/vec.rs b/src/vec.rs index c153896..99abad3 100644 --- a/src/vec.rs +++ b/src/vec.rs @@ -1,5 +1,5 @@ use core::marker::{PhantomData, Unsize}; -use core::{ops, ptr, slice}; +use core::{fmt, ops, ptr, slice}; use untagged_option::UntaggedOption; @@ -94,9 +94,10 @@ where /// new_len is less than len, the Vec is simply truncated. /// /// See also [`resize_default`]. - pub fn resize(&mut self, new_len: usize, value: T) - -> Result<(), BufferFullError> - where T: Clone { + pub fn resize(&mut self, new_len: usize, value: T) -> Result<(), BufferFullError> + where + T: Clone, + { if new_len > self.capacity() { return Err(BufferFullError); } @@ -119,13 +120,25 @@ where /// If `new_len` is less than `len`, the `Vec` is simply truncated. /// /// See also [`resize`]. - pub fn resize_default(&mut self, new_len: usize) - -> Result<(), BufferFullError> - where T: Clone + Default { + pub fn resize_default(&mut self, new_len: usize) -> Result<(), BufferFullError> + where + T: Clone + Default, + { self.resize(new_len, T::default()) } } +impl<T, A> fmt::Debug for Vec<T, A> +where + A: Unsize<[T]>, + T: fmt::Debug, +{ + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + let slice: &[T] = &**self; + slice.fmt(f) + } +} + impl<T, A> Drop for Vec<T, A> where A: Unsize<[T]>, @@ -159,6 +172,24 @@ where } } +impl<T, A, B> PartialEq<Vec<T, B>> for Vec<T, A> +where + A: Unsize<[T]>, + B: Unsize<[T]>, + T: PartialEq, +{ + fn eq(&self, rhs: &Vec<T, B>) -> bool { + PartialEq::eq(&**self, &**rhs) + } +} + +impl<T, A> Eq for Vec<T, A> +where + A: Unsize<[T]>, + T: Eq, +{ +} + impl<T, A> ops::Deref for Vec<T, A> where A: Unsize<[T]>, @@ -225,6 +256,19 @@ mod tests { assert_eq!(unsafe { COUNT }, 0); } + #[test] + fn eq() { + let mut xs: Vec<i32, [i32; 4]> = Vec::new(); + let mut ys: Vec<i32, [i32; 8]> = Vec::new(); + + assert_eq!(xs, ys); + + xs.push(1).unwrap(); + ys.push(1).unwrap(); + + assert_eq!(xs, ys); + } + #[test] fn full() { let mut v: Vec<i32, [i32; 4]> = Vec::new(); @@ -322,7 +366,6 @@ mod tests { v.resize(2, 0).unwrap(); assert_eq!(v.len(), 2); - // Shrink by 2 v.resize(0, 0).unwrap(); assert_eq!(v.len(), 0); -- GitLab