Reusing full_adder module

module ripple_carry_adder(
    input [3:0] A, B,
    input Cin,
    output [3:0] Sum,
    output Cout
);

wire c1, c2, c3;

// Chain of Full Adders
full_adder fa0 (.A(A[0]), .B(B[0]), .Cin(Cin),  .Sum(Sum[0]), .Carry(c1));
full_adder fa1 (.A(A[1]), .B(B[1]), .Cin(c1),   .Sum(Sum[1]), .Carry(c2));
full_adder fa2 (.A(A[2]), .B(B[2]), .Cin(c2),   .Sum(Sum[2]), .Carry(c3));
full_adder fa3 (.A(A[3]), .B(B[3]), .Cin(c3),   .Sum(Sum[3]), .Carry(Cout));

endmodule

Test Bench

module ripple_carry_adder_tb;

reg [3:0] A, B;
reg Cin;
wire [3:0] Sum;
wire Cout;

ripple_carry_adder uut (
    .A(A), .B(B), .Cin(Cin),
    .Sum(Sum), .Cout(Cout)
);

initial begin
    $monitor("A=%b B=%b Cin=%b | Sum=%b Cout=%b",
              A, B, Cin, Sum, Cout);

    // Test cases
    A=4'b0000; B=4'b0000; Cin=0; #10;
    A=4'b0011; B=4'b0101; Cin=0; #10;
    A=4'b1111; B=4'b0001; Cin=0; #10;
    A=4'b1010; B=4'b0101; Cin=1; #10;
    A=4'b1111; B=4'b1111; Cin=0; #10;

    $finish;
end

endmodule