1#! perl 2 3use strict; 4use warnings; 5use Test::More tests =>15; 6use_ok('Math::BaseCalc'); 7 8my $calc = new Math::BaseCalc(digits=>[0,1]); 9isa_ok($calc, "Math::BaseCalc"); 10 11{ 12 my $result = $calc->from_base('01101'); 13 is($result, 13, "from_base = 13"); 14} 15 16{ 17 $calc->digits('bin'); 18 my $result = $calc->from_base('1101'); 19 is($result, 13, "1101 into decimal"); 20} 21 22{ 23 my $result = $calc->to_base(13); 24 is($result, '1101', "convert back to our base (binary)"); 25} 26 27{ 28 $calc->digits('hex'); 29 my $result = $calc->to_base(46); 30 is($result, '2e', "convert 46 into hex(2e)"); 31} 32 33{ 34 $calc->digits([qw(i a m v e r y p u n k)]); 35 my $result = $calc->to_base(13933); 36 is($result, 'krap', "base 11 with custom letters for each digit. Becomes a517 which is krap with custom letters"); 37} 38 39{ 40 $calc->digits('hex'); 41 my $result = $calc->to_base('-17'); 42 is($result, '-11', "negative decimal (-17) into hex (-11)"); 43} 44 45{ 46 $calc->digits('hex'); 47 my $result = $calc->from_base('-11'); 48 is($result, '-17', "negative hex (-11) into decimal (-17)"); 49} 50 51{ 52 $calc->digits('hex'); 53 my $result = $calc->from_base('-11.05'); 54 is($result, '-17.01953125', "negative float number in hex to b10 (-11.05 to -17...."); 55} 56 57{ 58 $calc->digits([0..6]); 59 my $result = $calc->from_base('0.1'); 60 is($result, (1/7), "base 6 float (.1) converts to decimal (1/7)."); 61} 62 63{ 64 # Test large numbers 65 $calc->digits('hex'); 66 my $r1 = $calc->to_base(2**30 + 5); 67 my $result = $calc->from_base($calc->to_base(2**30 + 5)); 68 #warn "res: $r1, $result"; 69 is($result, int(2**30 + 5), "hex (2**30 + 5) into hex then back"); 70} 71 72{ 73 $calc->digits('bin'); 74 my $first = $calc->from_base('1110111'); 75 my $second = $calc->from_base('1010110'); 76 my $third = $calc->to_base($first * $second); 77 is($third, '10011111111010', "1110111 x 1010110 = 10011111111010"); 78} 79 80{ 81 $calc->digits(['a', 'b', 'c']); 82 my $result = $calc->from_base('-bba'); 83 is($result, '-12', "negative numbers treated correctly"); 84 85 $calc->digits(['a', 'b', '-']); 86 $result = $calc->from_base('-bba'); 87 is($result, 2*27+9+3, "dash can be a digit"); 88} 89