mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-10-31 21:16:44 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			200 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			200 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| // tidy-alphabetical-start
 | |
| #![cfg_attr(bootstrap, feature(strict_provenance))]
 | |
| #![cfg_attr(not(bootstrap), feature(strict_provenance_lints))]
 | |
| #![cfg_attr(target_has_atomic = "128", feature(integer_atomics))]
 | |
| #![cfg_attr(test, feature(cfg_match))]
 | |
| #![feature(alloc_layout_extra)]
 | |
| #![feature(array_chunks)]
 | |
| #![feature(array_ptr_get)]
 | |
| #![feature(array_try_from_fn)]
 | |
| #![feature(array_windows)]
 | |
| #![feature(ascii_char)]
 | |
| #![feature(ascii_char_variants)]
 | |
| #![feature(async_iter_from_iter)]
 | |
| #![feature(async_iterator)]
 | |
| #![feature(bigint_helper_methods)]
 | |
| #![feature(cell_update)]
 | |
| #![feature(clone_to_uninit)]
 | |
| #![feature(const_align_of_val_raw)]
 | |
| #![feature(const_align_offset)]
 | |
| #![feature(const_bigint_helper_methods)]
 | |
| #![feature(const_black_box)]
 | |
| #![feature(const_eval_select)]
 | |
| #![feature(const_hash)]
 | |
| #![feature(const_heap)]
 | |
| #![feature(const_nonnull_new)]
 | |
| #![feature(const_num_midpoint)]
 | |
| #![feature(const_option_ext)]
 | |
| #![feature(const_pin_2)]
 | |
| #![feature(const_pointer_is_aligned)]
 | |
| #![feature(const_three_way_compare)]
 | |
| #![feature(const_trait_impl)]
 | |
| #![feature(core_intrinsics)]
 | |
| #![feature(core_io_borrowed_buf)]
 | |
| #![feature(core_private_bignum)]
 | |
| #![feature(core_private_diy_float)]
 | |
| #![feature(dec2flt)]
 | |
| #![feature(duration_constants)]
 | |
| #![feature(duration_constructors)]
 | |
| #![feature(error_generic_member_access)]
 | |
| #![feature(exact_size_is_empty)]
 | |
| #![feature(extern_types)]
 | |
| #![feature(float_minimum_maximum)]
 | |
| #![feature(flt2dec)]
 | |
| #![feature(fmt_internals)]
 | |
| #![feature(freeze)]
 | |
| #![feature(future_join)]
 | |
| #![feature(generic_assert_internals)]
 | |
| #![feature(get_many_mut)]
 | |
| #![feature(hasher_prefixfree_extras)]
 | |
| #![feature(hashmap_internals)]
 | |
| #![feature(inline_const_pat)]
 | |
| #![feature(int_roundings)]
 | |
| #![feature(ip)]
 | |
| #![feature(ip_from)]
 | |
| #![feature(is_ascii_octdigit)]
 | |
| #![feature(isqrt)]
 | |
| #![feature(iter_advance_by)]
 | |
| #![feature(iter_array_chunks)]
 | |
| #![feature(iter_chain)]
 | |
| #![feature(iter_collect_into)]
 | |
| #![feature(iter_intersperse)]
 | |
| #![feature(iter_is_partitioned)]
 | |
| #![feature(iter_map_windows)]
 | |
| #![feature(iter_next_chunk)]
 | |
| #![feature(iter_order_by)]
 | |
| #![feature(iter_partition_in_place)]
 | |
| #![feature(iterator_try_collect)]
 | |
| #![feature(iterator_try_reduce)]
 | |
| #![feature(layout_for_ptr)]
 | |
| #![feature(lazy_get)]
 | |
| #![feature(maybe_uninit_fill)]
 | |
| #![feature(maybe_uninit_uninit_array_transpose)]
 | |
| #![feature(maybe_uninit_write_slice)]
 | |
| #![feature(min_specialization)]
 | |
| #![feature(never_type)]
 | |
| #![feature(noop_waker)]
 | |
| #![feature(num_midpoint)]
 | |
| #![feature(numfmt)]
 | |
| #![feature(pattern)]
 | |
| #![feature(pointer_is_aligned_to)]
 | |
| #![feature(portable_simd)]
 | |
| #![feature(ptr_metadata)]
 | |
| #![feature(slice_from_ptr_range)]
 | |
| #![feature(slice_internals)]
 | |
| #![feature(slice_partition_dedup)]
 | |
| #![feature(slice_split_once)]
 | |
| #![feature(slice_take)]
 | |
| #![feature(split_array)]
 | |
| #![feature(split_as_slice)]
 | |
| #![feature(std_internals)]
 | |
| #![feature(step_trait)]
 | |
| #![feature(str_internals)]
 | |
| #![feature(strict_provenance_atomic_ptr)]
 | |
| #![feature(test)]
 | |
| #![feature(trait_upcasting)]
 | |
| #![feature(trusted_len)]
 | |
| #![feature(trusted_random_access)]
 | |
| #![feature(try_blocks)]
 | |
| #![feature(try_find)]
 | |
| #![feature(try_trait_v2)]
 | |
| #![feature(unsigned_is_multiple_of)]
 | |
| #![feature(unsize)]
 | |
| #![feature(unsized_tuple_coercion)]
 | |
| #![feature(unwrap_infallible)]
 | |
| // tidy-alphabetical-end
 | |
| #![allow(internal_features)]
 | |
| #![deny(fuzzy_provenance_casts)]
 | |
| #![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 {
 | |
|     ($left:expr, $right:expr$(, $($arg:tt)+)?) => {
 | |
|         {
 | |
|             fn runtime() {
 | |
|                 assert_eq!($left, $right, $($arg)*);
 | |
|             }
 | |
|             const fn compiletime() {
 | |
|                 assert!(matches!($left, const { $right }));
 | |
|             }
 | |
|             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;
 | |
| mod ascii;
 | |
| mod ascii_char;
 | |
| mod asserting;
 | |
| mod async_iter;
 | |
| mod atomic;
 | |
| mod bool;
 | |
| mod cell;
 | |
| mod char;
 | |
| mod clone;
 | |
| mod cmp;
 | |
| mod const_ptr;
 | |
| mod convert;
 | |
| mod ffi;
 | |
| mod fmt;
 | |
| mod future;
 | |
| mod hash;
 | |
| mod intrinsics;
 | |
| mod io;
 | |
| mod iter;
 | |
| mod lazy;
 | |
| mod macros;
 | |
| mod manually_drop;
 | |
| mod mem;
 | |
| mod net;
 | |
| mod nonzero;
 | |
| mod num;
 | |
| mod ops;
 | |
| mod option;
 | |
| mod panic;
 | |
| mod pattern;
 | |
| mod pin;
 | |
| mod pin_macro;
 | |
| mod ptr;
 | |
| mod result;
 | |
| mod simd;
 | |
| mod slice;
 | |
| mod str;
 | |
| 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)
 | |
| }
 | 
