The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -T

use warnings;
use strict;

use Test::More tests => 5;

use lib 'lib';
use Math::Function::Roots qw(secant last_iter epsilon max_iter);

epsilon(0);
is( epsilon(), 0, "epsilon set/get" );
is( secant( sub{shift()**2-4}, .2, .3 ), 2, "secant: f(x)=x**2-4");

max_iter(0);
is( max_iter(), 1, "max_iter set minimum" );
{ $SIG{'__WARN__'} = sub {}; #Turn warnings off for cleaner output
  secant( sub{shift()**2-4}, .2, .3 );
}
is( last_iter(), 1, "secant: cut short");

epsilon(.0001);
max_iter(50_000);
ok( abs( secant( sub{shift()**2-4}, .2, .3 ) - 2 ) <= epsilon(), "normal secant operation");