File Coverage

blib/lib/Graph/Maker/Petersen.pm
Criterion Covered Total %
statement 6 8 75.0
branch n/a
condition n/a
subroutine 3 3 100.0
pod n/a
total 9 11 81.8


line stmt bran cond sub pod time code
1             # Copyright 2015, 2016, 2017 Kevin Ryde
2             #
3             # This file is part of Graph-Maker-Other.
4             #
5             # This file is free software; you can redistribute it and/or modify it
6             # under the terms of the GNU General Public License as published by the Free
7             # Software Foundation; either version 3, or (at your option) any later
8             # version.
9             #
10             # This file is distributed in the hope that it will be useful, but
11             # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
12             # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13             # for more details.
14             #
15             # You should have received a copy of the GNU General Public License along
16             # with Graph-Maker-Other. See the file COPYING. If not, see
17             # .
18              
19             package Graph::Maker::Petersen;
20 1     1   88260 use 5.004;
  1         9  
21 1     1   4 use strict;
  1         1  
  1         16  
22 1     1   614 use Graph::Maker;
  0            
  0            
23              
24             use vars '$VERSION','@ISA';
25             $VERSION = 8;
26             @ISA = ('Graph::Maker');
27              
28             # uncomment this to run the ### lines
29             # use Smart::Comments;
30              
31              
32             # Usage: $graph = $self->make_graph(key=>value)
33             # Create and return a graph with given key/value parameters.
34             # Parameter graph_maker is used (and removed) if given, or Graph.pm otherwise.
35             sub make_graph {
36             my ($self, %params) = @_;
37             my $graph_maker = delete($params{'graph_maker'}) || \&_default_graph_maker;
38             return $graph_maker->(%params);
39             }
40             sub _default_graph_maker {
41             require Graph;
42             return Graph->new(@_);
43             }
44              
45             sub init {
46             my ($self, %params) = @_;
47             my $N = delete($params{'N'}) || 5;
48             my $K = delete($params{'K'}) || 2;
49              
50             my $graph = $self->make_graph(%params);
51             $graph->set_graph_attribute (name => ($N==5 && $K==2 ? "Petersen" : "Petersen $N,$K"));
52              
53             $graph->add_cycle(1 .. $N);
54             foreach my $i (1 .. $N) {
55             my $j = $i + $N;
56             my $f = $N+1 + (($i-1+$K) % $N);
57             if ($f > 2*$N) { $f -= $N; }
58             $graph->add_edges([$i,$j],[$j,$f]);
59             }
60              
61             # $graph->add_cycle(1,2,3,4,5);
62             # $graph->add_cycle(6,8,10,7,9);
63             # $graph->add_edges([1,6],[2,7],[3,8],[4,9],[5,10]);
64              
65             if ($graph->is_directed) {
66             $graph->add_edges(map {[reverse @$_]} $graph->edges);
67             }
68             return $graph;
69             }
70              
71             Graph::Maker->add_factory_type('Petersen' => __PACKAGE__);
72             1;
73              
74             __END__