diff --git a/src/test/compile-fail/issue-4972.rs b/src/test/compile-fail/issue-4972.rs new file mode 100644 index 00000000000..bd74199dabd --- /dev/null +++ b/src/test/compile-fail/issue-4972.rs @@ -0,0 +1,23 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +trait MyTrait { } + +pub enum TraitWrapper { + A(~MyTrait), +} + +fn get_tw_map<'lt>(tw: &'lt TraitWrapper) -> &'lt MyTrait { + match *tw { + A(~ref map) => map, //~ ERROR mismatched types: expected `~MyTrait` but found a ~-box pattern + } +} + +pub fn main() {} \ No newline at end of file diff --git a/src/test/run-pass/issue-3743.rs b/src/test/run-pass/issue-3743.rs new file mode 100644 index 00000000000..e9c2ab87c2b --- /dev/null +++ b/src/test/run-pass/issue-3743.rs @@ -0,0 +1,52 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +use std::io; + +struct Vec2 { + x: float, + y: float +} + +// methods we want to export as methods as well as operators +impl Vec2 { +#[inline(always)] + fn vmul(self, other: float) -> Vec2 { + Vec2 { x: self.x * other, y: self.y * other } + } +} + +// Right-hand-side operator visitor pattern +trait RhsOfVec2Mul { fn mul_vec2_by(&self, lhs: &Vec2) -> Result; } + +// Vec2's implementation of Mul "from the other side" using the above trait +impl> Mul for Vec2 { + fn mul(&self, rhs: &Rhs) -> Res { rhs.mul_vec2_by(self) } +} + +// Implementation of 'float as right-hand-side of Vec2::Mul' +impl RhsOfVec2Mul for float { + fn mul_vec2_by(&self, lhs: &Vec2) -> Vec2 { lhs.vmul(*self) } +} + +// Usage with failing inference +pub fn main() { + let a = Vec2 { x: 3f, y: 4f }; + + // the following compiles and works properly + let v1: Vec2 = a * 3f; + io::println(fmt!("%f %f", v1.x, v1.y)); + + // the following compiles but v2 will not be Vec2 yet and + // using it later will cause an error that the type of v2 + // must be known + let v2 = a * 3f; + io::println(fmt!("%f %f", v2.x, v2.y)); // error regarding v2's type +} diff --git a/src/test/run-pass/issue-4016.rs b/src/test/run-pass/issue-4016.rs index 4e65a7063e7..6b0dd6cb947 100644 --- a/src/test/run-pass/issue-4016.rs +++ b/src/test/run-pass/issue-4016.rs @@ -1,4 +1,5 @@ -// Copyright 2012 The Rust Project Developers. See the COPYRIGHT +// xfail-fast +// Copyright 2013 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // @@ -8,19 +9,18 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -// xfail-test extern mod extra; -use hashmap; +use std::result; use extra::json; -use extra::serialization::{Deserializable, deserialize}; +use extra::serialize::Decodable; -trait JD : Deserializable { } -//type JD = Deserializable; +trait JD : Decodable { } -fn exec() { +fn exec() { let doc = result::unwrap(json::from_str("")); - let _v: T = deserialize(&json::Deserializer(doc)); + let mut decoder = json::Decoder(doc); + let _v: T = Decodable::decode(&mut decoder); fail!() } diff --git a/src/test/run-pass/issue-5530.rs b/src/test/run-pass/issue-5530.rs new file mode 100644 index 00000000000..002435fcb36 --- /dev/null +++ b/src/test/run-pass/issue-5530.rs @@ -0,0 +1,49 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// xfail-test + +enum Enum { + Foo { foo: uint }, + Bar { bar: uint } +} + +fn fun1(e1: &Enum, e2: &Enum) -> uint { + match (e1, e2) { + (&Foo { foo: _ }, &Foo { foo: _ }) => 0, + (&Foo { foo: _ }, &Bar { bar: _ }) => 1, + (&Bar { bar: _ }, &Bar { bar: _ }) => 2, + (&Bar { bar: _ }, &Foo { foo: _ }) => 3, + } +} + +fn fun2(e1: &Enum, e2: &Enum) -> uint { + match (e1, e2) { + (&Foo { foo: _ }, &Foo { foo: _ }) => 0, + (&Foo { foo: _ }, _ ) => 1, + (&Bar { bar: _ }, &Bar { bar: _ }) => 2, + (&Bar { bar: _ }, _ ) => 3, + } +} + +pub fn main() { + let foo = Foo { foo: 1 }; + let bar = Bar { bar: 1 }; + + assert_eq!(fun1(&foo, &foo), 0); + assert_eq!(fun1(&foo, &bar), 1); + assert_eq!(fun1(&bar, &bar), 2); + assert_eq!(fun1(&bar, &foo), 3); + + assert_eq!(fun2(&foo, &foo), 0); + assert_eq!(fun2(&foo, &bar), 1); // fun2 returns 0 + assert_eq!(fun2(&bar, &bar), 2); + assert_eq!(fun2(&bar, &foo), 3); // fun2 returns 2 +}