]> git.lizzy.rs Git - rust.git/blob - src/test/run-pass/enum-discrim-width-stuff.rs
prefer "FIXME" to "TODO".
[rust.git] / src / test / run-pass / enum-discrim-width-stuff.rs
1 // Copyright 2013 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
4 //
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
10
11 #![feature(macro_rules)]
12
13 macro_rules! check {
14     ($m:ident, $t:ty, $v:expr) => {{
15         mod $m {
16             use std::mem::size_of;
17             #[deriving(Show)]
18             enum E {
19                 V = $v,
20                 A = 0
21             }
22             static C: E = E::V;
23             pub fn check() {
24                 assert_eq!(size_of::<E>(), size_of::<$t>());
25                 assert_eq!(E::V as $t, $v as $t);
26                 assert_eq!(C as $t, $v as $t);
27                 assert_eq!(format!("{}", E::V), "V".to_string());
28                 assert_eq!(format!("{}", C), "V".to_string());
29             }
30         }
31         $m::check();
32     }}
33 }
34
35 pub fn main() {
36     check!(a, u8, 0x17);
37     check!(b, u8, 0xe8);
38     check!(c, u16, 0x1727);
39     check!(d, u16, 0xe8d8);
40     check!(e, u32, 0x17273747);
41     check!(f, u32, 0xe8d8c8b8);
42
43     check!(z, i8, 0x17);
44     check!(y, i8, -0x17);
45     check!(x, i16, 0x1727);
46     check!(w, i16, -0x1727);
47     check!(v, i32, 0x17273747);
48     check!(u, i32, -0x17273747);
49
50     enum Simple { A, B }
51     assert_eq!(::std::mem::size_of::<Simple>(), 1);
52 }