The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use Test::More;
use POSIX;
use Math::Lsoda;

{
  my $solver = Math::Lsoda->new(equation           => \&eqns,
                                initial            => [1.0, 0.0, 0.0],
                                start              => 0.0,
                                end                => 10.0,
                                dt                 => 1,
                               );

  ok(eq_array( \@{$solver->relative_tolerance}, [sqrt(DBL_EPSILON),sqrt(DBL_EPSILON),sqrt(DBL_EPSILON)]), "tolerance test");
  ok(eq_array( \@{$solver->absolute_tolerance}, [sqrt(DBL_EPSILON),sqrt(DBL_EPSILON),sqrt(DBL_EPSILON)]), "tolerance test");

}
sub eqns {
  my ($t, $x, $y) = @_;
  @$y[0] = 1.0e+4 * @$x[1] * @$x[2] - 0.04 * @$x[0];
  @$y[2] = 3.0e+7 * @$x[1] * @$x[1];
  @$y[1] = -(@$y[0] + @$y[2]);
}

done_testing;