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:
parent
46951c778e
commit
0aef9326ca
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue