#!/bin/perl
# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl test.pl'
######################### We start with some black magic to print on failure.
# Change 1..1 below to 1..last_test_to_print .
# (It may become useful if the test is moved to ./t subdirectory.)
use Test;
#use strict;
BEGIN
{
$| = 1;
unshift @INC, '../lib'; # for running manually
unshift @INC, './t'; # to locate the testing files
# chdir 't' if -d 't';
plan tests => 40;
}
use Math::FixedPrecision;
ok ( 1 ); # we loaded correctly
######################### End of black magic.
# Insert your test code below (better if it prints "ok 13"
# (correspondingly "not ok 13") depending on the success of chunk 13
# of the test code):
my ($number, $newnumber, $thirdnbr);
ok ( $number = Math::FixedPrecision->new(12.346) );
$number = 2.95 + $number;
ok ( "$number", "15.30" ); # has to have that trailing 0
$newnumber = Math::FixedPrecision->new(1.253);
$thirdnbr = $number - $newnumber;
ok ( $thirdnbr, 14.05 );
$number *= 100.125;
ok ( $number == 1531.91 );
$number = Math::FixedPrecision->new(1000.1);
$number /= 99.1234;
ok ( $number == 10.1 );
$number = Math::FixedPrecision->new(1000.1234);
$number /= 99.4;
ok ( $number == 10.1 );
$number = Math::FixedPrecision->new(9.95);
$number /= 2; # 2 is internally promoted to 2.00
ok ( $number == 4.98 ); # note the even rounding!
ok ( $number < 5.0 );
ok ( 1.1 < $newnumber );
ok ( $newnumber < $number );
ok ( $number );
$number = Math::FixedPrecision->new("10.");
$newnumber = $number * 2;
ok ( $newnumber == 20 );
$newnumber = $number / 3;
ok ( $newnumber == 3 );
$number = Math::FixedPrecision->new("0.10");
$newnumber = $number * 200;
ok ( $newnumber == 20 );
ok ( "$number" eq "0.10" );
$number = Math::FixedPrecision->new("0.0");
ok ( "$number" eq "0.0" );
$number = Math::FixedPrecision->new(12.345,2);
ok ( $number == 12.34 );
$number= new Math::FixedPrecision(1.0,100);
$newnumber= new Math::FixedPrecision(0.0,100);
ok ( $newnumber < $number );
ok ( $newnumber < 2.0 );
$number= new Math::FixedPrecision(7500);
$newnumber= new Math::FixedPrecision(16.95);
ok ( $newnumber < $number );
$number= new Math::FixedPrecision(14.673);
$newnumber= new Math::FixedPrecision(2.6);
ok ( ! ($newnumber > $number) );
ok ( $number == 14.673 );
$newnumber= new Math::FixedPrecision(2);
ok ( "$newnumber" eq "2" );
$newnumber= new Math::FixedPrecision(.2);
ok ( "$newnumber" eq "0.2" );
$newnumber= new Math::FixedPrecision(12345.6789,0);
ok ( "$newnumber" eq "12346" );
# let's make sure that all of the examples in the pod's work
my ( $height, $width, $area, $length, $section );
$height = Math::FixedPrecision->new(12.362); # 3 decimal places
$width = Math::FixedPrecision->new(9.65); # 2 decimal places
$area = $height * $width; # area is now 119.29 not 119.2933
ok ( $area == 119.29 );
$length = Math::FixedPrecision->new("100.00"); # 2 decimal places
$section = $length / 9; # section is now 11.11 not 11.1111111...
ok ( $section == 11.11 );
$var1 = Math::FixedPrecision->new(10); # 10 to infinite decimals
ok (not defined $var1->{_p});
ok ( "$var1" eq "10" );
$var2 = Math::FixedPrecision->new(10,2); # 10.00 to 2 decimals
ok ( defined $var2->{_p} and $var2->{_p} = -2 );
ok ( "$var2" eq "10.00" );
$var3 = Math::FixedPrecision->new("10.000"); # 10.000 to 3 decimals
ok ( defined $var3->{_p} and $var3->{_p} = -3 );
ok ( "$var3" eq "10.000" );
$var4 = $var3 * 2; # 20.000 to 3 decimals
ok ( defined $var4->{_p} and $var4->{_p} = -3 );
ok ( "$var4" eq "20.000" );
$var5 = Math::FixedPrecision->new("2.00"); # 2.00 to 2 decimals
ok ( defined $var5->{_p} and $var5->{_p} = -2 );
ok ( "$var5" eq "2.00" );
$var6 = $var3 * $var5; # 20.00 to 2 decimals, not 3
ok ( defined $var6->{_p} and $var6->{_p} = -2 );
ok ( "$var6" eq "20.00" );
syntax highlighted by Code2HTML, v. 0.9.1