//! returns: 0
//! Basic standalone method test.

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

fn (p: *Point) sum() -> i32 {
    return p.x + p.y;
}

fn (p: *mut Point) translate(dx: i32, dy: i32) {
    p.x = p.x + dx;
    p.y = p.y + dy;
}

@default fn main() -> i32 {
    let mut pt = Point { x: 3, y: 4 };

    // Call immutable method.
    assert pt.sum() == 7;

    // Call mutable method.
    pt.translate(10, 20);
    assert pt.x == 13;
    assert pt.y == 24;

    // Call via pointer.
    let ptr = &pt;
    assert ptr.sum() == 37;

    return 0;
}
