X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=test%2Ftest_wrbuf.c;h=fef37c8ace97d6d5ce8a8e5b733a9dfd243abf04;hp=007258a46de6f0fd7a237394fa0a51d2f374ac85;hb=2d4ac23fdd43c7908123c8dfac739512c9bc8694;hpb=43a9d38d20c1b1bcd1a03b2445a501d27526bd35 diff --git a/test/test_wrbuf.c b/test/test_wrbuf.c index 007258a..fef37c8 100644 --- a/test/test_wrbuf.c +++ b/test/test_wrbuf.c @@ -1,5 +1,5 @@ /* This file is part of the YAZ toolkit. - * Copyright (C) 1995-2011 Index Data + * Copyright (C) Index Data * See the file LICENSE for details. */ #if HAVE_CONFIG_H @@ -8,10 +8,61 @@ #include #include +#include #include +#include #include +static int sha1_test(WRBUF wr, const char *msg, const char *expect) +{ + wrbuf_rewind(wr); +#if HAVE_GCRYPT_H + wrbuf_sha1_write(wr, msg, strlen(msg), 1); + if (!strcmp(wrbuf_cstr(wr), expect)) + return 1; + return 0; +#else + return 1; +#endif +} + +#if YAZ_POSIX_THREADS +static void *my_handler(void *arg) +{ + WRBUF wr = wrbuf_alloc(); + int i; + for (i = 0; i < 1000; i++) + { + char buf[100]; + sprintf(buf, "Hello world %d", i); +#if HAVE_GCRYPT_H + wrbuf_sha1_write(wr, buf, strlen(buf), 1); +#endif + wrbuf_rewind(wr); + } + wrbuf_destroy(wr); + return 0; +} + +#define NO_THREADS 10 +static void thread_testing(void) +{ + yaz_thread_t tid[NO_THREADS]; + int i; + + for (i = 0; i < NO_THREADS; i++) + { + tid[i] = yaz_thread_create(my_handler, 0); + } + for (i = 0; i < NO_THREADS; i++) + { + void *return_data; + yaz_thread_join(tid + i, &return_data); + } +} +#endif + static void tstwrbuf(void) { int step; @@ -41,7 +92,7 @@ static void tstwrbuf(void) buf[i] = '\0'; wrbuf_puts(wr, buf); } - + cp = wrbuf_buf(wr); len = wrbuf_len(wr); YAZ_CHECK(len == step * (step-1) / 2); @@ -54,6 +105,34 @@ static void tstwrbuf(void) } wrbuf_rewind(wr); } + + wrbuf_rewind(wr); + wrbuf_puts(wr, "1234"); + wrbuf_insert(wr, 0, "abc", 3); + YAZ_CHECK(!strcmp(wrbuf_cstr(wr), "abc1234")); + + wrbuf_rewind(wr); + wrbuf_puts(wr, "1234"); + wrbuf_insert(wr, 1, "abc", 3); + YAZ_CHECK(!strcmp(wrbuf_cstr(wr), "1abc234")); + + wrbuf_rewind(wr); + wrbuf_puts(wr, "1234"); + wrbuf_insert(wr, 4, "abc", 3); + YAZ_CHECK(!strcmp(wrbuf_cstr(wr), "1234abc")); + + wrbuf_rewind(wr); + wrbuf_puts(wr, "1234"); + wrbuf_insert(wr, 5, "abc", 3); + YAZ_CHECK(!strcmp(wrbuf_cstr(wr), "1234")); + + YAZ_CHECK(sha1_test(wr, + "Hello world\n", + "33ab5639bfd8e7b95eb1d8d0b87781d4ffea4d5d")); + +#if YAZ_POSIX_THREADS + thread_testing(); +#endif wrbuf_destroy(wr); }