From 52d2f2a938c793bb20964156a2657271fa7f91ab Mon Sep 17 00:00:00 2001 From: Jakub Wieczorek Date: Thu, 2 Oct 2014 21:52:06 +0200 Subject: [PATCH] Add tests for a few resolved issues --- src/test/compile-fail/issue-13497-2.rs | 17 ++++++++ src/test/compile-fail/issue-13497.rs | 18 ++++++++ src/test/compile-fail/issue-14366.rs | 17 ++++++++ src/test/compile-fail/issue-14853.rs | 30 +++++++++++++ src/test/run-pass/issue-11869.rs | 23 ++++++++++ src/test/run-pass/issue-13167.rs | 27 ++++++++++++ src/test/run-pass/issue-13405.rs | 25 +++++++++++ src/test/run-pass/issue-13434.rs | 31 ++++++++++++++ src/test/run-pass/issue-13703.rs | 13 ++++++ src/test/run-pass/issue-14919.rs | 58 ++++++++++++++++++++++++++ src/test/run-pass/issue-15673.rs | 15 +++++++ src/test/run-pass/issue-15924.rs | 32 ++++++++++++++ src/test/run-pass/issue-5718.rs | 33 +++++++++++++++ 13 files changed, 339 insertions(+) create mode 100644 src/test/compile-fail/issue-13497-2.rs create mode 100644 src/test/compile-fail/issue-13497.rs create mode 100644 src/test/compile-fail/issue-14366.rs create mode 100644 src/test/compile-fail/issue-14853.rs create mode 100644 src/test/run-pass/issue-11869.rs create mode 100644 src/test/run-pass/issue-13167.rs create mode 100644 src/test/run-pass/issue-13405.rs create mode 100644 src/test/run-pass/issue-13434.rs create mode 100644 src/test/run-pass/issue-13703.rs create mode 100644 src/test/run-pass/issue-14919.rs create mode 100644 src/test/run-pass/issue-15673.rs create mode 100644 src/test/run-pass/issue-15924.rs create mode 100644 src/test/run-pass/issue-5718.rs diff --git a/src/test/compile-fail/issue-13497-2.rs b/src/test/compile-fail/issue-13497-2.rs new file mode 100644 index 00000000000..c7a8c87bb23 --- /dev/null +++ b/src/test/compile-fail/issue-13497-2.rs @@ -0,0 +1,17 @@ +// Copyright 2014 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. + +fn read_lines_borrowed<'a>() -> Vec<&'a str> { + let rawLines: Vec = vec!["foo ".to_string(), " bar".to_string()]; + rawLines //~ ERROR `rawLines` does not live long enough + .iter().map(|l| l.as_slice().trim()).collect() +} + +fn main() {} diff --git a/src/test/compile-fail/issue-13497.rs b/src/test/compile-fail/issue-13497.rs new file mode 100644 index 00000000000..da8b93e3c93 --- /dev/null +++ b/src/test/compile-fail/issue-13497.rs @@ -0,0 +1,18 @@ +// Copyright 2014 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. + +fn read_lines_borrowed1() -> Vec< + &str //~ ERROR missing lifetime specifier +> { + let rawLines: Vec = vec!["foo ".to_string(), " bar".to_string()]; + rawLines.iter().map(|l| l.as_slice().trim()).collect() +} + +fn main() {} diff --git a/src/test/compile-fail/issue-14366.rs b/src/test/compile-fail/issue-14366.rs new file mode 100644 index 00000000000..ceb6daac65e --- /dev/null +++ b/src/test/compile-fail/issue-14366.rs @@ -0,0 +1,17 @@ +// Copyright 2014 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. + +fn main() { + let _x = "test" as &::std::any::Any; +//~^ ERROR the trait `core::kinds::Sized` is not implemented for the type `str` +//~^^ NOTE the trait `core::kinds::Sized` must be implemented for the cast to the object type +//~^^^ ERROR the trait `core::kinds::Sized` is not implemented for the type `str` +//~^^^^ NOTE the trait `core::kinds::Sized` must be implemented for the cast to the object type +} diff --git a/src/test/compile-fail/issue-14853.rs b/src/test/compile-fail/issue-14853.rs new file mode 100644 index 00000000000..4243b98e0dd --- /dev/null +++ b/src/test/compile-fail/issue-14853.rs @@ -0,0 +1,30 @@ +// Copyright 2014 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::fmt::Show; + +trait Something { + fn yay(_: Option, thing: &[T]) -> String { + } +} + +struct X { data: u32 } + +impl Something for X { + fn yay(_:Option, thing: &[T]) -> String { +//~^ ERROR in method `yay`, type parameter 0 requires bound `core::str::Str`, which is not required + format!("{:s}", thing[0]) + } +} + +fn main() { + let arr = &["one", "two", "three"]; + println!("{}", Something::yay(None::, arr)); +} diff --git a/src/test/run-pass/issue-11869.rs b/src/test/run-pass/issue-11869.rs new file mode 100644 index 00000000000..c75d02c6328 --- /dev/null +++ b/src/test/run-pass/issue-11869.rs @@ -0,0 +1,23 @@ +// Copyright 2014 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. + +struct A { + a: String +} + +fn borrow<'a>(binding: &'a A) -> &'a str { + match binding.a.as_slice() { + "in" => "in_", + "ref" => "ref_", + ident => ident + } +} + +fn main() {} diff --git a/src/test/run-pass/issue-13167.rs b/src/test/run-pass/issue-13167.rs new file mode 100644 index 00000000000..1a58a6842d4 --- /dev/null +++ b/src/test/run-pass/issue-13167.rs @@ -0,0 +1,27 @@ +// Copyright 2014 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::slice; + +pub struct PhfMapEntries<'a, T> { + iter: slice::Items<'a, (&'static str, T)>, +} + +impl<'a, T> Iterator<(&'static str, &'a T)> for PhfMapEntries<'a, T> { + fn next(&mut self) -> Option<(&'static str, &'a T)> { + self.iter.by_ref().map(|&(key, ref value)| (key, value)).next() + } + + fn size_hint(&self) -> (uint, Option) { + self.iter.size_hint() + } +} + +fn main() {} diff --git a/src/test/run-pass/issue-13405.rs b/src/test/run-pass/issue-13405.rs new file mode 100644 index 00000000000..05943943d95 --- /dev/null +++ b/src/test/run-pass/issue-13405.rs @@ -0,0 +1,25 @@ +// Copyright 2014 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. + +struct Foo<'a> { + i: &'a bool, + j: Option<&'a int>, +} + +impl<'a> Foo<'a> { + fn bar(&mut self, j: &int) { + let child = Foo { + i: self.i, + j: Some(j) + }; + } +} + +fn main() {} diff --git a/src/test/run-pass/issue-13434.rs b/src/test/run-pass/issue-13434.rs new file mode 100644 index 00000000000..25b53bb3a53 --- /dev/null +++ b/src/test/run-pass/issue-13434.rs @@ -0,0 +1,31 @@ +// Copyright 2014 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. + +extern crate debug; + +struct MyStruct; + +trait Repro { + fn repro(self, s: MyStruct) -> String; +} + +impl Repro for |MyStruct|:'static -> String { + fn repro(self, s: MyStruct) -> String { + self(s) + } +} + +fn do_stuff(r: R) -> String { + r.repro(MyStruct) +} + +pub fn main() { + assert_eq!("MyStruct".to_string(), do_stuff(|s: MyStruct| format!("{:?}", s))); +} diff --git a/src/test/run-pass/issue-13703.rs b/src/test/run-pass/issue-13703.rs new file mode 100644 index 00000000000..c9c78f6408b --- /dev/null +++ b/src/test/run-pass/issue-13703.rs @@ -0,0 +1,13 @@ +// Copyright 2014 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. + +pub struct Foo<'a, 'b: 'a> { foo: &'a &'b int } +pub fn foo<'a, 'b>(x: Foo<'a, 'b>, _o: Option<& & ()>) { let _y = x.foo; } +fn main() {} diff --git a/src/test/run-pass/issue-14919.rs b/src/test/run-pass/issue-14919.rs new file mode 100644 index 00000000000..db29eb314bd --- /dev/null +++ b/src/test/run-pass/issue-14919.rs @@ -0,0 +1,58 @@ +// Copyright 2014 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 Matcher { + fn next_match(&mut self) -> Option<(uint, uint)>; +} + +struct CharPredMatcher<'a, 'b> { + str: &'a str, + pred: |char|:'b -> bool +} + +impl<'a, 'b> Matcher for CharPredMatcher<'a, 'b> { + fn next_match(&mut self) -> Option<(uint, uint)> { + None + } +} + +trait IntoMatcher<'a, T> { + fn into_matcher(self, &'a str) -> T; +} + +impl<'a, 'b> IntoMatcher<'a, CharPredMatcher<'a, 'b>> for |char|:'b -> bool { + fn into_matcher(self, s: &'a str) -> CharPredMatcher<'a, 'b> { + CharPredMatcher { + str: s, + pred: self + } + } +} + +struct MatchIndices { + matcher: M +} + +impl Iterator<(uint, uint)> for MatchIndices { + fn next(&mut self) -> Option<(uint, uint)> { + self.matcher.next_match() + } +} + +fn match_indices<'a, M, T: IntoMatcher<'a, M>>(s: &'a str, from: T) -> MatchIndices { + let string_matcher = from.into_matcher(s); + MatchIndices { matcher: string_matcher } +} + +fn main() { + let s = "abcbdef"; + match_indices(s, |c: char| c == 'b') + .collect::>(); +} diff --git a/src/test/run-pass/issue-15673.rs b/src/test/run-pass/issue-15673.rs new file mode 100644 index 00000000000..051d98aa1d8 --- /dev/null +++ b/src/test/run-pass/issue-15673.rs @@ -0,0 +1,15 @@ +// Copyright 2014 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::iter::AdditiveIterator; +fn main() { + let x: [u64, ..3] = [1, 2, 3]; + assert_eq!(6, range(0, 3).map(|i| x[i]).sum()); +} diff --git a/src/test/run-pass/issue-15924.rs b/src/test/run-pass/issue-15924.rs new file mode 100644 index 00000000000..8d5b928964d --- /dev/null +++ b/src/test/run-pass/issue-15924.rs @@ -0,0 +1,32 @@ +// Copyright 2014 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. + +#![feature(unsafe_destructor)] + +extern crate serialize; + +use std::io::IoError; +use serialize::{Encoder, Encodable}; +use serialize::json; + +struct Foo { + v: T, +} + +#[unsafe_destructor] +impl<'a, T: Encodable, IoError>> Drop for Foo { + fn drop(&mut self) { + json::encode(&self.v); + } +} + +fn main() { + let _ = Foo { v: 10i }; +} diff --git a/src/test/run-pass/issue-5718.rs b/src/test/run-pass/issue-5718.rs new file mode 100644 index 00000000000..f2167da31fc --- /dev/null +++ b/src/test/run-pass/issue-5718.rs @@ -0,0 +1,33 @@ +// Copyright 2014 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. + +#![feature(macro_rules)] + +struct Element; + +macro_rules! foo { + ($tag: expr, $string: expr) => { + if $tag == $string { + let element = box Element; + unsafe { + return std::mem::transmute::<_, uint>(element); + } + } + } +} + +fn bar() -> uint { + foo!("a", "b"); + 0 +} + +fn main() { + bar(); +}