iverilog/ivtest/ivltests/pr3098439.v

108 lines
3.3 KiB
Verilog

module test;
reg pass;
reg [8*40:1] str;
integer s;
reg [31:0] su;
integer res;
initial begin
pass = 1'b1;
s = 2000;
su = 2000;
res = s + (1 << 3) - 1;
if (res !== 2007) begin
$display("FAILED first term << (s), expected 2007, got %d", res);
pass = 1'b0;
end
res = su + (1 << 3) - 1;
if (res !== 2007) begin
$display("FAILED first term << (su), expected 2007, got %d", res);
pass = 1'b0;
end
res = s + (16 >> 1) - 1;
if (res !== 2007) begin
$display("FAILED first term >> (s), expected 2007, got %d", res);
pass = 1'b0;
end
res = su + (16 >> 1) - 1;
if (res !== 2007) begin
$display("FAILED first term >> (su), expected 2007, got %d", res);
pass = 1'b0;
end
res = (s + (1 << 3) - 1) * 16000;
if (res !== 32112000) begin
$display("FAILED second term << (s), expected 32112000, got %d", res);
pass = 1'b0;
end
res = (su + (1 << 3) - 1) * 16000;
if (res !== 32112000) begin
$display("FAILED second term << (su), expected 32112000, got %d", res);
pass = 1'b0;
end
res = (s + (16 >> 1) - 1) * 16000;
if (res !== 32112000) begin
$display("FAILED second term >> (s), expected 32112000, got %d", res);
pass = 1'b0;
end
res = (su + (16 >> 1) - 1) * 16000;
if (res !== 32112000) begin
$display("FAILED second term >> (su), expected 32112000, got %d", res);
pass = 1'b0;
end
$sformat(str, "%0d", s + (1 << 3) - 1);
if (str[8*4:1] !== "2007" || str[8*40:8*4+1] !== 0) begin
$display("FAILED first string << (s), expected \"2007\", got %s", str);
pass = 1'b0;
end
$sformat(str, "%0d", su + (1 << 3) - 1);
if (str[8*4:1] !== "2007" || str[8*40:8*4+1] !== 0) begin
$display("FAILED first string << (su), expected \"2007\", got %s", str);
pass = 1'b0;
end
$sformat(str, "%0d", s + (16 >> 1) - 1);
if (str[8*4:1] !== "2007" || str[8*40:8*4+1] !== 0) begin
$display("FAILED first string >> (s), expected \"2007\", got %s", str);
pass = 1'b0;
end
$sformat(str, "%0d", su + (16 >> 1) - 1);
if (str[8*4:1] !== "2007" || str[8*40:8*4+1] !== 0) begin
$display("FAILED first string >> (su), expected \"2007\", got %s", str);
pass = 1'b0;
end
$sformat(str, "%0d", (s + (1 << 3) - 1) * 16000);
if (str[8*8:1] !== "32112000" || str[8*40:8*8+1] !== 0) begin
$display("FAILED second string << (s), expected \"32112000\", got %s",
str);
pass = 1'b0;
end
$sformat(str, "%0d", (su + (1 << 3) - 1) * 16000);
if (str[8*8:1] !== "32112000" || str[8*40:8*8+1] !== 0) begin
$display("FAILED second string << (su), expected \"32112000\", got %s",
str);
pass = 1'b0;
end
$sformat(str, "%0d", (s + (16 >> 1) - 1) * 16000);
if (str[8*8:1] !== "32112000" || str[8*40:8*8+1] !== 0) begin
$display("FAILED second string >> (s), expected \"32112000\", got %s",
str);
pass = 1'b0;
end
$sformat(str, "%0d", (su + (16 >> 1) -1) * 16000);
if (str[8*8:1] !== "32112000" || str[8*40:8*8+1] !== 0) begin
$display("FAILED second string >> (su), expected \"32112000\", got %s",
str);
pass = 1'b0;
end
if (pass) $display("PASSED");
end
endmodule