// skip-filecheck
//@ test-mir-pass: EnumSizeOpt
// EMIT_MIR_FOR_EACH_BIT_WIDTH
//@ compile-flags: -Zunsound-mir-opts -Zdump-mir-exclude-alloc-bytes

#![feature(arbitrary_enum_discriminant, repr128)]

// Tests that an enum with a variant with no data gets correctly transformed.
pub enum NoData {
    Large([u8; 8196]),
    None,
}

// Tests that an enum with a variant with data that is a valid candidate gets transformed.
pub enum Candidate {
    Small(u8),
    Large([u8; 8196]),
}

// Tests that an enum which has a discriminant much higher than the variant does not get
// tformed.
#[repr(u32)]
pub enum InvalidIdxs {
    A = 302,
    Large([u64; 1024]),
}

// Tests that an enum with too high of a discriminant index (not in bounds of usize) does not
// get tformed.
#[repr(u128)]
pub enum NotTrunctable {
    A = 0,
    B([u8; 1024]) = 1,
    C([u8; 4096]) = 0x10000000000000001,
}

// Tests that an enum with discriminants in random order still gets tformed correctly.
#[repr(u32)]
pub enum RandOrderDiscr {
    A = 13,
    B([u8; 1024]) = 5,
    C = 7,
}

// EMIT_MIR enum_opt.unin.EnumSizeOpt.diff
pub fn unin() -> NoData {
    let mut a = NoData::None;
    a = NoData::Large([1; 8196]);
    a
}

// EMIT_MIR enum_opt.cand.EnumSizeOpt.diff
pub fn cand() -> Candidate {
    let mut a = Candidate::Small(1);
    a = Candidate::Large([1; 8196]);
    a
}

// EMIT_MIR enum_opt.invalid.EnumSizeOpt.diff
pub fn invalid() -> InvalidIdxs {
    let mut a = InvalidIdxs::A;
    a = InvalidIdxs::Large([0; 1024]);
    a
}

// EMIT_MIR enum_opt.trunc.EnumSizeOpt.diff
pub fn trunc() -> NotTrunctable {
    let mut a = NotTrunctable::A;
    a = NotTrunctable::B([0; 1024]);
    a = NotTrunctable::C([0; 4096]);
    a
}

pub fn rand_order() -> RandOrderDiscr {
    let mut a = RandOrderDiscr::A;
    a = RandOrderDiscr::B([0; 1024]);
    a = RandOrderDiscr::C;
    a
}

pub fn main() {
    unin();
    cand();
    invalid();
    trunc();
    rand_order();
}
