package MINE is
  function REVERSE(X : in bit_vector) return bit_vector;
end MINE;

package body MINE is
  function REVERSE(X : in bit_vector) return bit_vector is
    variable Y : bit_vector(X'range);
    variable low : integer;
    variable high : integer;
  begin
    if (X'left = X'low) then
      for i in 0 to X'length - 1 loop
        Y(X'low + X'length - i - 1) := X(i + X'low);
      end loop;
    else
      for i in 0 to X'length - 1 loop
        Y(X'low + i) := X(X'low + X'length - 1 - i);
      end loop;
    end if;
    return Y;
  end REVERSE;
end MINE;

use work.MINE.all;
entity TEST_REVERSE is
end TEST_REVERSE;

architecture TWISTED of TEST_REVERSE is
  signal A : bit_vector(5 downto 0) := "111000";
  signal B : bit_vector(24 to 35) := "000110001101";
  signal C : bit_vector(40 downto 34) := "1111110";
  signal D : bit_vector(40 downto 35);
  signal E : bit_vector(0 to 11);
  signal F : bit_vector(0 to 6);
begin
  process
  begin
    wait for 10 ns;
    D <= REVERSE(A);
    E <= REVERSE(B);
    F <= REVERSE(C);
    wait;
  end process;
end TWISTED;
