The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w
use strict;
use Number::Misc ':all';
use Test;
BEGIN { plan tests => 30 };

# variables
my ($warn_hold);

# stubs for convenience
sub bool_comp;
sub comp;


# is_numeric
bool_comp is_numeric('3'),                       1;
bool_comp is_numeric('0003'),                    1;
bool_comp is_numeric('0.003'),                   1;
bool_comp is_numeric('0.00.3'),                  0;
bool_comp is_numeric('3,003'),                   1;
bool_comp is_numeric('  3'),                     0;
bool_comp is_numeric(undef),                     0;
bool_comp is_numeric('3,003',  convertible=>1),  1;
bool_comp is_numeric('  3',    convertible=>1),  1;
bool_comp is_numeric('0.00.3', convertible=>1),  0;

# to_number
comp to_number(' 3 '),                         3;
comp to_number(' 3,000 '),                     3000;
comp to_number('whatever'),                    undef;
comp to_number('whatever', always_number=>1),  0;

# commafie
comp commafie(2000),    '2,000';
comp commafie(2000.33),    '2,000.33';
comp commafie(-2000),  '-2,000';
comp commafie(100),       '100';


# zero_pad
comp zero_pad(2, 3),   '002';
comp zero_pad(2, 10),  '0000000002';
comp zero_pad(444, 2), '444';

# rand_in_range
RAND_LOOP: {
	for (1..100) {
		my $number = rand_in_range(-1, 10);
		
		if ( ($number < -1) || $number > 10 ) {
			ok 0;
			last RAND_LOOP;
		}
	}
	
	ok 1;
}

# is_even
# Turning of warnings because some of the tests produce expected warnings.
# I hate it when installations produce tons of warnings but I don't know
# which of them is actually a problem.  The following tests product warnings
# that aren't actually problems.
bool_comp is_even(1), 0;
bool_comp is_even(2), 1;
$warn_hold = $SIG{'__WARN__'};
$SIG{'__WARN__'} = sub {  };
comp is_even(undef), undef;
comp is_even('fred'), undef;
$SIG{'__WARN__'} = $warn_hold;

# is_odd
bool_comp is_odd(1), 1;
bool_comp is_odd(2), 0;
$warn_hold = $SIG{'__WARN__'};
$SIG{'__WARN__'} = sub {  };
comp is_odd(undef), undef;
comp is_odd('fred'), undef;
$SIG{'__WARN__'} = $warn_hold;



#------------------------------------------------------------------------------
# comp
#
sub comp {
	my ($val1, $val2) = @_;
	
	# if both undef
	if ( (! defined $val1) && (! defined $val2) )
		{ ok 1 }
	
	# if first is not defined, false
	elsif (! defined $val1)
		{ ok 0 }
	
	# if second is not defined, false
	elsif (! defined $val2)
		{ ok 0 }
	
	# else if same
	elsif ($val1 eq $val2)
		{ ok 1 }
	
	# else not same
	else
		{ ok 0 }
}
#
# comp
#------------------------------------------------------------------------------


#------------------------------------------------------------------------------
# bool_comp
#
sub bool_comp {
	my ($val1, $val2) = @_;
	
	# if both true
	if ( $val1 && $val2 )
		{ ok 1 }
	
	# if both true
	elsif ( (! $val1) && (! $val2) )
		{ ok 1 }
	
	# else not ok
	else
		{ ok 0 }
}
#
# bool_comp
#------------------------------------------------------------------------------