All right, inserting the file *inline* this time...
*grumble*grumble*Netscape*grumble*firewall*grumble*
In any case, the file is now known to be below these comments.
As noted previously, many of these tests should actually return
something (an error string, or maybe an actual numeric value or string
value), but what it should return hasn't been decided on or properly
cast. For reasons that I'm hoping are obvious this file isn't being
committed, but I have it locally in CVS so it won't go away any time
soon.
---cut here---
#! perl -w
use Parrot::Test tests => 1;
#
# For consistency's sake, make sure tests are in INS order
#
# Border conditions for integer: 0, negative value, positive value
# Border conditions for number: 0.0, negative value, positive value
# Border conditions for string: '', one-char string
#
# Test data going into a PMC
# Test data getting into a PMC
# Test data getting out of a PMC
# Test PMC-only ops
#
# '' as a test result means one of the following:
#
# No output should be generated
# (We need some sort of test against undef, to better validate things)
# Should generate an error whose text hasn't been decided on
# (Usually 'operation on undefined string' or the like)
# Ambiguous return result.
# (For instance, should concat P0,"",5 set a numeric 5 or "Sorry, not a
string")
#
output_is(<<'CODE','','set P0,0');
set P0,0
end
CODE
output_is(<<'CODE','','set P0,2');
set P0,2
end
CODE
output_is(<<'CODE','','set P0,-7');
set P0,-7
end
CODE
output_is(<<'CODE','','set P0,I0 (not assigned)');
set P0,I0
end
CODE
output_is(<<'CODE','','set P0,I0 (0)');
set I0,0
set P0,I0
end
CODE
output_is(<<'CODE','','set P0,I0 (9)');
set I0,9
set P0,I0
end
CODE
output_is(<<'CODE','','set P0,I0 (-3)');
set I0,-3
set P0,I0
end
CODE
output_is(<<'CODE','','set P0,0.0');
set P0,0.0
end
CODE
output_is(<<'CODE','','set P0,1.1');
set P0,1.1
end
CODE
output_is(<<'CODE','','set P0,-4.6');
set P0,-4.6
end
CODE
output_is(<<'CODE','','set P0,N0 (0.0)');
set N0,0.0
set P0,N0
end
CODE
output_is(<<'CODE','','set P0,N0 (3.5)');
set N0,3.5
set P0,N0
end
CODE
output_is(<<'CODE','','set P0,N0 (-8.7)');
set N0,-8.7
set P0,N0
end
CODE
output_is(<<'CODE','','set P0,N0');
set P0,N0
end
CODE
output_is(<<'CODE','','set P0,""');
set P0,""
end
CODE
output_is(<<'CODE','','set P0,"a"');
set P0,"a"
end
CODE
output_is(<<'CODE','','set P0,S0 ("")');
set S0,""
set P0,S0
end
CODE
output_is(<<'CODE','','set P0,S0 ("a")');
set S0,"a"
set P0,S0
end
CODE
output_is(<<'CODE','','set P0,S0');
set P0,S0
end
CODE
#
# Now that input is verified, we can test output.
#
output_is(<<'CODE',0,'print parrot integer (0)');
set P0,0
print P0
end
CODE
output_is(<<'CODE',2,'print parrot integer (2)');
set P0,2
print P0
end
CODE
output_is(<<'CODE',-6,'print parrot integer (-6)');
set P0,-6
print P0
end
CODE
output_is(<<'CODE',0.0,'print parrot number (0.0)');
set P0,0.0
print P0
end
CODE
output_is(<<'CODE',9.27,'print parrot number (9.27)');
set P0,9.27
print P0
end
CODE
output_is(<<'CODE',-7.19,'print negative parrot number (-7.19)');
set P0,-7.19
print P0
end
CODE
output_is(<<'CODE','','print parrot string ("")');
set P0,""
print P0
end
CODE
output_is(<<'CODE','a','print parrot string ("a")');
set P0,"a"
print P0
end
CODE
#
# Two-parameter PMC ops
#
output_is(<<'CODE',~5,'not integer (5)');
not P0,5
print P0
end
CODE
output_is(<<'CODE','','not numeric (-3.2)');
not P0,-3.2
print P0
end
CODE
output_is(<<'CODE','','not string ("ab")');
not P0,"ab"
print P0
end
CODE
#
# Three-parameter PMC ops
#
# undef-undef, undef-integer, undef-numeric, undef-string
# integer-integer, integer-numeric, integer-string
# numeric-numeric, numeric-string
# string-string
output_is(<<'CODE','','add undef-undef');
add P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','','sub undef-undef');
sub P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','','mul undef-undef');
mul P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','','div undef-undef');
div P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','','mod undef-undef');
mod P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','','concat undef-undef');
concat P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','','and undef-undef');
and P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','','or undef-undef');
or P0,P1,P2
print P0
end
CODE
#
# undef-integer
#
output_is(<<'CODE','','add undef-integer');
set P2,3
add P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','','sub undef-integer');
set P2,1
sub P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','','mul undef-integer');
set P2,4
mul P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','','div undef-integer');
set P2,-5
div P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','','mod undef-integer');
set P2,3
mod P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','','concat undef-integer');
set P2,3
concat P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','','and undef-integer');
set P2,3
and P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','','or undef-integer');
set P2,3
or P0,P1,P2
print P0
end
CODE
#
# undef-numeric
#
output_is(<<'CODE','','add undef-numeric');
set P2,3.92
add P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','','sub undef-numeric');
set P2,1.1
sub P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','','mul undef-numeric');
set P2,4.3
mul P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','','div undef-numeric');
set P2,-5.15
div P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','','mod undef-numeric');
set P2,3.1
mod P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','','concat undef-numeric');
set P2,3.1
concat P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','','and undef-numeric');
set P2,3.1
and P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','','or undef-numeric');
set P2,3.1
or P0,P1,P2
print P0
end
CODE
#
# undef-string
#
output_is(<<'CODE','','add undef-string');
set P2,"a"
add P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','','sub undef-string');
set P2,"hello"
sub P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','','mul undef-string');
set P2,"there"
mul P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','','div undef-string');
set P2,"pants"
div P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','','mod undef-string');
set P2,"foo"
mod P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','','concat undef-string');
set P2,"dropbear"
concat P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','','and undef-string');
set P2,"hey"
and P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','','or undef-string');
set P2,"hi there"
or P0,P1,P2
print P0
end
CODE
#
# integer-integer
#
output_is(<<'CODE',(0+3),'add integer-integer');
set P1,0
set P2,3
add P0,P1,P2
print P0
end
CODE
output_is(<<'CODE',(-5-1),'sub integer-integer');
set P1,-5
set P2,1
sub P0,P1,P2
print P0
end
CODE
output_is(<<'CODE',(3*4),'mul integer-integer');
set P1,3
set P2,4
mul P0,P1,P2
print P0
end
CODE
output_is(<<'CODE',(10/-5),'div integer-integer');
set P1,10
set P2,-5
div P0,P1,P2
print P0
end
CODE
output_is(<<'CODE',(1%3),'mod integer-integer');
set P1,1
set P2,3
mod P0,P1,P2
print P0
end
CODE
output_is(<<'CODE',('53'),'concat integer-integer');
set P1,5
set P2,3
concat P0,P1,P2
print P0
end
CODE
output_is(<<'CODE',(1&3),'and integer-integer');
set P1,1
set P2,3
and P0,P1,P2
print P0
end
CODE
output_is(<<'CODE',(l|4),'or integer-integer');
set P1,1
set P2,4
or P0,P1,P2
print P0
end
CODE
#
# integer-numeric
#
output_is(<<'CODE',(1+3.5),'add integer-numeric');
set P1,1
set P2,3.5
add P0,P1,P2
print P0
end
CODE
output_is(<<'CODE',(-2-1.2),'sub integer-numeric');
set P1,-2
set P2,1.2
sub P0,P1,P2
print P0
end
CODE
output_is(<<'CODE',(3*4.3),'mul integer-numeric');
set P1,3
set P2,4.3
mul P0,P1,P2
print P0
end
CODE
output_is(<<'CODE',(2/-4.4),'div integer-numeric');
set P1,2
set P2,-4.4
div P0,P1,P2
print P0
end
CODE
output_is(<<'CODE',(2%3.7),'mod integer-numeric');
set P1,2
set P2,3.7
mod P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','53.7','concat integer-numeric');
set P1,5
set P2,3.7
concat P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','','and integer-numeric');
set P1,1
set P2,3.9
and P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','','or integer-numeric');
set P1,1
set P2,4.7
or P0,P1,P2
print P0
end
CODE
#
# numeric-numeric
#
output_is(<<'CODE',(1.27+3.5),'add numeric-numeric');
set P1,1.27
set P2,3.5
add P0,P1,P2
print P0
end
CODE
output_is(<<'CODE',(-2.2-15.6),'sub numeric-numeric');
set P1,-2.2
set P2,15.6
sub P0,P1,P2
print P0
end
CODE
output_is(<<'CODE',(3.1*4.3),'mul numeric-numeric');
set P1,3.1
set P2,4.3
mul P0,P1,P2
print P0
end
CODE
output_is(<<'CODE',(2.2/-4.4),'div numeric-numeric');
set P1,2.2
set P2,-4.4
div P0,P1,P2
print P0
end
CODE
output_is(<<'CODE',(2.2%3.7),'mod numeric-numeric');
set P1,2.2
set P2,3.7
mod P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','5.13.7','concat numeric-numeric');
set P1,5.1
set P2,3.7
concat P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','','and numeric-numeric');
set P1,2.3
set P2,3.9
and P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','','or numeric-numeric');
set P1,1.5
set P2,4.7
or P0,P1,P2
print P0
end
CODE
#
# string-string
#
output_is(<<'CODE',,'add string-string');
set P1,"12ab"
set P2,"cd53"
add P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','','sub string-string');
set P1,"foo"
set P2,"bar"
sub P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','','mul string-string');
set P1,"World"
set P2,"Hello"
mul P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','','div string-string');
set P1,"1234"
set P2,"abc"
div P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','','mod string-string');
set P1,""
set P2,""
mod P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','','concat string-string');
set P1,"a"
set P2,""
concat P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','','and string-string');
set P1,"ab"
set P2,"cd"
and P0,P1,P2
print P0
end
CODE
output_is(<<'CODE','','or string-string');
set P1,"a"
set P2,"b"
or P0,P1,P2
print P0
end
CODE
---cut here---
-Jeff
<[EMAIL PROTECTED]