//@ run-pass

use std::mem;

// Univariant C-like enum
#[repr(i32)]
enum Univariant {
    X = 17
}

#[repr(u16)]
enum UnivariantWithoutDescr {
    Y
}

#[repr(u8)]
enum UnivariantWithData {
    Z(u8),
}

pub fn main() {
    {
        assert_eq!(4, mem::size_of::<Univariant>());
        assert_eq!(17, Univariant::X as i32);

        let enums: &[Univariant] =
            &[Univariant::X, Univariant::X, Univariant::X];
        let ints: &[i32] = unsafe { mem::transmute(enums) };
        // check it has the same memory layout as i32
        assert_eq!(&[17, 17, 17], ints);
    }

    {
        assert_eq!(2, mem::size_of::<UnivariantWithoutDescr>());
        let descr = UnivariantWithoutDescr::Y as u16;

        let enums: &[UnivariantWithoutDescr] =
            &[UnivariantWithoutDescr::Y, UnivariantWithoutDescr::Y, UnivariantWithoutDescr::Y];
        let ints: &[u16] = unsafe { mem::transmute(enums) };
        // check it has the same memory layout as u16
        assert_eq!(&[descr, descr, descr], ints);
    }

    {
        assert_eq!(2, mem::size_of::<UnivariantWithData>());

        match UnivariantWithData::Z(4) {
            UnivariantWithData::Z(x) => assert_eq!(x, 4),
        }
    }
}
