#include "tap.h"
#include "fts0fts.h"
#include "fts0vlc.h"
struct fts_encode_info
{
const byte buf[10 ];
size_t len;
doc_id_t val;
};
/* Contains fts encoding min & max value for each length bytes */
static const fts_encode_info fts_info[]=
{
{{0 x80}, 1 , 0 },
{{0 xFF}, 1 , (1 << 7 ) - 1 },
{{0 x01, 0 x80}, 2 , 1 << 7 },
{{0 x7F, 0 XFF}, 2 , (1 << 14 ) - 1 },
{{0 x01, 0 x00, 0 x80}, 3 , 1 << 14 },
{{0 x7F, 0 X7F, 0 XFF}, 3 , (1 << 21 ) - 1 },
{{0 x01, 0 x00, 0 x00, 0 x80}, 4 , 1 << 21 },
{{0 x7F, 0 X7F, 0 X7F, 0 xFF}, 4 , (1 << 28 ) - 1 },
{{0 x01, 0 x00, 0 x00, 0 x00, 0 x80}, 5 , 1 << 28 },
{{0 x7F, 0 X7F, 0 X7F, 0 x7F, 0 xFF}, 5 , (1 ULL << 35 ) - 1 },
{{0 x01, 0 x00, 0 x00, 0 x00, 0 x00, 0 x80}, 6 , 1 ULL << 35 },
{{0 x7F, 0 X7F, 0 X7F, 0 x7F, 0 x7F, 0 xFF}, 6 , (1 ULL << 42 ) - 1 },
{{0 x01, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x80}, 7 , 1 ULL << 42 },
{{0 x7F, 0 X7F, 0 X7F, 0 x7F, 0 x7F, 0 x7F, 0 XFF}, 7 , (1 ULL << 49 ) - 1 },
{{0 x01, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x80}, 8 , 1 ULL << 49 },
{{0 x7F, 0 X7F, 0 X7F, 0 x7F, 0 x7F, 0 x7F, 0 X7F, 0 XFF}, 8 , (1 ULL << 56 ) -1 },
{{0 x01, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x80}, 9 , 1 ULL << 56 },
{{0 x7F, 0 X7F, 0 X7F, 0 x7F, 0 x7F, 0 x7F, 0 X7F, 0 x7F, 0 XFF}, 9 , (1 ULL << 63 ) -1 },
{{0 x01, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x80}, 10 , 1 ULL << 63 },
{{0 x01, 0 X7F, 0 X7F, 0 x7F, 0 x7F, 0 x7F, 0 X7F, 0 x7F, 0 x7F, 0 xFF}, 10 , ~0 ULL}
};
int main(int , char **)
{
for (int i= array_elements(fts_info); i--;)
{
byte buf[10 ];
const byte* fts_buf= buf;
size_t len= fts_encode_int(fts_info[i].val, buf) - &buf[0 ];
if (fts_info[i].len == len &&
!memcmp(&fts_info[i].buf, buf, len) &&
fts_decode_vlc(&fts_buf) == fts_info[i].val &&
fts_buf == &buf[len])
ok(true , "FTS Encoded for %zu bytes" , fts_info[i].len);
else
ok(false , "FTS Encoded for %zu bytes" , fts_info[i].len);
}
}
Messung V0.5 in Prozent C=99 H=86 G=92