//! returns: 0

record Point {
    x: i32,
    y: i32,
}

// Test that pointer equality uses address comparison, not value comparison.
fn testPtrSameAddress() -> bool {
    let p1 = Point { x: 1, y: 2 };
    let a = &p1;
    let b = &p1;

    return a == b;  // Same address, should be equal.
}

fn testPtrDifferentAddressSameValues() -> bool {
    let p1 = Point { x: 1, y: 2 };
    let p2 = Point { x: 1, y: 2 };  // Same values as p1, but different address.
    let a = &p1;
    let b = &p2;

    return not (a == b);  // Different addresses, should NOT be equal.
}

fn testPtrDifferentAddressDifferentValues() -> bool {
    let p1 = Point { x: 1, y: 2 };
    let p2 = Point { x: 3, y: 4 };
    let a = &p1;
    let b = &p2;

    return not (a == b);  // Different addresses, should NOT be equal.
}

@default fn main() -> i32 {
    assert testPtrSameAddress();
    assert testPtrDifferentAddressSameValues();
    assert testPtrDifferentAddressDifferentValues();
    return 0;
}
