# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl test.pl'

######################### Tests load
use Data::Dumper;

BEGIN { $| = 1; print "1..8\n"; }
END { print "not ok 1\n" unless $loaded; }
use lib "./lib";
use Graph::ChartSVG;
$loaded = 1;
print "ok 1\n";

########################## Test basic
my @text  = qw( text1 eg1 sample1 e.g.1 ex1 );
my $graph = Graph::ChartSVG->new(
    active_size => [ 800, 400 ],
    bg_color    => '0x00fff0',
    frame => Frame->new( color => '0xff00ff', thickness => 1 ),
    border => Border->new( top => 150, bottom => 80, left => 100, right => 100 ),

    grid => Grid->new(
        debord => Border->new( top => 20, bottom => 10, left => 10, right => 10 ),

        x => Grid_def->new(
            color     => '1292FF',
            number    => 5,
            thickness => 2,
            label     => Label->new(
                font  => 'verdana',
                color => '0000ff',
                size  => 15,
                text  => \@text,
                space => 10,
                align => 'right',
# rotation => -30,
            ),
        ),
    ),
);

print(
    ( $graph->{ active_size }[0] == 800 && $graph->{ active_size }[1] == 400 && scalar keys %{ $graph } == 5 )
    ? "ok 2\n"
    : "not ok 2\n"
);

########################## Test render
my $result1 = $graph->render;
print( $result1->{ -document }{ height } == 630 ? "ok 3\n" : "not ok 3\n" );
##########################
#
########################### Test frame
#
my $result2 = $graph->frame( Frame->new( color => '0x0000ff', thickness => 1 ) );
print( $graph->{ frame }{ color } eq '0x0000ff' ? "ok 4\n" : "not ok 4\n" );
###########################
#
########################### Test data
my @dot;

for my $ind ( 0 .. 600 )
{
    $dot[$ind] = exp( $ind );
}
my $data1 = Data->new( type => 'bar_down', color => '0x00ff00', label => 'src_all', thickness => 0, scale => 0.2 );
$data1->data_set( \@dot );
$graph->add( $data1 );

print( scalar( @{ ( $graph->{ Layer }->[0]->{ data_set } ) } ) == 601 ? "ok 5\n" : "** not ok 5 \n" );
###########################
#
########################### Test glyph

my $result4 = Glyph->new(
    x        => $graph->border->left,
    y        => 'active_max',
    type     => 'line',
    filled   => 1,
    color    => '0faFff',
    data_set => [
        {
            data => [ [ 0, 0 ], [ 8, 10 ], [ 0, 10 ], [ 0, 10 + 20 ], [ 0, 10 ], [ -8, 10 ], [ 0, 0 ] ],
            thickness => 3
        }
    ]
);

$graph->add( $result4 );

print( $graph->{ Layer }->[1]->{ data_set }->[0]->{ data }->[1][0] == 8 ? "ok 6\n" : "** not ok 6 \n" );
###########################
#
########################### Test text
my $result5 = Glyph->new(

    x    => 100,
    y    => 'active_max',
    type => 'text',
    size => 12,

    anchor       => 'middle',
    color        => '0xff0000',
    font         => 'Sans',             # the TrueType font to use
                                        # letter_spacing => 10,
    word_spacing => 15,
    stretch      => 'extra-expanded',
    font_weight  => 'lighter',
    data_set     => [
        {
            text => "text test 1",
            x    => 0,
            y    => 0,
# rotation => -45,
            style => 'normal',
#    anchor =>'middle',
        },
        {
            text     => "text test 2",
            x        => 10,
            y        => 20,
            rotation => -45,
            style    => 'oblique',
            anchor   => 'middle',
        },
    ],
);

$graph->add( $result5 );

print( $graph->{ Layer }->[2]->{ data_set }[1]->{ text } eq 'text test 2' ? "ok 7\n" : "** not ok 7 \n" );
###########################
#
########################### Test reduce
my @dot1;
my $a;
for my $ind ( 0 .. 800 )
{
    $dot1[$ind] = $ind;
}

my ( $dot_reduced, $stats ) = $graph->reduce(
    
        data  => \@dot1,
        start => 50,
        end   => 360,
        init  => 300
    
);

print( ( $stats->{ avg } == 400 && $stats->{ max } == 800 && $stats->{ sum } == 320400 && $dot_reduced->[1] == 300 && $dot_reduced->[180] == 335 && $dot_reduced->[360] == 798.5 ) ? "ok 8\n" : "** not ok 8 \n" );
#
###########################
#
