summaryrefslogtreecommitdiffstats
path: root/library/alloc/tests
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-19 09:26:03 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-19 09:26:03 +0000
commit9918693037dce8aa4bb6f08741b6812923486c18 (patch)
tree21d2b40bec7e6a7ea664acee056eb3d08e15a1cf /library/alloc/tests
parentReleasing progress-linux version 1.75.0+dfsg1-5~progress7.99u1. (diff)
downloadrustc-9918693037dce8aa4bb6f08741b6812923486c18.tar.xz
rustc-9918693037dce8aa4bb6f08741b6812923486c18.zip
Merging upstream version 1.76.0+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'library/alloc/tests')
-rw-r--r--library/alloc/tests/arc.rs1
-rw-r--r--library/alloc/tests/borrow.rs2
-rw-r--r--library/alloc/tests/lib.rs5
-rw-r--r--library/alloc/tests/rc.rs1
-rw-r--r--library/alloc/tests/str.rs11
-rw-r--r--library/alloc/tests/vec.rs53
6 files changed, 65 insertions, 8 deletions
diff --git a/library/alloc/tests/arc.rs b/library/alloc/tests/arc.rs
index ce40b5c9b..d564a30b1 100644
--- a/library/alloc/tests/arc.rs
+++ b/library/alloc/tests/arc.rs
@@ -1,6 +1,5 @@
use std::any::Any;
use std::cell::RefCell;
-use std::cmp::PartialEq;
use std::iter::TrustedLen;
use std::mem;
use std::sync::{Arc, Weak};
diff --git a/library/alloc/tests/borrow.rs b/library/alloc/tests/borrow.rs
index 57976aa6c..af7efb7d7 100644
--- a/library/alloc/tests/borrow.rs
+++ b/library/alloc/tests/borrow.rs
@@ -1,4 +1,4 @@
-use std::borrow::{Cow, ToOwned};
+use std::borrow::Cow;
use std::ffi::{CStr, OsStr};
use std::path::Path;
use std::rc::Rc;
diff --git a/library/alloc/tests/lib.rs b/library/alloc/tests/lib.rs
index aa7a331b3..2dcfc6b4a 100644
--- a/library/alloc/tests/lib.rs
+++ b/library/alloc/tests/lib.rs
@@ -1,5 +1,6 @@
#![feature(allocator_api)]
#![feature(alloc_layout_extra)]
+#![feature(iter_array_chunks)]
#![feature(assert_matches)]
#![feature(btree_extract_if)]
#![feature(cow_is_borrowed)]
@@ -40,11 +41,11 @@
#![feature(thin_box)]
#![feature(strict_provenance)]
#![feature(drain_keep_rest)]
+#![allow(internal_features)]
#![deny(fuzzy_provenance_casts)]
#![deny(unsafe_op_in_unsafe_fn)]
-use std::collections::hash_map::DefaultHasher;
-use std::hash::{Hash, Hasher};
+use std::hash::{DefaultHasher, Hash, Hasher};
mod arc;
mod autotraits;
diff --git a/library/alloc/tests/rc.rs b/library/alloc/tests/rc.rs
index efb39a609..499740e73 100644
--- a/library/alloc/tests/rc.rs
+++ b/library/alloc/tests/rc.rs
@@ -1,6 +1,5 @@
use std::any::Any;
use std::cell::RefCell;
-use std::cmp::PartialEq;
use std::iter::TrustedLen;
use std::mem;
use std::rc::{Rc, Weak};
diff --git a/library/alloc/tests/str.rs b/library/alloc/tests/str.rs
index cb59a9d4a..df8a26062 100644
--- a/library/alloc/tests/str.rs
+++ b/library/alloc/tests/str.rs
@@ -1171,6 +1171,17 @@ fn test_iterator() {
}
#[test]
+fn test_iterator_advance() {
+ let s = "「赤錆」と呼ばれる鉄錆は、水の存在下での鉄の自然酸化によって生じる、オキシ水酸化鉄(III) 等の(含水)酸化物粒子の疎な凝集膜であるとみなせる。";
+ let chars: Vec<char> = s.chars().collect();
+ let mut it = s.chars();
+ it.advance_by(1).unwrap();
+ assert_eq!(it.next(), Some(chars[1]));
+ it.advance_by(33).unwrap();
+ assert_eq!(it.next(), Some(chars[35]));
+}
+
+#[test]
fn test_rev_iterator() {
let s = "ศไทย中华Việt Nam";
let v = ['m', 'a', 'N', ' ', 't', 'ệ', 'i', 'V', '华', '中', 'ย', 'ท', 'ไ', 'ศ'];
diff --git a/library/alloc/tests/vec.rs b/library/alloc/tests/vec.rs
index d44dcfbf6..364dc9201 100644
--- a/library/alloc/tests/vec.rs
+++ b/library/alloc/tests/vec.rs
@@ -1,6 +1,5 @@
use core::alloc::{Allocator, Layout};
-use core::assert_eq;
-use core::iter::IntoIterator;
+use core::{assert_eq, assert_ne};
use core::num::NonZeroUsize;
use core::ptr::NonNull;
use std::alloc::System;
@@ -1185,6 +1184,54 @@ fn test_from_iter_specialization_with_iterator_adapters() {
}
#[test]
+fn test_in_place_specialization_step_up_down() {
+ fn assert_in_place_trait<T: InPlaceIterable>(_: &T) {}
+ let src = vec![[0u8; 4]; 256];
+ let srcptr = src.as_ptr();
+ let src_cap = src.capacity();
+ let iter = src.into_iter().flatten();
+ assert_in_place_trait(&iter);
+ let sink = iter.collect::<Vec<_>>();
+ let sinkptr = sink.as_ptr();
+ assert_eq!(srcptr as *const u8, sinkptr);
+ assert_eq!(src_cap * 4, sink.capacity());
+
+ let iter = sink.into_iter().array_chunks::<4>();
+ assert_in_place_trait(&iter);
+ let sink = iter.collect::<Vec<_>>();
+ let sinkptr = sink.as_ptr();
+ assert_eq!(srcptr, sinkptr);
+ assert_eq!(src_cap, sink.capacity());
+
+ let mut src: Vec<u8> = Vec::with_capacity(17);
+ let src_bytes = src.capacity();
+ src.resize(8, 0u8);
+ let sink: Vec<[u8; 4]> = src.into_iter().array_chunks::<4>().collect();
+ let sink_bytes = sink.capacity() * 4;
+ assert_ne!(src_bytes, sink_bytes);
+ assert_eq!(sink.len(), 2);
+
+ let mut src: Vec<[u8; 3]> = Vec::with_capacity(17);
+ src.resize( 8, [0; 3]);
+ let iter = src.into_iter().map(|[a, b, _]| [a, b]);
+ assert_in_place_trait(&iter);
+ let sink: Vec<[u8; 2]> = iter.collect();
+ assert_eq!(sink.len(), 8);
+ assert!(sink.capacity() <= 25);
+
+ let src = vec![[0u8; 4]; 256];
+ let srcptr = src.as_ptr();
+ let iter = src
+ .into_iter()
+ .flat_map(|a| {
+ a.into_iter().map(|b| b.wrapping_add(1))
+ });
+ assert_in_place_trait(&iter);
+ let sink = iter.collect::<Vec<_>>();
+ assert_eq!(srcptr as *const u8, sink.as_ptr());
+}
+
+#[test]
fn test_from_iter_specialization_head_tail_drop() {
let drop_count: Vec<_> = (0..=2).map(|_| Rc::new(())).collect();
let src: Vec<_> = drop_count.iter().cloned().collect();
@@ -1933,7 +1980,7 @@ fn vec_macro_repeating_null_raw_fat_pointer() {
let vec = vec![null_raw_dyn; 1];
dbg!(ptr_metadata(vec[0]));
- assert!(vec[0] == null_raw_dyn);
+ assert!(std::ptr::eq(vec[0], null_raw_dyn));
// Polyfill for https://github.com/rust-lang/rfcs/pull/2580