...and here are tests for the number ops.
- Damien
#! perl -w
use Parrot::Test tests => 23;
output_is(<<CODE, <<OUTPUT, "set_n_nc");
set N0, 1.0
set N1, 4.0
set N2, 16.0
set N3, 64.0
set N4, 256.0
set N5, 1024.0
set N6, 4096.0
set N7, 16384.0
set N8, 65536.0
set N9, 262144.0
set N10, 1048576.0
set N11, 4194304.0
set N12, 16777216.0
set N13, 67108864.0
set N14, 268435456.0
set N15, 1073741824.0
set N16, 4294967296.0
set N17, 17179869184.0
set N18, 68719476736.0
set N19, 274877906944.0
set N20, 1099511627776.0
set N21, 4398046511104.0
set N22, 17592186044416.0
set N23, 70368744177664.0
set N24, 281474976710656.0
set N25, 1.12589990684262e+15
set N26, 4.5035996273705e+15
set N27, 1.8014398509482e+16
set N28, 7.20575940379279e+16
set N29, 2.88230376151712e+17
set N30, 1.15292150460685e+18
set N31, 4.61168601842739e+18
print N0
print "\\n"
print N1
print "\\n"
print N2
print "\\n"
print N3
print "\\n"
print N4
print "\\n"
print N5
print "\\n"
print N6
print "\\n"
print N7
print "\\n"
print N8
print "\\n"
print N9
print "\\n"
print N10
print "\\n"
print N11
print "\\n"
print N12
print "\\n"
print N13
print "\\n"
print N14
print "\\n"
print N15
print "\\n"
print N16
print "\\n"
print N17
print "\\n"
print N18
print "\\n"
print N19
print "\\n"
print N20
print "\\n"
print N21
print "\\n"
print N22
print "\\n"
print N23
print "\\n"
print N24
print "\\n"
print N25
print "\\n"
print N26
print "\\n"
print N27
print "\\n"
print N28
print "\\n"
print N29
print "\\n"
print N30
print "\\n"
print N31
print "\\n"
CODE
1.000000
4.000000
16.000000
64.000000
256.000000
1024.000000
4096.000000
16384.000000
65536.000000
262144.000000
1048576.000000
4194304.000000
16777216.000000
67108864.000000
268435456.000000
1073741824.000000
4294967296.000000
17179869184.000000
68719476736.000000
274877906944.000000
1099511627776.000000
4398046511104.000000
17592186044416.000000
70368744177664.000000
281474976710656.000000
1125899906842620.000000
4503599627370500.000000
18014398509482000.000000
72057594037927904.000000
288230376151712000.000000
1152921504606850048.000000
4611686018427389952.000000
OUTPUT
output_is(<<CODE, <<OUTPUT, "add_n");
set N0, 1.0
add N1, N0, N0
print N1
print "\\n"
add N2, N0, N1
print N2
print "\\n"
add N2, N2, N2
print N2
print "\\n"
CODE
2.000000
3.000000
6.000000
OUTPUT
output_is(<<CODE, <<OUTPUT, "sub_i");
set N0, 424242.0
set N1, 4200.0
sub N2, N0, N1
print N2
print "\\n"
CODE
420042.000000
OUTPUT
output_is(<<CODE, <<OUTPUT, "mul_i");
set N0, 2.0
mul N1, N0, N0
mul N1, N1, N0
mul N1, N1, N0
mul N1, N1, N0
mul N1, N1, N0
mul N1, N1, N0
mul N1, N1, N0
print N1
print "\\n"
CODE
256.000000
OUTPUT
output_is(<<CODE, <<OUTPUT, "div_i");
set N0, 10.0
set N1, 2.0
div N2, N0, N1
print N2
print "\\n"
set N3, 7.0
set N4, 2.0
div N3, N3, N4
print N3
print "\\n"
set N5, 9.0
set N6, -4.0
div N7, N5, N6
print N7
print "\\n"
CODE
5.000000
3.500000
-2.250000
OUTPUT
output_is(<<CODE, <<OUTPUT, "eq_n_ic");
set N0, 5.000001
set N1, 5.000001
set N2, 5.000002
eq N0, N1, ONE, ERROR
print "bad\\n"
ONE:
print "ok 1\\n"
eq N1, N2, 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_nc_ic");
set N0, 1.000001
eq N0, 1.000000, ERROR, ONE
print "bad\\n"
ONE:
print "ok 1\\n"
eq N0, 1.000001, 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_n_ic");
set N0, -22.222222
set N1, -22.222222
set N2, 0.0
ne N0, N2, ONE, ERROR
print "bad\\n"
ONE:
print "ok 1\\n"
ne N0, N1, 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_nc_ic");
set N0, 1073741824.0
# XXX: This should be just ne, but the assembler can't handler it
# at the moment.
ne_nc_ic N0, 1073741824.0, ERROR, ONE
print "bad\\n"
ONE:
print "ok 1\\n"
ne_nc_ic I0, 0.0, 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_n_ic");
set N0, 1000.0
set N1, 500.0
set N2, 0.0
set N3, 0.0
lt N1, N0, ONE, ERROR
print "bad\\n"
ONE:
print "ok 1\\n"
lt N0, N1, ERROR, TWO
print "bad\\n"
TWO:
print "ok 2\\n"
lt N2, N3, 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_nc_ic");
set N0, 1000.0
set N1, 500.0
set N2, 0.0
lt N0, 500.0, ERROR, ONE
print "bad\\n"
ONE:
print "ok 1\\n"
lt N1, 1000.0, TWO, ERROR
print "bad\\n"
TWO:
print "ok 2\\n"
lt N0, 0.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_n_ic");
set N0, 1000.0
set N1, 500.0
set N2, 0.0
set N3, 0.0
le N1, N0, ONE, ERROR
print "bad\\n"
ONE:
print "ok 1\\n"
le N0, N1, ERROR, TWO
print "bad\\n"
TWO:
print "ok 2\\n"
le N2, N3, 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_nc_ic");
set N0, 1000.0
set N1, 500.0
set N2, 0.0
le N0, 500.0, ERROR, ONE
print "bad\\n"
ONE:
print "ok 1\\n"
le N1, 1000.0, TWO, ERROR
print "bad\\n"
TWO:
print "ok 2\\n"
le N2, 0.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_n_ic");
set N0, 500.0
set N1, 1000.0
set N2, 0.0
set N3, 0.0
gt N1, N0, ONE, ERROR
print "bad\\n"
ONE:
print "ok 1\\n"
gt N0, N1, ERROR, TWO
print "bad\\n"
TWO:
print "ok 2\\n"
gt N2, N3, 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_nc_ic");
set N0, 500.0
set N1, 1000.0
set N2, 0.0
gt N0, 1000.0, ERROR, ONE
print "bad\\n"
ONE:
print "ok 1\\n"
gt N1, 500.0, TWO, ERROR
print "bad\\n"
TWO:
print "ok 2\\n"
gt N2, 0.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_n_ic");
set N0, 500.0
set N1, 1000.0
set N2, 0.0
set N3, 0.0
ge N1, N0, ONE, ERROR
print "bad\\n"
ONE:
print "ok 1\\n"
ge N0, N1, ERROR, TWO
print "bad\\n"
TWO:
print "ok 2\\n"
ge N2, N3, 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_nc_ic");
set N0, 500.0
set N1, 1000.0
set N2, 0.0
ge N0, 1000.0, ERROR, ONE
print "bad\\n"
ONE:
print "ok 1\\n"
ge N1, 500.0, TWO, ERROR
print "bad\\n"
TWO:
print "ok 2\\n"
ge N2, 0.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_n_ic");
set N0, 1000.0
set N1, 500.0
set N2, 0.0
if N0, ONE, ERROR
print "bad\\n"
ONE:
print "ok 1\\n"
if N1, TWO, ERROR
print "bad\\n"
TWO:
print "ok 2\\n"
if N2, 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_n");
set N0, 0.0
inc N0
print N0
print "\\n"
inc N0
inc N0
inc N0
inc N0
print N0
print "\\n"
CODE
1.000000
5.000000
OUTPUT
SKIP: {
skip( "assembler handling of inc_n_nc is buggy?", 1 );
output_is(<<CODE, <<OUTPUT, "inc_n_nc");
set N0, 0.0
inc N0, 0.5
print N0
print "\\n"
inc N0, -1.0
print N0
print "\\n"
CODE
0.500000
-0.500000
OUTPUT
}
output_is(<<CODE, <<OUTPUT, "dec_n");
set N0, 0.0
dec N0
print N0
print "\\n"
dec N0
dec N0
dec N0
dec N0
print N0
print "\\n"
CODE
-1.000000
-5.000000
OUTPUT
SKIP: {
skip( "assembler handling of dec_n_nc is buggy?", 1 );
output_is(<<CODE, <<OUTPUT, "dec_n_nc");
set N0, 0.0
dec N0, 0.5
print N0
print "\\n"
dec N0, -1.0
print N0
print "\\n"
CODE
-0.500000
0.500000
OUTPUT
}
output_is(<<CODE, <<OUTPUT, "ntoi_i_n");
set N0, 0.0
ntoi I0, N0
print I0
print "\\n"
set N1, 2147483647.0
ntoi I1, N1
print I1
print "\\n"
set N2, -2147483648.0
ntoi I2, N2
print I2
print "\\n"
CODE
0
2147483647
-2147483648
OUTPUT
__END__
output_is(<<CODE, <<OUTPUT, "clear_i");
set N0, 547972.0
set N1, 547972.0
set N2, 547972.0
set N3, 547972.0
set N4, 547972.0
set N5, 547972.0
set N6, 547972.0
set N7, 547972.0
set N8, 547972.0
set N9, 547972.0
set N10, 547972.0
set N11, 547972.0
set N12, 547972.0
set N13, 547972.0
set N14, 547972.0
set N15, 547972.0
set N16, 547972.0
set N17, 547972.0
set N18, 547972.0
set N19, 547972.0
set N20, 547972.0
set N21, 547972.0
set N22, 547972.0
set N23, 547972.0
set N24, 547972.0
set N25, 547972.0
set N26, 547972.0
set N27, 547972.0
set N28, 547972.0
set N29, 547972.0
set N30, 547972.0
set N31, 547972.0
clear_n
print N0
print N1
print N2
print N3
print N4
print N5
print N6
print N7
print N8
print N9
print N10
print N11
print N12
print N13
print N14
print N15
print N16
print N17
print N18
print N19
print N20
print N21
print N22
print N23
print N24
print N25
print N26
print N27
print N28
print N29
print N30
print N31
print "\\n"
CODE
0.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000
OUTPUT