package Math::GSL::Chebyshev::Test;
use strict;
use warnings;
use base q{Test::Class};
use Math::GSL::Chebyshev qw/:all/;
use Math::GSL::Test qw/:all/;
use Math::GSL::Errno qw/:all/;
use Math::GSL qw/:all/;
use Test::More tests => 10;
use Data::Dumper;
BEGIN { gsl_set_error_handler_off() }
sub make_fixture : Test(setup) {
my $self = shift;
$self->{cheb} = gsl_cheb_alloc(40);
}
sub teardown : Test(teardown) {
my $self = shift;
gsl_cheb_free($self->{cheb});
}
sub GSL_CHEB_ALLOC : Tests {
my $self = shift;
isa_ok($self->{cheb}, 'Math::GSL::Chebyshev');
}
sub GSL_CHEB_INIT : Tests {
my $self = shift;
my $func = sub { my $x = shift; return sin(cos($x)) };
ok_status(gsl_cheb_init( $self->{cheb}, $func, 0, 1));
}
sub GSL_CHEB_EVAL : Tests {
my $self = shift;
my $func = sub { my $x = shift; return sin(cos($x)) };
gsl_cheb_init( $self->{cheb}, $func, 0, 1);
ok_similar( [ sin(cos(0.5)) ], [gsl_cheb_eval($self->{cheb}, 0.5 ) ] );
}
sub GSL_CHEB_EVAL_ERR : Tests {
my $self = shift;
my $func = sub { my $x = shift; return sin(cos($x)) };
gsl_cheb_init( $self->{cheb}, $func, 0, 1);
my ($status,$result,$err) = gsl_cheb_eval_err($self->{cheb}, 0.5 );
ok_status($status);
ok_similar( [ sin(cos(0.5)) ], [ $result ], 'gsl_cheb_eval_err result');
ok( defined $err , 'error is defined');
}
sub GSL_CHEB_CALC_DERIV : Tests {
my $self = shift;
my $deriv = gsl_cheb_alloc(40);
my $func = sub { my $x = shift; return sin(cos($x)) };
gsl_cheb_init( $self->{cheb}, $func, 0, 1);
ok_status(gsl_cheb_calc_deriv($deriv, $self->{cheb} ));
isa_ok($deriv, 'Math::GSL::Chebyshev');
}
sub GSL_CHEB_CALC_INTEGRAL : Tests {
my $self = shift;
my $integral = gsl_cheb_alloc(40);
my $func = sub { my $x = shift; return sin(cos($x)) };
gsl_cheb_init( $self->{cheb}, $func, 0, 1);
ok_status(gsl_cheb_calc_integ($integral, $self->{cheb} ));
isa_ok($integral, 'Math::GSL::Chebyshev');
}
Test::Class->runtests;
1;