Add regression tests for string formatting of null-bytes through VPI

Check that null-bytes get removed when reading a value through the VPI API
as a vpiStringVal. Also check that null-bytes are not removed from string
literals when string literals are read through the VPI API as a non
vpiStringVal.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
This commit is contained in:
Lars-Peter Clausen 2023-01-01 18:45:10 -08:00
parent 56efec8ed1
commit 71bb011597
5 changed files with 112 additions and 0 deletions

View File

@ -0,0 +1,4 @@
Const Positive yes
Const Negative NO
Var Positive yes
Var Negative NO

View File

@ -0,0 +1,9 @@
module test;
reg expected = 1;
initial begin
$display("Const Positive %s", 1 ? "yes" : "NO");
$display("Const Negative %s", !1 ? "yes" : "NO");
$display("Var Positive %s", expected ? "yes" : "NO");
$display("Var Negative %s", !expected ? "yes" : "NO");
end
endmodule

View File

@ -0,0 +1,58 @@
// Check that null-bytes are handled consistently between string literals,
// number literals and signals of all kinds, especially when formatting as a
// string.
module test;
reg failed = 1'b0;
`define check(val, exp) \
if (val != exp) begin \
$display("FAILED(%0d): Expected '%0s', got '%0s'.", `__LINE__, exp, val); \
failed = 1'b1; \
end
reg [255:0] s;
reg [31:0] x;
reg [31:0] y[1:0];
wire [31:0] z;
wire [31:0] w;
assign z = "\000a\000b";
assign w = 32'h00610062;
initial begin
$sformat(s, ":%x:%0x:%s:%0s:", "\000a\000b", "\000a\000b", "\000a\000b", "\000a\000b");
`check(s, ":00610062:610062: a b:a b:")
$sformat(s, ":%x:%0x:%s:%0s:", 32'h00610062, 32'h00610062, 32'h00610062, 32'h00610062);
`check(s, ":00610062:610062: a b:a b:")
x = "\000a\000b";
$sformat(s, ":%x:%0x:%s:%0s:", x, x, x, x);
`check(s, ":00610062:610062: a b:a b:")
x = 32'h00610062;
$sformat(s, ":%x:%0x:%s:%0s:", x, x, x, x);
`check(s, ":00610062:610062: a b:a b:")
y[0] = "\000a\000b";
$sformat(s, ":%x:%0x:%s:%0s:", y[0], y[0], y[0], y[0]);
`check(s, ":00610062:610062: a b:a b:")
y[1] = 32'h00610062;
$sformat(s, ":%x:%0x:%s:%0s:", y[1], y[1], y[1], y[1]);
`check(s, ":00610062:610062: a b:a b:")
$sformat(s, ":%x:%0x:%s:%0s:", z, z, z, z);
`check(s, ":00610062:610062: a b:a b:")
$sformat(s, ":%x:%0x:%s:%0s:", w, w, w, w);
`check(s, ":00610062:610062: a b:a b:")
if (!failed) begin
$display("PASSED");
end
end
endmodule

View File

@ -0,0 +1,38 @@
// Check that the empty string "" is equivalent to 8'h00
module test;
reg failed = 1'b0;
`define check(val, exp) \
if (val != exp) begin \
$display("FAILED(%0d): Expected '%0s', got '%0s'.", `__LINE__, exp, val); \
failed = 1'b1; \
end
reg [47:0] s;
reg [7:0] x;
wire [7:0] y;
assign y = "";
initial begin
`check("", 8'h00);
`check($bits(""), 8);
$sformat(s, ":%s:%0s:", "", "");
`check(s, ": ::");
x = 8'h00;
$sformat(s, ":%s:%0s:", x, x);
`check(s, ": ::");
$sformat(s, ":%s:%0s:", y, y);
`check(s, ": ::");
if (!failed) begin
$display("PASSED");
end
end
endmodule

View File

@ -355,6 +355,7 @@ br_gh782e normal ivltests
br_gh782f normal ivltests
br_gh788 normal,-gno-io-range-error,-Wno-anachronisms ivltests gold=br_gh788.gold
br_gh793 normal ivltests
br_gh827 normal ivltests gold=br_gh827.gold
br_ml20150315 normal ivltests gold=br_ml_20150315.gold
br_ml20150321 CE ivltests
br_mw20171108 normal ivltests
@ -1646,6 +1647,8 @@ string9 normal ivltests gold=string9.gold
string10 normal ivltests gold=string10.gold
string11 normal ivltests gold=string11.gold
string12 normal ivltests
string13 normal ivltests
string14 normal ivltests
supply1 normal ivltests
supply2 normal ivltests
switch_primitives normal ivltests gold=switch_primitives.gold