diff --git a/ivtest/ivltests/sv_class_method_default1.v b/ivtest/ivltests/sv_class_method_default1.v new file mode 100644 index 000000000..1900dc476 --- /dev/null +++ b/ivtest/ivltests/sv_class_method_default1.v @@ -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 diff --git a/ivtest/ivltests/sv_class_method_default2.v b/ivtest/ivltests/sv_class_method_default2.v new file mode 100644 index 000000000..2294e1f30 --- /dev/null +++ b/ivtest/ivltests/sv_class_method_default2.v @@ -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 diff --git a/ivtest/regress-sv.list b/ivtest/regress-sv.list index 9e133585b..dceb1c889 100644 --- a/ivtest/regress-sv.list +++ b/ivtest/regress-sv.list @@ -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 diff --git a/ivtest/regress-vlog95.list b/ivtest/regress-vlog95.list index a42d24955..0fdd10572 100644 --- a/ivtest/regress-vlog95.list +++ b/ivtest/regress-vlog95.list @@ -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