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