mirror of
https://github.com/dkogan/feedgnuplot.git
synced 2025-05-05 22:11:12 +08:00
expanded test suite
This commit is contained in:
parent
99369d1542
commit
deaa85dbd3
729
t/plots.t
729
t/plots.t
@ -1,5 +1,11 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
# This tests various features of feedgnuplot. Note that the tests look at actual
|
||||
# plot output using the 'dumb' terminal, so any changes in gnuplot itself that
|
||||
# change the way the output looks will show up as test failures. Hopefully this
|
||||
# will not be a big deal
|
||||
|
||||
|
||||
# require a threaded perl for my tests. This block lifted verbatim from the cpantesters wiki
|
||||
BEGIN {
|
||||
use Config;
|
||||
@ -9,12 +15,14 @@ BEGIN {
|
||||
}
|
||||
}
|
||||
|
||||
use Test::More tests => 1;
|
||||
use Test::More tests => 16;
|
||||
use Test::Script::Run 'is_script_output';
|
||||
use File::Temp 'tempfile';
|
||||
|
||||
|
||||
tryplot( [], 'seq 5', <<'EOF' );
|
||||
tryplot( testname => 'basic line plot',
|
||||
cmd => 'seq 5',
|
||||
options => [qw(--lines --points)],
|
||||
refplot => <<'EOF' );
|
||||
|
||||
|
||||
5 ++--+---+--+---+---+---+--+--+A
|
||||
@ -57,32 +65,731 @@ tryplot( [], 'seq 5', <<'EOF' );
|
||||
|
||||
EOF
|
||||
|
||||
tryplot( testname => 'basic lines-only plot',
|
||||
cmd => 'seq 5',
|
||||
options => [qw(--lines)],
|
||||
refplot => <<'EOF' );
|
||||
|
||||
|
||||
5 ++--+---+--+---+---+---+--+--+*
|
||||
+ + + + + + + + *+
|
||||
| * |
|
||||
| * |
|
||||
4.5 ++ * ++
|
||||
| * |
|
||||
| * |
|
||||
| * |
|
||||
| * |
|
||||
4 ++ * ++
|
||||
| * |
|
||||
| * |
|
||||
| * |
|
||||
3.5 ++ * ++
|
||||
| * |
|
||||
| * |
|
||||
| * |
|
||||
3 ++ * ++
|
||||
| * |
|
||||
| * |
|
||||
| * |
|
||||
| * |
|
||||
2.5 ++ * ++
|
||||
| * |
|
||||
| * |
|
||||
| * |
|
||||
2 ++ * ++
|
||||
| * |
|
||||
| * |
|
||||
| * |
|
||||
| * |
|
||||
1.5 ++ * ++
|
||||
| * |
|
||||
| * |
|
||||
+* + + + + + + + +
|
||||
1 *+--+---+--+---+---+---+--+--++
|
||||
1 1.5 2 2.5 3 3.5 4 4.5 5
|
||||
|
||||
EOF
|
||||
|
||||
tryplot( testname => 'basic points-only plot',
|
||||
cmd => 'seq 5',
|
||||
options => [qw(--points)],
|
||||
refplot => <<'EOF' );
|
||||
|
||||
|
||||
5 ++--+---+--+---+---+---+--+--+A
|
||||
+ + + + + + + + +
|
||||
| |
|
||||
| |
|
||||
4.5 ++ ++
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
4 ++ A ++
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
3.5 ++ ++
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
3 ++ A ++
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
2.5 ++ ++
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
2 ++ A ++
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
1.5 ++ ++
|
||||
| |
|
||||
| |
|
||||
+ + + + + + + + +
|
||||
1 A+--+---+--+---+---+---+--+--++
|
||||
1 1.5 2 2.5 3 3.5 4 4.5 5
|
||||
|
||||
EOF
|
||||
|
||||
tryplot( testname => 'basic line plot with bounds',
|
||||
cmd => 'seq 5',
|
||||
options => [qw(--lines --points),
|
||||
qw(--xmin -10.5 --xmax 4.5 --ymin -0.5 --ymax 5.5)],
|
||||
refplot => <<'EOF' );
|
||||
|
||||
|
||||
++---+----+---+---+---+----+---++
|
||||
|+ + + + + + + +|
|
||||
| |
|
||||
5 ++ ++
|
||||
| |
|
||||
| |
|
||||
| *
|
||||
| *
|
||||
| *|
|
||||
4 ++ A+
|
||||
| *|
|
||||
| * |
|
||||
| * |
|
||||
| * |
|
||||
| * |
|
||||
3 ++ A ++
|
||||
| * |
|
||||
| * |
|
||||
| * |
|
||||
| * |
|
||||
2 ++ A ++
|
||||
| * |
|
||||
| * |
|
||||
| * |
|
||||
| * |
|
||||
| * |
|
||||
1 ++ A ++
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
0 ++ ++
|
||||
| |
|
||||
|+ + + + + + + +|
|
||||
++---+----+---+---+---+----+---++
|
||||
-10 -8 -6 -4 -2 0 2 4
|
||||
|
||||
EOF
|
||||
|
||||
tryplot( testname => 'basic line plot with bounds, square aspect ratio',
|
||||
cmd => 'seq 5',
|
||||
options => [qw(--lines --points),
|
||||
qw(--xmin -10.5 --xmax 4.5 --ymin -0.5 --ymax 5.5 --square)],
|
||||
refplot => <<'EOF' );
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
++---+----+---+---+---+----+---++
|
||||
5 ++ + + + + + + ++
|
||||
| *
|
||||
4 ++ A+
|
||||
| * |
|
||||
3 ++ A ++
|
||||
| * |
|
||||
| * |
|
||||
2 ++ A ++
|
||||
| * |
|
||||
1 ++ A ++
|
||||
| |
|
||||
0 ++ + + + + + + ++
|
||||
++---+----+---+---+---+----+---++
|
||||
-10 -8 -6 -4 -2 0 2 4
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
EOF
|
||||
|
||||
tryplot( testname => 'lines on both axes with labels, legends, titles',
|
||||
cmd => q{seq 5 | awk '{print 2*$1, $1*$1}'},
|
||||
options => [qw(--lines --points),
|
||||
'--legend', '0', 'data 0',
|
||||
'--title', "Test plot",
|
||||
qw(--y2 1 --y2label y2 --xlabel x --ylabel y --y2max 30)],
|
||||
refplot => <<'EOF' );
|
||||
|
||||
Test plot
|
||||
y2
|
||||
10 ++-+---+--+--+--+---+--+-+A 30
|
||||
+ + + + + + + + *+
|
||||
| data 0 **A****|
|
||||
| * |
|
||||
9 ++ * |
|
||||
| * +B 25
|
||||
| * #|
|
||||
| * #|
|
||||
8 ++ A # |
|
||||
| * # |
|
||||
| * # |
|
||||
| * # ++ 20
|
||||
7 ++ * # |
|
||||
| * # |
|
||||
| * # |
|
||||
| * B |
|
||||
6 ++ A # ++ 15
|
||||
| * # |
|
||||
| * # |
|
||||
| * # |
|
||||
| * # |
|
||||
5 ++ * # |
|
||||
| * # ++ 10
|
||||
| * B |
|
||||
| * # |
|
||||
4 ++ A # |
|
||||
| * # |
|
||||
| * # ++ 5
|
||||
| * # |
|
||||
3 ++ * #B |
|
||||
| *## |
|
||||
| *# |
|
||||
B* + + + + + + + +
|
||||
2 A+-+---+--+--+--+---+--+-++ 0
|
||||
1 1.5 2 2.5 3 3.5 4 4.5 5
|
||||
x
|
||||
|
||||
EOF
|
||||
|
||||
tryplot( testname => 'lines on both axes with labels, legends, titles; different styles',
|
||||
cmd => q{seq 5 | awk '{print 2*$1, $1*$1}'},
|
||||
options => ['--legend', '0', 'data 0',
|
||||
'--title', "Test plot",
|
||||
qw(--y2 1 --y2label y2 --xlabel x --ylabel y --y2max 30),
|
||||
'--curvestyle', '0', 'with lines',
|
||||
'--curvestyle', '1', 'with points ps 3 pt 7'],
|
||||
refplot => <<'EOF' );
|
||||
|
||||
Test plot
|
||||
y2
|
||||
10 ++-+---+--+--+--+---+--+-+* 30
|
||||
+ + + + + + + + *+
|
||||
| data 0 *******|
|
||||
| * |
|
||||
9 ++ * |
|
||||
| * +G 25
|
||||
| * |
|
||||
| * |
|
||||
8 ++ * |
|
||||
| * |
|
||||
| * |
|
||||
| * ++ 20
|
||||
7 ++ * |
|
||||
| * |
|
||||
| * |
|
||||
| * G |
|
||||
6 ++ * ++ 15
|
||||
| * |
|
||||
| * |
|
||||
| * |
|
||||
| * |
|
||||
5 ++ * |
|
||||
| * ++ 10
|
||||
| * G |
|
||||
| * |
|
||||
4 ++ * |
|
||||
| * |
|
||||
| * ++ 5
|
||||
| * |
|
||||
3 ++ * G |
|
||||
| * |
|
||||
| * |
|
||||
G* + + + + + + + +
|
||||
2 *+-+---+--+--+--+---+--+-++ 0
|
||||
1 1.5 2 2.5 3 3.5 4 4.5 5
|
||||
x
|
||||
|
||||
EOF
|
||||
|
||||
tryplot( testname => 'domain plot',
|
||||
cmd => q{seq 5 | awk '{print 2*$1, $1*$1}'},
|
||||
options => [qw(--lines --points), '--domain'],
|
||||
refplot => <<'EOF' );
|
||||
|
||||
|
||||
25 ++--+---+---+---+--+---+---+--+A
|
||||
+ + + + + + + + *+
|
||||
| *|
|
||||
| * |
|
||||
| * |
|
||||
| * |
|
||||
| * |
|
||||
20 ++ * ++
|
||||
| * |
|
||||
| * |
|
||||
| * |
|
||||
| * |
|
||||
| * |
|
||||
| A |
|
||||
15 ++ * ++
|
||||
| * |
|
||||
| * |
|
||||
| * |
|
||||
| * |
|
||||
| * |
|
||||
| * |
|
||||
10 ++ * ++
|
||||
| A |
|
||||
| * |
|
||||
| * |
|
||||
| ** |
|
||||
| * |
|
||||
| * |
|
||||
5 ++ * ++
|
||||
| A |
|
||||
| ** |
|
||||
| ** |
|
||||
| * |
|
||||
|** |
|
||||
A + + + + + + + +
|
||||
0 ++--+---+---+---+--+---+---+--++
|
||||
2 3 4 5 6 7 8 9 10
|
||||
|
||||
EOF
|
||||
|
||||
tryplot( testname => 'dataid plot',
|
||||
cmd => q{seq 5 | awk '{print 2*$1, $1*$1}'},
|
||||
options => [qw(--lines --points),
|
||||
qw(--dataid --autolegend)],
|
||||
refplot => <<'EOF' );
|
||||
|
||||
|
||||
25 ++--+---+---+---+--+---+---+--+E
|
||||
+ + + + + + + + +
|
||||
| 2 **A*** |
|
||||
| 4 ##B### |
|
||||
| 6 $$C$$$ |
|
||||
| 8 %%D%%% |
|
||||
| 10 @@E@@@ |
|
||||
20 ++ ++
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| D |
|
||||
15 ++ ++
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
10 ++ ++
|
||||
| C |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
5 ++ ++
|
||||
| B |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
A + + + + + + + +
|
||||
0 ++--+---+---+---+--+---+---+--++
|
||||
1 1.5 2 2.5 3 3.5 4 4.5 5
|
||||
|
||||
EOF
|
||||
|
||||
tryplot( testname => '3d spiral with bounds, labels',
|
||||
cmd => q{seq 50 | awk '{print 2*cos($1/5), sin($1/5), $1}'},
|
||||
options => [qw(--lines --points),
|
||||
qw(--3d --domain --zmin -5 --zmax 45 --zlabel z),
|
||||
'--extracmds', 'set view 60,30'],
|
||||
refplot => <<'EOF' );
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
A*AA*AA*
|
||||
* A*
|
||||
AA
|
||||
A
|
||||
A
|
||||
*
|
||||
+ A
|
||||
40 |+ A*A*AAA* A
|
||||
| A A*A* A
|
||||
30 |+ AA A A
|
||||
| A A
|
||||
z 20 |+ AA A A
|
||||
| AA*AA*A*AA*A*A A
|
||||
10 |+ +- A
|
||||
| -+ --- A
|
||||
0 |+ -+ + ---
|
||||
| -+ +---
|
||||
| --+ + ---
|
||||
| -++ +- 1
|
||||
| -+ 0.8
|
||||
|-+ 0.6
|
||||
++--- - 0.4
|
||||
-21.5 +--- -+ 0.2
|
||||
-1+ + +-- +-0.2
|
||||
-0.50+ +--- +-0.4
|
||||
0.51++-+-0.6
|
||||
1.5+-1.8
|
||||
2
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
EOF
|
||||
|
||||
tryplot( testname => '3d spiral with bounds, labels, square xy aspect ratio',
|
||||
cmd => q{seq 50 | awk '{print 2*cos($1/5), sin($1/5), $1}'},
|
||||
options => [qw(--lines --points),
|
||||
qw(--3d --domain --zmin -5 --zmax 45 --zlabel z),
|
||||
'--extracmds', 'set view 60,30', '--square_xy'],
|
||||
refplot => <<'EOF' );
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
*AA*
|
||||
AA*A
|
||||
A
|
||||
+ A*A
|
||||
40 |+ A
|
||||
| A
|
||||
30 |+ A
|
||||
| AAAAA* A
|
||||
z 20 |+AA AA A
|
||||
| AA* A*A AA
|
||||
| AA*AAA*AA*A
|
||||
10 |+ AAA
|
||||
0 |+ A
|
||||
| A
|
||||
| +- A
|
||||
| -++---
|
||||
| --+ +---
|
||||
|-++ +---
|
||||
+++-- ---
|
||||
-21.5+--- +- 1
|
||||
-10.5--- + 0.6
|
||||
0 +--- + 024
|
||||
0.5 ++-0.4
|
||||
1.521.8
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
EOF
|
||||
|
||||
tryplot( testname => 'Histogram plot',
|
||||
cmd => q{seq 50 | awk '{print $1*$1}'},
|
||||
options => [qw(--lines --points),
|
||||
qw(--histo 0 --binwidth 50 --ymin 0 --curvestyleall), 'with boxes'],
|
||||
refplot => <<'EOF' );
|
||||
|
||||
|
||||
4 ++--**---+---+---+---+----+--++
|
||||
+ ** + + + + + +
|
||||
| ** |
|
||||
| ** |
|
||||
3.5 ++ ** ++
|
||||
| ** |
|
||||
| ** |
|
||||
| ** |
|
||||
| ** |
|
||||
3 ++ ** ++
|
||||
| ** |
|
||||
| ** |
|
||||
| ** |
|
||||
2.5 ++ ** ++
|
||||
| ** |
|
||||
| ** |
|
||||
| ** |
|
||||
2 ++ **** ++
|
||||
| **** |
|
||||
| **** |
|
||||
| **** |
|
||||
| **** |
|
||||
1.5 ++ **** ++
|
||||
| **** |
|
||||
| **** |
|
||||
| **** |
|
||||
1 ++ *********************** ++
|
||||
| *********************** |
|
||||
| *********************** |
|
||||
| *********************** |
|
||||
| *********************** |
|
||||
0.5 ++ *********************** ++
|
||||
| *********************** |
|
||||
| *********************** |
|
||||
+ *********************** +
|
||||
0 ++--***********************--++
|
||||
-500 0 500 100015002000 25003000
|
||||
|
||||
EOF
|
||||
|
||||
tryplot( testname => 'Cumulative histogram',
|
||||
cmd => q{seq 50 | awk '{print $1*$1}'},
|
||||
options => [qw(--lines --points),
|
||||
qw(--histo 0 --histstyle cum --binwidth 50 --ymin 0 --curvestyleall), 'with boxes'],
|
||||
refplot => <<'EOF' );
|
||||
|
||||
|
||||
50 ++--+----+---+----+---+---**--++
|
||||
+ + + + + + *** +
|
||||
| **** |
|
||||
| ****** |
|
||||
| ******* |
|
||||
| ******* |
|
||||
| ********* |
|
||||
40 ++ ********** ++
|
||||
| *********** |
|
||||
| ************ |
|
||||
| ************* |
|
||||
| ************** |
|
||||
| ************** |
|
||||
| *************** |
|
||||
30 ++ **************** ++
|
||||
| ***************** |
|
||||
| ***************** |
|
||||
| ****************** |
|
||||
| ****************** |
|
||||
| ******************* |
|
||||
| ******************** |
|
||||
20 ++ ******************** ++
|
||||
| ********************* |
|
||||
| ********************* |
|
||||
| ********************** |
|
||||
| ********************** |
|
||||
| ********************** |
|
||||
| *********************** |
|
||||
10 ++ *********************** ++
|
||||
| *********************** |
|
||||
| *********************** |
|
||||
| *********************** |
|
||||
| ************************ |
|
||||
| ************************ |
|
||||
+ ************************ +
|
||||
0 ++--************************--++
|
||||
-500 0 500 1000 15002000 25003000
|
||||
|
||||
EOF
|
||||
|
||||
tryplot( testname => 'Circles',
|
||||
cmd => q{seq 5 | awk '{print $1,$1,$1/10}'},
|
||||
options => [qw(--circles --domain)],
|
||||
refplot => <<'EOF' );
|
||||
|
||||
|
||||
5 ++-+--+--+--+--+--+--+--*--+-**
|
||||
+ + + + + + + + * + *+
|
||||
| * *|
|
||||
| ******|
|
||||
4.5 ++ ++
|
||||
| |
|
||||
| |
|
||||
| * |
|
||||
| **** |
|
||||
4 ++ * ** ++
|
||||
| * * |
|
||||
| **** |
|
||||
| |
|
||||
3.5 ++ ++
|
||||
| |
|
||||
| * |
|
||||
| **** |
|
||||
3 ++ * ** ++
|
||||
| * * |
|
||||
| **** |
|
||||
| |
|
||||
| |
|
||||
2.5 ++ ++
|
||||
| |
|
||||
| |
|
||||
| * |
|
||||
2 ++ *** ++
|
||||
| ** |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
1.5 ++ ++
|
||||
| |
|
||||
| |
|
||||
+ * + + + + + + + + +
|
||||
1 ++***-+--+--+--+--+--+--+--+-++
|
||||
0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 5.5
|
||||
|
||||
EOF
|
||||
|
||||
tryplot( testname => 'Error bars (using extraValuesPerPoint)',
|
||||
cmd => q{seq 5 | awk '{print $1,$1,$1/10}'},
|
||||
options => [qw(--domain),
|
||||
qw(--extraValuesPerPoint 1 --curvestyle 0), 'with errorbars'],
|
||||
refplot => <<'EOF' );
|
||||
|
||||
|
||||
5.5 ++--+---+--+---+---+---+--+--***
|
||||
+ + + + + + + + *
|
||||
| *
|
||||
5 ++ +A
|
||||
| *
|
||||
| *
|
||||
| *
|
||||
4.5 ++ ***
|
||||
| *** |
|
||||
| * |
|
||||
4 ++ A ++
|
||||
| * |
|
||||
| * |
|
||||
| *** |
|
||||
3.5 ++ ++
|
||||
| *** |
|
||||
| * |
|
||||
3 ++ A ++
|
||||
| * |
|
||||
| * |
|
||||
| *** |
|
||||
2.5 ++ ++
|
||||
| |
|
||||
| *** |
|
||||
2 ++ A ++
|
||||
| * |
|
||||
| *** |
|
||||
| |
|
||||
1.5 ++ ++
|
||||
| |
|
||||
| |
|
||||
1*A* ++
|
||||
*** |
|
||||
| |
|
||||
+ + + + + + + + +
|
||||
0.5 ++--+---+--+---+---+---+--+--++
|
||||
1 1.5 2 2.5 3 3.5 4 4.5 5
|
||||
|
||||
EOF
|
||||
|
||||
tryplot( testname => 'Monotonicity check',
|
||||
cmd => q{seq 10 | awk '{print (NR-1)%5,NR}'},
|
||||
options => [qw(--lines --points --domain --monotonic)],
|
||||
refplot => <<'EOF' );
|
||||
|
||||
|
||||
10 ++--+---+--+---+---+---+--+--+A
|
||||
+ + + + + + + + *+
|
||||
| * |
|
||||
| * |
|
||||
9.5 ++ * ++
|
||||
| * |
|
||||
| * |
|
||||
| * |
|
||||
| * |
|
||||
9 ++ A ++
|
||||
| * |
|
||||
| * |
|
||||
| * |
|
||||
8.5 ++ * ++
|
||||
| * |
|
||||
| * |
|
||||
| * |
|
||||
8 ++ A ++
|
||||
| * |
|
||||
| * |
|
||||
| * |
|
||||
| * |
|
||||
7.5 ++ * ++
|
||||
| * |
|
||||
| * |
|
||||
| * |
|
||||
7 ++ A ++
|
||||
| * |
|
||||
| * |
|
||||
| * |
|
||||
| * |
|
||||
6.5 ++ * ++
|
||||
| * |
|
||||
| * |
|
||||
+* + + + + + + + +
|
||||
6 A+--+---+--+---+---+---+--+--++
|
||||
0 0.5 1 1.5 2 2.5 3 3.5 4
|
||||
|
||||
EOF
|
||||
|
||||
sub tryplot
|
||||
{
|
||||
my $extraoptions = shift;
|
||||
my $incmd = shift;
|
||||
my $ref = shift;
|
||||
my %args = @_;
|
||||
|
||||
my ($fh, $input_filename) = tempfile( UNLINK => 1);
|
||||
open IN, '-|', $incmd;
|
||||
open IN, '-|', $args{cmd};
|
||||
print $fh <IN>;
|
||||
close IN;
|
||||
close $fh;
|
||||
|
||||
my @options = (qw(--lines --points --exit),
|
||||
my @options = ('--exit',
|
||||
'--extracmds', 'unset grid',
|
||||
'--terminal', 'dumb 40,40',
|
||||
$input_filename);
|
||||
|
||||
unshift @options, @$extraoptions;
|
||||
unshift @options, @{$args{options}};
|
||||
|
||||
is_script_output( 'feedgnuplot', \@options,
|
||||
[$ref =~ /(.*)\n/g], [],
|
||||
'basic line plot');
|
||||
[$args{refplot} =~ /(.*)\n/g], [],
|
||||
$args{testname});
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user