The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# Tests for Math::Project3D::Plot
# (c) 2002-2003 Steffen Mueller, all rights reserved

use strict;
use warnings;

# use lib 'lib';
use Test::More tests => 12;

use Math::Project3D::Plot;

ok(1, 'Module compiled.'); # If we made it this far, we are ok.

my $img_size_x = 500;
my $img_size_y = 500;

my $img  = Imager->new(xsize => $img_size_x, ysize => $img_size_y);
my $proj = Math::Project3D->new(
   plane_basis_vector => [ 0, 0, 0 ],
   plane_direction1   => [ .4, 1, 0 ],
   plane_direction2   => [ .4, 0, 1 ],
);

$proj->new_function(
  't,u', '$t', '$u', '$t + $u',
);

my $color      = Imager::Color->new(0,   0, 0);
my $x_axis     = Imager::Color->new(255, 0, 0);
my $y_axis     = Imager::Color->new(0, 255, 0);
my $z_axis     = Imager::Color->new(0,   0, 255);
my $background = Imager::Color->new(255,255,255);

$img->box(
  color  => $background,
  xmin   => 0,
  ymin   => 0,
  xmax   => $img_size_x,
  ymax   => $img_size_y,
  filled => 1,
);

ok(ref $img eq 'Imager', "Created Imager image and Math::Project3D object.");

my $plotter = Math::Project3D::Plot->new(
  image      => $img,
  projection => $proj,
  scale      => 2,
);

ok(ref $plotter eq 'Math::Project3D::Plot', "Created plotter object.");

foreach (0..10) {
   $plotter->plot(color => $color, params=> [$_,$_]);
   $plotter->plot(color => $color, params=> [0,$_]);
   $plotter->plot(color => $color, params=> [$_,0]);
}

ok(1, "plot did not croak.");

my @params;
foreach (1..10) {
   push @params, [$_, $_*2];
}

$plotter->plot_list(
  color  => $color,
  params => \@params,
  type   => 'line',
);

ok(1, "plot_list as a line did not croak.");

$plotter->plot_list(
  color  => $color,
  params => \@params,
  type   => 'points',
);

ok(1, "plot_list as points did not croak.");

$plotter->plot_range(
  color  => $color,
  params => [
              [-10, 0, 1],
              [-10, 0, 1],
            ],
  type   => 'line',
);

ok(1, "plot_range as a line did not croak.");

$plotter->plot_range(
  color  => $color,
  params => [
              [-10, 0, 1],
              [-10, 0, 1],
            ],
  type   => 'points',
);

ok(1, "plot_range as points did not croak.");


$plotter->plot_range(
  color  => $color,
  params => [
              [-10, 0, 1],
              [-10, 0, 1],
            ],
  type   => 'multiline',
);

ok(1, "plot_range as multiline did not croak.");

$plotter->plot_axis( # x axis
  vector => [1, 0, 0],
  color  => $x_axis,
  length => 200,
);

ok(1, "plot_axis (x axis) did not croak.");

$plotter->plot_axis( # y axis
  vector => [0, 1, 0],
  color  => $y_axis,
  length => 200,
);

ok(1, "plot_axis (y axis) did not croak.");

$plotter->plot_axis( # z axis
  vector => [0, 0, 1],
  color  => $z_axis,
  length => 200,
);

ok(1, "plot_axis (z axis) did not croak.");


# $img->write(file=>'t.png') or
#         die $img->errstr;

# ok(0, "Forgot to remove the line that writes the image to disk");