//! returns: 0

/// Test that constant expressions can reference other constants,
/// including arithmetic on constants.

constant A: i32 = 10;
constant B: i32 = 20;
constant C: i32 = A + B;
constant D: i32 = C * 2;
constant E: i32 = D - A;
constant F: i32 = E / 5;
constant G: i32 = A % 3;
constant H: i32 = A | B;
constant I: i32 = A & B;
constant J: i32 = A ^ B;
constant K: i32 = A << 2;
constant L: i32 = B >> 1;

@default fn main() -> i32 {
    if C <> 30 { return 1; }
    if D <> 60 { return 2; }
    if E <> 50 { return 3; }
    if F <> 10 { return 4; }
    if G <> 1 { return 5; }
    if H <> 30 { return 6; }
    if I <> 0 { return 7; }
    if J <> 30 { return 8; }
    if K <> 40 { return 9; }
    if L <> 10 { return 10; }
    return 0;
}
