diff options
| author | Niko Matsakis <niko@alum.mit.edu> | 2015-01-08 12:02:34 -0500 |
|---|---|---|
| committer | Niko Matsakis <niko@alum.mit.edu> | 2015-01-08 12:02:34 -0500 |
| commit | cc1776ef1eb8ef2696ebc3228f6ce9db63019d15 (patch) | |
| tree | 1c4dd7dcaccc8e783f4c4623a6a77e2d225ac400 /src/test | |
| parent | 0d9a11d6addee6a420217be9f6864d643c86e32f (diff) | |
| download | rust-cc1776ef1eb8ef2696ebc3228f6ce9db63019d15.tar.gz rust-cc1776ef1eb8ef2696ebc3228f6ce9db63019d15.zip | |
Add another test using projection types in impls.
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/run-pass/associated-types-projection-from-known-type-in-impl.rs | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/test/run-pass/associated-types-projection-from-known-type-in-impl.rs b/src/test/run-pass/associated-types-projection-from-known-type-in-impl.rs new file mode 100644 index 00000000000..0a1a8589dec --- /dev/null +++ b/src/test/run-pass/associated-types-projection-from-known-type-in-impl.rs @@ -0,0 +1,44 @@ +// Copyright 2015 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 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// Test where the impl self type uses a projection from a constant type. + +trait Int +{ + type T; +} + +trait NonZero +{ + fn non_zero(self) -> bool; +} + +impl Int for i32 { type T = i32; } +impl Int for i64 { type T = i64; } +impl Int for u32 { type T = u32; } +impl Int for u64 { type T = u64; } + +impl NonZero for <i32 as Int>::T { fn non_zero(self) -> bool { self != 0 } } +impl NonZero for <i64 as Int>::T { fn non_zero(self) -> bool { self != 0 } } +impl NonZero for <u32 as Int>::T { fn non_zero(self) -> bool { self != 0 } } +impl NonZero for <u64 as Int>::T { fn non_zero(self) -> bool { self != 0 } } + +fn main () +{ + assert!(NonZero::non_zero(22_i32)); + assert!(NonZero::non_zero(22_i64)); + assert!(NonZero::non_zero(22_u32)); + assert!(NonZero::non_zero(22_u64)); + + assert!(!NonZero::non_zero(0_i32)); + assert!(!NonZero::non_zero(0_i64)); + assert!(!NonZero::non_zero(0_u32)); + assert!(!NonZero::non_zero(0_u64)); +} |
