use warnings; use strict; use Test::More # tests => ?? + 1 # Test::NoWarnings adds 1 test 'no_plan' ; use Test::NoWarnings; use constant MULTI_LINE_PRE => <<'EOT'; write_x("top.inst1.inst2.reg",32'h30,status,"string"); foo other stuff bar write_x("mod.ins5.ins7.val",{24'h0,4'h2,variable1,variable2},status,"string"); some more things baz write_x($psprintf("mod.ins[%d].ins[%d].val",1,2),{24'h0,4'h2,variable1,variable2},status,"string"); boff whatever else EOT use constant MULTI_LINE_POST => <<'EOT'; writing.reg("top.inst1.inst2.reg").write(status,32'h30); foo other stuff bar writing.reg("mod.ins5.ins7.val").write(status,{24'h0,4'h2,variable1,variable2}); some more things baz writing.reg($psprintf("mod.ins[%d].ins[%d].val",1,2)).write(status,{24'h0,4'h2,variable1,variable2}); boff whatever else EOT BEGIN { use_ok 'ToyVerilog', qw(xform); } VECTOR: for my $ar_vector ( [ q{write_x("top.inst1.inst2.reg",32'h30,status,"string");}, q{writing.reg("top.inst1.inst2.reg").write(status,32'h30);}, '', ], [ q{write_x("mod.ins5.ins7.val",{24'h0,4'h2,variable1,variable2},status,"string");}, q{writing.reg("mod.ins5.ins7.val").write(status,{24'h0,4'h2,variable1,variable2});}, '', ], [ q{write_x($psprintf("mod.ins[%d].ins[%d].val",1,2),{24'h0,4'h2,variable1,variable2},status,"string");}, q{writing.reg($psprintf("mod.ins[%d].ins[%d].val",1,2)).write(status,{24'h0,4'h2,variable1,variable2});}, '', ], [ MULTI_LINE_PRE, MULTI_LINE_POST, '', ], # [ q{}, # q{}, # '', # ], ) { if (not ref $ar_vector) { # embedded comment if not test vector note $ar_vector; next VECTOR; } my ($statement, $expected) = @$ar_vector; is xform($statement), $expected, $expected; } # end for VECTOR