// Test subrange assignments

proc main()
{
    var a = ['A':'Z'].reshape(4,4,4);
    var b = @a;
    var c = @a;
    var d = @a;

    // Scalar assignment - put a hole in the array
    a[1:2,1:2,1:2] = ' ';

    // Matrix assignment - must match shape
    b[1:2,1:2,1:2] = ['a':'z'].reshape(2,2,2);

    // Incremental assignment
    c[1:2,1:2,1:2] += 32;

    // Incremental assignment by a matrix
    d[1:2,1:2,1:2] += (1+[2,2,2].iterate());

    "", a, b, c, d, '\n';

    "\nNext statement should throw a ShapeCheck\n";
    try {
        b[1:2,1:2,1:2] = ['a':'z'].reshape(3,2,2);
    }
    catch (e) {
        "Caught ", e, '\n';
    }
}