summaryrefslogtreecommitdiffstats
path: root/tests/ui/generator/discriminant.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-07 05:48:48 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-07 05:48:48 +0000
commitef24de24a82fe681581cc130f342363c47c0969a (patch)
tree0d494f7e1a38b95c92426f58fe6eaa877303a86c /tests/ui/generator/discriminant.rs
parentReleasing progress-linux version 1.74.1+dfsg1-1~progress7.99u1. (diff)
downloadrustc-ef24de24a82fe681581cc130f342363c47c0969a.tar.xz
rustc-ef24de24a82fe681581cc130f342363c47c0969a.zip
Merging upstream version 1.75.0+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'tests/ui/generator/discriminant.rs')
-rw-r--r--tests/ui/generator/discriminant.rs137
1 files changed, 0 insertions, 137 deletions
diff --git a/tests/ui/generator/discriminant.rs b/tests/ui/generator/discriminant.rs
deleted file mode 100644
index 195e77022..000000000
--- a/tests/ui/generator/discriminant.rs
+++ /dev/null
@@ -1,137 +0,0 @@
-//! Tests that generator discriminant sizes and ranges are chosen optimally and that they are
-//! reflected in the output of `mem::discriminant`.
-
-// run-pass
-
-#![feature(generators, generator_trait, core_intrinsics, discriminant_kind)]
-
-use std::intrinsics::discriminant_value;
-use std::marker::{Unpin, DiscriminantKind};
-use std::mem::size_of_val;
-use std::{cmp, ops::*};
-
-macro_rules! yield25 {
- ($e:expr) => {
- yield $e;
- yield $e;
- yield $e;
- yield $e;
- yield $e;
-
- yield $e;
- yield $e;
- yield $e;
- yield $e;
- yield $e;
-
- yield $e;
- yield $e;
- yield $e;
- yield $e;
- yield $e;
-
- yield $e;
- yield $e;
- yield $e;
- yield $e;
- yield $e;
-
- yield $e;
- yield $e;
- yield $e;
- yield $e;
- yield $e;
- };
-}
-
-/// Yields 250 times.
-macro_rules! yield250 {
- () => {
- yield250!(())
- };
-
- ($e:expr) => {
- yield25!($e);
- yield25!($e);
- yield25!($e);
- yield25!($e);
- yield25!($e);
-
- yield25!($e);
- yield25!($e);
- yield25!($e);
- yield25!($e);
- yield25!($e);
- };
-}
-
-fn cycle(
- gen: impl Generator<()> + Unpin + DiscriminantKind<Discriminant = u32>,
- expected_max_discr: u32
-) {
- let mut gen = Box::pin(gen);
- let mut max_discr = 0;
- loop {
- max_discr = cmp::max(max_discr, discriminant_value(gen.as_mut().get_mut()));
- match gen.as_mut().resume(()) {
- GeneratorState::Yielded(_) => {}
- GeneratorState::Complete(_) => {
- assert_eq!(max_discr, expected_max_discr);
- return;
- }
- }
- }
-}
-
-fn main() {
- // Has only one invalid discr. value.
- let gen_u8_tiny_niche = || {
- || {
- // 3 reserved variants
-
- yield250!(); // 253 variants
-
- yield; // 254
- yield; // 255
- }
- };
-
- // Uses all values in the u8 discriminant.
- let gen_u8_full = || {
- || {
- // 3 reserved variants
-
- yield250!(); // 253 variants
-
- yield; // 254
- yield; // 255
- yield; // 256
- }
- };
-
- // Barely needs a u16 discriminant.
- let gen_u16 = || {
- || {
- // 3 reserved variants
-
- yield250!(); // 253 variants
-
- yield; // 254
- yield; // 255
- yield; // 256
- yield; // 257
- }
- };
-
- assert_eq!(size_of_val(&gen_u8_tiny_niche()), 1);
- assert_eq!(size_of_val(&Some(gen_u8_tiny_niche())), 1); // uses niche
- assert_eq!(size_of_val(&Some(Some(gen_u8_tiny_niche()))), 2); // cannot use niche anymore
- assert_eq!(size_of_val(&gen_u8_full()), 1);
- assert_eq!(size_of_val(&Some(gen_u8_full())), 2); // cannot use niche
- assert_eq!(size_of_val(&gen_u16()), 2);
- assert_eq!(size_of_val(&Some(gen_u16())), 2); // uses niche
-
- cycle(gen_u8_tiny_niche(), 254);
- cycle(gen_u8_full(), 255);
- cycle(gen_u16(), 256);
-}