]> git.lizzy.rs Git - rust.git/commitdiff
test Vec::extend
authorRalf Jung <post@ralfj.de>
Mon, 23 Mar 2020 12:02:02 +0000 (13:02 +0100)
committerRalf Jung <post@ralfj.de>
Sun, 5 Apr 2020 16:26:51 +0000 (18:26 +0200)
tests/run-pass/vec.rs [new file with mode: 0644]
tests/run-pass/vecs.rs [deleted file]

diff --git a/tests/run-pass/vec.rs b/tests/run-pass/vec.rs
new file mode 100644 (file)
index 0000000..a2f4484
--- /dev/null
@@ -0,0 +1,115 @@
+fn make_vec() -> Vec<u8> {
+    let mut v = Vec::with_capacity(4);
+    v.push(1);
+    v.push(2);
+    v
+}
+
+fn make_vec_macro() -> Vec<u8> {
+    vec![1, 2]
+}
+
+fn make_vec_macro_repeat() -> Vec<u8> {
+    vec![42; 5]
+}
+
+fn make_vec_macro_repeat_zeroed() -> Vec<u8> {
+    vec![0; 7]
+}
+
+fn vec_into_iter() -> u8 {
+    vec![1, 2, 3, 4]
+        .into_iter()
+        .map(|x| x * x)
+        .fold(0, |x, y| x + y)
+}
+
+fn vec_into_iter_rev() -> u8 {
+    vec![1, 2, 3, 4]
+        .into_iter()
+        .map(|x| x * x)
+        .fold(0, |x, y| x + y)
+}
+
+fn vec_into_iter_zst() -> usize {
+    vec![[0u64; 0], [0u64; 0]]
+        .into_iter()
+        .rev()
+        .map(|x| x.len())
+        .sum()
+}
+
+fn vec_into_iter_rev_zst() -> usize {
+    vec![[0u64; 0], [0u64; 0]]
+        .into_iter()
+        .rev()
+        .map(|x| x.len())
+        .sum()
+}
+
+fn vec_iter_and_mut() {
+    let mut v = vec![1,2,3,4];
+    for i in v.iter_mut() {
+        *i += 1;
+    }
+    assert_eq!(v.iter().sum::<i32>(), 2+3+4+5);
+}
+
+fn vec_iter_and_mut_rev() {
+    let mut v = vec![1,2,3,4];
+    for i in v.iter_mut().rev() {
+        *i += 1;
+    }
+    assert_eq!(v.iter().sum::<i32>(), 2+3+4+5);
+}
+
+fn vec_reallocate() -> Vec<u8> {
+    let mut v = vec![1, 2];
+    v.push(3);
+    v.push(4);
+    v.push(5);
+    v
+}
+
+fn vec_push_ptr_stable() {
+    let mut v = Vec::with_capacity(10);
+    v.push(0);
+    let v0 = unsafe { &*(&v[0] as *const _) }; // laundering the lifetime -- we take care that `v` does not reallocate, so that's okay.
+    v.push(1);
+    let _val = *v0;
+}
+
+fn vec_extend_ptr_stable() {
+    let mut v = Vec::with_capacity(10);
+    v.push(0);
+    let v0 = unsafe { &*(&v[0] as *const _) }; // laundering the lifetime -- we take care that `v` does not reallocate, so that's okay.
+    v.extend(&[1]);
+    let _val = *v0;
+    v.extend(vec![2]);
+    let _val = *v0;
+    v.extend(std::iter::once(3));
+    let _val = *v0;
+}
+
+fn main() {
+    assert_eq!(vec_reallocate().len(), 5);
+
+    assert_eq!(vec_into_iter(), 30);
+    assert_eq!(vec_into_iter_rev(), 30);
+    vec_iter_and_mut();
+    assert_eq!(vec_into_iter_zst(), 0);
+    assert_eq!(vec_into_iter_rev_zst(), 0);
+    vec_iter_and_mut_rev();
+
+    assert_eq!(make_vec().capacity(), 4);
+    assert_eq!(make_vec_macro(), [1, 2]);
+    assert_eq!(make_vec_macro_repeat(), [42; 5]);
+    assert_eq!(make_vec_macro_repeat_zeroed(), [0; 7]);
+
+    // Test interesting empty slice comparison
+    // (one is a real pointer, one an integer pointer).
+    assert_eq!((200..-5).step_by(1).collect::<Vec<isize>>(), []);
+
+    vec_push_ptr_stable();
+    vec_extend_ptr_stable();
+}
diff --git a/tests/run-pass/vecs.rs b/tests/run-pass/vecs.rs
deleted file mode 100644 (file)
index 739def8..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-fn make_vec() -> Vec<u8> {
-    let mut v = Vec::with_capacity(4);
-    v.push(1);
-    v.push(2);
-    v
-}
-
-fn make_vec_macro() -> Vec<u8> {
-    vec![1, 2]
-}
-
-fn make_vec_macro_repeat() -> Vec<u8> {
-    vec![42; 5]
-}
-
-fn make_vec_macro_repeat_zeroed() -> Vec<u8> {
-    vec![0; 7]
-}
-
-fn vec_into_iter() -> u8 {
-    vec![1, 2, 3, 4]
-        .into_iter()
-        .map(|x| x * x)
-        .fold(0, |x, y| x + y)
-}
-
-fn vec_into_iter_rev() -> u8 {
-    vec![1, 2, 3, 4]
-        .into_iter()
-        .map(|x| x * x)
-        .fold(0, |x, y| x + y)
-}
-
-fn vec_into_iter_zst() -> usize {
-    vec![[0u64; 0], [0u64; 0]]
-        .into_iter()
-        .rev()
-        .map(|x| x.len())
-        .sum()
-}
-
-fn vec_into_iter_rev_zst() -> usize {
-    vec![[0u64; 0], [0u64; 0]]
-        .into_iter()
-        .rev()
-        .map(|x| x.len())
-        .sum()
-}
-
-fn vec_iter_and_mut() {
-    let mut v = vec![1,2,3,4];
-    for i in v.iter_mut() {
-        *i += 1;
-    }
-    assert_eq!(v.iter().sum::<i32>(), 2+3+4+5);
-}
-
-fn vec_iter_and_mut_rev() {
-    let mut v = vec![1,2,3,4];
-    for i in v.iter_mut().rev() {
-        *i += 1;
-    }
-    assert_eq!(v.iter().sum::<i32>(), 2+3+4+5);
-}
-
-fn vec_reallocate() -> Vec<u8> {
-    let mut v = vec![1, 2];
-    v.push(3);
-    v.push(4);
-    v.push(5);
-    v
-}
-
-fn main() {
-    assert_eq!(vec_reallocate().len(), 5);
-
-    assert_eq!(vec_into_iter(), 30);
-    assert_eq!(vec_into_iter_rev(), 30);
-    vec_iter_and_mut();
-    assert_eq!(vec_into_iter_zst(), 0);
-    assert_eq!(vec_into_iter_rev_zst(), 0);
-    vec_iter_and_mut_rev();
-
-    assert_eq!(make_vec().capacity(), 4);
-    assert_eq!(make_vec_macro(), [1, 2]);
-    assert_eq!(make_vec_macro_repeat(), [42; 5]);
-    assert_eq!(make_vec_macro_repeat_zeroed(), [0; 7]);
-
-    // Test interesting empty slice comparison
-    // (one is a real pointer, one an integer pointer).
-    assert_eq!((200..-5).step_by(1).collect::<Vec<isize>>(), []);
-}