Add regression test for class method argument defaults

Check that default values for class methods are handled correctly and it is
possible to omit any argument. Check it for both functions and tasks.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
This commit is contained in:
Lars-Peter Clausen 2022-10-04 15:03:03 +02:00
parent 46951c778e
commit 0aef9326ca
4 changed files with 99 additions and 0 deletions

View File

@ -0,0 +1,41 @@
// Check that default values on function methods are supported and it is
// possible to omit any of the arguments.
class C;
function integer f(integer x = 1, integer y = 2, integer z = 3);
return x + y + z;
endfunction
endclass
module test;
C c = new;
bit failed = 1'b0;
`define check(expr, val) \
if (expr !== val) begin \
$display("FAILED. %s, expected %d, got %d", `"expr`", val, expr); \
failed = 1'b1; \
end
initial begin
`check(c.f(), 6);
`check(c.f(4), 9);
`check(c.f(4, ), 9);
`check(c.f(4, , ), 9);
`check(c.f(4, 6), 13);
`check(c.f(4, 6, ), 13);
`check(c.f(4, , 8), 14);
`check(c.f(4, 6, 8), 18);
`check(c.f(, 6), 10);
`check(c.f(, 6, ), 10);
`check(c.f(, 6 ,8), 15);
`check(c.f(, , 8), 11);
if (!failed) begin
$display("PASSED");
end
end
endmodule

View File

@ -0,0 +1,54 @@
// Check that default values on task methods are supported and it is possible to
// omit any of the arguments.
class C;
integer r;
task t(integer x = 1, integer y = 2, integer z = 3);
r = x + y + z;
endtask
endclass
module test;
C c = new;
bit failed = 1'b0;
`define check(expr, val) \
if (expr !== val) begin \
$display("FAILED. %s, expected %0d, got %0d", `"expr`", val, expr); \
failed = 1'b1; \
end
initial begin
c.t();
`check(c.r, 6);
c.t(4);
`check(c.r, 9);
c.t(4, );
`check(c.r, 9);
c.t(4, ,);
`check(c.r, 9);
c.t(4, 6);
`check(c.r, 13);
c.t(4, 6, );
`check(c.r, 13);
c.t(4, , 8);
`check(c.r, 14);
c.t(4, 6, 8);
`check(c.r, 18);
c.t(, 6);
`check(c.r, 10);
c.t(, 6, );
`check(c.r, 10);
c.t(, 6, 8);
`check(c.r, 15);
c.t(, , 8);
`check(c.r, 11);
if (!failed) begin
$display("PASSED");
end
end
endmodule

View File

@ -527,6 +527,8 @@ sv_class_new_fail1 CE,-g2009 ivltests
sv_class_new_fail2 CE,-g2009 ivltests
sv_class_new_init normal,-g2009 ivltests
sv_class_in_module_decl normal,-g2009 ivltests
sv_class_method_default1 normal,-g2009 ivltests
sv_class_method_default2 normal,-g2009 ivltests
sv_class_method_signed1 normal,-g2009 ivltests
sv_class_method_signed2 normal,-g2009 ivltests
sv_class_property_signed1 normal,-g2009 ivltests

View File

@ -407,6 +407,8 @@ sv_class_extends_scoped CE,-g2009 ivltests
sv_class_localparam CE,-g2009 ivltests
sv_class_new_init CE,-g2009 ivltests
sv_class_in_module_decl CE,-g2009 ivltests
sv_class_method_default1 CE,-g2009 ivltests
sv_class_method_default2 CE,-g2009 ivltests
sv_class_method_signed1 CE,-g2009,-pallowsigned=1 ivltests
sv_class_method_signed2 CE,-g2009,-pallowsigned=1 ivltests
sv_class_property_signed1 CE,-g2009,-pallowsigned=1 ivltests