import * from array_extensions;

let zeros = arr_with_capacity<Int>(10);
zeros.fill(0);

if zeros.len() != 10 {
    panic("Invalid length");
}

for i in zeros {
    if i != 0 {
        panic("Invalid value");
    }
}

zeros.transform_inplace((i: Int) 1);

for i in zeros {
    if i != 1 {
        panic("Invalid value");
    }
}

let strings = zeros.transform((i: Int) i.deref().to_string());

for i in strings {
    if i != "1" {
        panic("Invalid value");
    }
}

let data = arr_with_capacity<Int>(3);

data.fill_with((idx: Int) move(idx))
    .reverse()
    .transform_inplace((i: Int) i + 1)
    .transform_inplace((i: Int) i * i);

if data[0] != 9 || data[1] != 4 || data[2] != 1 {
    panic("Invalid value");
}

print(move(data));

let big_sum = arr_with_capacity<Int>(1001)
    .mut()
    .fill_with((idx: Int) move(idx))
    .reduce(0, (a: Int, b: Int) a + b);

if big_sum != 500500 {
    panic("Invalid value");
}