about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2016-03-26 19:46:24 -0700
committerbors <bors@rust-lang.org>2016-03-26 19:46:24 -0700
commit68de28b309b38c5143b3c27f3db0d57f4373729e (patch)
tree4e3e1b7ea8015142cbfbd91592a986be02a763ad
parentd5a91e69582b63f19192ad860df0f7a9a8530f56 (diff)
parent064ec35c18f396c2c26c05517290fdc1a4379586 (diff)
downloadrust-68de28b309b38c5143b3c27f3db0d57f4373729e.tar.gz
rust-68de28b309b38c5143b3c27f3db0d57f4373729e.zip
Auto merge of #32513 - japaric:try-test, r=alexcrichton
add regression test for try!

Our widespread internal use of `try` was like a regression test. Now that most of `try!`s have been converted to `?`, lets add a proper regression test.

cc @bstrie
-rw-r--r--src/test/run-pass/try-macro.rs57
-rw-r--r--src/test/run-pass/try-operator-hygiene.rs2
2 files changed, 58 insertions, 1 deletions
diff --git a/src/test/run-pass/try-macro.rs b/src/test/run-pass/try-macro.rs
new file mode 100644
index 00000000000..a12e20702d2
--- /dev/null
+++ b/src/test/run-pass/try-macro.rs
@@ -0,0 +1,57 @@
+// Copyright 2016 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::num::{ParseFloatError, ParseIntError};
+
+fn main() {
+    assert_eq!(simple(), Ok(1));
+    assert_eq!(nested(), Ok(2));
+    assert_eq!(merge_ok(), Ok(3.0));
+    assert_eq!(merge_int_err(), Err(Error::Int));
+    assert_eq!(merge_float_err(), Err(Error::Float));
+}
+
+fn simple() -> Result<i32, ParseIntError> {
+    Ok(try!("1".parse()))
+}
+
+fn nested() -> Result<i32, ParseIntError> {
+    Ok(try!(try!("2".parse::<i32>()).to_string().parse::<i32>()))
+}
+
+fn merge_ok() -> Result<f32, Error> {
+    Ok(try!("1".parse::<i32>()) as f32 + try!("2.0".parse::<f32>()))
+}
+
+fn merge_int_err() -> Result<f32, Error> {
+    Ok(try!("a".parse::<i32>()) as f32 + try!("2.0".parse::<f32>()))
+}
+
+fn merge_float_err() -> Result<f32, Error> {
+    Ok(try!("1".parse::<i32>()) as f32 + try!("b".parse::<f32>()))
+}
+
+#[derive(Debug, PartialEq)]
+enum Error {
+    Int,
+    Float,
+}
+
+impl From<ParseIntError> for Error {
+    fn from(_: ParseIntError) -> Error {
+        Error::Int
+    }
+}
+
+impl From<ParseFloatError> for Error {
+    fn from(_: ParseFloatError) -> Error {
+        Error::Float
+    }
+}
diff --git a/src/test/run-pass/try-operator-hygiene.rs b/src/test/run-pass/try-operator-hygiene.rs
index 233c03df4e5..ae622df498f 100644
--- a/src/test/run-pass/try-operator-hygiene.rs
+++ b/src/test/run-pass/try-operator-hygiene.rs
@@ -12,7 +12,7 @@
 //
 // match expr {
 //     Ok(val) => val,
-//     Err(err) => return From::from(err),
+//     Err(err) => return Err(From::from(err)),
 // }
 //
 // This test verifies that the expansion is hygienic, i.e. it's not affected by other `val` and