module testbench;
    reg clk;

    initial begin
       // $dumpfile("testbench.vcd");
       // $dumpvars(0, testbench);

        #0 clk = 0;
        repeat (10000) begin
            #5 clk = 1;
            #5 clk = 0;
        end

        $display("OKAY");
    end


    wire [3:0] D;
    reg [1:0] S = 0;
    reg	[3:0] control = 0;

	always @(posedge clk)
	case(S)
	2'b00: begin end
	2'b01: control <= 4'h2;
	2'b10: control <= 4'h4;
	2'b11: control <= 4'h8;
	default: control <= 4'h0;
	endcase

    top uut (
        .clk (clk ),
        .I (S ),
        .O (D )
    );

    always @(posedge clk) begin
    //#3;
    S <= S + 1;
    end

	check_output out_test( .A(control), .B(D));

endmodule

module check_output(input [3:0] A, input [3:0] B);
    always @(*)
    begin
        #1;
        if (A !== B)
        begin
            $display("ERROR: ASSERTION FAILED in %m:",$time," ",A," ",B);
            $stop;
        end
    end
endmodule