# This code exercises some common functions that are used in parts # of v6 management of IP.pm. It is intended as a reference in case # of failure # $Id: bitops.t,v 1.1 2003/10/09 00:14:06 lem Exp $ use Test::More; use NetAddr::IP; use Math::BigInt; my @bases = (); # Base set of trivial numbers my @convs = (); # Numbers after conversion / de-conversion my @minus = (); # Bases minus one my @plus = (); # Bases plus one for my $i (0 .. 127) { my $I = new Math::BigInt 1; $I <<= $i; push @bases, $I; $I = new Math::BigInt 3; $I <<= $i; push @bases, $I; } pop @bases; plan tests => scalar @bases; # Test conversion back and forth # to/from a suitable vec() for my $i (0 .. $#bases) # Build the actual conversion { my $v = ''; my $I = $bases[$i]->copy; for my $j (reverse 0 .. 15) { vec($v, $j, 8) = ($I & 0xFF); $I >>= 8; } # print "# "; # printf "%02x", $_ for map { ord $_ } split //, $v; # print "\n"; push @convs, $v; } for my $i (0 .. $#bases) # Test reversibility { my $I = new Math::BigInt 0; for my $o (0 .. 15) { $I <<= 8; $I |= vec($convs[$i], $o, 8); # print "I = $I ($o)\n"; } is($bases[$i], $I, "$bases[$i] == $I [$i]"); }