procedure TEST_BUBBLE_SORT is

  type INTEGER_ARRAY is array (INTEGER range <>  ) of INTEGER;  	  

  TEST_ARRAY : INTEGER_ARRAY (1 .. 10) := (10,9,8,7,6,5,4,3,2,1);

  procedure SWAP (X, Y : in out INTEGER ) is
    TEMP : INTEGER;
  begin
    TEMP := X;
    X := Y;
    Y := TEMP;
  end SWAP;

  procedure BUBBLE_MAX (ARG : in out INTEGER_ARRAY) is
  begin
    for INDEX in ARG'FIRST .. ARG'LAST-1 loop
      if ARG(INDEX) > ARG(INDEX+1) then
        SWAP (ARG(INDEX), ARG(INDEX+1) );
      end if;
    end loop;
  end BUBBLE_MAX;     

  procedure BUBBLE_SORT (BUFFER : in out INTEGER_ARRAY) is
  begin
    for TOP in reverse BUFFER'FIRST+1 .. BUFFER'LAST loop
      BUBBLE_MAX (BUFFER (BUFFER'FIRST .. TOP));
    end loop;
  end BUBBLE_SORT;     

begin
    BUBBLE_SORT (TEST_ARRAY);
end TEST_BUBBLE_SORT;

