65 lines
1.0 KiB
Rust
65 lines
1.0 KiB
Rust
//@ run-pass
|
|
#![allow(non_shorthand_field_patterns)]
|
|
|
|
use std::mem;
|
|
|
|
struct S {
|
|
x: isize,
|
|
y: isize,
|
|
}
|
|
|
|
type S2 = S;
|
|
|
|
struct S3<U,V> {
|
|
x: U,
|
|
y: V
|
|
}
|
|
|
|
type S4<U> = S3<U, char>;
|
|
|
|
fn main() {
|
|
let s = S2 {
|
|
x: 1,
|
|
y: 2,
|
|
};
|
|
match s {
|
|
S2 {
|
|
x: x,
|
|
y: y
|
|
} => {
|
|
assert_eq!(x, 1);
|
|
assert_eq!(y, 2);
|
|
}
|
|
}
|
|
// check that generics can be specified from the pattern
|
|
let s = S4 {
|
|
x: 4,
|
|
y: 'a'
|
|
};
|
|
match s {
|
|
S4::<u8> {
|
|
x: x,
|
|
y: y
|
|
} => {
|
|
assert_eq!(x, 4);
|
|
assert_eq!(y, 'a');
|
|
assert_eq!(mem::size_of_val(&x), 1);
|
|
}
|
|
};
|
|
// check that generics can be specified from the constructor
|
|
let s = S4::<u16> {
|
|
x: 5,
|
|
y: 'b'
|
|
};
|
|
match s {
|
|
S4 {
|
|
x: x,
|
|
y: y
|
|
} => {
|
|
assert_eq!(x, 5);
|
|
assert_eq!(y, 'b');
|
|
assert_eq!(mem::size_of_val(&x), 2);
|
|
}
|
|
};
|
|
}
|