From abe28bfec317bb8260f9e9e20eee87a60265e83e Mon Sep 17 00:00:00 2001 Message-Id: From: Mark Wooding Date: Sat, 1 Dec 2007 16:22:06 +0000 Subject: [PATCH] basen.c tests Organization: Straylight/Edgeware From: Richard Kettlewell --- lib/basen.c | 5 +++-- lib/test.c | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/lib/basen.c b/lib/basen.c index c5644b4..7b66725 100644 --- a/lib/basen.c +++ b/lib/basen.c @@ -72,7 +72,7 @@ static unsigned divide(unsigned long *v, int nwords, unsigned long m) { } /** @brief Convert v to a chosen base - * @param v Pointer to bigendian bignum + * @param v Pointer to bigendian bignum (modified!) * @param nwords Length of bignum * @param buffer Output buffer * @param bufsize Size of output buffer @@ -91,7 +91,8 @@ int basen(unsigned long *v, static const char chars[] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; do { - if(i <= 1) return -1; /* overflow */ + if(i <= 1) + return -1; /* overflow */ buffer[--i] = chars[divide(v, nwords, base)]; } while(!zero(v, nwords)); memmove(buffer, buffer + i, bufsize - i); diff --git a/lib/test.c b/lib/test.c index e55545a..cca9bb3 100644 --- a/lib/test.c +++ b/lib/test.c @@ -55,6 +55,7 @@ #include "kvp.h" #include "sink.h" #include "printf.h" +#include "basen.h" static int tests, errors; static int fail_first; @@ -1122,6 +1123,40 @@ static void test_printf(void) { insist(do_printf("%=") == 0); } +static void test_basen(void) { + unsigned long v[64]; + char buffer[1024]; + + fprintf(stderr, "test_basen\n"); + v[0] = 999; + insist(basen(v, 1, buffer, sizeof buffer, 10) == 0); + check_string(buffer, "999"); + + v[0] = 1+2*7+3*7*7+4*7*7*7; + insist(basen(v, 1, buffer, sizeof buffer, 7) == 0); + check_string(buffer, "4321"); + + v[0] = 0x00010203; + v[1] = 0x04050607; + v[2] = 0x08090A0B; + v[3] = 0x0C0D0E0F; + insist(basen(v, 4, buffer, sizeof buffer, 256) == 0); + check_string(buffer, "123456789abcdef"); + + v[0] = 0x00010203; + v[1] = 0x04050607; + v[2] = 0x08090A0B; + v[3] = 0x0C0D0E0F; + insist(basen(v, 4, buffer, sizeof buffer, 16) == 0); + check_string(buffer, "102030405060708090a0b0c0d0e0f"); + + v[0] = 0x00010203; + v[1] = 0x04050607; + v[2] = 0x08090A0B; + v[3] = 0x0C0D0E0F; + insist(basen(v, 4, buffer, 10, 16) == -1); +} + int main(void) { fail_first = !!getenv("FAIL_FIRST"); insist('\n' == 0x0A); @@ -1137,6 +1172,7 @@ int main(void) { /* asprintf.c */ /* authhash.c */ /* basen.c */ + test_basen(); /* charset.c */ /* client.c */ /* configuration.c */ -- [mdw]