rust/library/coretests/tests/lib.rs

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

190 lines
4.9 KiB
Rust
Raw Normal View History

2024-07-29 17:50:12 +01:00
// tidy-alphabetical-start
#![cfg_attr(target_has_atomic = "128", feature(integer_atomics))]
#![cfg_attr(test, feature(cfg_match))]
#![feature(alloc_layout_extra)]
2020-05-18 21:24:37 +02:00
#![feature(array_chunks)]
#![feature(array_ptr_get)]
2024-07-29 17:50:12 +01:00
#![feature(array_try_from_fn)]
#![feature(array_windows)]
2023-07-03 13:11:39 -04:00
#![feature(ascii_char)]
#![feature(ascii_char_variants)]
2023-12-08 12:33:14 -08:00
#![feature(async_iter_from_iter)]
#![feature(async_iterator)]
#![feature(bigint_helper_methods)]
#![feature(bstr)]
2018-04-06 22:45:31 +02:00
#![feature(cell_update)]
#![feature(char_max_len)]
#![feature(clone_to_uninit)]
#![feature(const_eval_select)]
#![feature(const_swap_nonoverlapping)]
2021-03-13 18:40:47 +01:00
#![feature(const_trait_impl)]
#![feature(core_intrinsics)]
#![feature(core_intrinsics_fallbacks)]
#![feature(core_io_borrowed_buf)]
#![feature(core_private_bignum)]
#![feature(core_private_diy_float)]
#![feature(dec2flt)]
2020-08-30 18:31:34 +01:00
#![feature(duration_constants)]
2024-01-24 14:14:17 +01:00
#![feature(duration_constructors)]
2024-07-29 17:50:12 +01:00
#![feature(error_generic_member_access)]
2017-07-06 17:13:29 +02:00
#![feature(exact_size_is_empty)]
2025-02-08 16:51:04 -05:00
#![feature(extend_one)]
#![feature(extern_types)]
2024-07-29 17:50:12 +01:00
#![feature(float_minimum_maximum)]
#![feature(flt2dec)]
2017-03-17 15:05:44 +01:00
#![feature(fmt_internals)]
#![feature(formatting_options)]
2024-07-29 17:50:12 +01:00
#![feature(freeze)]
2021-12-07 21:10:39 -05:00
#![feature(future_join)]
2022-05-22 07:18:32 -03:00
#![feature(generic_assert_internals)]
#![feature(hasher_prefixfree_extras)]
#![feature(hashmap_internals)]
2024-07-29 17:50:12 +01:00
#![feature(int_roundings)]
2022-11-10 21:48:41 +01:00
#![feature(ip)]
#![feature(ip_from)]
2024-07-29 17:50:12 +01:00
#![feature(is_ascii_octdigit)]
#![feature(isolate_most_least_significant_one)]
2020-09-19 10:26:46 +02:00
#![feature(iter_advance_by)]
2022-01-02 18:31:56 +02:00
#![feature(iter_array_chunks)]
#![feature(iter_chain)]
2022-02-20 01:46:55 +01:00
#![feature(iter_collect_into)]
#![feature(iter_intersperse)]
#![feature(iter_is_partitioned)]
2024-07-29 17:50:12 +01:00
#![feature(iter_map_windows)]
2022-06-21 08:57:02 +02:00
#![feature(iter_next_chunk)]
#![feature(iter_order_by)]
2024-07-29 17:50:12 +01:00
#![feature(iter_partition_in_place)]
#![feature(iterator_try_collect)]
#![feature(iterator_try_reduce)]
2024-07-29 17:50:12 +01:00
#![feature(layout_for_ptr)]
#![feature(lazy_get)]
2024-07-29 17:50:12 +01:00
#![feature(maybe_uninit_fill)]
#![feature(maybe_uninit_uninit_array_transpose)]
#![feature(maybe_uninit_write_slice)]
#![feature(min_specialization)]
#![feature(never_type)]
2024-07-29 17:50:12 +01:00
#![feature(numfmt)]
#![feature(pattern)]
#![feature(pointer_is_aligned_to)]
2021-11-30 10:50:44 -05:00
#![feature(portable_simd)]
2021-03-26 16:10:21 -04:00
#![feature(ptr_metadata)]
2024-07-29 17:50:12 +01:00
#![feature(slice_from_ptr_range)]
#![feature(slice_internals)]
#![feature(slice_partition_dedup)]
#![feature(slice_split_once)]
#![feature(split_array)]
2024-07-29 17:50:12 +01:00
#![feature(split_as_slice)]
#![feature(std_internals)]
#![feature(step_trait)]
#![feature(str_internals)]
#![feature(strict_provenance_atomic_ptr)]
2024-11-27 15:14:47 +00:00
#![feature(strict_provenance_lints)]
2024-07-29 17:50:12 +01:00
#![feature(test)]
#![feature(trusted_len)]
#![feature(trusted_random_access)]
2024-07-29 17:50:12 +01:00
#![feature(try_blocks)]
#![feature(try_find)]
#![feature(try_trait_v2)]
2021-03-26 16:10:21 -04:00
#![feature(unsize)]
2024-07-29 17:50:12 +01:00
#![feature(unwrap_infallible)]
// tidy-alphabetical-end
2023-11-22 07:30:09 +01:00
#![allow(internal_features)]
#![deny(fuzzy_provenance_casts)]
2024-07-29 17:50:12 +01:00
#![deny(unsafe_op_in_unsafe_fn)]
/// Version of `assert_matches` that ignores fancy runtime printing in const context and uses structural equality.
macro_rules! assert_eq_const_safe {
($t:ty: $left:expr, $right:expr) => {
assert_eq_const_safe!($t: $left, $right, concat!(stringify!($left), " == ", stringify!($right)));
2024-10-26 14:02:50 -04:00
};
($t:ty: $left:expr, $right:expr$(, $($arg:tt)+)?) => {
{
fn runtime() {
2024-10-26 14:02:50 -04:00
assert_eq!($left, $right, $($($arg)*),*);
}
const fn compiletime() {
const PAT: $t = $right;
assert!(matches!($left, PAT), $($($arg)*),*);
}
core::intrinsics::const_eval_select((), compiletime, runtime)
}
};
}
/// Creates a test for runtime and a test for constant-time.
macro_rules! test_runtime_and_compiletime {
($(
$(#[$attr:meta])*
fn $test:ident() $block:block
)*) => {
$(
$(#[$attr])*
#[test]
fn $test() $block
$(#[$attr])*
const _: () = $block;
)*
}
}
mod alloc;
mod any;
mod array;
2018-03-08 22:55:54 -05:00
mod ascii;
mod ascii_char;
2022-05-22 07:18:32 -03:00
mod asserting;
2023-12-08 12:33:14 -08:00
mod async_iter;
mod atomic;
2019-09-07 15:49:27 +01:00
mod bool;
mod bstr;
mod cell;
mod char;
2015-10-15 21:07:20 +02:00
mod clone;
mod cmp;
2020-12-26 01:59:08 +01:00
mod const_ptr;
mod convert;
mod ffi;
mod fmt;
2021-12-07 21:10:39 -05:00
mod future;
mod hash;
2015-10-15 21:07:20 +02:00
mod intrinsics;
mod io;
mod iter;
mod lazy;
mod macros;
2018-07-27 12:12:55 +02:00
mod manually_drop;
mod mem;
2022-11-10 21:48:41 +01:00
mod net;
2014-12-23 15:52:02 -05:00
mod nonzero;
mod num;
mod ops;
mod option;
2022-09-27 19:09:32 +00:00
mod panic;
2017-12-17 14:44:03 -08:00
mod pattern;
mod pin;
mod pin_macro;
mod ptr;
mod result;
mod simd;
mod slice;
2014-08-18 21:43:43 -04:00
mod str;
2018-04-05 15:55:28 +02:00
mod str_lossy;
mod task;
mod time;
mod tuple;
mod unicode;
mod waker;
/// Copied from `std::test_helpers::test_rng`, see that function for rationale.
#[track_caller]
#[allow(dead_code)] // Not used in all configurations.
pub(crate) fn test_rng() -> rand_xorshift::XorShiftRng {
use core::hash::{BuildHasher, Hash, Hasher};
let mut hasher = std::hash::RandomState::new().build_hasher();
core::panic::Location::caller().hash(&mut hasher);
let hc64 = hasher.finish();
let seed_vec = hc64.to_le_bytes().into_iter().chain(0u8..8).collect::<Vec<u8>>();
let seed: [u8; 16] = seed_vec.as_slice().try_into().unwrap();
rand::SeedableRng::from_seed(seed)
}