Data-Conveyor

 view release on metacpan or  search on metacpan

eg/rangelocks_perl.pl  view on Meta::CPAN


sub get_locks_for_number {
    my $number = shift;

    print "#\n";
    print "# getting meta lock\n";
    print "# trying to get locks for [$number]\n";
    our %locks;

    if ($locks{block_exact}{$number}) {    # EXC
        print "# exact number [$number] is blocked, aborting\n";
        print "# releasing meta lock\n";
        return;
    }

    local $_ = $number;
    my @substr;
    while (length()) {
        push @substr => $_;
        chop;
    }

    for my $substr (@substr) {
        if ($locks{block_range}{$substr}) {    # EXC
            print "# range [$substr] is blocked, aborting\n";
            print "# releasing meta lock\n";
            return;
        }
    }

    $locks{block_range}{$number}++;
    $locks{block_exact}{$_}++ for @substr;   # convert to SHARED

    print "# releasing meta lock\n";

eg/rangelocks_perl.pl  view on Meta::CPAN


sub test_not_ok_locks {
    my $number = shift;
    ok(!get_locks_for_number($number), "NOT OK get_locks_for_number($number)");
    dump_locks;
}


sub test_locks_are_empty {
    our %locks;
    is_deeply(($locks{block_exact} || {}), {}, 'no exact numbers are blocked');
    is_deeply(($locks{block_range} || {}), {}, 'no numbers ranges are blocked');
}


reset_locks();
test_ok_locks(431234);
test_not_ok_locks(431234);
test_not_ok_locks(4312);
test_not_ok_locks(4312345);
test_ok_locks(431235);
release_locks_for_number(431234);



( run in 0.706 second using v1.01-cache-2.11-cpan-49f99fa48dc )