forked from github/verilator
Tests: Add class name test.
This commit is contained in:
parent
963fd0664d
commit
cc307626c0
@ -4,30 +4,158 @@
|
||||
// any use, without warranty, 2020 by Wilson Snyder.
|
||||
// SPDX-License-Identifier: CC0-1.0
|
||||
|
||||
task unit_name;
|
||||
$write("unit_name = '%m'\n");
|
||||
endtask
|
||||
`ifdef verilator
|
||||
`define stop $stop
|
||||
`else
|
||||
`define stop
|
||||
`endif
|
||||
`define checks(gotv,expv) do if ((gotv) != (expv)) begin $write("%%Error: %s:%0d: got='%s' exp='%s'\n", `__FILE__,`__LINE__, (gotv), (expv)); `stop; end while(0);
|
||||
|
||||
function string unit_name;
|
||||
return $sformatf("u %m");
|
||||
endfunction
|
||||
|
||||
class Cls;
|
||||
static task static_name;
|
||||
$write("static_name = '%m'\n");
|
||||
endtask
|
||||
task nonstatic_name;
|
||||
$write("nonstatic_name = '%m'\n");
|
||||
endtask
|
||||
endclass : Cls
|
||||
// We use the same name for all static_name's to check we resolve right
|
||||
static function string static_name;
|
||||
return $sformatf("c %m");
|
||||
endfunction
|
||||
// Different for non_statis to make sure likewise
|
||||
function string c_auto_name;
|
||||
return $sformatf("c %m");
|
||||
endfunction
|
||||
endclass
|
||||
|
||||
module t (/*AUTOARG*/);
|
||||
initial begin
|
||||
package P;
|
||||
class Cls;
|
||||
static function string static_name;
|
||||
return $sformatf("p %m");
|
||||
endfunction
|
||||
function string p_auto_name;
|
||||
return $sformatf("p %m");
|
||||
endfunction
|
||||
endclass
|
||||
endpackage
|
||||
|
||||
module M;
|
||||
class Cls;
|
||||
static function string static_name;
|
||||
return $sformatf("m %m");
|
||||
endfunction
|
||||
function string m_auto_name;
|
||||
return $sformatf("m %m");
|
||||
endfunction
|
||||
endclass
|
||||
S sub();
|
||||
function string cls_static_name;
|
||||
return Cls::static_name();
|
||||
endfunction
|
||||
function string cls_auto_name;
|
||||
Cls c;
|
||||
c = new;
|
||||
$write("t = '%m'\n");
|
||||
unit_name();
|
||||
$write("Below results vary with simulator.\n");
|
||||
// E.g. '$unit.\Cls::static_name '
|
||||
// E.g. '$unit_x.Cls.static_name'
|
||||
c.static_name();
|
||||
c.nonstatic_name();
|
||||
return c.m_auto_name();
|
||||
endfunction
|
||||
endmodule
|
||||
|
||||
module S;
|
||||
class Cls;
|
||||
static function string static_name;
|
||||
return $sformatf("ms %m");
|
||||
endfunction
|
||||
function string ms_auto_name;
|
||||
return $sformatf("ms %m");
|
||||
endfunction
|
||||
endclass
|
||||
function string cls_static_name;
|
||||
return Cls::static_name();
|
||||
endfunction
|
||||
function string cls_auto_name;
|
||||
Cls c;
|
||||
c = new;
|
||||
return c.ms_auto_name();
|
||||
endfunction
|
||||
endmodule
|
||||
|
||||
module t (/*AUTOARG*/);
|
||||
string s;
|
||||
|
||||
M m();
|
||||
|
||||
function string mod_func_name;
|
||||
return $sformatf("tmf %m");
|
||||
endfunction
|
||||
|
||||
initial begin
|
||||
Cls c;
|
||||
P::Cls p;
|
||||
p = new;
|
||||
c = new;
|
||||
|
||||
s = mod_func_name();
|
||||
`checks(s, "tmf top.t");
|
||||
// UNSUP `checks(s, "tmf top.t.mod_func_name");
|
||||
|
||||
s = unit_name();
|
||||
`checks(s, "u top.$unit");
|
||||
// UNSUP `checks(s, "u top.$unit.unit_name");
|
||||
// Others: "u $unit_????::unit_name
|
||||
// Others: "u $unit::unit_name
|
||||
// Others: "u \\package UnitScopePackage_1\ .UnitScopePackage_1.unit_name
|
||||
|
||||
// *** Below results vary with simulator.
|
||||
|
||||
s = Cls::static_name();
|
||||
`checks(s, "c top.$unit.Cls");
|
||||
// UNSUP `checks(s, "c top.$unit.Cls.static_name");
|
||||
// Others: "c $unit_????.Cls.static_name
|
||||
// Others: "c $unit::\Cls::static_name
|
||||
// Others: "c Cls.static_name
|
||||
s = c.c_auto_name();
|
||||
`checks(s, "c top.$unit.Cls");
|
||||
// UNSUP `checks(s, "c top.$unit.Cls.c_auto_name");
|
||||
// Others: "c $unit_????.Cls.c_auto_name
|
||||
// Others: "c $unit::\Cls::c_auto_name
|
||||
// Others: "c Cls.c_auto_name
|
||||
|
||||
//UNSUP s = P::Cls::static_name();
|
||||
//UNSUP `checks(s, "p top.P.Cls");
|
||||
// UNSUP `checks(s, "p top.P.Cls.static_name");
|
||||
// Others: "p P.Cls.static_name
|
||||
// Others: "p P::Cls.static_name
|
||||
// Others: "p P::\Cls::static_name
|
||||
// Others: "p \\package P\ .Cls.static_name
|
||||
|
||||
s = p.p_auto_name();
|
||||
`checks(s, "p top.P.Cls");
|
||||
// UNSUP `checks(s, "p top.P.Cls.p_auto_name");
|
||||
// Others: "p P.Cls.p_auto_name
|
||||
// Others: "p P::Cls.p_auto_name
|
||||
// Others: "p P::\Cls::p_auto_name
|
||||
// Others: "p \\package P\ .Cls.p_auto_name
|
||||
|
||||
s = m.cls_static_name();
|
||||
`checks(s, "m top.t.m.Cls");
|
||||
// UNSUP `checks(s, "m top.t.m.Cls.static_name");
|
||||
// Others: "m top.t.m.Cls.static_name
|
||||
// Others: "m top.t.m.\Cls::static_name
|
||||
|
||||
s = m.cls_auto_name();
|
||||
`checks(s, "m top.t.m.Cls");
|
||||
// UNSUP `checks(s, "m top.t.m.Cls.m_auto_name");
|
||||
// Others: "m top.t.m.Cls.m_auto_name
|
||||
// Others: "m top.t.m.\Cls::m_auto_name
|
||||
|
||||
s = m.sub.cls_static_name();
|
||||
`checks(s, "ms top.t.m.sub.Cls");
|
||||
// UNSUP `checks(s, "ms top.t.m.sub.Cls.static_name");
|
||||
// Others: "ms top.t.m.sub.Cls.static_name
|
||||
// Others: "ms top.t.m.sub.\Cls::static_name
|
||||
s = m.sub.cls_auto_name();
|
||||
`checks(s, "ms top.t.m.sub.Cls");
|
||||
// UNSUP `checks(s, "ms top.t.m.sub.Cls.ms_auto_name");
|
||||
// Others: "ms top.t.m.sub.Cls.ms_auto_name
|
||||
// Others: "ms top.t.m.sub.\Cls::ms_auto_name
|
||||
|
||||
$write("*-* All Finished *-*\n");
|
||||
$finish;
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user