1 #include "tdb2-source.h"
2 #include "tap-interface.h"
5 int main(int argc
, char *argv
[])
8 struct tdb_used_record rec
;
9 struct tdb_context tdb
= { .log_fn
= tap_log_fn
};
11 plan_tests(64 + 32 + 48*6 + 1);
13 /* We should be able to encode any data value. */
14 for (i
= 0; i
< 64; i
++)
15 ok1(set_header(&tdb
, &rec
, TDB_USED_MAGIC
, 0, 1ULL << i
,
18 /* And any key and data with < 64 bits between them. */
19 for (i
= 0; i
< 32; i
++) {
20 tdb_len_t dlen
= 1ULL >> (63 - i
), klen
= 1ULL << i
;
21 ok1(set_header(&tdb
, &rec
, TDB_USED_MAGIC
, klen
, dlen
,
22 klen
+ dlen
, 0) == 0);
25 /* We should neatly encode all values. */
26 for (i
= 0; i
< 48; i
++) {
27 uint64_t h
= 1ULL << (i
< 5 ? i
: 4);
28 uint64_t klen
= 1ULL << (i
< 16 ? i
: 15);
29 uint64_t dlen
= 1ULL << i
;
30 uint64_t xlen
= 1ULL << (i
< 32 ? i
: 31);
31 ok1(set_header(&tdb
, &rec
, TDB_USED_MAGIC
, klen
, dlen
,
32 klen
+dlen
+xlen
, h
) == 0);
33 ok1(rec_key_length(&rec
) == klen
);
34 ok1(rec_data_length(&rec
) == dlen
);
35 ok1(rec_extra_padding(&rec
) == xlen
);
36 ok1((uint64_t)rec_hash(&rec
) == h
);
37 ok1(rec_magic(&rec
) == TDB_USED_MAGIC
);
39 ok1(tap_log_messages
== 0);