Testbench Code
`timescale 1ns/1ps
module tb_parking_status16;
    // Input
    reg  [15:0] slots;
    // DUT outputs
    wire all_full;
    wire any_free;
    // Expected outputs
    reg  expected_all_full;
    reg  expected_any_free;
    // Mismatch signals
    wire mismatch_all_full = (all_full !== expected_all_full);
    wire mismatch_any_free = (any_free !== expected_any_free);
    wire mismatch          = mismatch_all_full | mismatch_any_free;
    integer TOTAL_TEST_CASES = 0;
    integer TOTAL_PASSED_TEST_CASES = 0;
    integer TOTAL_FAILED_TEST_CASES = 0;
    // Instantiate DUT
    parking_status16 dut (
        .slots(slots),
        .all_full(all_full),
        .any_free(any_free)
    );
    // VCD dump (Inputs -> Outputs -> Expected Outputs -> mismatch)
    initial begin
        $dumpfile("tb_parking_status16.vcd");
        $dumpvars(0,
            tb_parking_status16.slots,             // inputs
            tb_parking_status16.all_full,          // outputs
            tb_parking_status16.any_free,
            tb_parking_status16.expected_all_full, // expected
            tb_parking_status16.expected_any_free,
            tb_parking_status16.mismatch           // consolidated mismatch flag
        );
    end
    // Golden model (mirrors reference solution)
    task compute_expected;
        input [15:0] t_slots;
        begin
            expected_all_full = &t_slots;
            expected_any_free = ~(&t_slots);
            // Alternative: expected_any_free = |(~t_slots);
        end
    endtask
    task run_test;
        input [15:0] t_slots;
        begin
            slots = t_slots;
            compute_expected(t_slots);
            #1; // settle
            TOTAL_TEST_CASES = TOTAL_TEST_CASES + 1;
            if (!mismatch) begin
                TOTAL_PASSED_TEST_CASES = TOTAL_PASSED_TEST_CASES + 1;
            end else begin
                TOTAL_FAILED_TEST_CASES = TOTAL_FAILED_TEST_CASES + 1;
                $display("FAILED: slots=%h | all_full=%b any_free=%b | exp_full=%b exp_free=%b mismatch=%b",
                         slots, all_full, any_free, expected_all_full, expected_any_free, mismatch);
            end
        end
    endtask
    integer i;
    initial begin
        // Directed edge/typical cases
        run_test(16'h0000); // all free
        run_test(16'hFFFF); // all full
        run_test(16'hAAAA); // alternating 1010...
        run_test(16'h5555); // alternating 0101...
        run_test(16'h0001); // endpoints occupied only
        run_test(16'hFFFE); // all but endpoints
        // Limited randomized sweep (covers variety but keeps log short)
        for (i = 0; i < 8; i = i + 1)
            run_test($random);
        // Summary
        $display("======================================");
        $display("TOTAL_TEST_CASES=%0d", TOTAL_TEST_CASES);
        $display("TOTAL_PASSED_TEST_CASES=%0d", TOTAL_PASSED_TEST_CASES);
        $display("TOTAL_FAILED_TEST_CASES=%0d", TOTAL_FAILED_TEST_CASES);
        $display("ALL_TEST_CASES_PASSED=%s",
                 (TOTAL_FAILED_TEST_CASES==0) ? "true" : "false");
        $display("======================================");
        $finish;
    end
endmodule