From ac4644d7de7ec1528061dd4bb9639308c6018ee6 Mon Sep 17 00:00:00 2001 From: Jed Davis Date: Fri, 25 Oct 2013 21:22:00 -0700 Subject: [PATCH] Add another discriminant-size-related test, this time with fields. --- src/test/run-pass/small-enums-with-fields.rs | 41 ++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 src/test/run-pass/small-enums-with-fields.rs diff --git a/src/test/run-pass/small-enums-with-fields.rs b/src/test/run-pass/small-enums-with-fields.rs new file mode 100644 index 00000000000..c4f4b5e4e37 --- /dev/null +++ b/src/test/run-pass/small-enums-with-fields.rs @@ -0,0 +1,41 @@ +// Copyright 2013 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#[feature(macro_rules)]; + +use std::mem::size_of; + +macro_rules! check { + ($t:ty, $sz:expr, $($e:expr, $s:expr),*) => {{ + assert_eq!(size_of::<$t>(), $sz); + $({ + static S: $t = $e; + let v: $t = $e; + assert_eq!(S, v); + assert_eq!(format!("{:?}", v), ~$s); + assert_eq!(format!("{:?}", S), ~$s); + });* + }} +} + +pub fn main() { + check!(Option, 2, + None, "None", + Some(129u8), "Some(129u8)"); + check!(Option, 4, + None, "None", + Some(-20000i16), "Some(-20000i16)"); + check!(Either, 2, + Left(132u8), "Left(132u8)", + Right(-32i8), "Right(-32i8)"); + check!(Either, 4, + Left(132u8), "Left(132u8)", + Right(-20000i16), "Right(-20000i16)"); +}