mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-12-22 09:41:54 +00:00
Trie index: fixed walk macro, added a test
This commit is contained in:
parent
cdb1bff49a
commit
b7bf5c5b8d
@ -83,7 +83,7 @@ void tindex_walk_free(struct tindex_walk *ctx);
|
||||
|
||||
#define TINDEX_WALK(ti, twp) \
|
||||
for (struct tindex_walk *_ti_ctx = tindex_walk_init(ti, twp); _ti_ctx; _ti_ctx = NULL) \
|
||||
for (u64 idx; idx = tindex_walk_next(ti, _ti_ctx); )
|
||||
for (u64 idx; idx = tindex_walk_next(_ti_ctx); )
|
||||
|
||||
/**
|
||||
* Dump the index. Useful for debugging.
|
||||
|
@ -79,6 +79,37 @@ t_simple(void)
|
||||
test_trie_get(&tt, i * mul + add, 1);
|
||||
}
|
||||
|
||||
u32 data[2];
|
||||
uint dlen;
|
||||
struct tindex_walk_params twp = {
|
||||
.begin = 1,
|
||||
.maxlen = TINDEX_WALK_NOMAXLEN,
|
||||
.data = data,
|
||||
.dlen = &dlen,
|
||||
};
|
||||
|
||||
uint cnt = 0;
|
||||
u32 seen[max / 32];
|
||||
memset(seen, 0, sizeof(seen));
|
||||
|
||||
TINDEX_WALK(tt.ti, &twp) {
|
||||
|
||||
bt_assert(dlen == 64);
|
||||
u64 num = ((u64) data[0] << 32) + ((u64) data[1]);
|
||||
|
||||
if (num < max) {
|
||||
bt_assert((seen[num / 32] & (1 << (num % 32))) == 0);
|
||||
seen[num / 32] |= 1 << (num % 32);
|
||||
} else
|
||||
cnt++;
|
||||
|
||||
dlen = 42; /* Mess it for testing purposes. */
|
||||
}
|
||||
|
||||
bt_assert(cnt == max);
|
||||
for (u64 i=0; i<sizeof(seen)/sizeof(u32); i++)
|
||||
bt_assert(!~seen[i]);
|
||||
|
||||
/*
|
||||
for (u64 i = 0; i < 20; i++)
|
||||
test_trie_remove(&tt, i);
|
||||
|
Loading…
Reference in New Issue
Block a user