mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-30 10:45:18 +00:00
448d63e946
For coverage tests, splitting code across multiple lines often makes the resulting coverage report easier to interpret, so we force rustfmt to retain line breaks by adding dummy line comments with `//`.
127 lines
4.6 KiB
Plaintext
127 lines
4.6 KiB
Plaintext
LL| |#![allow(unused_assignments)]
|
|
LL| |#![cfg_attr(rustfmt, rustfmt::skip)]
|
|
LL| |//@ failure-status: 1
|
|
LL| |
|
|
LL| 6|fn call(return_error: bool) -> Result<(), ()> {
|
|
LL| 6| if return_error {
|
|
LL| 1| Err(())
|
|
LL| | } else {
|
|
LL| 5| Ok(())
|
|
LL| | }
|
|
LL| 6|}
|
|
LL| |
|
|
LL| 1|fn test1() -> Result<(), ()> {
|
|
LL| 1| let mut
|
|
LL| 1| countdown = 10
|
|
LL| | ;
|
|
LL| | for
|
|
LL| | _
|
|
LL| | in
|
|
LL| 6| 0..10
|
|
LL| | {
|
|
LL| 6| countdown
|
|
LL| 6| -= 1
|
|
LL| 6| ;
|
|
LL| 6| if
|
|
LL| 6| countdown < 5
|
|
LL| | {
|
|
LL| 1| call(/*return_error=*/ true)?;
|
|
LL| 0| call(/*return_error=*/ false)?;
|
|
LL| | }
|
|
LL| | else
|
|
LL| | {
|
|
LL| 5| call(/*return_error=*/ false)?;
|
|
^0
|
|
LL| | }
|
|
LL| | }
|
|
LL| 0| Ok(())
|
|
LL| 1|}
|
|
LL| |
|
|
LL| |struct Thing1;
|
|
LL| |impl Thing1 {
|
|
LL| 18| fn get_thing_2(&self, return_error: bool) -> Result<Thing2, ()> {
|
|
LL| 18| if return_error {
|
|
LL| 1| Err(())
|
|
LL| | } else {
|
|
LL| 17| Ok(Thing2 {})
|
|
LL| | }
|
|
LL| 18| }
|
|
LL| |}
|
|
LL| |
|
|
LL| |struct Thing2;
|
|
LL| |impl Thing2 {
|
|
LL| 17| fn call(&self, return_error: bool) -> Result<u32, ()> {
|
|
LL| 17| if return_error {
|
|
LL| 2| Err(())
|
|
LL| | } else {
|
|
LL| 15| Ok(57)
|
|
LL| | }
|
|
LL| 17| }
|
|
LL| |}
|
|
LL| |
|
|
LL| 1|fn test2() -> Result<(), ()> {
|
|
LL| 1| let thing1 = Thing1{};
|
|
LL| 1| let mut
|
|
LL| 1| countdown = 10
|
|
LL| | ;
|
|
LL| | for
|
|
LL| | _
|
|
LL| | in
|
|
LL| 6| 0..10
|
|
LL| | {
|
|
LL| 6| countdown
|
|
LL| 6| -= 1
|
|
LL| 6| ;
|
|
LL| 6| if
|
|
LL| 6| countdown < 5
|
|
LL| | {
|
|
LL| 1| thing1.get_thing_2(/*err=*/ false)?.call(/*err=*/ true).expect_err("call should fail");
|
|
^0
|
|
LL| 1| thing1
|
|
LL| 1| .
|
|
LL| 1| get_thing_2(/*return_error=*/ false)
|
|
LL| 0| ?
|
|
LL| | .
|
|
LL| 1| call(/*return_error=*/ true)
|
|
LL| 1| .
|
|
LL| 1| expect_err(
|
|
LL| 1| "call should fail"
|
|
LL| 1| );
|
|
LL| 1| let val = thing1.get_thing_2(/*return_error=*/ true)?.call(/*return_error=*/ true)?;
|
|
^0 ^0 ^0
|
|
LL| 0| assert_eq!(val, 57);
|
|
LL| 0| let val = thing1.get_thing_2(/*return_error=*/ true)?.call(/*return_error=*/ false)?;
|
|
LL| 0| assert_eq!(val, 57);
|
|
LL| | }
|
|
LL| | else
|
|
LL| | {
|
|
LL| 5| let val = thing1.get_thing_2(/*return_error=*/ false)?.call(/*return_error=*/ false)?;
|
|
^0 ^0
|
|
LL| 5| assert_eq!(val, 57);
|
|
LL| 5| let val = thing1
|
|
LL| 5| .get_thing_2(/*return_error=*/ false)?
|
|
^0
|
|
LL| 5| .call(/*return_error=*/ false)?;
|
|
^0
|
|
LL| 5| assert_eq!(val, 57);
|
|
LL| 5| let val = thing1
|
|
LL| 5| .get_thing_2(/*return_error=*/ false)
|
|
LL| 0| ?
|
|
LL| 5| .call(/*return_error=*/ false)
|
|
LL| 0| ?
|
|
LL| | ;
|
|
LL| 5| assert_eq!(val, 57);
|
|
LL| | }
|
|
LL| | }
|
|
LL| 0| Ok(())
|
|
LL| 1|}
|
|
LL| |
|
|
LL| 1|fn main() -> Result<(), ()> {
|
|
LL| 1| test1().expect_err("test1 should fail");
|
|
LL| 1| test2()
|
|
LL| 1| ?
|
|
LL| | ;
|
|
LL| 0| Ok(())
|
|
LL| 1|}
|
|
|