Author: leo Date: Mon May 2 05:13:56 2005 New Revision: 7954 Added: trunk/t/pmc/n_arithmetics.t (contents, props changed) Modified: trunk/MANIFEST Log: new n_arithmetics tests
Modified: trunk/MANIFEST ============================================================================== --- trunk/MANIFEST (original) +++ trunk/MANIFEST Mon May 2 05:13:56 2005 @@ -1755,6 +1755,7 @@ t/pmc/mmd.t [] t/pmc/multiarray.t [] t/pmc/multisub.t [] +t/pmc/n_arithmetics.t [] t/pmc/namespace.t [] t/pmc/nci.t [] t/pmc/object-meths.t [] Added: trunk/t/pmc/n_arithmetics.t ============================================================================== --- (empty file) +++ trunk/t/pmc/n_arithmetics.t Mon May 2 05:13:56 2005 @@ -0,0 +1,533 @@ +#! perl -w +# Copyright: 2001-2003 The Perl Foundation. All Rights Reserved. +# $Id: arithmetics.t 7810 2005-04-12 10:09:05Z leo $ + +=head1 NAME + +t/pmc/n_arithmetics.t - n_* Arithmetic Ops + +=head1 SYNOPSIS + + % perl -Ilib t/pmc/n_arithmetics.t + +=head1 DESCRIPTION + +Tests basic arithmetic ops that construct a new return value on +various combinations of Parrot integer and number types. + +=cut + +use Parrot::Test tests => 17; +use Test::More; + +### +### Operations on a single INTVAL +### +pir_output_is(<<'CODE', <<OUTPUT, "take the negative of an Integer"); +.sub _main @MAIN + P0 = new Integer + ## negate zero. + set P0, 0 + n_neg P1, P0 + print P1 + print "\n" + P30 = P1 + ## negate a positive number. + set P0, 1234567890 + n_neg P1, P0 + print P1 + print "\n" + ## check that we are not reusing P1. + ne_addr P30, P1, not_broken + print "Broken!\n" +not_broken: + ## negate a negative number. + set P0, -1234567890 + P1 = n_neg P0 + print P1 + print "\n" +.end +CODE +0 +-1234567890 +1234567890 +OUTPUT + +pir_output_is(<<'CODE', <<OUTPUT, "take the absolute value of an Integer"); +.sub _main @MAIN + P0 = new Integer + ## find absolute zero (so to speak). + set P0, 0 + P1 = n_abs P0 + print P1 + print "\n" + P30 = P1 + ## find the absolute value of a positive Integer. + set P0, 1234567890 + n_abs P1, P0 + print P1 + print "\n" + ## check that we are not reusing P1. + ne_addr P30, P1, not_broken + print "Broken!\n" +not_broken: + ## find the absolute value of a negative number. + set P0, -1234567890 + n_abs P1, P0 + print P1 + print "\n" +.end +CODE +0 +1234567890 +1234567890 +OUTPUT + +### +### first arg is Integer, second arg is Integer +### +pir_output_is(<<'CODE', <<OUTPUT, "add Integer to Integer"); +.sub _main @MAIN + P0 = new Integer + set P0, 4000 + P1 = new Integer + set P1, -123 + P2 = new Integer + set P2, 666 + n_add P2, P0, P1 + print P2 + print "\n" + P30 = P2 + P2 = n_add P0, P1 + print P2 + print "\n" + ## check that we are not reusing P2. + ne_addr P30, P2, not_broken + print "Broken!\n" +not_broken: + ## check adding constants. + P2 = n_add P0, 11 + print P2 + print "\n" + P0 = n_add P0, 11 + print P0 + print "\n" +.end +CODE +3877 +3877 +4011 +4011 +OUTPUT + +pir_output_is(<<'CODE', <<OUTPUT, "subtract Integer from Integer"); +.sub _main @MAIN + P0 = new Integer + set P0, 4000 + P1 = new Integer + set P1, -123 + P2 = new Integer + set P2, 666 + n_sub P2, P0, P1 + print P2 + print "\n" + P30 = P2 + P2 = n_sub P0, P1 + print P2 + print "\n" + ## check that we are not reusing P2. + ne_addr P30, P2, not_broken + print "Broken!\n" +not_broken: + ## check subtracting constants. + P2 = n_sub P0, 11 + print P2 + print "\n" + P0 = n_sub P0, 11 + print P0 + print "\n" +.end +CODE +4123 +4123 +3989 +3989 +OUTPUT + +pir_output_is(<<'CODE', <<OUTPUT, "multiply Integer with Integer"); +.sub _main @MAIN + P0 = new Integer + set P0, 4000 + P1 = new Integer + set P1, -123 + P2 = new Integer + set P2, 666 + n_mul P2, P0, P1 + print P2 + print "\n" + P3 = n_mul P0, P1 + print P3 + print "\n" + ## check multiplying constants. + P2 = n_mul P0, 11 + print P2 + print "\n" + P0 = n_mul P0, 11 + print P0 + print "\n" +.end +CODE +-492000 +-492000 +44000 +44000 +OUTPUT + +pir_output_is(<<'CODE', <<OUTPUT, "divide Integer by Integer"); +.sub _main @MAIN + P0 = new Integer + set P0, 4000 + P1 = new Integer + set P1, -123 + P2 = new Integer + set P2, 666 + n_div P2, P0, P1 + print P2 + print "\n" + P3 = n_div P0, P1 + print P3 + print "\n" + ## check dividing by constants. + P2 = n_div P0, 11 + print P2 + print "\n" + P0 = n_div P0, 11 + print P0 + print "\n" +.end +CODE +-32.5203 +-32.5203 +363.636 +363.636 +OUTPUT + +### +### Operations on a single NUMVAL +### +pir_output_is(<<'CODE', <<OUTPUT, "negate a Float"); +.sub _main @MAIN + P0 = new Float + set P0, 0 + P1 = n_neg P0 + print P1 + print "\n" + set P0, -0.0 + n_neg P1, P0 + print P1 + print "\n" + set P0, 123.4567890 + P1 = n_neg P0 + print P1 + print "\n" + set P0, -123.4567890 + n_neg P1, P0 + print P1 + print "\n" +.end +CODE +0 +0 +-123.457 +123.457 +OUTPUT + +pir_output_is(<<'CODE', <<OUTPUT, "take the absolute value of a Float"); +.sub _main @MAIN + P0 = new Integer + set P0, 0 + P1 = n_abs P0 + print P1 + print "\n" + set P0, -0.0 + n_abs P1, P0 + print P1 + print "\n" + set P0, 123.45678901 + n_abs P1, P0 + print P1 + print "\n" + set P0, -123.45678901 + P1 = n_abs P0 + print P1 + print "\n" +.end +CODE +0 +0 +123.457 +123.457 +OUTPUT + +### +### FLOATVAL and INTVAL tests +### +pir_output_is(<<'CODE', <<OUTPUT, "add Integer to Float"); +.sub _main @MAIN + P10 = new Integer + set P10, 4000 + P0 = new Float + set P0, -123.123 + n_add P1, P0, P10 + print P1 + print "\n" + P30 = P1 + P1 = n_add P0, P10 + print P1 + print "\n" + ## check that we are not reusing P1. + ne_addr P30, P1, not_broken + print "Broken!\n" +not_broken: + P2 = n_add P10, P0 + print P2 + print "\n" + P1 = n_add P1, P10 + print P1 + print "\n" +.end +CODE +3876.88 +3876.88 +3876.88 +7876.88 +OUTPUT + +pir_output_is(<<'CODE', <<OUTPUT, "subtract Integer from Float"); +.sub _main @MAIN + P10 = new Integer + set P10, 4000 + P0 = new Float + set P0, -123.123 + n_sub P1, P0, P10 + print P1 + print "\n" + P30 = P1 + P1 = n_sub P0, P10 + print P1 + print "\n" + ## check that we are not reusing P1. + ne_addr P30, P1, not_broken + print "Broken!\n" +not_broken: + P2 = n_sub P10, P0 + print P2 + print "\n" + P1 = n_sub P1, P10 + print P1 + print "\n" +.end +CODE +-4123.12 +-4123.12 +4123.12 +-8123.12 +OUTPUT + +pir_output_is(<<'CODE', <<OUTPUT, "multiply Float with Integer"); +.sub _main @MAIN + P10 = new Integer + set P10, 4000 + P0 = new Float + set P0, -123.123 + n_mul P1, P0, P10 + print P1 + print "\n" + P30 = P1 + P1 = n_mul P0, P10 + print P1 + print "\n" + ## check that we are not reusing P1. + ne_addr P30, P1, not_broken + print "Broken!\n" +not_broken: + P1 = n_mul P10, P0 + print P1 + print "\n" + P1 = n_mul P1, -2 + print P1 + print "\n" +.end +CODE +-492492 +-492492 +-492492 +984984 +OUTPUT + +pir_output_is(<<'CODE', <<OUTPUT, "divide Float by Integer"); +.sub _main @MAIN + P10 = new Integer + set P10, 4000 + P0 = new Float + set P0, -123.123 + n_div P1, P0, P10 + print P1 + print "\n" + P30 = P1 + P1 = n_div P0, P10 + print P1 + print "\n" + ## check that we are not reusing P1. + ne_addr P30, P1, not_broken + print "Broken!\n" +not_broken: + P1 = n_div P0, 1 + print P1 + print "\n" + set P0, 100.000 + P1 = n_div P0, 100 + print P1 + print "\n" + P1 = n_div P1, 0.01 + print P1 + print "\n" +.end +CODE +-0.0307808 +-0.0307808 +-123.123 +1 +100 +OUTPUT + +### +### FLOATVAL and FLOATVAL tests +### +pir_output_is(<<'CODE', <<OUTPUT, "add Float to Float"); +.sub _main @MAIN + P0 = new Float + set P0, 4000.246 + P1 = new Float + set P1, -123.123 + P2 = new Float + set P2, 6.66 + n_add P2, P0, P1 + print P2 + print "\n" + P30 = P2 + P2 = n_add P0, P1 + print P2 + print "\n" + ## check that we are not reusing P2. + ne_addr P30, P2, not_broken + print "Broken!\n" +not_broken: +.end +CODE +3877.12 +3877.12 +OUTPUT + +## This tests n_infix_ic_p_p_nc for n_add, n_sub, n_mul, and n_div. Note that +## there is no n_infix_ic_p_nc_p op; the PMC argument always comes first. +pir_output_is(<<'CODE', <<OUTPUT, "add/sub/mul/div of Float with constants"); +.sub _main @MAIN + P0 = new Float + set P0, 4000.246 + P1 = new Float + set P1, -123.123 + P2 = n_add P1, 6.78 + print P2 + print "\n" + P2 = n_add P0, 6.78 + print P2 + print "\n" + P2 = n_mul P1, 6.78 + print P2 + print "\n" + P2 = n_div P0, 6.78 + print P2 + print "\n" +.end +CODE +-116.343 +4007.03 +-834.774 +590.007 +OUTPUT + +pir_output_is(<<'CODE', <<OUTPUT, "subtract Float from Float"); +.sub _main @MAIN + P0 = new Float + set P0, 4000.246 + P1 = new Float + set P1, -123.123 + P2 = new Float + set P2, 6.66 + n_sub P2, P0, P1 + print P2 + print "\n" + P30 = P2 + P2 = n_sub P1, P0 + print P2 + print "\n" + ## check that we are not reusing P2. + ne_addr P30, P2, not_broken + print "Broken!\n" +not_broken: +.end +CODE +4123.37 +-4123.37 +OUTPUT + +pir_output_is(<<'CODE', <<OUTPUT, "multiply Float with Float"); +.sub _main @MAIN + P0 = new Float + set P0, 400.0246 + P1 = new Float + set P1, -123.123 + P2 = new Float + set P2, 6.66 + n_mul P2, P0, P1 + print P2 + print "\n" + P30 = P2 + P2 = n_mul P0, P1 + print P2 + print "\n" + ## check that we are not reusing P2. + ne_addr P30, P2, not_broken + print "Broken!\n" +not_broken: +.end +CODE +-49252.2 +-49252.2 +OUTPUT + +pir_output_is(<<'CODE', <<OUTPUT, "divide Float by Float"); +.sub _main @MAIN + P0 = new Float + set P0, 4000.246 + P1 = new Float + set P1, -123.123 + P2 = new Float + set P2, 6.66 + n_div P2, P1, P0 + print P2 + print "\n" + P30 = P2 + P2 = n_div P0, P1 + print P2 + print "\n" + ## check that we are not reusing P2. + ne_addr P30, P2, not_broken + print "Broken!\n" +not_broken: +.end +CODE +-0.0307789 +-32.4898 +OUTPUT
