// Test flatten array intrinsic method

proc main()
{
    var a, b;

    // Simple flatten - packed array
    a = [[1,2,3],[4,5,6]];
    b = a.flatten();
    "", b.parent, ": ", b, '\n';

    // Iterator
    a = [2,3].iterate();
    b = a.flatten();
    "", b.parent, ": ", b, '\n';

    // List
    a = {1,2,3,4};
    b = a.flatten();
    "", b.parent, ": ", b, '\n';

    // Nested list, with promotion
    a = {{1,2},3.1,{4,5}};
    b = a.flatten();
    "", b.parent, ": ", b, '\n';

    // Nested list, preventing promotion
    a = {{1,2},main,{4,5}};
    b = a.flatten();
    "", b.parent, ": ", b, '\n';

    // Nested iterator
    a = {[2,3].iterate(), 100};
    b = a.flatten();
    "", b.parent, ": ", b, '\n';

    // Deeply nested list
    a = {{{{1,2},3},4},5};
    b = a.flatten();
    "", b.parent, ": ", b, '\n';
}