4 use Test::More 'no_plan';
10 # =begin testing SETUP
19 my ( $self, $other ) = @_;
20 not $self->equal_to($other);
31 my ( $self, $other ) = @_;
32 $self->compare($other) == 0;
36 my ( $self, $other ) = @_;
37 $self->compare($other) == 1;
41 my ( $self, $other ) = @_;
42 $self->compare($other) == -1;
45 sub greater_than_or_equal_to {
46 my ( $self, $other ) = @_;
47 $self->greater_than($other) || $self->equal_to($other);
50 sub less_than_or_equal_to {
51 my ( $self, $other ) = @_;
52 $self->less_than($other) || $self->equal_to($other);
63 with 'Comparable', 'Printable';
65 has 'amount' => ( is => 'rw', isa => 'Num', default => 0 );
68 my ( $self, $other ) = @_;
69 $self->amount <=> $other->amount;
74 sprintf '$%0.2f USD' => $self->amount;
82 ok( US::Currency->does('Comparable'), '... US::Currency does Comparable' );
83 ok( US::Currency->does('Eq'), '... US::Currency does Eq' );
84 ok( US::Currency->does('Printable'), '... US::Currency does Printable' );
86 my $hundred = US::Currency->new( amount => 100.00 );
87 isa_ok( $hundred, 'US::Currency' );
88 ok( $hundred->DOES("US::Currency"), "UNIVERSAL::DOES for class" );
89 ok( $hundred->DOES("Comparable"), "UNIVERSAL::DOES for role" );
90 can_ok( $hundred, 'amount' );
91 is( $hundred->amount, 100, '... got the right amount' );
93 can_ok( $hundred, 'to_string' );
94 is( $hundred->to_string, '$100.00 USD',
95 '... got the right stringified value' );
97 ok( $hundred->does('Comparable'), '... US::Currency does Comparable' );
98 ok( $hundred->does('Eq'), '... US::Currency does Eq' );
99 ok( $hundred->does('Printable'), '... US::Currency does Printable' );
101 my $fifty = US::Currency->new( amount => 50.00 );
102 isa_ok( $fifty, 'US::Currency' );
104 can_ok( $fifty, 'amount' );
105 is( $fifty->amount, 50, '... got the right amount' );
107 can_ok( $fifty, 'to_string' );
108 is( $fifty->to_string, '$50.00 USD', '... got the right stringified value' );
110 ok( $hundred->greater_than($fifty), '... 100 gt 50' );
111 ok( $hundred->greater_than_or_equal_to($fifty), '... 100 ge 50' );
112 ok( !$hundred->less_than($fifty), '... !100 lt 50' );
113 ok( !$hundred->less_than_or_equal_to($fifty), '... !100 le 50' );
114 ok( !$hundred->equal_to($fifty), '... !100 eq 50' );
115 ok( $hundred->not_equal_to($fifty), '... 100 ne 50' );
117 ok( !$fifty->greater_than($hundred), '... !50 gt 100' );
118 ok( !$fifty->greater_than_or_equal_to($hundred), '... !50 ge 100' );
119 ok( $fifty->less_than($hundred), '... 50 lt 100' );
120 ok( $fifty->less_than_or_equal_to($hundred), '... 50 le 100' );
121 ok( !$fifty->equal_to($hundred), '... !50 eq 100' );
122 ok( $fifty->not_equal_to($hundred), '... 50 ne 100' );
124 ok( !$fifty->greater_than($fifty), '... !50 gt 50' );
125 ok( $fifty->greater_than_or_equal_to($fifty), '... !50 ge 50' );
126 ok( !$fifty->less_than($fifty), '... 50 lt 50' );
127 ok( $fifty->less_than_or_equal_to($fifty), '... 50 le 50' );
128 ok( $fifty->equal_to($fifty), '... 50 eq 50' );
129 ok( !$fifty->not_equal_to($fifty), '... !50 ne 50' );
131 ## ... check some meta-stuff
135 my $eq_meta = Eq->meta;
136 isa_ok( $eq_meta, 'Mouse::Meta::Role' );
138 ok( $eq_meta->has_method('not_equal_to'), '... Eq has_method not_equal_to' );
139 ok( $eq_meta->requires_method('equal_to'),
140 '... Eq requires_method not_equal_to' );
144 my $comparable_meta = Comparable->meta;
145 isa_ok( $comparable_meta, 'Mouse::Meta::Role' );
147 ok( $comparable_meta->does_role('Eq'), '... Comparable does Eq' );
149 foreach my $method_name (
151 equal_to not_equal_to
152 greater_than greater_than_or_equal_to
153 less_than less_than_or_equal_to
156 ok( $comparable_meta->has_method($method_name),
157 '... Comparable has_method ' . $method_name );
160 ok( $comparable_meta->requires_method('compare'),
161 '... Comparable requires_method compare' );
165 my $printable_meta = Printable->meta;
166 isa_ok( $printable_meta, 'Mouse::Meta::Role' );
168 ok( $printable_meta->requires_method('to_string'),
169 '... Printable requires_method to_string' );
173 my $currency_meta = US::Currency->meta;
174 isa_ok( $currency_meta, 'Mouse::Meta::Class' );
176 ok( $currency_meta->does_role('Comparable'),
177 '... US::Currency does Comparable' );
178 ok( $currency_meta->does_role('Eq'), '... US::Currency does Eq' );
179 ok( $currency_meta->does_role('Printable'),
180 '... US::Currency does Printable' );
182 foreach my $method_name (
185 equal_to not_equal_to
187 greater_than greater_than_or_equal_to
188 less_than less_than_or_equal_to
192 ok( $currency_meta->has_method($method_name),
193 '... US::Currency has_method ' . $method_name );