#!perl -w -I..
#______________________________________________________________________
# Symbolic algebra: polynomial tests.
# PhilipRBrenan@yahoo.com, 2004, Perl License.
#______________________________________________________________________

use Math::Algebra::Symbols;
use Test::More tests => 19;

my ($a, $b, $x, $y, $i, $c2, $c3) = symbols(qw(a b x y i 2 3));

ok(  sin($x)**2 + cos($x)**2      == 1,              'Pythagoras'); 
ok( ($x**8 - 1) /  ($x**4+1)      == $x**4-1,        'Polynomial division');
ok( ($x**2 - 1)                   == ($x-1) * ($x+1),'Polynomial multiplication');                        
ok(  abs(!($x+$y*$i)*!($a+$b*$i)) == 1,              'Length of product of units'); 

ok(  ($x+$x*$x)*$y/($x*$y)                == 1+$x);
ok(  (2*$x*$y**20) / (4*$y**19+4*$y**19)  == ($x*$y)/4);
ok(  (4*$b+4*$a*$b)/(4*$b+4*$a*$b)        == 1/($a+1)*$a+1/($a+1));

#ok(  (sqrt($c2)+sqrt($c3))**4             == 10*(sqrt($c2)+sqrt($c3))**2 - 1);
ok(  ($x**16-1)/($x**8-1)                 == $x**8+1);
ok(  ($x+1)**11 / (1+$x)**12              == 1/($x+1));
ok(  ($x**2 + $y**2)/($x**2 + $y**2)      == 1);
ok(  ($x**2 + 2*$x*$y +$y**2) / ($x+$y)   == $x+$y);
ok(  (($x**2-1)/(($x+1)*($x-1)))          == 1);

 
$A += ($x**2 + 5 * $x + 6) / ($x + 2); 
$B += ($x**8 - 1) / ($x-1); 
$C += ($x-1) / ($x**2 - 1);

$D += ($x**2 - $y**2) / ($x + $y); 
$E += ($x**4 - $y**4) / ($x**2 + $y**2); 
$F += ($x**6 - $y**6) / ($x**3 + $y**3); 
$G += ($x**4 + $y**4) / ($x**8 - $y**8); 

ok("$A" eq "$x+3");
ok("$B" eq "$x+$x**2+$x**3+$x**4+$x**5+$x**6+$x**7+1");
ok("$C" eq "1/($x+1)");
ok("$D" eq "$x-$y");
ok("$E" eq "$x**2-$y**2");
ok("$F" eq "$x**3-$y**3");
ok("$G" eq "1/($x**4-$y**4)");



syntax highlighted by Code2HTML, v. 0.9.1