]> git.proxmox.com Git - rustc.git/blobdiff - vendor/tinyvec/tests/tinyvec.rs
New upstream version 1.51.0+dfsg1
[rustc.git] / vendor / tinyvec / tests / tinyvec.rs
index e02b647374e0dd935d87b530b7cf47a55721f122..df1700452fcae22b2612b01f05887772fe4800ad 100644 (file)
-#![allow(bad_style)]
-#![allow(clippy::redundant_clone)]
-
-use std::iter::FromIterator;
-use tinyvec::*;
-
-#[test]
-fn TinyVec_swap_remove() {
-  let mut tv: TinyVec<[i32; 10]> = Default::default();
-  tv.push(1);
-  tv.push(2);
-  tv.push(3);
-  tv.push(4);
-  assert_eq!(tv.swap_remove(3), 4);
-  assert_eq!(&tv[..], &[1, 2, 3][..]);
-  assert_eq!(tv.swap_remove(0), 1);
-  assert_eq!(&tv[..], &[3, 2][..]);
-  assert_eq!(tv.swap_remove(0), 3);
-  assert_eq!(&tv[..], &[2][..]);
-  assert_eq!(tv.swap_remove(0), 2);
-  assert_eq!(&tv[..], &[][..]);
-}
-
-#[test]
-fn TinyVec_capacity() {
-  let mut tv: TinyVec<[i32; 1]> = Default::default();
-  assert_eq!(tv.capacity(), 1);
-  tv.move_to_the_heap();
-  tv.extend_from_slice(&[1, 2, 3, 4]);
-  assert_eq!(tv.capacity(), 4);
-}
-
-#[test]
-fn TinyVec_drain() {
-  let mut tv: TinyVec<[i32; 10]> = Default::default();
-  tv.push(1);
-  tv.push(2);
-  tv.push(3);
-
-  assert_eq!(Vec::from_iter(tv.clone().drain(..)), vec![1, 2, 3]);
-
-  assert_eq!(Vec::from_iter(tv.clone().drain(..2)), vec![1, 2]);
-  assert_eq!(Vec::from_iter(tv.clone().drain(..3)), vec![1, 2, 3]);
-
-  assert_eq!(Vec::from_iter(tv.clone().drain(..=1)), vec![1, 2]);
-  assert_eq!(Vec::from_iter(tv.clone().drain(..=2)), vec![1, 2, 3]);
-
-  assert_eq!(Vec::from_iter(tv.clone().drain(0..)), vec![1, 2, 3]);
-  assert_eq!(Vec::from_iter(tv.clone().drain(1..)), vec![2, 3]);
-
-  assert_eq!(Vec::from_iter(tv.clone().drain(0..2)), vec![1, 2]);
-  assert_eq!(Vec::from_iter(tv.clone().drain(0..3)), vec![1, 2, 3]);
-  assert_eq!(Vec::from_iter(tv.clone().drain(1..2)), vec![2]);
-  assert_eq!(Vec::from_iter(tv.clone().drain(1..3)), vec![2, 3]);
-
-  assert_eq!(Vec::from_iter(tv.clone().drain(0..=1)), vec![1, 2]);
-  assert_eq!(Vec::from_iter(tv.clone().drain(0..=2)), vec![1, 2, 3]);
-  assert_eq!(Vec::from_iter(tv.clone().drain(1..=1)), vec![2]);
-  assert_eq!(Vec::from_iter(tv.clone().drain(1..=2)), vec![2, 3]);
-}
-
-#[test]
-fn TinyVec_resize() {
-  let mut tv: TinyVec<[i32; 10]> = Default::default();
-  tv.resize(20, 5);
-  assert_eq!(&tv[..], &[5; 20]);
-}
-
-#[test]
-fn TinyVec_from_slice_impl() {
-  let bigger_slice: [u8; 11] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
-  let tinyvec: TinyVec<[u8; 10]> = TinyVec::Heap((&bigger_slice[..]).into());
-  assert_eq!(TinyVec::from(&bigger_slice[..]), tinyvec);
-
-  let smaller_slice: [u8; 5] = [0, 1, 2, 3, 4];
-  let tinyvec: TinyVec<[u8; 10]> = TinyVec::Inline(ArrayVec::from_array_len(
-    [0, 1, 2, 3, 4, 0, 0, 0, 0, 0],
-    5,
-  ));
-  assert_eq!(TinyVec::from(&smaller_slice[..]), tinyvec);
-
-  let same_size: [u8; 4] = [0, 1, 2, 3];
-  let tinyvec: TinyVec<[u8; 4]> =
-    TinyVec::Inline(ArrayVec::from_array_len(same_size, 4));
-  assert_eq!(TinyVec::from(&same_size[..]), tinyvec);
-}
-
-#[test]
-fn TinyVec_from_array() {
-  let array = [9, 8, 7, 6, 5, 4, 3, 2, 1];
-  let tv = TinyVec::from(array);
-  assert_eq!(&array, &tv[..]);
-}
+#![cfg(feature = "alloc")]\r
+#![allow(bad_style)]\r
+#![allow(clippy::redundant_clone)]\r
+\r
+#[cfg(feature = "serde")]\r
+use serde_test::{assert_tokens, Token};\r
+use std::iter::FromIterator;\r
+use tinyvec::*;\r
+\r
+#[test]\r
+fn TinyVec_swap_remove() {\r
+  let mut tv: TinyVec<[i32; 10]> = Default::default();\r
+  tv.push(1);\r
+  tv.push(2);\r
+  tv.push(3);\r
+  tv.push(4);\r
+  assert_eq!(tv.swap_remove(3), 4);\r
+  assert_eq!(&tv[..], &[1, 2, 3][..]);\r
+  assert_eq!(tv.swap_remove(0), 1);\r
+  assert_eq!(&tv[..], &[3, 2][..]);\r
+  assert_eq!(tv.swap_remove(0), 3);\r
+  assert_eq!(&tv[..], &[2][..]);\r
+  assert_eq!(tv.swap_remove(0), 2);\r
+  assert_eq!(&tv[..], &[][..]);\r
+}\r
+\r
+#[test]\r
+fn TinyVec_capacity() {\r
+  let mut tv: TinyVec<[i32; 1]> = Default::default();\r
+  assert_eq!(tv.capacity(), 1);\r
+  tv.move_to_the_heap();\r
+  tv.extend_from_slice(&[1, 2, 3, 4]);\r
+  assert_eq!(tv.capacity(), 4);\r
+}\r
+\r
+#[test]\r
+fn TinyVec_drain() {\r
+  let mut tv: TinyVec<[i32; 10]> = Default::default();\r
+  tv.push(1);\r
+  tv.push(2);\r
+  tv.push(3);\r
+\r
+  assert_eq!(Vec::from_iter(tv.clone().drain(..)), vec![1, 2, 3]);\r
+\r
+  assert_eq!(Vec::from_iter(tv.clone().drain(..2)), vec![1, 2]);\r
+  assert_eq!(Vec::from_iter(tv.clone().drain(..3)), vec![1, 2, 3]);\r
+\r
+  assert_eq!(Vec::from_iter(tv.clone().drain(..=1)), vec![1, 2]);\r
+  assert_eq!(Vec::from_iter(tv.clone().drain(..=2)), vec![1, 2, 3]);\r
+\r
+  assert_eq!(Vec::from_iter(tv.clone().drain(0..)), vec![1, 2, 3]);\r
+  assert_eq!(Vec::from_iter(tv.clone().drain(1..)), vec![2, 3]);\r
+\r
+  assert_eq!(Vec::from_iter(tv.clone().drain(0..2)), vec![1, 2]);\r
+  assert_eq!(Vec::from_iter(tv.clone().drain(0..3)), vec![1, 2, 3]);\r
+  assert_eq!(Vec::from_iter(tv.clone().drain(1..2)), vec![2]);\r
+  assert_eq!(Vec::from_iter(tv.clone().drain(1..3)), vec![2, 3]);\r
+\r
+  assert_eq!(Vec::from_iter(tv.clone().drain(0..=1)), vec![1, 2]);\r
+  assert_eq!(Vec::from_iter(tv.clone().drain(0..=2)), vec![1, 2, 3]);\r
+  assert_eq!(Vec::from_iter(tv.clone().drain(1..=1)), vec![2]);\r
+  assert_eq!(Vec::from_iter(tv.clone().drain(1..=2)), vec![2, 3]);\r
+}\r
+\r
+#[test]\r
+fn TinyVec_splice() {\r
+  let mut tv: TinyVec<[i32; 10]> = Default::default();\r
+  tv.push(1);\r
+  tv.push(2);\r
+  tv.push(3);\r
+\r
+  // splice returns the same things as drain\r
+  assert_eq!(Vec::from_iter(tv.clone().splice(.., None)), vec![1, 2, 3]);\r
+\r
+  assert_eq!(Vec::from_iter(tv.clone().splice(..2, None)), vec![1, 2]);\r
+  assert_eq!(Vec::from_iter(tv.clone().splice(..3, None)), vec![1, 2, 3]);\r
+\r
+  assert_eq!(Vec::from_iter(tv.clone().splice(..=1, None)), vec![1, 2]);\r
+  assert_eq!(Vec::from_iter(tv.clone().splice(..=2, None)), vec![1, 2, 3]);\r
+\r
+  assert_eq!(Vec::from_iter(tv.clone().splice(0.., None)), vec![1, 2, 3]);\r
+  assert_eq!(Vec::from_iter(tv.clone().splice(1.., None)), vec![2, 3]);\r
+\r
+  assert_eq!(Vec::from_iter(tv.clone().splice(0..2, None)), vec![1, 2]);\r
+  assert_eq!(Vec::from_iter(tv.clone().splice(0..3, None)), vec![1, 2, 3]);\r
+  assert_eq!(Vec::from_iter(tv.clone().splice(1..2, None)), vec![2]);\r
+  assert_eq!(Vec::from_iter(tv.clone().splice(1..3, None)), vec![2, 3]);\r
+\r
+  assert_eq!(Vec::from_iter(tv.clone().splice(0..=1, None)), vec![1, 2]);\r
+  assert_eq!(Vec::from_iter(tv.clone().splice(0..=2, None)), vec![1, 2, 3]);\r
+  assert_eq!(Vec::from_iter(tv.clone().splice(1..=1, None)), vec![2]);\r
+  assert_eq!(Vec::from_iter(tv.clone().splice(1..=2, None)), vec![2, 3]);\r
+\r
+  // splice removes the same things as drain\r
+  let mut tv2 = tv.clone();\r
+  tv2.splice(.., None);\r
+  assert_eq!(tv2, tiny_vec![]);\r
+\r
+  let mut tv2 = tv.clone();\r
+  tv2.splice(..2, None);\r
+  assert_eq!(tv2, tiny_vec![3]);\r
+\r
+  let mut tv2 = tv.clone();\r
+  tv2.splice(..3, None);\r
+  assert_eq!(tv2, tiny_vec![]);\r
+\r
+  let mut tv2 = tv.clone();\r
+  tv2.splice(..=1, None);\r
+  assert_eq!(tv2, tiny_vec![3]);\r
+  let mut tv2 = tv.clone();\r
+  tv2.splice(..=2, None);\r
+  assert_eq!(tv2, tiny_vec![]);\r
+\r
+  let mut tv2 = tv.clone();\r
+  tv2.splice(0.., None);\r
+  assert_eq!(tv2, tiny_vec![]);\r
+  let mut tv2 = tv.clone();\r
+  tv2.splice(1.., None);\r
+  assert_eq!(tv2, tiny_vec![1]);\r
+\r
+  let mut tv2 = tv.clone();\r
+  tv2.splice(0..2, None);\r
+  assert_eq!(tv2, tiny_vec![3]);\r
+\r
+  let mut tv2 = tv.clone();\r
+  tv2.splice(0..3, None);\r
+  assert_eq!(tv2, tiny_vec![]);\r
+  let mut tv2 = tv.clone();\r
+  tv2.splice(1..2, None);\r
+  assert_eq!(tv2, tiny_vec![1, 3]);\r
+\r
+  let mut tv2 = tv.clone();\r
+  tv2.splice(1..3, None);\r
+  assert_eq!(tv2, tiny_vec![1]);\r
+\r
+  let mut tv2 = tv.clone();\r
+  tv2.splice(0..=1, None);\r
+  assert_eq!(tv2, tiny_vec![3]);\r
+\r
+  let mut tv2 = tv.clone();\r
+  tv2.splice(0..=2, None);\r
+  assert_eq!(tv2, tiny_vec![]);\r
+\r
+  let mut tv2 = tv.clone();\r
+  tv2.splice(1..=1, None);\r
+  assert_eq!(tv2, tiny_vec![1, 3]);\r
+\r
+  let mut tv2 = tv.clone();\r
+  tv2.splice(1..=2, None);\r
+  assert_eq!(tv2, tiny_vec![1]);\r
+\r
+  // splice adds the elements correctly\r
+  let mut tv2 = tv.clone();\r
+  tv2.splice(.., 4..=6);\r
+  assert_eq!(tv2, tiny_vec![4, 5, 6]);\r
+\r
+  let mut tv2 = tv.clone();\r
+  tv2.splice(..2, 4..=6);\r
+  assert_eq!(tv2, tiny_vec![4, 5, 6, 3]);\r
+\r
+  let mut tv2 = tv.clone();\r
+  tv2.splice(..3, 4..=6);\r
+  assert_eq!(tv2, tiny_vec![4, 5, 6]);\r
+\r
+  let mut tv2 = tv.clone();\r
+  tv2.splice(..=1, 4..=6);\r
+  assert_eq!(tv2, tiny_vec![4, 5, 6, 3]);\r
+\r
+  let mut tv2 = tv.clone();\r
+  tv2.splice(..=2, 4..=6);\r
+  assert_eq!(tv2, tiny_vec![4, 5, 6]);\r
+\r
+  let mut tv2 = tv.clone();\r
+  tv2.splice(0.., 4..=6);\r
+  assert_eq!(tv2, tiny_vec![4, 5, 6]);\r
+\r
+  let mut tv2 = tv.clone();\r
+  tv2.splice(1.., 4..=6);\r
+  assert_eq!(tv2, tiny_vec![1, 4, 5, 6]);\r
+\r
+  let mut tv2 = tv.clone();\r
+  tv2.splice(0..2, 4..=6);\r
+  assert_eq!(tv2, tiny_vec![4, 5, 6, 3]);\r
+\r
+  let mut tv2 = tv.clone();\r
+  tv2.splice(0..3, 4..=6);\r
+  assert_eq!(tv2, tiny_vec![4, 5, 6]);\r
+\r
+  let mut tv2 = tv.clone();\r
+  tv2.splice(1..2, 4..=6);\r
+  assert_eq!(tv2, tiny_vec![1, 4, 5, 6, 3]);\r
+\r
+  let mut tv2 = tv.clone();\r
+  tv2.splice(1..3, 4..=6);\r
+  assert_eq!(tv2, tiny_vec![1, 4, 5, 6]);\r
+\r
+  let mut tv2 = tv.clone();\r
+  tv2.splice(0..=1, 4..=6);\r
+  assert_eq!(tv2, tiny_vec![4, 5, 6, 3]);\r
+\r
+  let mut tv2 = tv.clone();\r
+  tv2.splice(0..=2, 4..=6);\r
+  assert_eq!(tv2, tiny_vec![4, 5, 6]);\r
+\r
+  let mut tv2 = tv.clone();\r
+  tv2.splice(1..=1, 4..=6);\r
+  assert_eq!(tv2, tiny_vec![1, 4, 5, 6, 3]);\r
+\r
+  let mut tv2 = tv.clone();\r
+  tv2.splice(1..=2, 4..=6);\r
+  assert_eq!(tv2, tiny_vec![1, 4, 5, 6]);\r
+\r
+  // splice adds the elements correctly when the replacement is smaller\r
+  let mut tv2 = tv.clone();\r
+  tv2.splice(.., Some(4));\r
+  assert_eq!(tv2, tiny_vec![4]);\r
+\r
+  let mut tv2 = tv.clone();\r
+  tv2.splice(..2, Some(4));\r
+  assert_eq!(tv2, tiny_vec![4, 3]);\r
+\r
+  let mut tv2 = tv.clone();\r
+  tv2.splice(1.., Some(4));\r
+  assert_eq!(tv2, tiny_vec![1, 4]);\r
+\r
+  let mut tv2 = tv.clone();\r
+  tv2.splice(1..=1, Some(4));\r
+  assert_eq!(tv2, tiny_vec![1, 4, 3]);\r
+}\r
+\r
+#[test]\r
+fn TinyVec_resize() {\r
+  let mut tv: TinyVec<[i32; 10]> = Default::default();\r
+  tv.resize(20, 5);\r
+  assert_eq!(&tv[..], &[5; 20]);\r
+}\r
+\r
+#[test]\r
+fn TinyVec_from_slice_impl() {\r
+  let bigger_slice: [u8; 11] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\r
+  let tinyvec: TinyVec<[u8; 10]> = TinyVec::Heap((&bigger_slice[..]).into());\r
+  assert_eq!(TinyVec::from(&bigger_slice[..]), tinyvec);\r
+\r
+  let smaller_slice: [u8; 5] = [0, 1, 2, 3, 4];\r
+  let tinyvec: TinyVec<[u8; 10]> = TinyVec::Inline(ArrayVec::from_array_len(\r
+    [0, 1, 2, 3, 4, 0, 0, 0, 0, 0],\r
+    5,\r
+  ));\r
+  assert_eq!(TinyVec::from(&smaller_slice[..]), tinyvec);\r
+\r
+  let same_size: [u8; 4] = [0, 1, 2, 3];\r
+  let tinyvec: TinyVec<[u8; 4]> =\r
+    TinyVec::Inline(ArrayVec::from_array_len(same_size, 4));\r
+  assert_eq!(TinyVec::from(&same_size[..]), tinyvec);\r
+}\r
+\r
+#[test]\r
+fn TinyVec_from_array() {\r
+  let array = [9, 8, 7, 6, 5, 4, 3, 2, 1];\r
+  let tv = TinyVec::from(array);\r
+  assert_eq!(&array, &tv[..]);\r
+}\r
+\r
+#[test]\r
+fn TinyVec_macro() {\r
+  let mut expected: TinyVec<[i32; 4]> = Default::default();\r
+  expected.push(1);\r
+  expected.push(2);\r
+  expected.push(3);\r
+\r
+  let actual = tiny_vec!(1, 2, 3);\r
+\r
+  assert_eq!(expected, actual);\r
+\r
+  assert_eq!(tiny_vec![0u8; 4], tiny_vec!(0u8, 0u8, 0u8, 0u8));\r
+  assert_eq!(tiny_vec![0u8; 4], tiny_vec!([u8; 4] => 0, 0, 0, 0));\r
+  assert_eq!(tiny_vec![0; 4], tiny_vec!(0, 0, 0, 0));\r
+  assert_eq!(tiny_vec![0; 4], tiny_vec!([u8; 4] => 0, 0, 0, 0));\r
+\r
+  let expected2 = tiny_vec![1.1; 3];\r
+  let actual2 = tiny_vec!([f32; 3] => 1.1, 1.1, 1.1);\r
+  assert_eq!(expected2, actual2);\r
+}\r
+\r
+#[test]\r
+fn TinyVec_macro_non_copy() {\r
+  // must use a variable here to avoid macro shenanigans\r
+  let s = String::new();\r
+  let _: TinyVec<[String; 10]> = tiny_vec!([String; 10] => s);\r
+}\r
+\r
+#[test]\r
+fn TinyVec_reserve() {\r
+  let mut tv: TinyVec<[i32; 4]> = Default::default();\r
+  assert_eq!(tv.capacity(), 4);\r
+  tv.extend_from_slice(&[1, 2]);\r
+  assert_eq!(tv.capacity(), 4);\r
+  tv.reserve(2);\r
+  assert_eq!(tv.capacity(), 4);\r
+  tv.reserve(4);\r
+  assert!(tv.capacity() >= 6);\r
+  tv.extend_from_slice(&[3, 4, 5, 6]);\r
+  tv.reserve(4);\r
+  assert!(tv.capacity() >= 10);\r
+}\r
+\r
+#[test]\r
+fn TinyVec_reserve_exact() {\r
+  let mut tv: TinyVec<[i32; 4]> = Default::default();\r
+  assert_eq!(tv.capacity(), 4);\r
+\r
+  tv.extend_from_slice(&[1, 2]);\r
+  assert_eq!(tv.capacity(), 4);\r
+  tv.reserve_exact(2);\r
+  assert_eq!(tv.capacity(), 4);\r
+  tv.reserve_exact(4);\r
+  assert!(tv.capacity() >= 6);\r
+  tv.extend_from_slice(&[3, 4, 5, 6]);\r
+  tv.reserve_exact(4);\r
+  assert!(tv.capacity() >= 10);\r
+}\r
+\r
+#[test]\r
+fn TinyVec_move_to_heap_and_shrink() {\r
+  let mut tv: TinyVec<[i32; 4]> = Default::default();\r
+  assert!(tv.is_inline());\r
+  tv.move_to_the_heap();\r
+  assert!(tv.is_heap());\r
+  assert_eq!(tv.capacity(), 0);\r
+\r
+  tv.push(1);\r
+  tv.shrink_to_fit();\r
+  assert!(tv.is_inline());\r
+  assert_eq!(tv.capacity(), 4);\r
+\r
+  tv.move_to_the_heap_and_reserve(3);\r
+  assert!(tv.is_heap());\r
+  assert_eq!(tv.capacity(), 4);\r
+  tv.extend(2..=4);\r
+  assert_eq!(tv.capacity(), 4);\r
+  assert_eq!(tv.as_slice(), [1, 2, 3, 4]);\r
+}\r
+\r
+#[cfg(feature = "serde")]\r
+#[test]\r
+fn TinyVec_ser_de_empty() {\r
+  let tv: TinyVec<[i32; 0]> = tiny_vec![];\r
+\r
+  assert_tokens(&tv, &[Token::Seq { len: Some(0) }, Token::SeqEnd]);\r
+}\r
+\r
+#[cfg(feature = "serde")]\r
+#[test]\r
+fn TinyVec_ser_de() {\r
+  let tv: TinyVec<[i32; 4]> = tiny_vec![1, 2, 3, 4];\r
+\r
+  assert_tokens(\r
+    &tv,\r
+    &[\r
+      Token::Seq { len: Some(4) },\r
+      Token::I32(1),\r
+      Token::I32(2),\r
+      Token::I32(3),\r
+      Token::I32(4),\r
+      Token::SeqEnd,\r
+    ],\r
+  );\r
+}\r
+\r
+#[cfg(feature = "serde")]\r
+#[test]\r
+fn TinyVec_ser_de_heap() {\r
+  let mut tv: TinyVec<[i32; 4]> = tiny_vec![1, 2, 3, 4];\r
+  tv.move_to_the_heap();\r
+\r
+  assert_tokens(\r
+    &tv,\r
+    &[\r
+      Token::Seq { len: Some(4) },\r
+      Token::I32(1),\r
+      Token::I32(2),\r
+      Token::I32(3),\r
+      Token::I32(4),\r
+      Token::SeqEnd,\r
+    ],\r
+  );\r
+}\r