#!perl
use Test::More;
### SYNOPSYS ###
use strict;
use warnings;
use Number::AnyBase;
# 62 symbols alphabet
my @alphabet = (0..9, 'A'..'Z', 'a'..'z');
my $conv = Number::AnyBase->new( @alphabet );
my $base62_num = $conv->to_base( 123456 ); # W7E
my $dec_num = $conv->to_dec( $base62_num ); # back to 123456
use feature 'say';
# URI unreserved characters alphabet
my $uri_conv = Number::AnyBase->new_urisafe;
say $uri_conv->to_base( 1234567890 ); # ~2Bn4
say $uri_conv->to_dec( '~2Bn4' ); # 1234567890
# ASCII printable characters alphabet
my $ascii_conv = Number::AnyBase->new_ascii;
say $ascii_conv->to_base( 199_000_000_000 ); # >Z8X<8
say $ascii_conv->to_dec( '>Z8X<8' ); # 199000000000
# Hexadecimal base
my $hex_conv = Number::AnyBase->new( 0..9, 'A'..'F' );
say $hex_conv->to_base( 2047 ); # 7FF
say $hex_conv->to_dec( '7FF' ); # 2047
# Morse alphabet
my $morse_conv = Number::AnyBase->new( '._' );
say $morse_conv->to_base( 99 ); # __...__
say $morse_conv->to_dec( '__...__' ); # 99
{
# Unicode alphabet (webdings font);
use utf8;
binmode STDOUT, ':utf8';
my $webdings_conv = Number::AnyBase->new(
'♣♤♥♦☭☹☺☻✈✪✫✭✰✵✶✻❖♩♧♪♫♬⚓⚒⛔✼✾❁❂❄❅❊☿⚡⚢⚣⚤⚥⚦⛀⛁⛦⛨'
);
say $webdings_conv->to_base( 1000000000 ); # ☺⚢♬♬⚥⛦
say $webdings_conv->to_dec( '☺⚢♬♬⚥⛦' ); # 1000000000
}
# Fast native unary increment/decrement
my $sequence = Number::AnyBase->fastnew(['A'..'Z']);
say $sequence->next('ZZZ'); # BAAA
say $sequence->prev('BAAA'); # ZZZ
{
use constant SEQ_LENGTH => 10_000;
my $conv = Number::AnyBase->new( 0..9, 'A'..'Z', 'a'..'z' );
my (@seq1, @seq2);
my $base_num = 'zzzzzz';
my $next = $base_num;
push @seq1, $next = $conv->next($next) for 1..SEQ_LENGTH;
# @seq2 construction is marginally faster:
my $dec_num = $conv->to_dec($base_num);
push @seq2, $conv->to_base( $dec_num + $_ ) for 1..SEQ_LENGTH;
is_deeply \@seq1, \@seq2,
'Native increment vs to_base() on large sequences';
}
ok( 1 == 1, 'Docs OK' );
done_testing;