aboutsummaryrefslogtreecommitdiffstats
path: root/tests/bitvec/bitvec_test.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/bitvec/bitvec_test.c')
-rw-r--r--tests/bitvec/bitvec_test.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/tests/bitvec/bitvec_test.c b/tests/bitvec/bitvec_test.c
index fbf5c5dd..b4764e68 100644
--- a/tests/bitvec/bitvec_test.c
+++ b/tests/bitvec/bitvec_test.c
@@ -222,6 +222,45 @@ static void test_tailroom()
}
}
+static void test_bitvec_read_field(void)
+{
+ uint8_t data[8] = { 0xde, 0xad, 0xbe, 0xef, 0xfe, 0xeb, 0xda, 0xed };
+ struct bitvec bv = {
+ .data_len = sizeof(data),
+ .data = data,
+ .cur_bit = 0,
+ };
+
+ unsigned int readIndex;
+ uint64_t field;
+
+#define _bitvec_read_field(idx, len) \
+ readIndex = idx; \
+ field = bitvec_read_field(&bv, &readIndex, len); \
+ printf("bitvec_read_field(idx=%u, len=%u) => %" PRIx64 "\n", idx, len, field);
+
+ _bitvec_read_field(0, 64);
+ _bitvec_read_field(0, 32);
+ _bitvec_read_field(0, 16);
+ _bitvec_read_field(0, 8);
+ _bitvec_read_field(0, 0);
+
+ _bitvec_read_field(8, 8);
+ _bitvec_read_field(8, 4);
+ _bitvec_read_field(8, 0);
+
+ _bitvec_read_field(10, 9);
+ _bitvec_read_field(10, 7);
+ _bitvec_read_field(10, 5);
+ _bitvec_read_field(10, 3);
+ _bitvec_read_field(10, 1);
+
+ /* Out of bounds (see OS#4388) */
+ _bitvec_read_field(8 * 8 * 8, 16); /* index too far */
+ _bitvec_read_field(0, 8 * 8 + 1); /* too many bits */
+ _bitvec_read_field(8 * 8, 16); /* 16 bits past */
+}
+
int main(int argc, char **argv)
{
struct bitvec bv;
@@ -331,6 +370,9 @@ int main(int argc, char **argv)
test_used_bytes();
test_tailroom();
+ printf("\ntest bitvec_read_field():\n");
+ test_bitvec_read_field();
+
printf("\nbitvec ok.\n");
return 0;
}