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

use Test;
use strict;
use Math::Business::RSI;

my $rsi = new Math::Business::RSI;
   $rsi->set_days(14);
   $rsi->set_cutler;
   # NOTE: todd's examples use Cuttler's RSI
   # (see: http://en.wikipedia.org/wiki/Relative_Strength_Index#Cutler.27s_RSI)

my @todd_litteken = qw(
    46.1250 47.1250 46.4375 46.9375 44.9375 44.2500 44.6250 45.7500 47.8125 47.5625
    47.0000 44.5625 46.3125 47.6875 46.6875 45.6875 43.0625 43.5625 44.8750 43.6875
);
my @orig = @todd_litteken;

my @RSI_todd = qw( 51.7787 48.4771 41.0734 42.8634 47.3818 43.9921 );

plan tests => 10;

$rsi->insert(splice @todd_litteken, 0, 14);
ok( $rsi->query, undef );

$rsi->insert(shift @todd_litteken);
ok( sprintf('%0.4f', $rsi->query), sprintf('%0.4f', shift @RSI_todd) );

# NOTE: todd's original spreadsheet uses =((F16*13)+D17)/14 to calculate the
# average in the next period...  I believe he meant =(F16 - D3/14 + D17/14) I
# calculated that by hand and got 45.4545

$rsi->insert(shift @todd_litteken);
ok( sprintf('%0.4f', $rsi->query), sprintf('%0.4f', '45.4545') );

######### The EMA RSI

$rsi->set_standard;
$rsi->insert(splice @orig, 0, 14);
ok( $rsi->query, undef );

# NOTE: I then computed (using his spreadsheet) the 14-day ema version
my @paul = qw( 48.6989 42.8212 31.3579 35.1721 44.5110 38.6921 );

while( @paul ) {
    $rsi->insert(shift @orig);
    ok( sprintf('%0.4f', $rsi->query), sprintf('%0.4f', shift @paul) );
}