# Copyright (c) 2009 Martin Becker. All rights reserved. # This package is free software; you can redistribute it and/or modify it # under the same terms as Perl itself. # # $Id: 09_linear_terms.t 55 2009-06-10 20:56:13Z demetri $ # Checking methods dealing with linear terms added in version 1.002 # Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl t/09_linear_terms.t' ######################### use strict; use warnings; use Test; use Math::Complex; BEGIN { plan tests => 38 }; use Math::Polynomial 1.002; ok(1); # 1 ######################### sub has_coeff { my $p = shift; if (!ref($p) || !$p->isa('Math::Polynomial')) { print '# expected Math::Polynomial object, got ', ref($p)? ref($p): defined($p)? qq{"$p"}: 'undef', "\n"; return 0; } my @coeff = $p->coeff; if (@coeff != @_ || grep {$coeff[$_] != $_[$_]} 0..$#coeff) { print '# expected coefficients (', join(', ', @_), '), got (', join(', ', @coeff), ")\n"; return 0; } return 1; } my $p = Math::Polynomial->new(-6, -5, 2, 1); my $q = $p->mul_const(3); my $r = $p->new(-6, -3, 3); my $cp = $p->new(7); my $zp = $p->new; my $p1 = Math::Polynomial->from_roots(-1, 2, -3); ok(has_coeff($p1, -6, -5, 2, 1)); # 2 my $p2 = $p->from_roots(); ok(has_coeff($p2, 1)); # 3 my $p3 = $p->from_roots(-3); ok(has_coeff($p3, 3, 1)); # 4 my $p4 = $r->mul_root(-3); ok(has_coeff($p4, -18, -15, 6, 3)); # 5 my $p5 = $cp->mul_root(0); ok(has_coeff($p5, 0, 7)); # 6 my $p6 = $zp->mul_root(7); ok(has_coeff($p6)); # 7 my $p7 = eval { $p->div_root(-3) }; ok(has_coeff($p7, -2, -1, 1)); # 8 my $p8 = eval { $p->div_root(-2) }; ok(has_coeff($p8, -5, 0, 1)); # 9 my $p9 = eval { $p->div_root(-3, 1) }; ok(has_coeff($p9, -2, -1, 1)); # 10 my $p10 = eval { $p->div_root(-2, 1) }; ok(!defined $p10); # 11 ok($@ =~ /non-zero remainder/); # 12 my $p11 = eval { $q->div_root(-3) }; ok(has_coeff($p11, -6, -3, 3)); # 13 my $p12 = eval { $q->div_root(-3, 1) }; ok(has_coeff($p12, -6, -3, 3)); # 14 my $p13 = eval { $q->div_root(-2) }; ok(has_coeff($p13, -15, 0, 3)); # 15 my $p14 = eval { $q->div_root(-2, 1) }; ok(!defined $p14); # 16 ok($@ =~ /non-zero remainder/); # 17 my $p15 = eval { $cp->div_root(-3) }; ok(has_coeff($p15)); # 18 my $p16 = eval { $cp->div_root(-3, 1) }; ok(!defined $p16); # 19 ok($@ =~ /non-zero remainder/); # 20 my $p17 = eval { $zp->div_root(-3) }; ok(has_coeff($p17)); # 21 my $p18 = eval { $zp->div_root(-3, 1) }; ok(has_coeff($p18)); # 22 my ($p19, $p20) = eval { $p->divmod_root(-3) }; ok(has_coeff($p19, -2, -1, 1)); # 23 ok(has_coeff($p20)); # 24 my ($p21, $p22) = eval { $p->divmod_root(-2) }; ok(has_coeff($p21, -5, 0, 1)); # 25 ok(has_coeff($p22, 4)); # 26 my ($p23, $p24) = eval { $q->divmod_root(-3) }; ok(has_coeff($p23, -6, -3, 3)); # 27 ok(has_coeff($p24)); # 28 my ($p25, $p26) = eval { $q->divmod_root(-2) }; ok(has_coeff($p25, -15, 0, 3)); # 29 ok(has_coeff($p26, 12)); # 30 my ($p27, $p28) = eval { $cp->divmod_root(-3) }; ok(has_coeff($p27)); # 31 ok(has_coeff($p28, 7)); # 32 my ($p29, $p30) = eval { $zp->divmod_root(-3) }; ok(has_coeff($p29)); # 33 ok(has_coeff($p30)); # 34 my $p31 = eval { $p->divmod_root(-3) }; ok(!defined $p31); # 35 ok($@ =~ /array context required/); # 36 my $p32 = Math::Polynomial->from_roots(); ok(has_coeff($p32, 1)); # 37 my $p33 = Math::Polynomial->from_roots(1+0*i, 0+1*i, -1+0*i, 0-1*i); ok(has_coeff($p33, -1, 0, 0, 0, 1)); # 38 __END__