import aner.parallel

// One explicit numerical copy, shared by all local repetitions.
// Ordinary mutable parameters still receive private per-task copies.
fn simulate(parameters: List, iteration: Int64, seed: Int64) -> Float64 {
    let input = cast<FrozenArray<Float64>>(parameters.get(0))
    return input[iteration % input.len()] + Float64(iteration)
}

let initial = Array<Float64>(size: 1000, fill: 2.0)
let input = initial.snapshot()
initial[0] = 99.0

let results = parallel.repeat(iterations: 1000, task: simulate,
    parameters: List(input), execution: parallel.local(), seed: 42)
print(input[0])
print(results.value(0, 0))
print(results.value(999, 0))
print(results.summary())
