use strict; use warnings; use Test::More tests => 13; use_ok 'Divisor'; my $seven = Divisor->new(7); isa_ok( $seven, 'Divisor' ); ok( $seven->divides(42), 'Seven divides 42.' ); ok( not( $seven->divides(365) ), 'The year does not contain a whole number of weeks.', ); ok( $seven->divides( 400*365 + 97 ), 'But the Gregorian calendar repeats itself every 400 years.', ); my $two = Divisor->new(2); isa_ok( $two, 'Divisor' ); ok( $two->divides('42'), "Two divides '42'." ); ok( not( $two->divides('19') ), "Two does not divide '19'.", ); my $long_string_of_twos = '2' x 320; TODO: { local $TODO = 'Redefine divisibility by two.'; ok( $two->divides($long_string_of_twos), "Two divides $long_string_of_twos.", ) or diag 'We just contrived an overflow exception.'; } can_ok( $two, 'set_divisibility_test' ); # just look at the last digit, silly! $two->set_divisibility_test( sub {shift =~ /[02468]$/} ); ok( $two->divides('42'), "Two divides '42'." ); ok( not( $two->divides('19') ), "Two does not divide '19'.", ); ok( $two->divides($long_string_of_twos), "Two divides $long_string_of_twos, as any fool can see.", );