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 `//`.
126 lines
4.6 KiB
Text
126 lines
4.6 KiB
Text
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|}
|
|
|