after syntax fixes, these tests appear to pass

This commit is contained in:
John Clements 2013-04-18 16:55:48 -07:00
parent 3a5361aec9
commit 527f7716b7

View File

@ -8,64 +8,62 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
// xfail-test
tag a_tag<A,B> {
varA(A);
varB(B);
enum a_tag<A,B> {
varA(A),
varB(B)
}
type t_rec<A,B> = {
struct t_rec<A,B> {
chA: u8,
tA: a_tag<A,B>,
chB: u8,
tB: a_tag<A,B>
};
fn mk_rec<A:copy,B:copy>(a: A, b: B) -> t_rec<A,B> {
return { chA:0u8, tA:varA(a), chB:1u8, tB:varB(b) };
}
fn is_aligned<A>(amnt: uint, &&u: A) -> bool {
fn mk_rec<A:Copy,B:Copy>(a: A, b: B) -> t_rec<A,B> {
return t_rec{ chA:0u8, tA:varA(a), chB:1u8, tB:varB(b) };
}
fn is_aligned<A>(amnt: uint, u: &A) -> bool {
let p = ptr::to_unsafe_ptr(u) as uint;
return (p & (amnt-1u)) == 0u;
}
fn variant_data_is_aligned<A,B>(amnt: uint, &&u: a_tag<A,B>) -> bool {
fn variant_data_is_aligned<A,B>(amnt: uint, u: &a_tag<A,B>) -> bool {
match u {
varA(a) { is_aligned(amnt, a) }
varB(b) { is_aligned(amnt, b) }
&varA(ref a) => is_aligned(amnt, a),
&varB(ref b) => is_aligned(amnt, b)
}
}
pub fn main() {
let x = mk_rec(22u64, 23u64);
assert!(is_aligned(8u, x.tA));
assert!(variant_data_is_aligned(8u, x.tA));
assert!(is_aligned(8u, x.tB));
assert!(variant_data_is_aligned(8u, x.tB));
assert!(is_aligned(8u, &x.tA));
assert!(variant_data_is_aligned(8u, &x.tA));
assert!(is_aligned(8u, &x.tB));
assert!(variant_data_is_aligned(8u, &x.tB));
let x = mk_rec(22u64, 23u32);
assert!(is_aligned(8u, x.tA));
assert!(variant_data_is_aligned(8u, x.tA));
assert!(is_aligned(8u, x.tB));
assert!(variant_data_is_aligned(4u, x.tB));
assert!(is_aligned(8u, &x.tA));
assert!(variant_data_is_aligned(8u, &x.tA));
assert!(is_aligned(8u, &x.tB));
assert!(variant_data_is_aligned(4u, &x.tB));
let x = mk_rec(22u32, 23u64);
assert!(is_aligned(8u, x.tA));
assert!(variant_data_is_aligned(4u, x.tA));
assert!(is_aligned(8u, x.tB));
assert!(variant_data_is_aligned(8u, x.tB));
assert!(is_aligned(8u, &x.tA));
assert!(variant_data_is_aligned(4u, &x.tA));
assert!(is_aligned(8u, &x.tB));
assert!(variant_data_is_aligned(8u, &x.tB));
let x = mk_rec(22u32, 23u32);
assert!(is_aligned(4u, x.tA));
assert!(variant_data_is_aligned(4u, x.tA));
assert!(is_aligned(4u, x.tB));
assert!(variant_data_is_aligned(4u, x.tB));
assert!(is_aligned(4u, &x.tA));
assert!(variant_data_is_aligned(4u, &x.tA));
assert!(is_aligned(4u, &x.tB));
assert!(variant_data_is_aligned(4u, &x.tB));
let x = mk_rec(22f64, 23f64);
assert!(is_aligned(8u, x.tA));
assert!(variant_data_is_aligned(8u, x.tA));
assert!(is_aligned(8u, x.tB));
assert!(variant_data_is_aligned(8u, x.tB));
assert!(is_aligned(8u, &x.tA));
assert!(variant_data_is_aligned(8u, &x.tA));
assert!(is_aligned(8u, &x.tB));
assert!(variant_data_is_aligned(8u, &x.tB));
}