#!/usr/bin/perl
use strict;
use warnings;
use Test::More;
use List::Util qw(shuffle);
use lib qw(t/lib);
use BitStreamTest;
my $maxval = ~0;
my $skip64 = 0; # allows skipping certain tests if we're on broken 64-bit.
{
# Force maxval to 0xFFFFFFFF if the stream is 32-bit.
my $stream = new_stream('String');
$maxval = 0xFFFFFFFF if $stream->maxbits == 32;
$skip64 = 1 if ($] < 5.008) && ($maxval < ~0);
}
my @maxdata = (0, 1, 2, 33, 65, 129,
($maxval >> 1) - 2,
($maxval >> 1) - 1,
($maxval >> 1),
($maxval >> 1) + 1,
($maxval >> 1) + 2,
$maxval-2,
$maxval-1,
$maxval,
);
push @maxdata, @maxdata;
@maxdata = shuffle @maxdata;
my @implementations = impl_list;
my @encodings = grep { is_universal($_) } encoding_list;
# Remove codings that cannot encode ~0
#@encodings = grep { $_ !~ /^(Omega|BVZeta)/i } @encodings;
plan tests => scalar @implementations * scalar @encodings;
foreach my $type (@implementations) {
foreach my $encoding (@encodings) {
SKIP: {
# All fixed up, so no need to skip anything right now.
# skip "Skipping range test: broken 64-bit Perl", 1
# if $skip64 && ($encoding =~ /^(Gamma|Delta|Omega|BVZeta)\b/);
#print STDERR "starting $type $encoding\n";
my $stream = stream_encode_array($type, $encoding, @maxdata);
my @v = stream_decode_array($encoding, $stream);
is_deeply( \@v, \@maxdata, "$type: $encoding range patterns");
}
}
}