CXC-PDL-Bin1D

 view release on metacpan or  search on metacpan

t/Bin1D/bin_on_index.t  view on Meta::CPAN

        };

    };

    my $error = $@;
    $ctx->release;

    die $error if $error;

    return;
}

# create a regular set of stats which have the same imin and number of bins.
subtest 'regular' => sub {

    my $nbins = 19;
    my $imin  = -9;
    my $imax  = $imin + $nbins - 1;

    my %mk_pars = (
        shape      => [ 2, 3 ],
        dset_imin  => $imin,
        dset_nbins => $nbins,

        # force 1D stats to have same number of bins and imin
        stats_imin  => $imin,
        stats_nbins => $nbins,

    );

    subtest 'in-bounds' => sub {

        my $tdata = mk_nD_dataset( %mk_pars );

        subtest 'nbins, imin' => sub {

            test_bin(
                data   => $tdata,
                params => {
                    nbins => $nbins,
                    imin  => $imin,
                },
            );

        };

        test_range(
            data  => $tdata,
            nbins => $nbins,
            imin  => $imin,
            imax  => $tdata->stats->imax,
            # range=slice and range=flat are the same for this dataset.
            range => [ 'slice', 'flat' ],
        );
    };


    subtest 'out-of-bounds' => sub {

        my @oob_types = qw(
          start-end
          end
          nbins
          start-nbins
        );

        for my $oob_type ( @oob_types ) {

            subtest $oob_type => sub {

                my $oob_imin  = $imin + 2;
                my $oob_imax  = $imax - 3;
                my $oob_nbins = $oob_imax - $oob_imin + 1;

                my $tdata = mk_nD_dataset(
                    %mk_pars,
                    oob      => $oob_type,
                    oob_imin => $imin + 2,
                    oob_imax => $imax - 3,
                );

                test_bin(
                    data   => $tdata,
                    params => {
                        imin  => $oob_imin,
                        nbins => $oob_nbins,
                        oob   => $oob_type,
                    },
                );

            };

        }

    };

};

# this generates 1D data sets which have different nbins and imin
subtest 'subset' => sub {

    my $nbins = 50;
    my $imin  = -9;

    my %mk_pars = (
        shape        => [ 2, 3 ],
        dset_imin    => $imin,
        dset_nbins   => $nbins,
        stats_nalloc => $nbins,
        subset       => 1,
    );

    subtest 'in-bounds' => sub {

        my $tdata = mk_nD_dataset( %mk_pars );


        # first, force nbins
        subtest 'nbins, imin' => sub {

            test_bin(
                data   => $tdata,
                params => {
                    nbins => $tdata->stats->nbins,
                    imin  => $tdata->stats->imin,
                },
            );
        };

        # now, let the range be dynamically determined
        test_range(
            data  => $tdata,
            nbins => $tdata->stats->nbins,
            imin  => $tdata->stats->imin,
            imax  => $tdata->stats->imax,
            range => 'slice',                # flat doesn't make sense for this comparison
        );

    };

    subtest 'out-of-bounds' => sub {

        my @oob_types = qw(
          end
          nbins
          start-nbins
          start-end
        );

        for my $oob_type ( @oob_types ) {

            subtest $oob_type => sub {

                # create a regular set of stats which have the same imin and number of bins.
                my $tdata = mk_nD_dataset( %mk_pars, oob => $oob_type, );

                my $stats = $tdata->stats;
                my $oob   = $tdata->stats->oob;
                test_bin(
                    data   => $tdata,
                    params => {
                        imin  => $stats->oob_imin,
                        nbins => $stats->oob_nbins,
                        oob   => $oob->type,
                    },
                );
            };
        }
    };
};

done_testing;



( run in 4.442 seconds using v1.01-cache-2.11-cpan-54e63673c56 )