-- Demonstrates array assignment
-- Arrays of the same name and size can be assigned,
-- even if the indices are different

with ada.text_io; use ada.text_io; 
with ada.integer_text_io; use ada.integer_text_io; 
procedure array_assign  is 

    type Int_Array_t is array(Natural range <>) of integer;

    procedure put_line(a: Int_Array_t) is 
    begin
        for i in a'range loop
            put(i);
            put(":");
            put(a(i)'img);
        end loop;
        new_line;
    end put_line;

    procedure put3(a1, a2, a3: Int_Array_t) is
    begin
        put_line(a1);
        put_line(a2);
        put_line(a3);
        new_line;
    end put3;

    a1: Int_Array_t(1 .. 4) := (11, 22, 33, 44);
    a2: Int_Array_t(1 .. 4) := (61, 72, 83, 94);
    a3: Int_Array_t(101 .. 104) := (91, 92, 93, 94);
begin
    put3(a1, a2, a3);

    a1 := a2;

    put3(a1, a2, a3);

    a1 := a3;

    put3(a1, a2, a3);
end  array_assign;

-- Output;
--          1: 11          2: 22          3: 33          4: 44
--          1: 61          2: 72          3: 83          4: 94
--        101: 91        102: 92        103: 93        104: 94
--
--          1: 61          2: 72          3: 83          4: 94
--          1: 61          2: 72          3: 83          4: 94
--        101: 91        102: 92        103: 93        104: 94
--
--          1: 91          2: 92          3: 93          4: 94
--          1: 61          2: 72          3: 83          4: 94
--        101: 91        102: 92        103: 93        104: 94