]> git.lizzy.rs Git - rust.git/blobdiff - src/test/run-pass/struct-aliases.rs
Rollup merge of #45171 - rust-lang:petrochenkov-patch-2, r=steveklabnik
[rust.git] / src / test / run-pass / struct-aliases.rs
index 7107243d760a4edffd1f73511cd9792848eb7858..f1337a5b0797408784c42635cecd67d3ea1ef33d 100644 (file)
@@ -8,6 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+use std::mem;
 
 struct S {
     x: isize,
@@ -16,6 +17,13 @@ struct S {
 
 type S2 = S;
 
+struct S3<U,V> {
+    x: U,
+    y: V
+}
+
+type S4<U> = S3<U, char>;
+
 fn main() {
     let s = S2 {
         x: 1,
@@ -30,4 +38,34 @@ fn main() {
             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);
+        }
+    };
 }