# $Id: data.t,v 1.1 2005/12/14 04:22:16 ben Exp $ use Test; use strict; BEGIN { plan tests => 37 } use GD::Graph::Data; ok(1); use Data::Dumper; ok(1); my @data = ( [qw( Jan Feb Mar )], [11, 12], [21], [31, 32, 33, 34], ); print "# Test setting up of object\n"; my $data = GD::Graph::Data->new(); ok($data); ok($data->isa("GD::Graph::Data")); $GD::Graph::Error::Debug = 4; print "# Test that empty object is empty\n"; my @l = $data->get_min_max_x; ok(@l, 0); my $err_ar_ref = $data->clear_errors; ok(@{$err_ar_ref}, 1); print "# Fill with data\n"; my $rc = $data->copy_from(\@data); ok($rc); #@l = $data->get_min_max_x; #ok(@l, 2); #ok("@l", "Jan Jan"); # Nonsensical test for non-numeric data print "# Check number of data sets\n"; my $nd = $data->num_sets; ok($nd, 3); print "# Get min and max\n"; @l = $data->get_min_max_y(1); ok(@l, 2); ok("@l", "11 12"); @l = $data->get_min_max_y($nd); ok(@l, 2); ok("@l", "31 34"); print "# Check number of points, and y value\n"; my $np = $data->num_points; my $y = $data->get_y($nd, $np-1); ok($np, 3); ok($y, 33); print "# Add a point and check dimensions\n"; $data->add_point(qw(X3 13 23 35)); $nd = $data->num_sets; $np = $data->num_points; $y = $data->get_y($nd, $np-1); ok($nd, 3); ok($np, 4); ok($y, 35); @l = $data->y_values(3) ; ok(@l, 4); ok("@l", "31 32 33 35"); print "# Check cumulate\n"; $data->cumulate(preserve_undef => 0) ; @l = $data->y_values(3); ok(@l, 4); ok("@l", "63 44 33 71"); print "# Check reverse\n"; $data->reverse; @l = $data->y_values(1) ; ok(@l, 4); ok("@l", "63 44 33 71"); print "# Check min and max\n"; @l = $data->get_min_max_y_all; ok(@l, 2); ok("@l", "0 71"); print "# Check copy()\n"; my $data2 = $data->copy; ok($data2); ok($data2->isa("GD::Graph::Data")); ok(Dumper($data2), Dumper($data)); my $file; print "# Read tab-separated file\n"; $file = -f 'data.tab' ? 'data.tab' : -f 't/data.tab' ? 't/data.tab': undef; $data = GD::Graph::Data->new(); $rc = $data->read(file => $file); ok(ref $rc, "GD::Graph::Data", "Couldn't read input data.tab input file"); if (!defined $rc) { skip("data.tab not read", 0) for 1..2; } else { ok($data->num_sets(), 5); ok(scalar $data->num_points(), 4); } print "# Read comma-separated file\n"; $file = -f 'data.csv' ? 'data.csv' : -f 't/data.csv' ? 't/data.csv': undef; $data = GD::Graph::Data->new(); $rc = $data->read(file => $file, delimiter => qr/,/); ok(ref $rc, "GD::Graph::Data", "Couldn't read input data.csv input file"); if (!defined $rc) { skip("data.csv not read", 0) for 1..2; } else { ok($data->num_sets(), 5); ok(scalar $data->num_points(), 4); } print "# Read from DATA\n"; # Skip first line of DATA ; $data = GD::Graph::Data->new(); $rc = $data->read(file => \*DATA, delimiter => qr/,/); # TODO This test cannot fail, because I don't check whether DATA is an # open file handle in read(). ok(ref $rc, "GD::Graph::Data", "Couldn't read from DATA file handle"); if (!defined $rc) { skip("DATA not read", 0) for 1..2; } else { ok($data->num_sets(), 3); ok(scalar $data->num_points(), 3); } __DATA__ We will skip this line # And from here on, things should be normal for input files A,1,2,3 B,1,2,3 C,1,2,3