AI-MXNet

 view release on metacpan or  search on metacpan

t/test_recordio.t  view on Meta::CPAN

use strict;
use warnings;
use AI::MXNet qw(mx);
use Test::More tests => 1711;
use File::Temp qw/tempfile/;
use PDL;

sub test_recordio
{
    my ($fd, $frec) = tempfile();
    my $N = 255;

    my $writer = mx->recordio->MXRecordIO($frec, 'w');
    for my $i (0..$N-1)
    {
        $writer->write(chr($i));
    }
    undef $writer;

    my $reader = mx->recordio->MXRecordIO($frec, 'r');
    for my $i (0..$N-1)
    {
        my $res = $reader->read;
        is($res, chr($i));
    }
}

sub test_indexed_recordio
{
    my ($fi, $fidx) = tempfile();
    my ($fr, $frec) = tempfile();
    my $N = 255;

    my $writer = mx->recordio->MXIndexedRecordIO($fidx, $frec, 'w');
    for my $i (0..$N-1)
    {
        $writer->write_idx($i, chr($i));
    }
    undef $writer;

    my $reader = mx->recordio->MXIndexedRecordIO($fidx, $frec, 'r');
    my @keys = @{ $reader->keys };
    is_deeply([sort {$a <=> $b} @keys], [0..$N-1]);
    @keys = List::Util::shuffle(@keys);
    for my $i (@keys)
    {
        my $res = $reader->read_idx($i);
        is($res, chr($i));
    }
}

sub test_recordio_pack_label
{
    my $N = 25;
    my @ascii_uppercase_and_digits = ('A'..'Z', 0..9);
    for my $i (1..$N-1)
    {
        for my $j (0..$N-1)
        {
            my $content = join('', map { $ascii_uppercase_and_digits[int(rand(36))] } 0..$j-1);
            my $label = mx->nd->array(random($i), dtype => 'float32')->aspdl;
            my $header = [0, $label, 0, 0];
            my $s = mx->recordio->pack($header, $content);
            my ($rheader, $rcontent) = mx->recordio->unpack($s);



( run in 0.621 second using v1.01-cache-2.11-cpan-39bf76dae61 )