File: measure.t

package info (click to toggle)
libclass-measure-perl 0.10-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 132 kB
  • sloc: perl: 441; makefile: 2
file content (90 lines) | stat: -rwxr-xr-x 2,231 bytes parent folder | download | duplicates (2)
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
#!/usr/bin/env perl
use 5.008001;
use strict;
use warnings;
use Test2::V0;

use Class::Measure;

eval{ Class::Measure->new };
ok( $@, 'cannot create from base class' );

{ package MeasureTest; use base qw( Class::Measure ); }

eval{ MeasureTest->new };
ok( $@, 'invalid number of arguments' );

eval{ MeasureTest->new( 2, 'inches' ) };
ok( $@, 'unknown unit' );

MeasureTest->reg_units(
    qw( inch foot yard centimeter meter )
);
MeasureTest->reg_aliases(
    'inches' => 'inch',
    'feet' => 'foot',
    'yards' => 'yard',
    'centimeters' => 'centimeter',
    'meters' => 'meter',
);
MeasureTest->reg_convs(
    12, 'inches' => 'foot',
    3, 'feet' => 'yard',
    'yard' => 91.44, 'centimeters',
    100, 'centimeters' => 'meter',
);

my $path = MeasureTest->_path( 'inch' => 'meter' );
ok( (@$path==5), 'long path correct' );

MeasureTest->reg_convs( 'yard' => .9144, 'meter' );
$path = MeasureTest->_path( 'inch' => 'meter' );
ok( (@$path==4), 'shortened path' );

$path = MeasureTest->_path( 'foot' => 'inch' );
ok( (@$path==2), 'one step path' );

my $m = MeasureTest->new( 3, 'inch' );

$m += 2;
ok( ($m->value==5), 'obj += num' );
$m ++;
ok( ($m->value==6), 'obj ++' );
$m = 2 + $m;
ok( ($m->value==8), 'obj = num + obj' );
$m = $m + MeasureTest->new( 1, 'foot');
ok( ($m->value==20), 'obj = obj + obj' );

$m -= 2;
ok( ($m->value==18), 'obj -= num' );
$m --;
ok( ($m->value==17), 'obj --' );
$m = 30 - $m;
ok( ($m->value==13), 'obj = num - obj' );
$m = $m - MeasureTest->new( 1, 'foot' );
ok( ($m->value==1), 'obj = obj - obj' );

$m->set_value( 2, 'foot' );
$m *= 2;
ok( ($m->value==4), 'obj *= num' );
$m = 3 * MeasureTest->new( 2, 'inch' );
ok( ($m->value==6), 'obj = num * obj' );
$m = MeasureTest->new( 3, 'inch' ) * 3;
ok( ($m->value==9), 'obj = obj * num' );

$m->set_value( 10, 'foot' );
$m /= 2;
ok( ($m->value==5), 'obj /= num' );
$m = 10 / MeasureTest->new( 5, 'inch' );
ok( ($m->value==2), 'obj = num / obj' );
$m = MeasureTest->new( 6, 'inch' ) / 2;
ok( ($m->value==3), 'obj = obj / num' );

$m->set_value( 1, 'foot' );
ok( ($m->inches==12), 'autoloaded conversion (inches)' );
ok( (int($m->yards*10)==3), 'autoloaded conversion (yards)' );

eval{ return "$m" };
ok( !$@, 'stringified' );

done_testing;