mirror of
https://github.com/steveicarus/iverilog.git
synced 2026-09-08 12:23:32 +02:00
By adding ivtest to the iverilog source tree, it is easier to keep the regression test synchronized with the source that is being tested. This should be especially helpful for PRs that add a new feature, and have a matching ivtest PR with the regression test for that feature.
1319 lines
39 KiB
Verilog
1319 lines
39 KiB
Verilog
`timescale 1ns/10ps
|
|
|
|
module top;
|
|
reg pass;
|
|
reg [80*8:1] str;
|
|
reg [63:0] a, b, c;
|
|
real r;
|
|
integer code;
|
|
|
|
initial begin
|
|
pass = 1'b1;
|
|
|
|
// Check that a failing match stops the matching process.
|
|
str = "2 3";
|
|
code = $sscanf(str, "%b%d", a, b);
|
|
if (code !== 0) begin
|
|
$display("FAILED(mb) to stop matching found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
str = "8 3";
|
|
code = $sscanf(str, "%o%d", a, b);
|
|
if (code !== 0) begin
|
|
$display("FAILED(mo) to stop matching found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
str = "g 3";
|
|
code = $sscanf(str, "%h%d", a, b);
|
|
if (code !== 0) begin
|
|
$display("FAILED(mh) to stop matching found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
str = "g 3";
|
|
code = $sscanf(str, "%x%d", a, b);
|
|
if (code !== 0) begin
|
|
$display("FAILED(mx) to stop matching found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
str = "a 3";
|
|
code = $sscanf(str, "%d%d", a, b);
|
|
if (code !== 0) begin
|
|
$display("FAILED(md) to stop matching found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
// Check parsing all the binary values (%b).
|
|
str = "01_?xzXZ";
|
|
code = $sscanf(str, "%b", a);
|
|
if (code !== 1) begin
|
|
$display("FAILED(b) to parse one argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 'b01xxzxz) begin
|
|
$display("FAILED(b) argument value, expected 01xxzxz, got %b", a);
|
|
pass = 1'b0;
|
|
end
|
|
// Check that a leaading underscore is invalid.
|
|
a = 'bx;
|
|
str = "_01_?xzXZ";
|
|
code = $sscanf(str, "%b", a);
|
|
if (code !== 0) begin
|
|
$display("FAILED(bi) to parse zero argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 'bx) begin
|
|
$display("FAILED(bi) argument value, expected x, got %b", a);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
// Check parsing all the octal values (%o).
|
|
str = "01234567_xzXZ?";
|
|
code = $sscanf(str, "%o", a);
|
|
if (code !== 1) begin
|
|
$display("FAILED(o) to parse one argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 64'o01234567xzxzx) begin
|
|
$display("FAILED(o) argument value, expected 01234567xzxzx, got %o", a);
|
|
pass = 1'b0;
|
|
end
|
|
// Check that a leaading underscore is invalid.
|
|
a = 'bx;
|
|
str = "_01234567_xzXZ?";
|
|
code = $sscanf(str, "%o", a);
|
|
if (code !== 0) begin
|
|
$display("FAILED(oi) to parse zero argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 'ox) begin
|
|
$display("FAILED(oi) argument value, expected x, got %o", a);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
// Check parsing all the decimal values (%d).
|
|
str = "+01234_56789";
|
|
code = $sscanf(str, "%d", a);
|
|
if (code !== 1) begin
|
|
$display("FAILED(d1) to parse one argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 'd0123456789) begin
|
|
$display("FAILED(d1) argument value, expected 0123456789, got %d", a);
|
|
pass = 1'b0;
|
|
end
|
|
str = "01234_56789";
|
|
code = $sscanf(str, "%d", a);
|
|
if (code !== 1) begin
|
|
$display("FAILED(d2) to parse one argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 'd0123456789) begin
|
|
$display("FAILED(d2) argument value, expected 0123456789, got %d", a);
|
|
pass = 1'b0;
|
|
end
|
|
str = "-01234_56789";
|
|
code = $sscanf(str, "%d", a);
|
|
if (code !== 1) begin
|
|
$display("FAILED(d3) to parse one argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== -'d0123456789) begin
|
|
$display("FAILED(d3) argument value, expected -0123456789, got %d", a);
|
|
pass = 1'b0;
|
|
end
|
|
str = "x";
|
|
code = $sscanf(str, "%d", a);
|
|
if (code !== 1) begin
|
|
$display("FAILED(d4) to parse one argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 'dx) begin
|
|
$display("FAILED(d4) argument value, expected x, got %d", a);
|
|
pass = 1'b0;
|
|
end
|
|
str = "X";
|
|
code = $sscanf(str, "%d", a);
|
|
if (code !== 1) begin
|
|
$display("FAILED(d5) to parse one argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 'dx) begin
|
|
$display("FAILED(d5) argument value, expected x, got %d", a);
|
|
pass = 1'b0;
|
|
end
|
|
str = "z";
|
|
code = $sscanf(str, "%d", a);
|
|
if (code !== 1) begin
|
|
$display("FAILED(d6) to parse one argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 'dz) begin
|
|
$display("FAILED(d6) argument value, expected z, got %d", a);
|
|
pass = 1'b0;
|
|
end
|
|
str = "Z";
|
|
code = $sscanf(str, "%d", a);
|
|
if (code !== 1) begin
|
|
$display("FAILED(d7) to parse one argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 'dz) begin
|
|
$display("FAILED(d7) argument value, expected z, got %d", a);
|
|
pass = 1'b0;
|
|
end
|
|
str = "?";
|
|
code = $sscanf(str, "%d", a);
|
|
if (code !== 1) begin
|
|
$display("FAILED(d8) to parse one argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 'dx) begin
|
|
$display("FAILED(d8) argument value, expected x, got %d", a);
|
|
pass = 1'b0;
|
|
end
|
|
// A plus or minus must have a digit after to match.
|
|
a = 'bx;
|
|
str = "-q";
|
|
code = $sscanf(str, "%d", a);
|
|
if (code !== 0) begin
|
|
$display("FAILED(d9) to parse zero arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 'dx) begin
|
|
$display("FAILED(d9) argument value, expected x, got %d", a);
|
|
pass = 1'b0;
|
|
end
|
|
a = 'bx;
|
|
str = "+q";
|
|
code = $sscanf(str, "%d", a);
|
|
if (code !== 0) begin
|
|
$display("FAILED(d0) to parse zero arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 'dx) begin
|
|
$display("FAILED(d0) argument value, expected x, got %d", a);
|
|
pass = 1'b0;
|
|
end
|
|
// Check that a leaading underscore is invalid.
|
|
a = 'dx;
|
|
str = "_01234_56789";
|
|
code = $sscanf(str, "%d", a);
|
|
if (code !== 0) begin
|
|
$display("FAILED(di) to parse zero argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 'dx) begin
|
|
$display("FAILED(di) argument value, expected x, got %d", a);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
// Check parsing all the hex values (both %h and %x).
|
|
str = "0123456789_xzXZ?";
|
|
code = $sscanf(str, "%h", a);
|
|
if (code !== 1) begin
|
|
$display("FAILED(h1) to parse one argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 64'h0123456789xzxzx) begin
|
|
$display("FAILED(h1) argument value, expected 0123456789xzxzx, got %h", a);
|
|
pass = 1'b0;
|
|
end
|
|
str = "aA_bB_cC_dD_eE_fF";
|
|
code = $sscanf(str, "%h", a);
|
|
if (code !== 1) begin
|
|
$display("FAILED(h2) to parse one argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 64'haabbccddeeff) begin
|
|
$display("FAILED(h2) argument value, expected aabbccddeeff, got %h", a);
|
|
pass = 1'b0;
|
|
end
|
|
str = "0123456789_xzXZ?";
|
|
code = $sscanf(str, "%x", a);
|
|
if (code !== 1) begin
|
|
$display("FAILED(h3) to parse one argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 64'h0123456789xzxzx) begin
|
|
$display("FAILED(h3) argument value, expected 0123456789xzxzx, got %h", a);
|
|
pass = 1'b0;
|
|
end
|
|
str = "aA_bB_cC_dD_eE_fF";
|
|
code = $sscanf(str, "%x", a);
|
|
if (code !== 1) begin
|
|
$display("FAILED(h4) to parse one argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 64'haabbccddeeff) begin
|
|
$display("FAILED(h4) argument value, expected aabbccddeeff, got %h", a);
|
|
pass = 1'b0;
|
|
end
|
|
// Check that a leaading underscore is invalid.
|
|
a = 'dx;
|
|
str = "_0123456789_xzXZ?";
|
|
code = $sscanf(str, "%h", a);
|
|
if (code !== 0) begin
|
|
$display("FAILED(hi) to parse zero argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 'hx) begin
|
|
$display("FAILED(hi) argument value, expected x, got %h", a);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
// Check parsing real values %f.
|
|
str = "+0123456789";
|
|
code = $sscanf(str, "%f", r);
|
|
if (code !== 1) begin
|
|
$display("FAILED(f1) to parse one argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 123456789.0) begin
|
|
$display("FAILED(f1) argument value, expected 123456789.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
str = "0123456789";
|
|
code = $sscanf(str, "%f", r);
|
|
if (code !== 1) begin
|
|
$display("FAILED(f2) to parse one argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 123456789.0) begin
|
|
$display("FAILED(f2) argument value, expected 123456789.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
str = "-0123456789";
|
|
code = $sscanf(str, "%f", r);
|
|
if (code !== 1) begin
|
|
$display("FAILED(f3) to parse one argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != -123456789.0) begin
|
|
$display("FAILED(f3) argument value, expected -123456789.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
// A plus or minus must have a digit after to match.
|
|
r = 1.0;
|
|
str = "-q";
|
|
code = $sscanf(str, "%f", r);
|
|
if (code !== 0) begin
|
|
$display("FAILED(f4) to parse zero arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 1.0) begin
|
|
$display("FAILED(f4) argument value, expected 1.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
r = 1.0;
|
|
str = "+q";
|
|
code = $sscanf(str, "%f", r);
|
|
if (code !== 0) begin
|
|
$display("FAILED(f5) to parse zero arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 1.0) begin
|
|
$display("FAILED(f5) argument value, expected 1.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
r = 1.0;
|
|
str = "q";
|
|
code = $sscanf(str, "%f", r);
|
|
if (code !== 0) begin
|
|
$display("FAILED(f6) to parse zero arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 1.0) begin
|
|
$display("FAILED(f6) argument value, expected 1.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
// Check starting/trailing decimal point.
|
|
str = "2.";
|
|
code = $sscanf(str, "%f", r);
|
|
if (code !== 1) begin
|
|
$display("FAILED(f7) to parse one arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 2.0) begin
|
|
$display("FAILED(f7) argument value, expected 2.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
str = ".2";
|
|
code = $sscanf(str, "%f", r);
|
|
if (code !== 1) begin
|
|
$display("FAILED(f8) to parse one arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 0.2) begin
|
|
$display("FAILED(f8) argument value, expected 0.2, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
// Check with an exponent.
|
|
str = "2.e1";
|
|
code = $sscanf(str, "%f", r);
|
|
if (code !== 1) begin
|
|
$display("FAILED(f9) to parse one arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 20.0) begin
|
|
$display("FAILED(f9) argument value, expected 20.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
str = "2.e-1";
|
|
code = $sscanf(str, "%f", r);
|
|
if (code !== 1) begin
|
|
$display("FAILED(f10) to parse one arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 0.2) begin
|
|
$display("FAILED(f10) argument value, expected 0.2, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
// Check failing exponent cases.
|
|
r = 1.0;
|
|
str = "2.ea";
|
|
code = $sscanf(str, "%f", r);
|
|
if (code !== 0) begin
|
|
$display("FAILED(f11) to parse zero arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 1.0) begin
|
|
$display("FAILED(f11) argument value, expected 1.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
r = 1.0;
|
|
str = "2.e+a";
|
|
code = $sscanf(str, "%f", r);
|
|
if (code !== 0) begin
|
|
$display("FAILED(f12) to parse zero arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 1.0) begin
|
|
$display("FAILED(f12) argument value, expected 1.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
r = 1.0;
|
|
str = "2.e-a";
|
|
code = $sscanf(str, "%f", r);
|
|
if (code !== 0) begin
|
|
$display("FAILED(f13) to parse zero arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 1.0) begin
|
|
$display("FAILED(f13) argument value, expected 1.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
str = "1e5000";
|
|
code = $sscanf(str, "%f", r);
|
|
if (code !== 1) begin
|
|
$display("FAILED(f14) to parse one arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 1.0/0.0) begin
|
|
$display("FAILED(f14) argument value, expected inf, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
str = "-1e5000";
|
|
code = $sscanf(str, "%f", r);
|
|
if (code !== 1) begin
|
|
$display("FAILED(f14) to parse one arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != -1.0/0.0) begin
|
|
$display("FAILED(f14) argument value, expected -inf, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
// Check parsing real values %e.
|
|
str = "+0123456789";
|
|
code = $sscanf(str, "%e", r);
|
|
if (code !== 1) begin
|
|
$display("FAILED(e1) to parse one argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 123456789.0) begin
|
|
$display("FAILED(e1) argument value, expected 123456789.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
str = "0123456789";
|
|
code = $sscanf(str, "%e", r);
|
|
if (code !== 1) begin
|
|
$display("FAILED(e2) to parse one argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 123456789.0) begin
|
|
$display("FAILED(e2) argument value, expected 123456789.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
str = "-0123456789";
|
|
code = $sscanf(str, "%e", r);
|
|
if (code !== 1) begin
|
|
$display("FAILED(e3) to parse one argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != -123456789.0) begin
|
|
$display("FAILED(e3) argument value, expected -123456789.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
// A plus or minus must have a digit after to match.
|
|
r = 1.0;
|
|
str = "-q";
|
|
code = $sscanf(str, "%e", r);
|
|
if (code !== 0) begin
|
|
$display("FAILED(e4) to parse zero arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 1.0) begin
|
|
$display("FAILED(e4) argument value, expected 1.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
r = 1.0;
|
|
str = "+q";
|
|
code = $sscanf(str, "%e", r);
|
|
if (code !== 0) begin
|
|
$display("FAILED(e5) to parse zero arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 1.0) begin
|
|
$display("FAILED(e5) argument value, expected 1.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
r = 1.0;
|
|
str = "q";
|
|
code = $sscanf(str, "%e", r);
|
|
if (code !== 0) begin
|
|
$display("FAILED(e6) to parse zero arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 1.0) begin
|
|
$display("FAILED(e6) argument value, expected 1.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
// Check starting/trailing decimal point.
|
|
str = "2.";
|
|
code = $sscanf(str, "%e", r);
|
|
if (code !== 1) begin
|
|
$display("FAILED(e7) to parse one arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 2.0) begin
|
|
$display("FAILED(e7) argument value, expected 2.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
str = ".2";
|
|
code = $sscanf(str, "%e", r);
|
|
if (code !== 1) begin
|
|
$display("FAILED(e8) to parse one arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 0.2) begin
|
|
$display("FAILED(e8) argument value, expected 0.2, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
// Check with an exponent.
|
|
str = "2.e1";
|
|
code = $sscanf(str, "%e", r);
|
|
if (code !== 1) begin
|
|
$display("FAILED(e9) to parse one arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 20.0) begin
|
|
$display("FAILED(e9) argument value, expected 20.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
str = "2.e-1";
|
|
code = $sscanf(str, "%e", r);
|
|
if (code !== 1) begin
|
|
$display("FAILED(e10) to parse one arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 0.2) begin
|
|
$display("FAILED(e10) argument value, expected 0.2, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
// Check failing exponent cases.
|
|
r = 1.0;
|
|
str = "2.ea";
|
|
code = $sscanf(str, "%e", r);
|
|
if (code !== 0) begin
|
|
$display("FAILED(e11) to parse zero arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 1.0) begin
|
|
$display("FAILED(e11) argument value, expected 1.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
r = 1.0;
|
|
str = "2.e+a";
|
|
code = $sscanf(str, "%e", r);
|
|
if (code !== 0) begin
|
|
$display("FAILED(e12) to parse zero arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 1.0) begin
|
|
$display("FAILED(e12) argument value, expected 1.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
r = 1.0;
|
|
str = "2.e-a";
|
|
code = $sscanf(str, "%e", r);
|
|
if (code !== 0) begin
|
|
$display("FAILED(e13) to parse zero arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 1.0) begin
|
|
$display("FAILED(e13) argument value, expected 1.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
str = "1e5000";
|
|
code = $sscanf(str, "%e", r);
|
|
if (code !== 1) begin
|
|
$display("FAILED(e14) to parse one arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 1.0/0.0) begin
|
|
$display("FAILED(e14) argument value, expected inf, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
str = "-1e5000";
|
|
code = $sscanf(str, "%e", r);
|
|
if (code !== 1) begin
|
|
$display("FAILED(e14) to parse one arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != -1.0/0.0) begin
|
|
$display("FAILED(e14) argument value, expected -inf, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
// Check parsing real values %g.
|
|
str = "+0123456789";
|
|
code = $sscanf(str, "%g", r);
|
|
if (code !== 1) begin
|
|
$display("FAILED(g1) to parse one argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 123456789.0) begin
|
|
$display("FAILED(g1) argument value, expected 123456789.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
str = "0123456789";
|
|
code = $sscanf(str, "%g", r);
|
|
if (code !== 1) begin
|
|
$display("FAILED(g2) to parse one argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 123456789.0) begin
|
|
$display("FAILED(g2) argument value, expected 123456789.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
str = "-0123456789";
|
|
code = $sscanf(str, "%g", r);
|
|
if (code !== 1) begin
|
|
$display("FAILED(g3) to parse one argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != -123456789.0) begin
|
|
$display("FAILED(g3) argument value, expected -123456789.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
// A plus or minus must have a digit after to match.
|
|
r = 1.0;
|
|
str = "-q";
|
|
code = $sscanf(str, "%g", r);
|
|
if (code !== 0) begin
|
|
$display("FAILED(g4) to parse zero arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 1.0) begin
|
|
$display("FAILED(g4) argument value, expected 1.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
r = 1.0;
|
|
str = "+q";
|
|
code = $sscanf(str, "%g", r);
|
|
if (code !== 0) begin
|
|
$display("FAILED(g5) to parse zero arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 1.0) begin
|
|
$display("FAILED(g5) argument value, expected 1.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
r = 1.0;
|
|
str = "q";
|
|
code = $sscanf(str, "%g", r);
|
|
if (code !== 0) begin
|
|
$display("FAILED(g6) to parse zero arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 1.0) begin
|
|
$display("FAILED(g6) argument value, expected 1.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
// Check starting/trailing decimal point.
|
|
str = "2.";
|
|
code = $sscanf(str, "%g", r);
|
|
if (code !== 1) begin
|
|
$display("FAILED(g7) to parse one arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 2.0) begin
|
|
$display("FAILED(g7) argument value, expected 2.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
str = ".2";
|
|
code = $sscanf(str, "%g", r);
|
|
if (code !== 1) begin
|
|
$display("FAILED(g8) to parse one arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 0.2) begin
|
|
$display("FAILED(g8) argument value, expected 0.2, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
// Check with an exponent.
|
|
str = "2.e1";
|
|
code = $sscanf(str, "%g", r);
|
|
if (code !== 1) begin
|
|
$display("FAILED(g9) to parse one arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 20.0) begin
|
|
$display("FAILED(g9) argument value, expected 20.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
str = "2.e-1";
|
|
code = $sscanf(str, "%g", r);
|
|
if (code !== 1) begin
|
|
$display("FAILED(g10) to parse one arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 0.2) begin
|
|
$display("FAILED(g10) argument value, expected 0.2, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
// Check failing exponent cases.
|
|
r = 1.0;
|
|
str = "2.ea";
|
|
code = $sscanf(str, "%g", r);
|
|
if (code !== 0) begin
|
|
$display("FAILED(g11) to parse zero arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 1.0) begin
|
|
$display("FAILED(g11) argument value, expected 1.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
r = 1.0;
|
|
str = "2.e+a";
|
|
code = $sscanf(str, "%g", r);
|
|
if (code !== 0) begin
|
|
$display("FAILED(g12) to parse zero arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 1.0) begin
|
|
$display("FAILED(g12) argument value, expected 1.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
r = 1.0;
|
|
str = "2.e-a";
|
|
code = $sscanf(str, "%g", r);
|
|
if (code !== 0) begin
|
|
$display("FAILED(g13) to parse zero arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 1.0) begin
|
|
$display("FAILED(g13) argument value, expected 1.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
str = "1e5000";
|
|
code = $sscanf(str, "%g", r);
|
|
if (code !== 1) begin
|
|
$display("FAILED(g14) to parse one arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 1.0/0.0) begin
|
|
$display("FAILED(g14) argument value, expected inf, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
str = "-1e5000";
|
|
code = $sscanf(str, "%g", r);
|
|
if (code !== 1) begin
|
|
$display("FAILED(g14) to parse one arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != -1.0/0.0) begin
|
|
$display("FAILED(g14) argument value, expected -inf, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
// Check parsing time values (%t).
|
|
// The %t format uses the real code to parse the number so all the
|
|
// corner cases are tested above.
|
|
str = "+012345678925";
|
|
code = $sscanf(str, "%t", r);
|
|
if (code !== 1) begin
|
|
$display("FAILED(t1) to parse one argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 123456789.25) begin
|
|
$display("FAILED(t1) argument value, expected 123456789.25, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
str = "012345678925";
|
|
code = $sscanf(str, "%t", r);
|
|
if (code !== 1) begin
|
|
$display("FAILED(t2) to parse one argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 123456789.25) begin
|
|
$display("FAILED(t2) argument value, expected 123456789.25, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
str = "-012345678925";
|
|
code = $sscanf(str, "%t", r);
|
|
if (code !== 1) begin
|
|
$display("FAILED(t3) to parse one argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != -123456789.25) begin
|
|
$display("FAILED(t3) argument value, expected -123456789.25, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
// Check using different scaling and rounding.
|
|
$timeformat(-9, 3, "ns", 20);
|
|
str = "10.125";
|
|
code = $sscanf(str, "%t", r);
|
|
if (code !== 1) begin
|
|
$display("FAILED(t4) to parse one argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 10.125) begin
|
|
$display("FAILED(t4) argument value, expected 10.125, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
str = "10.0625";
|
|
code = $sscanf(str, "%t", r);
|
|
if (code !== 1) begin
|
|
$display("FAILED(t5) to parse one argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 10.063) begin
|
|
$display("FAILED(t5) argument value, expected 10.063, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
str = "10.03125";
|
|
code = $sscanf(str, "%t", r);
|
|
if (code !== 1) begin
|
|
$display("FAILED(t6) to parse one argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 10.031) begin
|
|
$display("FAILED(t6) argument value, expected 10.031, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
$timeformat(-9, 1, "ns", 20);
|
|
str = "10.543";
|
|
code = $sscanf(str, "%t", r);
|
|
if (code !== 1) begin
|
|
$display("FAILED(t7) to parse one argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 10.5) begin
|
|
$display("FAILED(t7) argument value, expected 10.5, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
// Check parsing a single character (%c).
|
|
str = "t";
|
|
code = $sscanf(str, "%c", a);
|
|
if (code !== 1) begin
|
|
$display("FAILED(c) to parse one argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 116) begin // t has an ASCII code of 116
|
|
$display("FAILED(c) argument value, expected t, got %c", a);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
// Check parsing a string value (%s).
|
|
str = "hi ho";
|
|
code = $sscanf(str, "%s %s", a, b);
|
|
if (code !== 2) begin
|
|
$display("FAILED(s) to parse two arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== "hi") begin
|
|
$display("FAILED(s) first argument value, expected hi, got %s", a);
|
|
pass = 1'b0;
|
|
end
|
|
if (b !== "ho") begin
|
|
$display("FAILED(s) second argument value, expected ho, got %s", b);
|
|
pass = 1'b0;
|
|
end
|
|
// Check an empty %s match.
|
|
a = "skip";
|
|
str = " ";
|
|
code = $sscanf(str, "%s", a);
|
|
if (code !== 0) begin
|
|
$display("FAILED(ep) to parse zero arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== "skip") begin
|
|
$display("FAILED(ep) first argument value, expected skip, got %s", a);
|
|
pass = 1'b0;
|
|
end
|
|
// Check an empty %s second match.
|
|
b = "skip";
|
|
str = "one ";
|
|
code = $sscanf(str, "%s %s", a, b);
|
|
if (code !== 1) begin
|
|
$display("FAILED(es) to parse one arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== "one") begin
|
|
$display("FAILED(es) first argument value, expected one, got %s", a);
|
|
pass = 1'b0;
|
|
end
|
|
if (b !== "skip") begin
|
|
$display("FAILED(es) second argument value, expected skip, got %s", a);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
// Check parsing 2 state unformatted binary values (%u).
|
|
|
|
// Check parsing 4 state unformatted binary values (%z).
|
|
|
|
// Check geting the current module (%m).
|
|
code = $sscanf(" ", "%m", a);
|
|
if (code !== 1) begin
|
|
$display("FAILED(m) to parse two argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== "top") begin
|
|
$display("FAILED(m) first argument value, expected top, got %s", a);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
// Check a string using a width.
|
|
str = "helloworld";
|
|
code = $sscanf(str, "%5s %s", a, b);
|
|
if (code !== 2) begin
|
|
$display("FAILED(sw) to parse two argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== "hello") begin
|
|
$display("FAILED(sw) first argument value, expected hello, got %s", a);
|
|
pass = 1'b0;
|
|
end
|
|
if (b !== "world") begin
|
|
$display("FAILED(sw) second argument value, expected world, got %s", b);
|
|
pass = 1'b0;
|
|
end
|
|
// Check a binary using a width.
|
|
str = "01101001";
|
|
code = $sscanf(str, "%4b %b", a, b);
|
|
if (code !== 2) begin
|
|
$display("FAILED(bw) to parse two argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 'b0110) begin
|
|
$display("FAILED(bw) first argument value, expected 'b0110, got %b", a);
|
|
pass = 1'b0;
|
|
end
|
|
if (b !== 'b1001) begin
|
|
$display("FAILED(bw) second argument value, expected 'b1001, got %b", b);
|
|
pass = 1'b0;
|
|
end
|
|
// Check an octal using a width.
|
|
str = "234567";
|
|
code = $sscanf(str, "%3o %o", a, b);
|
|
if (code !== 2) begin
|
|
$display("FAILED(ow) to parse two argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 'o234) begin
|
|
$display("FAILED(ow) first argument value, expected 'o234, got %o", a);
|
|
pass = 1'b0;
|
|
end
|
|
if (b !== 'o567) begin
|
|
$display("FAILED(ow) second argument value, expected 'o567, got %o", b);
|
|
pass = 1'b0;
|
|
end
|
|
// Check a hex using a width.
|
|
str = "89abcdef";
|
|
code = $sscanf(str, "%4h %h", a, b);
|
|
if (code !== 2) begin
|
|
$display("FAILED(hw) to parse two argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 'h89ab) begin
|
|
$display("FAILED(hw) first argument value, expected 'h89ab, got %h", a);
|
|
pass = 1'b0;
|
|
end
|
|
if (b !== 'hcdef) begin
|
|
$display("FAILED(hw) second argument value, expected 'hcdef, got %h", b);
|
|
pass = 1'b0;
|
|
end
|
|
// Check a decimal using a width.
|
|
str = "23456789";
|
|
code = $sscanf(str, "%4d %d", a, b);
|
|
if (code !== 2) begin
|
|
$display("FAILED(dw) to parse two argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 'd2345) begin
|
|
$display("FAILED(dw) first argument value, expected 'd2345, got %d", a);
|
|
pass = 1'b0;
|
|
end
|
|
if (b !== 'd6789) begin
|
|
$display("FAILED(dw) second argument value, expected 'd6789, got %d", b);
|
|
pass = 1'b0;
|
|
end
|
|
// Check a real using a width.
|
|
str = "-2.2566789";
|
|
code = $sscanf(str, "%6f %d", r, a);
|
|
if (code !== 2) begin
|
|
$display("FAILED(fw1) to parse two argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != -2.256) begin
|
|
$display("FAILED(fw1) first argument value, expected 2.256, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 'd6789) begin
|
|
$display("FAILED(fw1) second argument value, expected 'd6789, got %d", a);
|
|
pass = 1'b0;
|
|
end
|
|
str = "+2.e+16789";
|
|
code = $sscanf(str, "%6f %d", r, a);
|
|
if (code !== 2) begin
|
|
$display("FAILED(fw2) to parse two argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 20.0) begin
|
|
$display("FAILED(fw2) first argument value, expected 20.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 'd6789) begin
|
|
$display("FAILED(fw2) second argument value, expected 'd6789, got %d", a);
|
|
pass = 1'b0;
|
|
end
|
|
str = "-2.2566789";
|
|
code = $sscanf(str, "%6e %d", r, a);
|
|
if (code !== 2) begin
|
|
$display("FAILED(ew1) to parse two argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != -2.256) begin
|
|
$display("FAILED(ew1) first argument value, expected 2.256, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 'd6789) begin
|
|
$display("FAILED(ew1) second argument value, expected 'd6789, got %d", a);
|
|
pass = 1'b0;
|
|
end
|
|
str = "+2.e+16789";
|
|
code = $sscanf(str, "%6e %d", r, a);
|
|
if (code !== 2) begin
|
|
$display("FAILED(ew2) to parse two argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 20.0) begin
|
|
$display("FAILED(ew2) first argument value, expected 20.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 'd6789) begin
|
|
$display("FAILED(ew2) second argument value, expected 'd6789, got %d", a);
|
|
pass = 1'b0;
|
|
end
|
|
str = "-2.2566789";
|
|
code = $sscanf(str, "%6g %d", r, a);
|
|
if (code !== 2) begin
|
|
$display("FAILED(gw1) to parse two argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != -2.256) begin
|
|
$display("FAILED(gw1) first argument value, expected 2.256, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 'd6789) begin
|
|
$display("FAILED(gw1) second argument value, expected 'd6789, got %d", a);
|
|
pass = 1'b0;
|
|
end
|
|
str = "+2.e+16789";
|
|
code = $sscanf(str, "%6g %d", r, a);
|
|
if (code !== 2) begin
|
|
$display("FAILED(gw2) to parse two argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 20.0) begin
|
|
$display("FAILED(gw2) first argument value, expected 20.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 'd6789) begin
|
|
$display("FAILED(gw2) second argument value, expected 'd6789, got %d", a);
|
|
pass = 1'b0;
|
|
end
|
|
// Check a time using a width.
|
|
$timeformat(-9, 3, "ns", 20);
|
|
str = "-2.2566789";
|
|
code = $sscanf(str, "%6t %d", r, a);
|
|
if (code !== 2) begin
|
|
$display("FAILED(tw1) to parse two argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != -2.256) begin
|
|
$display("FAILED(tw1) first argument value, expected 2.256, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 'd6789) begin
|
|
$display("FAILED(tw1) second argument value, expected 'd6789, got %d", a);
|
|
pass = 1'b0;
|
|
end
|
|
str = "+2.e+16789";
|
|
code = $sscanf(str, "%6t %d", r, a);
|
|
if (code !== 2) begin
|
|
$display("FAILED(tw2) to parse two argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 20.0) begin
|
|
$display("FAILED(tw2) first argument value, expected 20.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 'd6789) begin
|
|
$display("FAILED(tw2) second argument value, expected 'd6789, got %d", a);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
// Check a suppressed string.
|
|
str = "hello bad world";
|
|
code = $sscanf(str, "%s %*s %s", a, b);
|
|
if (code !== 2) begin
|
|
$display("FAILED(ss) to parse two argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== "hello") begin
|
|
$display("FAILED(sw) first argument value, expected hello, got %s", a);
|
|
pass = 1'b0;
|
|
end
|
|
if (b !== "world") begin
|
|
$display("FAILED(sw) second argument value, expected world, got %s", b);
|
|
pass = 1'b0;
|
|
end
|
|
// Check a suppressed binary.
|
|
str = "0110 xxz 1001";
|
|
code = $sscanf(str, "%b %*b %b", a, b);
|
|
if (code !== 2) begin
|
|
$display("FAILED(bs) to parse two argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 'b0110) begin
|
|
$display("FAILED(bs) first argument value, expected 'b0110, got %b", a);
|
|
pass = 1'b0;
|
|
end
|
|
if (b !== 'b1001) begin
|
|
$display("FAILED(bs) second argument value, expected 'b1001, got %b", b);
|
|
pass = 1'b0;
|
|
end
|
|
// Check a suppressed octal.
|
|
str = "234 xxz 567";
|
|
code = $sscanf(str, "%o %*o %o", a, b);
|
|
if (code !== 2) begin
|
|
$display("FAILED(os) to parse two argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 'o234) begin
|
|
$display("FAILED(os) first argument value, expected 'o234, got %o", a);
|
|
pass = 1'b0;
|
|
end
|
|
if (b !== 'o567) begin
|
|
$display("FAILED(os) second argument value, expected 'o567, got %o", b);
|
|
pass = 1'b0;
|
|
end
|
|
// Check a suppressed hex.
|
|
str = "89ab xz CDEF";
|
|
code = $sscanf(str, "%h %*h %h", a, b);
|
|
if (code !== 2) begin
|
|
$display("FAILED(hs) to parse two argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 'h89ab) begin
|
|
$display("FAILED(hs) first argument value, expected 'h89ab, got %h", a);
|
|
pass = 1'b0;
|
|
end
|
|
if (b !== 'hcdef) begin
|
|
$display("FAILED(hs) second argument value, expected 'hcdef, got %h", b);
|
|
pass = 1'b0;
|
|
end
|
|
// Check a suppressed decimal.
|
|
str = "2345 x 6789";
|
|
code = $sscanf(str, "%d %*d %d", a, b);
|
|
if (code !== 2) begin
|
|
$display("FAILED(ds) to parse two argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 'd2345) begin
|
|
$display("FAILED(ds) first argument value, expected 'd2345, got %d", a);
|
|
pass = 1'b0;
|
|
end
|
|
if (b !== 'd6789) begin
|
|
$display("FAILED(ds) second argument value, expected 'd6789, got %d", b);
|
|
pass = 1'b0;
|
|
end
|
|
// Check a suppressed real.
|
|
str = "2345 1.0 2.0";
|
|
code = $sscanf(str, "%d %*f %f", a, r);
|
|
if (code !== 2) begin
|
|
$display("FAILED(fs) to parse two argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 'd2345) begin
|
|
$display("FAILED(fs) first argument value, expected 'd2345, got %d", a);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 2.0) begin
|
|
$display("FAILED(fs) second argument value, expected 2.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
str = "2345 1.0 2.0";
|
|
code = $sscanf(str, "%d %*e %e", a, r);
|
|
if (code !== 2) begin
|
|
$display("FAILED(es) to parse two argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 'd2345) begin
|
|
$display("FAILED(es) first argument value, expected 'd2345, got %d", a);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 2.0) begin
|
|
$display("FAILED(es) second argument value, expected 2.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
str = "2345 1.0 2.0";
|
|
code = $sscanf(str, "%d %*g %g", a, r);
|
|
if (code !== 2) begin
|
|
$display("FAILED(gs) to parse two argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 'd2345) begin
|
|
$display("FAILED(gs) first argument value, expected 'd2345, got %d", a);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 2.0) begin
|
|
$display("FAILED(gs) second argument value, expected 2.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
// Check a suppressed time.
|
|
str = "2345 1.0 2.0";
|
|
code = $sscanf(str, "%d %*t %t", a, r);
|
|
if (code !== 2) begin
|
|
$display("FAILED(ts) to parse two argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 'd2345) begin
|
|
$display("FAILED(ts) first argument value, expected 'd2345, got %d", a);
|
|
pass = 1'b0;
|
|
end
|
|
if (r != 2.0) begin
|
|
$display("FAILED(ts) second argument value, expected 2.0, got %f", r);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
// Check matching normal characters. Also check %%.
|
|
str = "test% str";
|
|
code = $sscanf(str, "test%% %s", a);
|
|
if (code !== 1) begin
|
|
$display("FAILED(nc) to parse one argument found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== "str") begin
|
|
$display("FAILED(nc) first argument value, expected str, got %s", a);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
// Check different spacing issues, tab, leading space, extra space, etc.
|
|
str = " one \t\n two ";
|
|
code = $sscanf(str, "%s %s", a, b);
|
|
if (code !== 2) begin
|
|
$display("FAILED(sp) to parse two arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== "one") begin
|
|
$display("FAILED(sp) first argument value, expected one, got %s", a);
|
|
pass = 1'b0;
|
|
end
|
|
if (b !== "two") begin
|
|
$display("FAILED(sp) second argument value, expected two, got %s", b);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
// Check for a failing match.
|
|
a = 'bx;
|
|
b = 'bx;
|
|
str = "BAD";
|
|
code = $sscanf(str, "GOOD %s %s", a, b);
|
|
if (code !== 0) begin
|
|
$display("FAILED(fl) to parse bad match arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 'bx) begin
|
|
$display("FAILED(fl) first argument value, expected 'bx, got %b", a);
|
|
pass = 1'b0;
|
|
end
|
|
if (b !== 'bx) begin
|
|
$display("FAILED(fl) second argument value, expected 'bx, got %b", b);
|
|
pass = 1'b0;
|
|
end
|
|
b = 'bx;
|
|
str = "a ";
|
|
// Check a failing character match at EOF.
|
|
code = $sscanf(str, "%s %c", a, b);
|
|
if (code !== 1) begin
|
|
$display("FAILED(fle) character at end, expected one found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== "a") begin
|
|
$display("FAILED(fle) first argument value, expected a, got %s", a);
|
|
pass = 1'b0;
|
|
end
|
|
if (b !== 'bx) begin
|
|
$display("FAILED(fle) second argument value, expected 'bx, got %b", b);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
// Check for no match.
|
|
a = 'bx;
|
|
b = 'bx;
|
|
str = "";
|
|
code = $sscanf(str, "GOOD %s %s", a, b);
|
|
if (code !== -1) begin
|
|
$display("FAILED(no) to parse no match arguments found %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 'bx) begin
|
|
$display("FAILED(no) first argument value, expected 'bx, got %s", a);
|
|
pass = 1'b0;
|
|
end
|
|
if (b !== 'bx) begin
|
|
$display("FAILED(no) second argument value, expected 'bx, got %s", b);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
// Check for an undefined conversion string.
|
|
a = 'bx;
|
|
str = "foo";
|
|
code = $sscanf(str, 'bx, a);
|
|
if (code !== -1) begin
|
|
$display("FAILED(udef) to parse undefined string returned %d", code);
|
|
pass = 1'b0;
|
|
end
|
|
if (a !== 'bx) begin
|
|
$display("FAILED(udef) first argument value, expected 'bx, got %s", a);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
if (pass) $display("PASSED");
|
|
end
|
|
endmodule
|