1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
|
#!/usr/bin/perl -w
use strict;
use Test::More (tests => 4);
BEGIN {use Chart::Gnuplot;}
# Test copying Chart object
{
my $original = Chart::Gnuplot->new(
output => "temp.ps",
title => 'original',
);
my $clone = $original->copy;
$original->title("original title changed");
$clone->title("clone title");
$original->_setChart();
$clone->_setChart();
my $diff = 0;
$diff += &diff($original->{_script}, "copy_1.gp");
$diff += &diff($clone->{_script}, "copy_2.gp");
ok($diff == 0);
}
# Test multi-copying Chart object
{
my $original = Chart::Gnuplot->new(
output => "temp.ps",
title => 'original',
);
my @clone = $original->copy(3);
# Modify objects after cloning
$original->title("original title changed");
for (my $i = 0; $i < @clone; $i++)
{
$clone[$i]->title("clone title $i");
}
# Write gnuplot script
$original->_setChart();
for (my $i = 0; $i < @clone; $i++)
{
$clone[$i]->_setChart();
}
# Check if there is difference
my $diff = 0;
$diff += &diff($original->{_script}, "copy_1.gp");
for (my $i = 0; $i < @clone; $i++)
{
my $j = $i+3;
$diff += &diff($clone[$i]->{_script}, "copy_$j.gp");
}
ok($diff == 0);
}
# Test copying DataSet object
{
my $original = Chart::Gnuplot::DataSet->new(
func => 'sin(x)',
style => 'points',
);
my $clone = $original->copy;
$original->func("cos(x)");
$clone->ydata([1 .. 10]);
my $cos = $original->_thaw();
$clone->_thaw();
my $diff = 0;
$diff++ if ($cos ne "cos(x) title \"\" with points");
$diff += &diff($clone->{_data}, "copy_1.dat");
ok($diff == 0);
}
# Test multi-copying DataSet object
{
my $original = Chart::Gnuplot::DataSet->new(
func => 'sin(x)',
title => "original"
);
my @clone = $original->copy(3);
# Modify objects after cloning
$original->title("original title changed");
for (my $i = 0; $i < @clone; $i++)
{
$clone[$i]->title("clone title $i");
}
# Save data
my $origStr = $original->_thaw();
my (@cloneStr) = ();
for (my $i = 0; $i < @clone; $i++)
{
push(@cloneStr, $clone[$i]->_thaw());
}
# Check if there is difference
my $diff = 0;
$diff++ if ($origStr ne 'sin(x) title "original title changed"');
for (my $i = 0; $i < @clone; $i++)
{
$diff++ if ($cloneStr[$i] ne "sin(x) title \"clone title $i\"")
}
ok($diff == 0);
}
###################################################################
# Compare two files
# - return 0 if two files are the same, except the ordering of the lines
# - return 1 otherwise
sub diff
{
my ($f1, $f2) = @_;
$f2 = "t/".$f2 if (!-e $f2);
open(F1, $f1) || return(1);
open(F2, $f2) || return(1);
my @c1 = <F1>;
my @c2 = <F2>;
close(F1);
close(F2);
return(0) if (join("", sort @c1) eq join("", sort @c2));
return(1);
}
|