AlignDB-IntSpanXS

 view release on metacpan or  search on metacpan

benchmark/test_ai.pl  view on Meta::CPAN

#!/usr/bin/perl
use strict;
use warnings;

use Time::HiRes qw{ time };
use YAML qw(Dump Load DumpFile LoadFile);

use AlignDB::IntSpan;
use AlignDB::IntSpanXS;

if ( @ARGV == 0 ) {
    print "Usage:\n"
        . " " x 4
        . "perl $0 test\n"
        . " " x 4
        . "perl $0 benchmark\n"
        . " " x 4
        . "perl $0 file\n"
        . "With AlignDB::IntSpanXS\n"
        . " " x 4
        . "perl $0 file xs\n";
}
elsif ( $ARGV[0] eq "test" ) {
    run_test();
}
elsif ( $ARGV[0] eq "benchmark" ) {
    run_benchmark();
}
elsif ( $ARGV[0] eq "file" ) {
    run_file();
}
else {
    printf "unrecognized commad '%s'. Abort!\n", $ARGV[0];
}

sub new_set {
    if ( defined $ARGV[1] ) {
        return AlignDB::IntSpanXS->new(@_);
    }
    else {
        return AlignDB::IntSpan->new(@_);
    }
}

sub run_test {
    my $itx = new_set();
    print Dump {
        POS_INF      => $itx->POS_INF,
        NEG_INF      => $itx->NEG_INF,
        EMPTY_STRING => $itx->EMPTY_STRING,
    };
    print Dump $itx->as_string;
    $itx->add_range( 1, 9, 20, 39 );
    print Dump {
        edge_size    => $itx->edge_size,
        edges        => [ $itx->edges ],
        ranges       => [ $itx->ranges ],
        is_empty     => $itx->is_empty,
        is_not_empty => $itx->is_not_empty,
        as_string    => $itx->as_string,
    };

    for ( -5, 29, 100 ) {
        printf "val %d contain %d\n", $_, $itx->contains($_);
    }

    my @array = ( 5, 30 );
    printf "contains_all %d\n", $itx->contains_all(@array);
    printf "contains_any %d\n", $itx->contains_any(@array);
    push @array, -5;
    printf "contains_all %d\n", $itx->contains_all(@array);
    printf "contains_any %d\n", $itx->contains_any(@array);

    @array = ( 60, 70, 80, 90 );
    $itx->add_range(@array);
    print Dump $itx->as_string;

    @array = ( 68, 75 );
    $itx->add_range(@array);
    print Dump $itx->as_string;

    $itx->add(99);
    print Dump $itx->as_string;

    $itx->add( 77, 79 );
    print Dump $itx->as_string;

    $itx->invert;
    print Dump $itx->as_string;

    $itx->invert;
    print Dump $itx->as_string;

    $itx->remove_range( 66, 71 );
    print Dump $itx->as_string;

    $itx->remove(85);
    print Dump $itx->as_string;

    $itx->remove( 87, 88 );
    print Dump $itx->as_string;

    $itx->add("-30--10");
    print Dump $itx->as_string;

    $itx->remove("62-78");
    print Dump $itx->as_string;

    my $supp = AlignDB::IntSpan->new("-15-5");
    print Dump $supp->as_string;
    $itx->add($supp);
    print Dump $itx->as_string;

    $supp->clear;
    print Dump $supp->as_string;
    $supp->add("-20--5");
    print Dump $supp->as_string;
    $itx->remove($supp);
    print Dump $itx->as_string;



( run in 1.047 second using v1.01-cache-2.11-cpan-9581c071862 )