aboutsummaryrefslogtreecommitdiffstats
path: root/tests/bitvec
diff options
context:
space:
mode:
authorKirill Zakharenko <earwin@gmail.com>2020-05-01 18:21:58 +0300
committerKirill Zakharenko <earwin@gmail.com>2020-05-01 18:21:58 +0300
commit357ab3abba5a1be0a66f8ae6c6a0460ddb4b7c06 (patch)
treead0979169f0d7911bb503466036f36f1489bc714 /tests/bitvec
parent459224a99391fa9adf22a45cb6a63d56703aa3a8 (diff)
parentd87d6f177837c848381e362d3880509ba275cac8 (diff)
Merge master into fairwaves/production
Diffstat (limited to 'tests/bitvec')
-rw-r--r--tests/bitvec/bitvec_test.c42
-rw-r--r--tests/bitvec/bitvec_test.ok28
2 files changed, 65 insertions, 5 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;
}
diff --git a/tests/bitvec/bitvec_test.ok b/tests/bitvec/bitvec_test.ok
index a48912d5..b118502e 100644
--- a/tests/bitvec/bitvec_test.ok
+++ b/tests/bitvec/bitvec_test.ok
@@ -119,19 +119,19 @@ out: ff 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 51 52 53 54 55 56 57 58
bitvec: 00 00 00 00 fc 82 84 86 88 8a 8c 8e 90 92 94 96 98 9a 9c 9e a0 a2 a4 a6 a8 aa ac ae b0 b2 b4 fc 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
out: ff 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 51 52 53 54 55 56 57 58 59 5a ff
=== end test_byte_ops ===
-1 -=> cur_bit=184
+0 -=> cur_bit=184
48282407a6a074227201000b2b2b2b2b2b2b2b2b2b2b2b0000000000000000000000000000000000000000000000000000000000000000000000000000000000
48282407a6a074227201000b2b2b2b2b2b2b2b2b2b2b2b
-1 -=> cur_bit=184
+0 -=> cur_bit=184
47240c00400000000000000079eb2ac9402b2b2b2b2b2b0000000000000000000000000000000000000000000000000000000000000000000000000000000000
47240c00400000000000000079eb2ac9402b2b2b2b2b2b
-1 -=> cur_bit=184
+0 -=> cur_bit=184
47283c367513ba333004242b2b2b2b2b2b2b2b2b2b2b2b0000000000000000000000000000000000000000000000000000000000000000000000000000000000
47283c367513ba333004242b2b2b2b2b2b2b2b2b2b2b2b
-1 -=> cur_bit=184
+0 -=> cur_bit=184
deadface000000000000000000000000000000beeffeed0000000000000000000000000000000000000000000000000000000000000000000000000000000000
DEADFACE000000000000000000000000000000BEEFFEED
-0 -=> cur_bit=512
+1 -=> cur_bit=0
fffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
FFFFFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
arrr...
@@ -170,4 +170,22 @@ bitvec_runlength....
bitvec bytes used.
+test bitvec_read_field():
+bitvec_read_field(idx=0, len=64) => deadbeeffeebdaed
+bitvec_read_field(idx=0, len=32) => deadbeef
+bitvec_read_field(idx=0, len=16) => dead
+bitvec_read_field(idx=0, len=8) => de
+bitvec_read_field(idx=0, len=0) => 0
+bitvec_read_field(idx=8, len=8) => ad
+bitvec_read_field(idx=8, len=4) => a
+bitvec_read_field(idx=8, len=0) => 0
+bitvec_read_field(idx=10, len=9) => 16d
+bitvec_read_field(idx=10, len=7) => 5b
+bitvec_read_field(idx=10, len=5) => 16
+bitvec_read_field(idx=10, len=3) => 5
+bitvec_read_field(idx=10, len=1) => 1
+bitvec_read_field(idx=512, len=16) => ffffffffffffffea
+bitvec_read_field(idx=0, len=65) => ffffffffffffffea
+bitvec_read_field(idx=64, len=16) => ffffffffffffffea
+
bitvec ok.