diff options
author | Jacob Erlbeck <jerlbeck@sysmocom.de> | 2015-12-21 16:04:03 +0100 |
---|---|---|
committer | Holger Hans Peter Freyther <holger@moiji-mobile.com> | 2016-01-15 14:51:32 +0100 |
commit | 5f349be820b32a5bb312566a4a35ef679fe7e478 (patch) | |
tree | 4e5c9a197c485d3481aa8b9ed559582708c7ffb6 /tests/bitvec | |
parent | 8114294bf29ac6e44822c0ae43d4b0819f11b022 (diff) |
bitvec: Add get/set byte sequences
The new functions bitvec_get_bytes and bitvec_set_bytes copy
byte sequences from bitvecs to uint8_t arrays and vice versa.
While the bytes in the bitvecs do not need to be aligned, the uint8_t
arrays always are. In case the bytes in the bitvec are aligned, the
implementation uses memcpy.
Note that the implementation like the other existing functions assume
MSB first encoding.
[hfreyther: Squash the comment fix into this commit as well]
Sponsored-by: On-Waves ehf
Diffstat (limited to 'tests/bitvec')
-rw-r--r-- | tests/bitvec/bitvec_test.c | 62 | ||||
-rw-r--r-- | tests/bitvec/bitvec_test.ok | 2 |
2 files changed, 64 insertions, 0 deletions
diff --git a/tests/bitvec/bitvec_test.c b/tests/bitvec/bitvec_test.c new file mode 100644 index 00000000..624e3346 --- /dev/null +++ b/tests/bitvec/bitvec_test.c @@ -0,0 +1,62 @@ +#include <inttypes.h> +#include <stdio.h> +#include <stdlib.h> +#include <stdint.h> +#include <string.h> + +#include <osmocom/core/utils.h> +#include <osmocom/core/bitvec.h> + +static void test_byte_ops() +{ + struct bitvec bv; + const uint8_t *in = (const uint8_t *)"ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + uint8_t out[26 + 2]; + uint8_t data[64]; + int i; + int rc; + int in_size = strlen((const char *)in); + + printf("=== start %s ===\n", __func__); + + bv.data = data; + bv.data_len = sizeof(data); + + for (i = 0; i < 32; i++) { + /* Write to bitvec */ + memset(data, 0x00, sizeof(data)); + bv.cur_bit = i; + rc = bitvec_set_uint(&bv, 0x7e, 8); + OSMO_ASSERT(rc >= 0); + rc = bitvec_set_bytes(&bv, in, in_size); + OSMO_ASSERT(rc >= 0); + rc = bitvec_set_uint(&bv, 0x7e, 8); + OSMO_ASSERT(rc >= 0); + + fprintf(stderr, "bitvec: %s\n", osmo_hexdump(bv.data, bv.data_len)); + + /* Read from bitvec */ + memset(out, 0xff, sizeof(out)); + bv.cur_bit = i; + rc = bitvec_get_uint(&bv, 8); + OSMO_ASSERT(rc == 0x7e); + rc = bitvec_get_bytes(&bv, out + 1, in_size); + OSMO_ASSERT(rc >= 0); + rc = bitvec_get_uint(&bv, 8); + OSMO_ASSERT(rc == 0x7e); + + fprintf(stderr, "out: %s\n", osmo_hexdump(out, sizeof(out))); + + OSMO_ASSERT(out[0] == 0xff); + OSMO_ASSERT(out[in_size+1] == 0xff); + OSMO_ASSERT(memcmp(in, out + 1, in_size) == 0); + } + + printf("=== end %s ===\n", __func__); +} + +int main(int argc, char **argv) +{ + test_byte_ops(); + return 0; +} diff --git a/tests/bitvec/bitvec_test.ok b/tests/bitvec/bitvec_test.ok new file mode 100644 index 00000000..1f329aff --- /dev/null +++ b/tests/bitvec/bitvec_test.ok @@ -0,0 +1,2 @@ +=== start test_byte_ops === +=== end test_byte_ops === |