diff options
Diffstat (limited to 'src/test/ui/specialization/specialization-default-methods.rs')
-rw-r--r-- | src/test/ui/specialization/specialization-default-methods.rs | 87 |
1 files changed, 0 insertions, 87 deletions
diff --git a/src/test/ui/specialization/specialization-default-methods.rs b/src/test/ui/specialization/specialization-default-methods.rs deleted file mode 100644 index dcf68afa9..000000000 --- a/src/test/ui/specialization/specialization-default-methods.rs +++ /dev/null @@ -1,87 +0,0 @@ -// run-pass - -#![feature(specialization)] //~ WARN the feature `specialization` is incomplete - -// Test that default methods are cascaded correctly - -// First, test only use of explicit `default` items: - -trait Foo { - fn foo(&self) -> bool; -} - -// Specialization tree for Foo: -// -// T -// / \ -// i32 i64 - -impl<T> Foo for T { - default fn foo(&self) -> bool { false } -} - -impl Foo for i32 {} - -impl Foo for i64 { - fn foo(&self) -> bool { true } -} - -fn test_foo() { - assert!(!0i8.foo()); - assert!(!0i32.foo()); - assert!(0i64.foo()); -} - -// Next, test mixture of explicit `default` and provided methods: - -trait Bar { - fn bar(&self) -> i32 { 0 } -} - -// Specialization tree for Bar. -// Uses of $ designate that method is provided -// -// $Bar (the trait) -// | -// T -// /|\ -// / | \ -// / | \ -// / | \ -// / | \ -// / | \ -// $i32 &str $Vec<T> -// /\ -// / \ -// Vec<i32> $Vec<i64> - -impl<T> Bar for T { - default fn bar(&self) -> i32 { 0 } -} - -impl Bar for i32 { - fn bar(&self) -> i32 { 1 } -} -impl<'a> Bar for &'a str {} - -impl<T> Bar for Vec<T> { - default fn bar(&self) -> i32 { 2 } -} -impl Bar for Vec<i32> {} -impl Bar for Vec<i64> { - fn bar(&self) -> i32 { 3 } -} - -fn test_bar() { - assert!(0u8.bar() == 0); - assert!(0i32.bar() == 1); - assert!("hello".bar() == 0); - assert!(vec![()].bar() == 2); - assert!(vec![0i32].bar() == 2); - assert!(vec![0i64].bar() == 3); -} - -fn main() { - test_foo(); - test_bar(); -} |