//! returns: 0
//! Test slice capacity field and @sliceOf builtin.

@default fn main() -> i32 {
    // Test that regular slices have cap == len.
    let mut arr: [i32; 4] = [10, 20, 30, 40];
    let s = &mut arr[..];

    if s.cap <> 4 {
        return 1;
    }
    if s.len <> s.cap {
        return 2;
    }

    // Test @sliceOf with explicit capacity.
    let ptr = &mut arr[0];
    let s2 = @sliceOf(ptr, 2, 4);

    if s2.len <> 2 {
        return 3;
    }
    if s2.cap <> 4 {
        return 4;
    }
    if s2[0] <> 10 {
        return 5;
    }
    if s2[1] <> 20 {
        return 6;
    }

    // Test @sliceOf with zero length.
    let s3 = @sliceOf(ptr, 0, 4);

    if s3.len <> 0 {
        return 7;
    }
    if s3.cap <> 4 {
        return 8;
    }

    // Test @sliceOf still works and has cap == len.
    let s4 = @sliceOf(ptr, 3);

    if s4.len <> 3 {
        return 9;
    }
    if s4.cap <> 3 {
        return 10;
    }
    return 0;
}
