Branch Coverage

xs/i32.xs
Criterion Covered Total %
branch 66 570 11.5


line true false branch
8 0 4 if (!map) croak("HashMap::Shared::I32: %s", errbuf[0] ? errbuf : "unknown error");
0 0 if (!map) croak("HashMap::Shared::I32: %s", errbuf[0] ? errbuf : "unknown error");
17 0 0 if (!map) croak("HashMap::Shared::I32: %s", errbuf[0] ? errbuf : "unknown error");
0 0 if (!map) croak("HashMap::Shared::I32: %s", errbuf[0] ? errbuf : "unknown error");
25 0 4 if (!SvROK(self_sv)) return;
27 0 4 if (!h) return;
34 1014 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 1014 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 1014 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
35 1014 0 RETVAL = shm_i32_put(h, key, value);
42 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
43 0 0 if ((items - 1) % 2 != 0) croak("set_multi requires even number of arguments (key, value pairs)");
45 0 0 if (h->shard_handles) {
46 0 0 for (int i = 1; i < items; i += 2)
52 0 0 for (int i = 1; i < items; i += 2)
57 0 0 RETVAL = count;
64 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
66 0 0 if (nkeys == 0) XSRETURN_EMPTY;
67 0 0 EXTEND(SP, nkeys);
0 0 EXTEND(SP, nkeys);
68 0 0 if (h->shard_handles) {
69 0 0 for (int i = 0; i < nkeys; i++) {
72 0 0 if (shm_i32_get(h, key, &val))
81 0 0 uint32_t now = h->expires_at ? shm_now() : 0;
88 0 0 for (int i = 0; i < nkeys; i++) {
94 0 0 for (int i = 0; i < nkeys; i++) {
101 0 0 for (uint32_t j = 0; j <= mask; j++) {
104 0 0 if (st == SHM_EMPTY) break;
105 0 0 if (st != tag) continue;
106 0 0 if (nodes[idx].key == key) {
107 0 0 if (h->expires_at && h->expires_at[idx] && now >= h->expires_at[idx]) break;
0 0 if (h->expires_at && h->expires_at[idx] && now >= h->expires_at[idx]) break;
0 0 if (h->expires_at && h->expires_at[idx] && now >= h->expires_at[idx]) break;
113 0 0 if (found) mPUSHi(val);
116 0 0 if (i + 1 < nkeys) {
127 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
148 1 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 1 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 1 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
149 1 0 RETVAL = shm_i32_cas(h, key, expected, desired);
156 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
157 0 0 RETVAL = shm_i32_persist(h, key);
164 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
165 0 0 RETVAL = shm_i32_set_ttl(h, key, (uint32_t)ttl_sec);
172 7 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 7 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 7 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
174 0 7 if (!shm_i32_get(h, key, &value)) XSRETURN_UNDEF;
182 500 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 500 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 500 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
183 500 0 RETVAL = shm_i32_remove(h, key);
190 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
191 0 0 RETVAL = shm_i32_exists(h, key);
198 1 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 1 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 1 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
201 0 1 if (!ok) croak("HashMap::Shared::I32: increment failed");
209 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
212 0 0 if (!ok) croak("HashMap::Shared::I32: decrement failed");
220 1 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 1 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 1 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
223 0 1 if (!ok) croak("HashMap::Shared::I32: incr_by failed");
231 2 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 2 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 2 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
232 0 2 RETVAL = (UV)shm_i32_size(h);
239 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
240 0 0 RETVAL = (UV)shm_i32_max_entries(h);
247 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
248 0 0 uint32_t ns = h->shard_handles ? h->num_shards : 1;
249 0 0 for (uint32_t si = 0; si < ns; si++) {
250 0 0 ShmHandle *sh = h->shard_handles ? h->shard_handles[si] : h;
253 0 0 uint32_t now = sh->expires_at ? shm_now() : 0;
255 0 0 EXTEND(SP, hdr->size);
256 0 0 for (uint32_t i = 0; i < hdr->table_cap; i++) {
257 0 0 if (SHM_IS_LIVE(sh->states[i]) && !SHM_IS_EXPIRED(sh, i, now))
0 0 if (SHM_IS_LIVE(sh->states[i]) && !SHM_IS_EXPIRED(sh, i, now))
0 0 if (SHM_IS_LIVE(sh->states[i]) && !SHM_IS_EXPIRED(sh, i, now))
0 0 if (SHM_IS_LIVE(sh->states[i]) && !SHM_IS_EXPIRED(sh, i, now))
258 0 0 mXPUSHi(nodes[i].key);
265 1 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 1 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 1 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
266 0 1 uint32_t ns = h->shard_handles ? h->num_shards : 1;
267 1 1 for (uint32_t si = 0; si < ns; si++) {
268 0 1 ShmHandle *sh = h->shard_handles ? h->shard_handles[si] : h;
271 0 1 uint32_t now = sh->expires_at ? shm_now() : 0;
273 0 1 EXTEND(SP, hdr->size);
274 16 1 for (uint32_t i = 0; i < hdr->table_cap; i++) {
275 10 6 if (SHM_IS_LIVE(sh->states[i]) && !SHM_IS_EXPIRED(sh, i, now))
0 10 if (SHM_IS_LIVE(sh->states[i]) && !SHM_IS_EXPIRED(sh, i, now))
0 0 if (SHM_IS_LIVE(sh->states[i]) && !SHM_IS_EXPIRED(sh, i, now))
0 0 if (SHM_IS_LIVE(sh->states[i]) && !SHM_IS_EXPIRED(sh, i, now))
276 0 10 mXPUSHi(nodes[i].value);
283 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
284 0 0 uint32_t ns = h->shard_handles ? h->num_shards : 1;
285 0 0 for (uint32_t si = 0; si < ns; si++) {
286 0 0 ShmHandle *sh = h->shard_handles ? h->shard_handles[si] : h;
289 0 0 uint32_t now = sh->expires_at ? shm_now() : 0;
291 0 0 EXTEND(SP, hdr->size * 2);
292 0 0 for (uint32_t i = 0; i < hdr->table_cap; i++) {
293 0 0 if (SHM_IS_LIVE(sh->states[i]) && !SHM_IS_EXPIRED(sh, i, now)) {
0 0 if (SHM_IS_LIVE(sh->states[i]) && !SHM_IS_EXPIRED(sh, i, now)) {
0 0 if (SHM_IS_LIVE(sh->states[i]) && !SHM_IS_EXPIRED(sh, i, now)) {
0 0 if (SHM_IS_LIVE(sh->states[i]) && !SHM_IS_EXPIRED(sh, i, now)) {
294 0 0 mXPUSHi(nodes[i].key);
295 0 0 mXPUSHi(nodes[i].value);
304 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
306 0 0 if (shm_i32_each(h, &out_key, &out_value)) {
307 0 0 EXTEND(SP, 2);
308 0 0 mXPUSHi(out_key);
309 0 0 mXPUSHi(out_value);
318 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
325 1 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 1 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 1 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
331 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
333 0 0 uint32_t ns = h->shard_handles ? h->num_shards : 1;
334 0 0 for (uint32_t si = 0; si < ns; si++) {
335 0 0 ShmHandle *sh = h->shard_handles ? h->shard_handles[si] : h;
338 0 0 uint32_t now = sh->expires_at ? shm_now() : 0;
340 0 0 for (uint32_t i = 0; i < hdr->table_cap; i++) {
341 0 0 if (SHM_IS_LIVE(sh->states[i]) && !SHM_IS_EXPIRED(sh, i, now)) {
0 0 if (SHM_IS_LIVE(sh->states[i]) && !SHM_IS_EXPIRED(sh, i, now)) {
0 0 if (SHM_IS_LIVE(sh->states[i]) && !SHM_IS_EXPIRED(sh, i, now)) {
0 0 if (SHM_IS_LIVE(sh->states[i]) && !SHM_IS_EXPIRED(sh, i, now)) {
345 0 0 if (!hv_store(hv, kbuf, klen, val, 0)) SvREFCNT_dec(val);
357 2 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 2 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 2 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
360 0 2 if (!rc) XSRETURN_UNDEF;
368 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
369 0 0 REQUIRE_TTL(h);
0 0 REQUIRE_TTL(h);
370 0 0 RETVAL = shm_i32_put_ttl(h, key, value, (uint32_t)ttl_sec);
377 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
378 0 0 RETVAL = (UV)shm_i32_max_size(h);
385 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
386 0 0 RETVAL = (UV)shm_i32_ttl(h);
393 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
395 0 0 if (!shm_i32_take(h, key, &out_value)) XSRETURN_UNDEF;
403 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
406 0 0 if (!shm_i32_pop(h, &out_key, &out_val)) XSRETURN_EMPTY;
407 0 0 EXTEND(SP, 2);
414 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
417 0 0 if (!shm_i32_shift(h, &out_key, &out_val)) XSRETURN_EMPTY;
418 0 0 EXTEND(SP, 2);
425 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
426 0 0 if (limit == 0) XSRETURN_EMPTY;
428 0 0 Newxz(entries, limit, shm_i32_drain_entry);
434 0 0 EXTEND(SP, n * 2);
435 0 0 for (uint32_t i = 0; i < n; i++) {
439 0 0 if (buf) free(buf);
445 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
446 0 0 RETVAL = (UV)shm_i32_flush_expired(h);
453 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
456 0 0 EXTEND(SP, 2);
463 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
471 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
472 0 0 RETVAL = shm_i32_touch(h, key);
479 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
480 0 0 RETVAL = shm_i32_reserve(h, (uint32_t)target);
487 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
495 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
503 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
504 0 0 RETVAL = (UV)shm_i32_stat_recoveries(h);
511 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
519 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
527 2 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 2 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 2 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
528 1 1 RETVAL = shm_i32_add(h, key, value);
535 1 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 1 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 1 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
536 1 0 RETVAL = shm_i32_update(h, key, value);
543 1 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 1 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 1 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
546 0 1 if (rc != 1) XSRETURN_UNDEF;
554 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
563 0 0 if (SvROK(self_or_class) && SvOBJECT(SvRV(self_or_class))) {
0 0 if (SvROK(self_or_class) && SvOBJECT(SvRV(self_or_class))) {
565 0 0 if (!h) croak("Attempted to use a destroyed Data::HashMap::Shared::I32 object");
568 0 0 if (items < 2) croak("Usage: Data::HashMap::Shared::I32->unlink($path)");
571 0 0 RETVAL = (SvROK(self_or_class) && SvOBJECT(SvRV(self_or_class))) ?
0 0 RETVAL = (SvROK(self_or_class) && SvOBJECT(SvRV(self_or_class))) ?
572 0 0 shm_unlink_sharded(INT2PTR(ShmHandle*, SvIV(SvRV(self_or_class)))) :
580 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
582 0 0 if (remaining < 0) XSRETURN_UNDEF;
590 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
591 0 0 RETVAL = (UV)shm_i32_capacity(h);
598 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
599 0 0 RETVAL = (UV)shm_i32_tombstones(h);
606 0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
0 0 EXTRACT_MAP("Data::HashMap::Shared::I32", self_sv);
608 0 0 if (!c) croak("Failed to allocate cursor");
619 0 0 if (!SvROK(self_sv)) return;
621 0 0 if (!c) return;
624 0 0 if (h) shm_i32_flush_deferred(h);
630 0 0 EXTRACT_CURSOR("Data::HashMap::Shared::I32::Cursor", self_sv);
0 0 EXTRACT_CURSOR("Data::HashMap::Shared::I32::Cursor", self_sv);
0 0 EXTRACT_CURSOR("Data::HashMap::Shared::I32::Cursor", self_sv);
632 0 0 if (shm_i32_cursor_next(c, &out_key, &out_value)) {
633 0 0 EXTEND(SP, 2);
634 0 0 mXPUSHi(out_key);
635 0 0 mXPUSHi(out_value);
643 0 0 EXTRACT_CURSOR("Data::HashMap::Shared::I32::Cursor", self_sv);
0 0 EXTRACT_CURSOR("Data::HashMap::Shared::I32::Cursor", self_sv);
0 0 EXTRACT_CURSOR("Data::HashMap::Shared::I32::Cursor", self_sv);
649 0 0 EXTRACT_CURSOR("Data::HashMap::Shared::I32::Cursor", self_sv);
0 0 EXTRACT_CURSOR("Data::HashMap::Shared::I32::Cursor", self_sv);
0 0 EXTRACT_CURSOR("Data::HashMap::Shared::I32::Cursor", self_sv);
650 0 0 RETVAL = shm_i32_cursor_seek(c, key);