Add previously omitted associated const tests.
This commit is contained in:
parent
3d9b5d0424
commit
7f78887547
6 changed files with 167 additions and 7 deletions
|
|
@ -8,14 +8,17 @@
|
|||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
trait Foo {
|
||||
fn bar(&self);
|
||||
use std::marker::MarkerTrait;
|
||||
|
||||
trait Foo: MarkerTrait {
|
||||
const BAR: u32;
|
||||
}
|
||||
|
||||
impl Foo for u32 {
|
||||
//~^ ERROR not all trait items implemented, missing: `bar`
|
||||
type bar = u64;
|
||||
//~^ ERROR item `bar` is an associated type, which doesn't match its trait `Foo`
|
||||
struct SignedBar;
|
||||
|
||||
impl Foo for SignedBar {
|
||||
const BAR: i32 = -1;
|
||||
//~^ ERROR E0326
|
||||
}
|
||||
|
||||
fn main () {}
|
||||
fn main() {}
|
||||
21
src/test/compile-fail/associated-const-upper-case-lint.rs
Normal file
21
src/test/compile-fail/associated-const-upper-case-lint.rs
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
// 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.
|
||||
|
||||
#![deny(non_upper_case_globals)]
|
||||
#![allow(dead_code)]
|
||||
|
||||
struct Foo;
|
||||
|
||||
impl Foo {
|
||||
const not_upper: bool = true;
|
||||
}
|
||||
//~^^ ERROR associated constant `not_upper` should have an upper case name such as `NOT_UPPER`
|
||||
|
||||
fn main() {}
|
||||
43
src/test/compile-fail/impl-wrong-item-for-trait.rs
Normal file
43
src/test/compile-fail/impl-wrong-item-for-trait.rs
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
// 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 Foo {
|
||||
fn bar(&self);
|
||||
const MY_CONST: u32;
|
||||
}
|
||||
|
||||
pub struct FooConstForMethod;
|
||||
|
||||
impl Foo for FooConstForMethod {
|
||||
//~^ ERROR E0046
|
||||
const bar: u64 = 1;
|
||||
//~^ ERROR E0323
|
||||
const MY_CONST: u32 = 1;
|
||||
}
|
||||
|
||||
pub struct FooMethodForConst;
|
||||
|
||||
impl Foo for FooMethodForConst {
|
||||
//~^ ERROR E0046
|
||||
fn bar(&self) {}
|
||||
fn MY_CONST() {}
|
||||
//~^ ERROR E0324
|
||||
}
|
||||
|
||||
pub struct FooTypeForMethod;
|
||||
|
||||
impl Foo for FooTypeForMethod {
|
||||
//~^ ERROR E0046
|
||||
type bar = u64;
|
||||
//~^ ERROR E0325
|
||||
const MY_CONST: u32 = 1;
|
||||
}
|
||||
|
||||
fn main () {}
|
||||
23
src/test/run-pass/associated-const-marks-live-code.rs
Normal file
23
src/test/run-pass/associated-const-marks-live-code.rs
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
// 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.
|
||||
|
||||
#![deny(dead_code)]
|
||||
|
||||
const GLOBAL_BAR: u32 = 1;
|
||||
|
||||
struct Foo;
|
||||
|
||||
impl Foo {
|
||||
const BAR: u32 = GLOBAL_BAR;
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let _: u32 = Foo::BAR;
|
||||
}
|
||||
35
src/test/run-pass/associated-const-resolution-order.rs
Normal file
35
src/test/run-pass/associated-const-resolution-order.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.
|
||||
|
||||
use std::marker::MarkerTrait;
|
||||
|
||||
struct MyType;
|
||||
|
||||
impl MyType {
|
||||
const IMPL_IS_INHERENT: bool = true;
|
||||
}
|
||||
|
||||
trait MyTrait: MarkerTrait {
|
||||
const IMPL_IS_INHERENT: bool;
|
||||
const IMPL_IS_ON_TRAIT: bool;
|
||||
}
|
||||
|
||||
impl MyTrait for MyType {
|
||||
const IMPL_IS_INHERENT: bool = false;
|
||||
const IMPL_IS_ON_TRAIT: bool = true;
|
||||
}
|
||||
|
||||
fn main() {
|
||||
// Check that the inherent impl is used before the trait, but that the trait
|
||||
// can still be accessed.
|
||||
assert!(<MyType>::IMPL_IS_INHERENT);
|
||||
assert!(!<MyType as MyTrait>::IMPL_IS_INHERENT);
|
||||
assert!(<MyType>::IMPL_IS_ON_TRAIT);
|
||||
}
|
||||
35
src/test/run-pass/associated-const-use-impl-of-same-trait.rs
Normal file
35
src/test/run-pass/associated-const-use-impl-of-same-trait.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.
|
||||
|
||||
use std::marker::MarkerTrait;
|
||||
|
||||
// The main purpose of this test is to ensure that different impls of the same
|
||||
// trait can refer to each other without setting off the static recursion check
|
||||
// (as long as there's no actual recursion).
|
||||
|
||||
trait Foo: MarkerTrait {
|
||||
const BAR: u32;
|
||||
}
|
||||
|
||||
struct IsFoo1;
|
||||
|
||||
impl Foo for IsFoo1 {
|
||||
const BAR: u32 = 1;
|
||||
}
|
||||
|
||||
struct IsFoo2;
|
||||
|
||||
impl Foo for IsFoo2 {
|
||||
const BAR: u32 = <IsFoo1 as Foo>::BAR;
|
||||
}
|
||||
|
||||
fn main() {
|
||||
assert_eq!(<IsFoo1>::BAR, <IsFoo2 as Foo>::BAR);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue