File Coverage

blib/lib/Math/Shape/Utils.pm
Criterion Covered Total %
statement 32 32 100.0
branch 13 14 92.8
condition 3 3 100.0
subroutine 13 13 100.0
pod 0 7 0.0
total 61 69 88.4


line stmt bran cond sub pod time code
1 9     9   33397 use strict;
  9         29  
  9         284  
2 9     9   37 use warnings;
  9         11  
  9         363  
3             package Math::Shape::Utils;
4             $Math::Shape::Utils::VERSION = '0.14';
5 9     9   5360 use Math::Trig ':pi';
  9         105844  
  9         1175  
6 9     9   70 use Carp 'croak';
  9         13  
  9         470  
7              
8             # ABSTRACT: Utility methods used by the Math::Shape::Vector module
9              
10             BEGIN {
11 9     9   41 require Exporter;
12 9     9   39 use base qw(Exporter);
  9         22  
  9         1057  
13 9         25 our @EXPORT = qw(degrees_to_radians radians_to_degrees overlap equal_floats minimum maximum clamp_on_range);
14 9         2099 our @EXPORT_OK = ();
15             }
16              
17             sub degrees_to_radians
18             {
19 4     4 0 15 $_[0] * pi / 180.0;
20             }
21              
22             sub radians_to_degrees
23             {
24 5     5 0 30 $_[0] / pi * 180.0;
25             }
26              
27             sub overlap
28             {
29 70     70 0 72 my ($minA, $maxA, $minB, $maxB) = @_;
30 70 100 100     575 $minB <= $maxA && $minA <= $maxB ? 1 : 0;
31             }
32              
33             sub equal_floats
34             {
35 39     39 0 41 my $threshold = 1.0 / 8192.0;
36 39 100       218 abs($_[0] - $_[1]) < $threshold ? 1 : 0;
37             }
38              
39             sub minimum
40             {
41 53 100   53 0 136 $_[0] < $_[1] ? $_[0] : $_[1];
42             }
43              
44             sub maximum
45             {
46 53 100   53 0 152 $_[0] > $_[1] ? $_[0] : $_[1];
47             }
48              
49             sub clamp_on_range
50             {
51 27 50   27 0 49 croak 'clamp_on_range() called without enough args. It requires 3 arguments: x, min & max' unless @_ == 3;
52 27         28 my ($x, $min, $max) = @_;
53              
54 27 100       55 if ($x < $min)
    100          
55             {
56 5         14 $min;
57             }
58             elsif ($x > $max)
59             {
60 4         8 $max;
61             }
62             else
63             {
64 18         30 $x;
65             }
66             }
67              
68             1;
69              
70             __END__