aboutsummaryrefslogtreecommitdiffstats
path: root/tests/bitvec/bitvec_test.c
diff options
context:
space:
mode:
authorMax <msuraev@sysmocom.de>2016-03-17 11:51:08 +0100
committerHarald Welte <laforge@gnumonks.org>2016-03-17 14:07:19 +0100
commitd4793212b5026fed01d132fa7397cc0ff2f543fe (patch)
tree658148bbf3d49be9e5387516188ad175ea79333b /tests/bitvec/bitvec_test.c
parentbdccc1b1444a8692697bd8a293cc89c90ef2d832 (diff)
Add function to add bits from array to bitvec
Add function which adds specified number of bits from each element of array to the bit vector prefixing each addition with one and finishing entire sequence with adding 0. This is very common patter for various repetitive data structures described with CSN.1 in 3GPP standards. Corresponding test vectors and doxygen headers are added too.
Diffstat (limited to 'tests/bitvec/bitvec_test.c')
-rw-r--r--tests/bitvec/bitvec_test.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/tests/bitvec/bitvec_test.c b/tests/bitvec/bitvec_test.c
index 76d6773e..a98a91c6 100644
--- a/tests/bitvec/bitvec_test.c
+++ b/tests/bitvec/bitvec_test.c
@@ -132,6 +132,43 @@ static void test_unhex(const char *hex)
printf("%s\n", hex);
}
+static inline void test_array_item(unsigned t, struct bitvec *b, unsigned int n,
+ uint32_t *array, unsigned int p)
+{
+ unsigned int i, x, y;
+ bitvec_zero(b);
+ x = b->cur_bit;
+ i = bitvec_add_array(b, array, n, true, t);
+ y = b->cur_bit;
+ bitvec_add_array(b, array, n, false, t);
+ printf("\nbits: %u, est: %u, real: %u, x: %u, y: %u\n",
+ t, i, b->cur_bit, x, y);
+ for (i = 0; i < p; i++) {
+ printf(OSMO_BIT_SPEC " ", OSMO_BIT_PRINT(b->data[i]));
+ if (0 == (i + 1) % 15)
+ printf("\n");
+ }
+}
+
+static void test_array()
+{
+ struct bitvec b;
+ uint8_t d[4096];
+ b.data = d;
+ b.data_len = sizeof(d);
+
+ unsigned int i, n = 64;
+ uint32_t array[n];
+ for (i = 0; i < n; i++) {
+ array[i] = i * i * i + i;
+ printf("0x%x ", array[i]);
+ }
+
+ test_array_item(3, &b, n, array, n);
+ test_array_item(9, &b, n, array, n * 2);
+ test_array_item(17, &b, n, array, n * 3);
+}
+
int main(int argc, char **argv)
{
struct bitvec bv;
@@ -204,5 +241,11 @@ int main(int argc, char **argv)
test_unhex("DEADFACE000000000000000000000000000000BEEFFEED");
test_unhex("FFFFFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB");
+ printf("arrr...\n");
+
+ test_array();
+
+ printf("\nbitvec ok.\n");
+
return 0;
}