File: lazy-and-or.rs

package info (click to toggle)
rustc 1.88.0%2Bdfsg1-2
  • links: PTS, VCS
  • area: main
  • in suites: experimental, forky, sid
  • size: 934,168 kB
  • sloc: xml: 158,127; python: 36,062; javascript: 19,855; sh: 19,700; cpp: 18,947; ansic: 12,993; asm: 4,792; makefile: 690; perl: 29; lisp: 29; ruby: 19; sql: 11
file content (25 lines) | stat: -rw-r--r-- 769 bytes parent folder | download | duplicates (10)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//@ run-pass
// This test verifies the short-circuiting behavior of logical operators `||` and `&&`.
// It ensures that the right-hand expression is not evaluated when the left-hand
// expression is sufficient to determine the result.

fn would_panic_if_called(x: &mut isize) -> bool {
    *x += 1;
    assert!(false, "This function should never be called due to short-circuiting");
    false
}

fn main() {
    let x = 1 == 2 || 3 == 3;
    assert!(x);

    let mut y: isize = 10;
    println!("Result of short-circuit: {}", x || would_panic_if_called(&mut y));
    assert_eq!(y, 10, "y should remain 10 if short-circuiting works correctly");

    if true && x {
        assert!(true);
    } else {
        assert!(false, "This branch should not be reached");
    }
}