-- Simple OR gate design
library IEEE;
use IEEE.std_logic_1164.all;
use std.textio.all;

entity or_test is
end or_test;

architecture rtl of or_test is

component or_gate is
  port(
        a: in std_logic;
        b: in std_logic;
        q: out std_logic
      );
end component;

signal a_in, b_in, q_out: std_logic;

begin
  dut: or_gate port map(a_in, b_in, q_out);

  process
  begin

    a_in <= '0';
    b_in <= '0';
    wait for 1 ns;
    assert(q_out='0') report "Fail 0/0" severity error;

    a_in <= '0';
    b_in <= '1';
    wait for 1 ns;
    assert(q_out='1') report "Fail 0/1" severity error;

    a_in <= '1';
    b_in <= 'X';
    wait for 1 ns;
    assert(q_out='1') report "Fail 1/X" severity error;

    a_in <= '1';
    b_in <= '1';
    wait for 1 ns;
    assert(q_out='1') report "Fail 1/1" severity error;

    -- Clear inputs
    a_in <= '0';
    b_in <= '0';

    assert false report "Test done." severity note;
    wait;
  end process;
end rtl;