Data-HashMap

 view release on metacpan or  search on metacpan

t/11-ttl.t  view on Meta::CPAN

# ---- Put refreshes TTL on update ----

{
    my $m = Data::HashMap::II->new(0, 3);
    hm_ii_put $m, 1, 10;
    sleep 1;
    # Re-put refreshes TTL
    hm_ii_put $m, 1, 20;
    sleep 2;
    # 3 seconds since original put, but only 2 since refresh (TTL=3)
    is(hm_ii_get $m, 1, 20, 'TTL: put refresh keeps entry alive');
}

# ---- Iteration skips expired entries ----

{
    my $m = Data::HashMap::II->new(0, 1);
    hm_ii_put $m, 1, 10;
    hm_ii_put $m, 2, 20;

    my @k = sort { $a <=> $b } (hm_ii_keys $m);

t/16-ia.t  view on Meta::CPAN

$map = Data::HashMap::IA->new();
is_deeply([hm_ia_keys $map], [], 'keys on empty map');

# refcount correctness — stored refs should survive
{
    my $map2 = Data::HashMap::IA->new();
    {
        my @arr = (1, 2, 3);
        hm_ia_put $map2, 1, \@arr;
    }
    # @arr is out of scope but refcount should keep it alive
    my $ref = hm_ia_get $map2, 1;
    is_deeply($ref, [1, 2, 3], 'ref survives scope exit');
}

# nested refs
{
    my $map3 = Data::HashMap::IA->new();
    my $complex = { list => [1, {deep => "value"}], num => 42 };
    hm_ia_put $map3, 1, $complex;
    my $got = hm_ia_get $map3, 1;

t/20-new-features.t  view on Meta::CPAN


# put_ttl on map with default_ttl - per-key overrides default
{
    my $m = Data::HashMap::II->new(0, 60);
    hm_ii_put_ttl $m, 1, 10, 1;
    hm_ii_put $m, 2, 20;
    sleep 2;
    my $v1 = hm_ii_get $m, 1;
    is($v1, undef, 'II put_ttl overrides default TTL (expired)');
    my $v2 = hm_ii_get $m, 2;
    is($v2, 20, 'II default TTL still alive');
}

# put_ttl with LRU
{
    my $m = Data::HashMap::II->new(10);
    hm_ii_put_ttl $m, 1, 10, 1;
    sleep 2;
    my $v = hm_ii_get $m, 1;
    is($v, undef, 'II put_ttl with LRU expired');
}

t/20-new-features.t  view on Meta::CPAN

    is(scalar @pairs, 4, 'IA drain: 2 pairs');
    is(hm_ia_size $m, 1, 'IA drain: 1 remains');
    is_deeply($pairs[1], [$pairs[0]], 'IA drain: value intact');
}

# drain respects TTL
{
    my $m = Data::HashMap::II->new(0, 1);
    hm_ii_put $m, $_, $_ for 1..5;
    sleep 2;
    hm_ii_put $m, 6, 6;  # only this one is alive
    my @pairs = hm_ii_drain $m, 100;
    is(scalar @pairs, 2, 'II drain: only non-expired returned');
    is($pairs[1], 6, 'II drain: correct value');
}

# ============================================================
# pop (LRU tail / iter forward) and shift (LRU head / iter backward)
# ============================================================

# LRU pop = take from tail (least recently used)



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