summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2017-10-27 17:19:59 +0200
committerHarald Welte <laforge@gnumonks.org>2017-10-27 17:24:19 +0200
commit504caac641c299d806b27b815029092fa6ca9b7e (patch)
treee3c7f4bf8471c6967c0f796e80b2feb579e450a9
parentfa8983d2dd2041aea528cf966bc9f39d791df3f0 (diff)
Add unit tests for bcd2char and char2bcd conversion
Sounds stupid, but we actually didn't support hex nibbles in one of the two directions of the conversion, so let's make sure we test for this. Change-Id: I8445da54cc4f9b1cd64f286c2b238f4f7c87accb
-rw-r--r--tests/utils/utils_test.c43
-rw-r--r--tests/utils/utils_test.ok18
2 files changed, 61 insertions, 0 deletions
diff --git a/tests/utils/utils_test.c b/tests/utils/utils_test.c
index 4a4b121f..e6d7ae8c 100644
--- a/tests/utils/utils_test.c
+++ b/tests/utils/utils_test.c
@@ -26,6 +26,7 @@
#include <osmocom/core/utils.h>
#include <stdio.h>
+#include <ctype.h>
static void hexdump_test(void)
{
@@ -281,6 +282,47 @@ bool test_is_hexstr()
return pass;
}
+struct bcdcheck {
+ uint8_t bcd;
+ char ch;
+};
+
+static const struct bcdcheck bcdchecks[] = {
+ { 0, '0' },
+ { 1, '1' },
+ { 2, '2' },
+ { 3, '3' },
+ { 4, '4' },
+ { 5, '5' },
+ { 6, '6' },
+ { 7, '7' },
+ { 8, '8' },
+ { 9, '9' },
+ { 0xA, 'A' },
+ { 0xB, 'B' },
+ { 0xC, 'C' },
+ { 0xD, 'D' },
+ { 0xE, 'E' },
+ { 0xF, 'F' },
+};
+
+static void bcd_test(void)
+{
+ int i;
+
+ printf("\nTesting BCD conversion\n");
+ for (i = 0; i < ARRAY_SIZE(bcdchecks); i++) {
+ const struct bcdcheck *check = &bcdchecks[i];
+ char ch = osmo_bcd2char(check->bcd);
+ printf("\tval=0x%x, expected=%c, found=%c\n", check->bcd, check->ch, ch);
+ OSMO_ASSERT(osmo_bcd2char(check->bcd) == check->ch);
+ /* test char -> bcd back-coversion */
+ OSMO_ASSERT(osmo_char2bcd(ch) == check->bcd);
+ /* test for lowercase hex char */
+ OSMO_ASSERT(osmo_char2bcd(tolower(ch)) == check->bcd);
+ }
+}
+
int main(int argc, char **argv)
{
static const struct log_info log_info = {};
@@ -290,5 +332,6 @@ int main(int argc, char **argv)
hexparse_test();
test_idtag_parsing();
test_is_hexstr();
+ bcd_test();
return 0;
}
diff --git a/tests/utils/utils_test.ok b/tests/utils/utils_test.ok
index 45156f7f..33a185bf 100644
--- a/tests/utils/utils_test.ok
+++ b/tests/utils/utils_test.ok
@@ -57,3 +57,21 @@ rc = -1
26: pass str='BeadedBeeAced1EbbedDefacedFacade' min=32 max=32 even=1 expect=valid
27: pass str='C01ffedC1cadaeAc1d1f1edAcac1aB0a' min=32 max=32 even=0 expect=valid
28: pass str='DeafBeddedBabeAcceededFadedDecaff' min=32 max=32 even=0 expect=invalid
+
+Testing BCD conversion
+ val=0x0, expected=0, found=0
+ val=0x1, expected=1, found=1
+ val=0x2, expected=2, found=2
+ val=0x3, expected=3, found=3
+ val=0x4, expected=4, found=4
+ val=0x5, expected=5, found=5
+ val=0x6, expected=6, found=6
+ val=0x7, expected=7, found=7
+ val=0x8, expected=8, found=8
+ val=0x9, expected=9, found=9
+ val=0xa, expected=A, found=A
+ val=0xb, expected=B, found=B
+ val=0xc, expected=C, found=C
+ val=0xd, expected=D, found=D
+ val=0xe, expected=E, found=E
+ val=0xf, expected=F, found=F