The attached file contains tests for all Parrot integer ops. - Damien
#! perl -w use Parrot::Test tests => 26; output_is(<<CODE, <<OUTPUT, "set_i_ic"); # XXX: Need a test for writing outside the set of available # registers. Parrot doesn't check for this at the moment. set I0, 0x12345678 print I0 print "\\n" set I31, 0x9abcdef1 print I31 print "\\n" set I1, 2147483647 print I1 print "\\n" set I2, -2147483648 print I2 print "\\n" set I3, 4294967295 print I3 print "\\n" CODE 305419896 -1698898191 2147483647 -2147483648 -1 OUTPUT output_is(<<CODE, <<OUTPUT, "set_i"); set I0, 0x77665544 set I1, I0 print I1 print "\\n" CODE 2003195204 OUTPUT output_is(<<CODE, <<OUTPUT, "add_i"); set I0, 0x11223344 add I1, I0, I0 print I1 print "\\n" add I2, I0, I1 print I2 print "\\n" add I2, I2, I2 print I2 print "\\n" set I3, 2147483647 set I4, 1 add I5, I3, I4 print I5 print "\\n" set I6, -1 add I7, I5, I6 print I7 print "\\n" CODE 574908040 862362060 1724724120 -2147483648 2147483647 OUTPUT output_is(<<CODE, <<OUTPUT, "sub_i"); set I0, 0x12345678 set I1, 0x01234567 sub I2, I0, I1 print I2 print "\\n" CODE 286331153 OUTPUT output_is(<<CODE, <<OUTPUT, "mul_i"); set I0, 7 set I1, 29 mul I2, I0, I1 print I2 print "\\n" CODE 203 OUTPUT output_is(<<CODE, <<OUTPUT, "div_i"); set I0, 0x33333333 set I1, 0x11111111 div I2, I0, I1 print I2 print "\\n" set I0, 11 set I1, 2 div I2, I0, I1 print I2 print "\\n" set I0, 9 set I1, -4 div I2, I0, I1 print I2 print "\\n" CODE 3 5 -2 OUTPUT output_is(<<CODE, <<OUTPUT, "mod_i"); set I0, 17 set I1, 5 mod I2, I0, I1 print I2 print "\\n" set I0, -57 set I1, 10 mod I2, I0, I1 print I2 print "\\n" CODE 2 -7 OUTPUT output_is(<<CODE, <<OUTPUT, "eq_i_ic"); set I0, 0x12345678 set I1, 0x12345678 set I2, 0x76543210 eq I0, I1, ONE, ERROR print "bad\\n" ONE: print "ok 1\\n" eq I1, I2, ERROR, TWO print "bad\\n" TWO: print "ok 2\\n" end ERROR: print "bad\\n" CODE ok 1 ok 2 OUTPUT output_is(<<CODE, <<OUTPUT, "eq_ic_ic"); set I0, -42 eq I0, 42, ERROR, ONE print "bad\\n" ONE: print "ok 1\\n" eq I0, -42, TWO, ERROR print "bad\\n" TWO: print "ok 2\\n" end ERROR: print "bad\\n" CODE ok 1 ok 2 OUTPUT output_is(<<CODE, <<OUTPUT, "ne_i_ic"); set I0, 0xa0b0c0d0 set I1, 0xa0b0c0d0 set I2, 0 ne I0, I2, ONE, ERROR print "bad\\n" ONE: print "ok 1\\n" ne I0, I1, ERROR, TWO print "bad\\n" TWO: print "ok 2\\n" end ERROR: print "bad\\n" CODE ok 1 ok 2 OUTPUT output_is(<<CODE, <<OUTPUT, "ne_ic_ic"); set I0, 427034409 ne I0, 427034409, ERROR, ONE print "bad\\n" ONE: print "ok 1\\n" ne I0, 427034408, TWO, ERROR print "bad\\n" TWO: print "ok 2\\n" end ERROR: print "bad\\n" CODE ok 1 ok 2 OUTPUT output_is(<<CODE, <<OUTPUT, "lt_i_ic"); set I0, 2147483647 set I1, -2147483648 set I2, 0 set I3, 0 lt I1, I0, ONE, ERROR print "bad\\n" ONE: print "ok 1\\n" lt I0, I1, ERROR, TWO print "bad\\n" TWO: print "ok 2\\n" lt I2, I3, ERROR, THREE print "bad\\n" THREE: print "ok 3\\n" end ERROR: print "bad\\n" CODE ok 1 ok 2 ok 3 OUTPUT output_is(<<CODE, <<OUTPUT, "lt_ic_ic"); set I0, 2147483647 set I1, -2147483648 set I2, 0 lt I0, -2147483648, ERROR, ONE print "bad\\n" ONE: print "ok 1\\n" lt I1, 2147483647, TWO, ERROR print "bad\\n" TWO: print "ok 2\\n" lt I0, 0, ERROR, THREE print "bad\\n" THREE: print "ok 3\\n" end ERROR: print "bad\\n" CODE ok 1 ok 2 ok 3 OUTPUT output_is(<<CODE, <<OUTPUT, "le_i_ic"); set I0, 2147483647 set I1, -2147483648 set I2, 0 set I3, 0 le I1, I0, ONE, ERROR print "bad\\n" ONE: print "ok 1\\n" le I0, I1, ERROR, TWO print "bad\\n" TWO: print "ok 2\\n" le I2, I3, THREE, ERROR print "bad\\n" THREE: print "ok 3\\n" end ERROR: print "bad\\n" CODE ok 1 ok 2 ok 3 OUTPUT output_is(<<CODE, <<OUTPUT, "le_ic_ic"); set I0, 2147483647 set I1, -2147483648 set I2, 0 le I0, -2147483648, ERROR, ONE print "bad\\n" ONE: print "ok 1\\n" le I1, 2147483647, TWO, ERROR print "bad\\n" TWO: print "ok 2\\n" le I2, 0, THREE, ERROR print "bad\\n" THREE: print "ok 3\\n" end ERROR: print "bad\\n" CODE ok 1 ok 2 ok 3 OUTPUT output_is(<<CODE, <<OUTPUT, "gt_i_ic"); set I0, -2147483648 set I1, 2147483647 set I2, 0 set I3, 0 gt I1, I0, ONE, ERROR print "bad\\n" ONE: print "ok 1\\n" gt I0, I1, ERROR, TWO print "bad\\n" TWO: print "ok 2\\n" gt I2, I3, ERROR, THREE print "bad\\n" THREE: print "ok 3\\n" end ERROR: print "bad\\n" CODE ok 1 ok 2 ok 3 OUTPUT output_is(<<CODE, <<OUTPUT, "gt_ic_ic"); set I0, -2147483648 set I1, 2147483647 set I2, 0 gt I0, 2147483647, ERROR, ONE print "bad\\n" ONE: print "ok 1\\n" gt I1, -2147483648, TWO, ERROR print "bad\\n" TWO: print "ok 2\\n" gt I0, 0, ERROR, THREE print "bad\\n" THREE: print "ok 3\\n" end ERROR: print "bad\\n" CODE ok 1 ok 2 ok 3 OUTPUT output_is(<<CODE, <<OUTPUT, "ge_i_ic"); set I0, -2147483648 set I1, 2147483647 set I2, 0 set I3, 0 ge I1, I0, ONE, ERROR print "bad\\n" ONE: print "ok 1\\n" ge I0, I1, ERROR, TWO print "bad\\n" TWO: print "ok 2\\n" ge I2, I3, THREE, ERROR print "bad\\n" THREE: print "ok 3\\n" end ERROR: print "bad\\n" CODE ok 1 ok 2 ok 3 OUTPUT output_is(<<CODE, <<OUTPUT, "ge_ic_ic"); set I0, -2147483648 set I1, 2147483647 set I2, 0 ge I0, 2147483647, ERROR, ONE print "bad\\n" ONE: print "ok 1\\n" ge I1, -2147483648, TWO, ERROR print "bad\\n" TWO: print "ok 2\\n" ge I2, 0, THREE, ERROR print "bad\\n" THREE: print "ok 3\\n" end ERROR: print "bad\\n" CODE ok 1 ok 2 ok 3 OUTPUT output_is(<<CODE, <<OUTPUT, "if_i_ic"); set I0, 2147483647 set I1, -2147483648 set I2, 0 if_i_ic I0, ONE, ERROR print "bad\\n" ONE: print "ok 1\\n" if_i_ic I1, TWO, ERROR print "bad\\n" TWO: print "ok 2\\n" if_i_ic I2, ERROR, THREE print "bad\\n" THREE: print "ok 3\\n" end ERROR: print "bad\\n" CODE ok 1 ok 2 ok 3 OUTPUT output_is(<<CODE, <<OUTPUT, "inc_i"); set I0, 0 inc I0 print I0 print "\\n" inc I0 inc I0 inc I0 inc I0 print I0 print "\\n" # Overflow set I1, 2147483647 inc I1 print I1 print "\\n" CODE 1 5 -2147483648 OUTPUT output_is(<<CODE, <<OUTPUT, "inc_i_ic"); set I0, 0 inc I0, 5 print I0 print "\\n" inc I0, -10 print I0 print "\\n" CODE 5 -5 OUTPUT output_is(<<CODE, <<OUTPUT, "dec_i"); set I0, 0 dec I0 print I0 print "\\n" dec I0 dec I0 dec I0 dec I0 print I0 print "\\n" # Overflow set I1, -2147483648 dec I1 print I1 print "\\n" CODE -1 -5 2147483647 OUTPUT output_is(<<CODE, <<OUTPUT, "dec_i_ic"); set I0, 0 dec I0, 5 print I0 print "\\n" dec I0, -10 print I0 print "\\n" CODE -5 5 OUTPUT output_is(<<CODE, <<OUTPUT, "iton_n_i"); set I0, 0 iton N0, I0 print N0 print "\\n" set I1, 2147483647 iton N1, I1 print N1 print "\\n" set I2, -2147483648 iton N2, I2 print N2 print "\\n" CODE 0.000000 2147483647.000000 -2147483648.000000 OUTPUT output_is(<<CODE, <<OUTPUT, "clear_i"); set I0, 0xdeadbeef set I1, 0xdeadbeef set I2, 0xdeadbeef set I3, 0xdeadbeef set I4, 0xdeadbeef set I5, 0xdeadbeef set I6, 0xdeadbeef set I7, 0xdeadbeef set I8, 0xdeadbeef set I9, 0xdeadbeef set I10, 0xdeadbeef set I11, 0xdeadbeef set I12, 0xdeadbeef set I13, 0xdeadbeef set I14, 0xdeadbeef set I15, 0xdeadbeef set I16, 0xdeadbeef set I17, 0xdeadbeef set I18, 0xdeadbeef set I19, 0xdeadbeef set I20, 0xdeadbeef set I21, 0xdeadbeef set I22, 0xdeadbeef set I23, 0xdeadbeef set I24, 0xdeadbeef set I25, 0xdeadbeef set I26, 0xdeadbeef set I27, 0xdeadbeef set I28, 0xdeadbeef set I29, 0xdeadbeef set I30, 0xdeadbeef set I31, 0xdeadbeef clear_i print I0 print I1 print I2 print I3 print I4 print I5 print I6 print I7 print I8 print I9 print I10 print I11 print I12 print I13 print I14 print I15 print I16 print I17 print I18 print I19 print I20 print I21 print I22 print I23 print I24 print I25 print I26 print I27 print I28 print I29 print I30 print I31 print "\\n" CODE 00000000000000000000000000000000 OUTPUT