blob: 7d131e03d74b2f6a83523f415c22bf6d571ba539 [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
Holger Hans Peter Freythera9301a12016-01-30 10:54:43 +010058static void test_unhex(const char *hex)
59{
Holger Hans Peter Freyther57108042016-01-30 16:16:28 +010060 int rc;
Holger Hans Peter Freythera9301a12016-01-30 10:54:43 +010061 struct bitvec b;
62 uint8_t d[64] = {0};
63 b.data = d;
64 b.data_len = sizeof(d);
65 b.cur_bit = 0;
Holger Hans Peter Freyther57108042016-01-30 16:16:28 +010066
67 rc = bitvec_unhex(&b, hex);
68 printf("%d -=> cur_bit=%u\n", rc, b.cur_bit);
69 printf("%s\n", osmo_hexdump_nospc(d, 64));
70 printf("%s\n", hex);
Holger Hans Peter Freythera9301a12016-01-30 10:54:43 +010071}
72
Jacob Erlbeck5f349be2015-12-21 16:04:03 +010073int main(int argc, char **argv)
74{
75 test_byte_ops();
Holger Hans Peter Freythera9301a12016-01-30 10:54:43 +010076 test_unhex("48282407a6a074227201000b2b2b2b2b2b2b2b2b2b2b2b");
77 test_unhex("47240c00400000000000000079eb2ac9402b2b2b2b2b2b");
78 test_unhex("47283c367513ba333004242b2b2b2b2b2b2b2b2b2b2b2b");
79 test_unhex("DEADFACE000000000000000000000000000000BEEFFEED");
80 test_unhex("FFFFFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB");
Jacob Erlbeck5f349be2015-12-21 16:04:03 +010081 return 0;
82}