blob: 624e3346271b1b3181ea38827d3e83a5f0bd29c3 [file] [log] [blame]
Jacob Erlbeck5f349be2015-12-21 16:04:03 +01001#include <inttypes.h>
2#include <stdio.h>
3#include <stdlib.h>
4#include <stdint.h>
5#include <string.h>
6
7#include <osmocom/core/utils.h>
8#include <osmocom/core/bitvec.h>
9
10static void test_byte_ops()
11{
12 struct bitvec bv;
13 const uint8_t *in = (const uint8_t *)"ABCDEFGHIJKLMNOPQRSTUVWXYZ";
14 uint8_t out[26 + 2];
15 uint8_t data[64];
16 int i;
17 int rc;
18 int in_size = strlen((const char *)in);
19
20 printf("=== start %s ===\n", __func__);
21
22 bv.data = data;
23 bv.data_len = sizeof(data);
24
25 for (i = 0; i < 32; i++) {
26 /* Write to bitvec */
27 memset(data, 0x00, sizeof(data));
28 bv.cur_bit = i;
29 rc = bitvec_set_uint(&bv, 0x7e, 8);
30 OSMO_ASSERT(rc >= 0);
31 rc = bitvec_set_bytes(&bv, in, in_size);
32 OSMO_ASSERT(rc >= 0);
33 rc = bitvec_set_uint(&bv, 0x7e, 8);
34 OSMO_ASSERT(rc >= 0);
35
36 fprintf(stderr, "bitvec: %s\n", osmo_hexdump(bv.data, bv.data_len));
37
38 /* Read from bitvec */
39 memset(out, 0xff, sizeof(out));
40 bv.cur_bit = i;
41 rc = bitvec_get_uint(&bv, 8);
42 OSMO_ASSERT(rc == 0x7e);
43 rc = bitvec_get_bytes(&bv, out + 1, in_size);
44 OSMO_ASSERT(rc >= 0);
45 rc = bitvec_get_uint(&bv, 8);
46 OSMO_ASSERT(rc == 0x7e);
47
48 fprintf(stderr, "out: %s\n", osmo_hexdump(out, sizeof(out)));
49
50 OSMO_ASSERT(out[0] == 0xff);
51 OSMO_ASSERT(out[in_size+1] == 0xff);
52 OSMO_ASSERT(memcmp(in, out + 1, in_size) == 0);
53 }
54
55 printf("=== end %s ===\n", __func__);
56}
57
58int main(int argc, char **argv)
59{
60 test_byte_ops();
61 return 0;
62}