File: test.pl

package info (click to toggle)
libmath-basecalc-perl 1.011-1
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 48 kB
  • ctags: 10
  • sloc: perl: 113; makefile: 49; sh: 8
file content (76 lines) | stat: -rw-r--r-- 1,990 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl test.pl'

######################### We start with some black magic to print on failure.

# Change 1..1 below to 1..last_test_to_print .
# (It may become useful if the test is moved to ./t subdirectory.)

BEGIN { $| = 1; print "1..13\n"; }
END {print "not ok 1\n" unless $loaded;}
use Math::BaseCalc;
$loaded = 1;
&report(1);

######################### End of black magic.

my $calc = new Math::BaseCalc(digits=>[0,1]);
&report($calc);

my $result = $calc->from_base('01101');
&report($result == 13, "$result\n");

$calc->digits('bin');
$result = $calc->from_base('1101');
&report($result == 13, "$result\n");

$result = $calc->to_base(13);
&report($result eq '1101', "$result\n");

$calc->digits('hex');
$result = $calc->to_base(46);
&report($result eq '2e', "$result\n");

$calc->digits([qw(i  a m  v e r y  p u n k)]);
$result = $calc->to_base(13933);
&report($result eq 'krap', "$result\n");

$calc->digits('hex');
$result = $calc->to_base('-17');
&report($result eq '-11', "$result\n");

$calc->digits('hex');
$result = $calc->from_base('-11');
&report($result eq '-17', "$result\n");

$calc->digits('hex');
$result = $calc->from_base('-11.05');
&report($result eq '-17.01953125', "$result\n");

$calc->digits([0..6]);
$result = $calc->from_base('0.1');
&report($result eq (1/7), "$result\n");

# Test large numbers
$calc->digits('hex');
my $r1 = $calc->to_base(2**55 + 5);
$result = $calc->from_base($calc->to_base(2**55 + 5));
#warn "res: $r1, $result";
&report($result eq 2**55 + 5, "$result\n");

{
  $calc->digits('bin');
  my $first  = $calc->from_base('1110111');
  my $second = $calc->from_base('1010110');
  my $third = $calc->to_base($first * $second);
  &report($third eq '10011111111010', "$third\n");
}

sub report {
  my $bad = !shift;
  print "not " x $bad;
  print "ok ", ++$TESTNUM, "\n";
  print @_ if $ENV{TEST_VERBOSE} and $bad;
}