File: copy.t

package info (click to toggle)
libchart-gnuplot-perl 0.23-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 944 kB
  • sloc: perl: 4,862; makefile: 113
file content (134 lines) | stat: -rwxr-xr-x 3,032 bytes parent folder | download | duplicates (6)
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);
}