Add tests for ! type
This commit is contained in:
parent
2eff282aef
commit
00a71ea644
20
src/test/compile-fail/call-fn-never-arg-wrong-type.rs
Normal file
20
src/test/compile-fail/call-fn-never-arg-wrong-type.rs
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
// 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.
|
||||||
|
|
||||||
|
#![feature(never_type)]
|
||||||
|
|
||||||
|
fn foo(x: !) -> ! {
|
||||||
|
x
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
foo("wow"); //~ ERROR mismatched types
|
||||||
|
}
|
||||||
|
|
18
src/test/compile-fail/never-assign-dead-code.rs
Normal file
18
src/test/compile-fail/never-assign-dead-code.rs
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
// 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.
|
||||||
|
|
||||||
|
#![feature(never_type)]
|
||||||
|
#![deny(unused, unreachable_code)]
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let x: ! = panic!("aah"); //~ ERROR unused
|
||||||
|
drop(x); //~ ERROR unreachable
|
||||||
|
}
|
||||||
|
|
17
src/test/compile-fail/never-assign-wrong-type.rs
Normal file
17
src/test/compile-fail/never-assign-wrong-type.rs
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
// 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.
|
||||||
|
|
||||||
|
#![feature(never_type)]
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let x: ! = "hello"; //~ ERROR mismatched types
|
||||||
|
}
|
||||||
|
|
||||||
|
|
26
src/test/compile-fail/never-disabled.rs
Normal file
26
src/test/compile-fail/never-disabled.rs
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
// Copyright 2012 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.
|
||||||
|
|
||||||
|
trait Foo {
|
||||||
|
type Wub;
|
||||||
|
}
|
||||||
|
|
||||||
|
type Ma = (u32, !, i32); //~ ERROR type is experimental
|
||||||
|
type Meeshka = Vec<!>; //~ ERROR type is experimental
|
||||||
|
type Mow = &fn(!) -> !; //~ ERROR type is experimental
|
||||||
|
type Skwoz = &mut !; //~ ERROR type is experimental
|
||||||
|
|
||||||
|
impl Foo for Meeshka {
|
||||||
|
type Wub = !; //~ ERROR type is experimental
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
}
|
||||||
|
|
37
src/test/compile-fail/never-fallback.rs
Normal file
37
src/test/compile-fail/never-fallback.rs
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
// 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.
|
||||||
|
|
||||||
|
#![feature(never_type)]
|
||||||
|
|
||||||
|
trait Balls: Sized {
|
||||||
|
fn smeg() -> Result<Self, ()>;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Balls for () {
|
||||||
|
fn smeg() -> Result<(), ()> { Ok(()) }
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Flah;
|
||||||
|
|
||||||
|
impl Flah {
|
||||||
|
fn flah<T: Balls>(&self) -> Result<T, ()> {
|
||||||
|
T::smeg()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn doit() -> Result<(), ()> {
|
||||||
|
let _ = try!(Flah.flah()); //~ ERROR the trait bound
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let _ = doit();
|
||||||
|
}
|
||||||
|
|
23
src/test/run-fail/call-fn-never-arg.rs
Normal file
23
src/test/run-fail/call-fn-never-arg.rs
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
// Copyright 2012 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.
|
||||||
|
|
||||||
|
// error-pattern:wowzers!
|
||||||
|
|
||||||
|
#![feature(never_type)]
|
||||||
|
#![allow(unreachable_code)]
|
||||||
|
|
||||||
|
fn foo(x: !) -> ! {
|
||||||
|
x
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
foo(panic!("wowzers!"))
|
||||||
|
}
|
||||||
|
|
32
src/test/run-fail/never-associated-type.rs
Normal file
32
src/test/run-fail/never-associated-type.rs
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
// Copyright 2012 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.
|
||||||
|
|
||||||
|
#![feature(never_type)]
|
||||||
|
|
||||||
|
// error-pattern:kapow!
|
||||||
|
|
||||||
|
trait Foo {
|
||||||
|
type Wow;
|
||||||
|
|
||||||
|
fn smeg(&self) -> Self::Wow;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Blah;
|
||||||
|
impl Foo for Blah {
|
||||||
|
type Wow = !;
|
||||||
|
fn smeg(&self) -> ! {
|
||||||
|
panic!("kapow!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
Blah.smeg();
|
||||||
|
}
|
||||||
|
|
26
src/test/run-fail/never-type-arg.rs
Normal file
26
src/test/run-fail/never-type-arg.rs
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
// Copyright 2012 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.
|
||||||
|
|
||||||
|
// error-pattern:oh no!
|
||||||
|
|
||||||
|
#![feature(never_type)]
|
||||||
|
|
||||||
|
struct Wub;
|
||||||
|
|
||||||
|
impl PartialEq<!> for Wub {
|
||||||
|
fn eq(&self, other: &!) -> bool {
|
||||||
|
*other
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let _ = Wub == panic!("oh no!");
|
||||||
|
}
|
||||||
|
|
25
src/test/run-pass/never-result.rs
Normal file
25
src/test/run-pass/never-result.rs
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
// 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.
|
||||||
|
|
||||||
|
#![feature(never_type)]
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let x: Result<u32, !> = Ok(123);
|
||||||
|
match x {
|
||||||
|
Ok(z) => (),
|
||||||
|
Err(y) => {
|
||||||
|
let q: u32 = y;
|
||||||
|
let w: i32 = y;
|
||||||
|
let e: String = y;
|
||||||
|
y
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
35
src/test/run-pass/unit-fallback.rs
Normal file
35
src/test/run-pass/unit-fallback.rs
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
// 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.
|
||||||
|
|
||||||
|
trait Balls: Sized {
|
||||||
|
fn smeg() -> Result<Self, ()>;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Balls for () {
|
||||||
|
fn smeg() -> Result<(), ()> { Ok(()) }
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Flah;
|
||||||
|
|
||||||
|
impl Flah {
|
||||||
|
fn flah<T: Balls>(&self) -> Result<T, ()> {
|
||||||
|
T::smeg()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn doit() -> Result<(), ()> {
|
||||||
|
let _ = try!(Flah.flah());
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let _ = doit();
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user