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

Reply via email to