diff options
Diffstat (limited to 'test/trefstr.c')
-rw-r--r-- | test/trefstr.c | 367 |
1 files changed, 268 insertions, 99 deletions
diff --git a/test/trefstr.c b/test/trefstr.c index 83e2951..89e62db 100644 --- a/test/trefstr.c +++ b/test/trefstr.c @@ -6,7 +6,7 @@ * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * - * distribution tree, or in https://support.hdfgroup.org/ftp/HDF5/releases. * + * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ @@ -58,23 +58,23 @@ test_refstr_init(void) static void test_refstr_create(void) { - H5RS_str_t *rs; /* Ref-counted string created */ - unsigned count; /* Reference count on string */ - herr_t ret; /* Generic return value */ + H5RS_str_t *rs; /* Ref-counted string created */ + unsigned count; /* Reference count on string */ + herr_t ret; /* Generic return value */ /* Output message about test being performed */ MESSAGE(5, ("Testing Creating & Closing Ref-Counted Strings\n")); /* Try creating a ref-counted string */ - rs=H5RS_create("foo"); + rs = H5RS_create("foo"); CHECK_PTR(rs, "H5RS_create"); /* Get the reference count on the string */ - count=H5RS_get_count(rs); + count = H5RS_get_count(rs); VERIFY(count, 1, "H5RS_get_count"); /* Try closing a real ref-counted string */ - ret=H5RS_decr(rs); + ret = H5RS_decr(rs); CHECK(ret, FAIL, "H5RS_decr"); } /* end test_refstr_create() */ @@ -88,39 +88,39 @@ test_refstr_create(void) static void test_refstr_count(void) { - H5RS_str_t *rs; /* Ref-counted string created */ - unsigned count; /* Reference count on string */ - herr_t ret; /* Generic return value */ + H5RS_str_t *rs; /* Ref-counted string created */ + unsigned count; /* Reference count on string */ + herr_t ret; /* Generic return value */ /* Output message about test being performed */ MESSAGE(5, ("Testing Incrementing & Decrementing Ref-Counted Strings\n")); /* Try creating a ref-counted string */ - rs=H5RS_create("foo"); + rs = H5RS_create("foo"); CHECK_PTR(rs, "H5RS_create"); /* Get the reference count on the string */ - count=H5RS_get_count(rs); + count = H5RS_get_count(rs); VERIFY(count, 1, "H5RS_get_count"); /* Increment reference count */ - ret=H5RS_incr(rs); + ret = H5RS_incr(rs); CHECK(ret, FAIL, "H5RS_incr"); /* Get the reference count on the string */ - count=H5RS_get_count(rs); + count = H5RS_get_count(rs); VERIFY(count, 2, "H5RS_get_count"); /* Decrement reference count for string */ - ret=H5RS_decr(rs); + ret = H5RS_decr(rs); CHECK(ret, FAIL, "H5RS_decr"); /* Get the reference count on the string */ - count=H5RS_get_count(rs); + count = H5RS_get_count(rs); VERIFY(count, 1, "H5RS_get_count"); /* Decrement reference count for string */ - ret=H5RS_decr(rs); + ret = H5RS_decr(rs); CHECK(ret, FAIL, "H5RS_decr"); } /* end test_refstr_count() */ @@ -134,42 +134,42 @@ test_refstr_count(void) static void test_refstr_dup(void) { - H5RS_str_t *rs1; /* Ref-counted string created */ - H5RS_str_t *rs2; /* Ref-counted string created */ - unsigned count; /* Reference count on string */ - herr_t ret; /* Generic return value */ + H5RS_str_t *rs1; /* Ref-counted string created */ + H5RS_str_t *rs2; /* Ref-counted string created */ + unsigned count; /* Reference count on string */ + herr_t ret; /* Generic return value */ /* Output message about test being performed */ MESSAGE(5, ("Testing Duplicating Ref-Counted Strings\n")); /* Try creating a ref-counted string */ - rs1=H5RS_create("foo"); + rs1 = H5RS_create("foo"); CHECK_PTR(rs1, "H5RS_create"); /* Get the reference count on the string */ - count=H5RS_get_count(rs1); + count = H5RS_get_count(rs1); VERIFY(count, 1, "H5RS_get_count"); /* Duplicate r-string */ - rs2=H5RS_dup(rs1); + rs2 = H5RS_dup(rs1); CHECK_PTR(rs2, "H5RS_dup"); /* Get the reference count on the strings */ - count=H5RS_get_count(rs1); + count = H5RS_get_count(rs1); VERIFY(count, 2, "H5RS_get_count"); - count=H5RS_get_count(rs2); + count = H5RS_get_count(rs2); VERIFY(count, 2, "H5RS_get_count"); /* Decrement reference count for string */ - ret=H5RS_decr(rs2); + ret = H5RS_decr(rs2); CHECK(ret, FAIL, "H5RS_decr"); /* Get the reference count on the string */ - count=H5RS_get_count(rs1); + count = H5RS_get_count(rs1); VERIFY(count, 1, "H5RS_get_count"); /* Decrement reference count for string */ - ret=H5RS_decr(rs1); + ret = H5RS_decr(rs1); CHECK(ret, FAIL, "H5RS_decr"); } /* end test_refstr_dup() */ @@ -183,42 +183,42 @@ test_refstr_dup(void) static void test_refstr_cmp(void) { - H5RS_str_t *rs1; /* Ref-counted string created */ - H5RS_str_t *rs2; /* Ref-counted string created */ - int cmp; /* Comparison value */ - ssize_t len; /* Length of string */ - herr_t ret; /* Generic return value */ + H5RS_str_t *rs1; /* Ref-counted string created */ + H5RS_str_t *rs2; /* Ref-counted string created */ + int cmp; /* Comparison value */ + size_t len; /* Length of string */ + herr_t ret; /* Generic return value */ /* Output message about test being performed */ MESSAGE(5, ("Testing Comparing Ref-Counted Strings\n")); /* Create first reference counted string */ - rs1=H5RS_create("foo"); + rs1 = H5RS_create("foo"); CHECK_PTR(rs1, "H5RS_create"); /* Create second reference counted string */ - rs2=H5RS_create("foo2"); + rs2 = H5RS_create("foo2"); CHECK_PTR(rs2, "H5RS_create"); /* Compare the strings in various ways */ - cmp=H5RS_cmp(rs1,rs1); + cmp = H5RS_cmp(rs1, rs1); VERIFY(cmp, 0, "H5RS_cmp"); - cmp=H5RS_cmp(rs2,rs2); + cmp = H5RS_cmp(rs2, rs2); VERIFY(cmp, 0, "H5RS_cmp"); - cmp=H5RS_cmp(rs1,rs2); - if(cmp>=0) - TestErrPrintf("%d: string comparison incorrect!\n",__LINE__); + cmp = H5RS_cmp(rs1, rs2); + if (cmp >= 0) + TestErrPrintf("%d: string comparison incorrect!\n", __LINE__); /* Check the lengths of the strings also */ - len=H5RS_len(rs1); + len = H5RS_len(rs1); VERIFY(len, 3, "H5RS_len"); - len=H5RS_len(rs2); + len = H5RS_len(rs2); VERIFY(len, 4, "H5RS_len"); /* Decrement reference count for strings */ - ret=H5RS_decr(rs2); + ret = H5RS_decr(rs2); CHECK(ret, FAIL, "H5RS_decr"); - ret=H5RS_decr(rs1); + ret = H5RS_decr(rs1); CHECK(ret, FAIL, "H5RS_decr"); } /* end test_refstr_cmp() */ @@ -232,108 +232,275 @@ test_refstr_cmp(void) static void test_refstr_wrap(void) { - H5RS_str_t *rs; /* Ref-counted string created */ - const char *s; /* Pointer to raw string in ref-counted string */ - char buf[16]; /* Buffer to wrap */ - int cmp; /* Comparison value */ - herr_t ret; /* Generic return value */ + H5RS_str_t *rs; /* Ref-counted string created */ + const char *s; /* Pointer to raw string in ref-counted string */ + char buf[16]; /* Buffer to wrap */ + int cmp; /* Comparison value */ + herr_t ret; /* Generic return value */ /* Output message about test being performed */ MESSAGE(5, ("Testing Wrapping Ref-Counted Strings\n")); /* Initialize buffer */ - HDstrcpy(buf,"foo"); + HDstrcpy(buf, "foo"); /* Wrap ref-counted string around existing buffer */ - rs=H5RS_wrap(buf); + rs = H5RS_wrap(buf); CHECK_PTR(rs, "H5RS_wrap"); /* Get pointer to raw string in ref-counted string */ - s=H5RS_get_str(rs); + s = H5RS_get_str(rs); CHECK_PTR(s, "H5RS_get_str"); CHECK_PTR_EQ(s, buf, "wrapping"); - cmp=HDstrcmp(s,buf); + cmp = HDstrcmp(s, buf); VERIFY(cmp, 0, "HDstrcmp"); /* Increment reference count (should duplicate string) */ - ret=H5RS_incr(rs); + ret = H5RS_incr(rs); CHECK(ret, FAIL, "H5RS_incr"); /* Change the buffer initially wrapped */ - buf[0]='F'; + buf[0] = 'F'; /* Get pointer to raw string in ref-counted string */ - s=H5RS_get_str(rs); + s = H5RS_get_str(rs); CHECK_PTR(s, "H5RS_get_str"); - CHECK(s, buf, "wrapping"); - cmp=HDstrcmp(s,buf); - if(cmp<=0) - TestErrPrintf("%d: string comparison incorrect!\n",__LINE__); + if (s == buf) + TestErrPrintf("%d: Should not have gotten the same pointer from reference-counted string!\n", + __LINE__); + cmp = HDstrcmp(s, buf); + if (cmp <= 0) + TestErrPrintf("%d: string comparison incorrect!\n", __LINE__); /* Decrement reference count for string */ - ret=H5RS_decr(rs); + ret = H5RS_decr(rs); CHECK(ret, FAIL, "H5RS_decr"); - ret=H5RS_decr(rs); + ret = H5RS_decr(rs); CHECK(ret, FAIL, "H5RS_decr"); } /* end test_refstr_wrap() */ /**************************************************************** ** -** test_refstr_own(): Test basic H5RS (ref-counted strings) code. -** Tests transferring ownership of dynamically allocated strings -** to ref-counted strings. +** test_refstr_asprintf_cat(): Test basic H5RS (ref-counted strings) code. +** Tests appending printf-formatted output to ref-counted strings. ** ****************************************************************/ static void -test_refstr_own(void) +test_refstr_asprintf_cat(void) { - H5RS_str_t *rs; /* Ref-counted string created */ - char *s; /* Pointer to string to transfer */ - const char *t; /* Temporary pointers to string */ - int cmp; /* Comparison value */ - herr_t ret; /* Generic return value */ + H5RS_str_t *rs; /* Ref-counted string created */ + const char *s; /* Pointer to raw string in ref-counted string */ + char buf[256]; /* Buffer to compare against */ + int cmp; /* Comparison value */ + herr_t ret; /* Generic return value */ /* Output message about test being performed */ - MESSAGE(5, ("Testing Transferring Ref-Counted Strings\n")); + MESSAGE(5, ("Testing Printf-formatted Output to Ref-Counted Strings\n")); - /* Initialize buffer */ - s = (char *)H5FL_BLK_MALLOC(str_buf,HDstrlen("foo") + 1); - CHECK_PTR(s, "H5FL_BLK_MALLOC"); - HDstrcpy(s, "foo"); + /* Wrap ref-counted string around existing buffer */ + rs = H5RS_create(NULL); + CHECK_PTR(rs, "H5RS_create"); - /* Transfer ownership of dynamically allocated string to ref-counted string */ - rs=H5RS_own(s); - CHECK_PTR(rs, "H5RS_own"); + /* Print initial output to ref-counted string */ + ret = H5RS_asprintf_cat(rs, "%d-%s", (int)10, "foo"); + CHECK(ret, FAIL, "H5RS_asprintf_cat"); /* Get pointer to raw string in ref-counted string */ - t=H5RS_get_str(rs); - CHECK_PTR(t, "H5RS_get_str"); - CHECK_PTR_EQ(t, s, "transferring"); - cmp=HDstrcmp(s,t); + s = H5RS_get_str(rs); + CHECK_PTR(s, "H5RS_get_str"); + HDsnprintf(buf, sizeof(buf), "%d-%s", (int)10, "foo"); + cmp = HDstrcmp(s, buf); VERIFY(cmp, 0, "HDstrcmp"); - /* Increment reference count (should NOT duplicate string) */ - ret=H5RS_incr(rs); - CHECK(ret, FAIL, "H5RS_incr"); + /* Append more output to ref-counted string */ + ret = H5RS_asprintf_cat(rs, "-%f", (double)20.0); + CHECK(ret, FAIL, "H5RS_asprintf_cat"); - /* Change the buffer initially wrapped */ - *s='F'; + /* Get pointer to raw string in ref-counted string */ + s = H5RS_get_str(rs); + CHECK_PTR(s, "H5RS_get_str"); + HDsnprintf(buf, sizeof(buf), "%d-%s-%f", (int)10, "foo", (double)20.0); + cmp = HDstrcmp(s, buf); + VERIFY(cmp, 0, "HDstrcmp"); + + /* Decrement reference count for string */ + ret = H5RS_decr(rs); + CHECK(ret, FAIL, "H5RS_decr"); + +} /* end test_refstr_asprintf_cat() */ + +/**************************************************************** +** +** test_refstr_acat(): Test basic H5RS (ref-counted strings) code. +** Tests appending strings to ref-counted strings. +** +****************************************************************/ +static void +test_refstr_acat(void) +{ + H5RS_str_t *rs; /* Ref-counted string created */ + const char *s; /* Pointer to raw string in ref-counted string */ + char buf[256]; /* Buffer to compare against */ + char * large_str, *large_str2; /* Large strings to append */ + int cmp; /* Comparison value */ + herr_t ret; /* Generic return value */ + + /* Output message about test being performed */ + MESSAGE(5, ("Testing Appending Strings to Ref-Counted Strings\n")); + + /* Wrap ref-counted string around existing buffer */ + rs = H5RS_create(NULL); + CHECK_PTR(rs, "H5RS_create"); + + /* Append first string to ref-counted string */ + ret = H5RS_acat(rs, "foo"); + CHECK(ret, FAIL, "H5RS_acat"); + + /* Get pointer to raw string in ref-counted string */ + s = H5RS_get_str(rs); + CHECK_PTR(s, "H5RS_get_str"); + HDsnprintf(buf, sizeof(buf), "%s", "foo"); + cmp = HDstrcmp(s, buf); + VERIFY(cmp, 0, "HDstrcmp"); + + /* Append another string to ref-counted string */ + ret = H5RS_acat(rs, "bar"); + CHECK(ret, FAIL, "H5RS_acat"); + + /* Get pointer to raw string in ref-counted string */ + s = H5RS_get_str(rs); + CHECK_PTR(s, "H5RS_get_str"); + HDsnprintf(buf, sizeof(buf), "%s", "foobar"); + cmp = HDstrcmp(s, buf); + VERIFY(cmp, 0, "HDstrcmp"); + + /* Append a large string to ref-counted string */ + large_str = HDmalloc(1024); + CHECK_PTR(large_str, "HDmalloc"); + HDmemset(large_str, 'a', 1024); + large_str[1023] = '\0'; + ret = H5RS_acat(rs, large_str); + CHECK(ret, FAIL, "H5RS_acat"); /* Get pointer to raw string in ref-counted string */ - t=H5RS_get_str(rs); - CHECK_PTR(t, "H5RS_get_str"); - CHECK_PTR_EQ(t, s, "transferring"); - cmp=HDstrcmp(t,s); + s = H5RS_get_str(rs); + CHECK_PTR(s, "H5RS_get_str"); + HDsnprintf(buf, sizeof(buf), "%s", "foobar"); + large_str2 = HDmalloc(1024 + 6); + CHECK_PTR(large_str2, "HDmalloc"); + HDstrcpy(large_str2, "foobar"); + HDmemset(&large_str2[6], 'a', 1024); + large_str2[1029] = '\0'; + cmp = HDstrcmp(s, large_str2); VERIFY(cmp, 0, "HDstrcmp"); /* Decrement reference count for string */ - ret=H5RS_decr(rs); + ret = H5RS_decr(rs); CHECK(ret, FAIL, "H5RS_decr"); - ret=H5RS_decr(rs); + + /* Free large strings */ + HDfree(large_str); + HDfree(large_str2); +} /* end test_refstr_acat() */ + +/**************************************************************** +** +** test_refstr_ancat(): Test basic H5RS (ref-counted strings) code. +** Tests appending length-limited strings to ref-counted strings. +** +****************************************************************/ +static void +test_refstr_ancat(void) +{ + H5RS_str_t *rs; /* Ref-counted string created */ + const char *s; /* Pointer to raw string in ref-counted string */ + char buf[256]; /* Buffer to compare against */ + int cmp; /* Comparison value */ + herr_t ret; /* Generic return value */ + + /* Output message about test being performed */ + MESSAGE(5, ("Testing Appending Strings to Ref-Counted Strings\n")); + + /* Wrap ref-counted string around existing buffer */ + rs = H5RS_create(NULL); + CHECK_PTR(rs, "H5RS_create"); + + /* Append first string to ref-counted string */ + ret = H5RS_ancat(rs, "foo", 2); + CHECK(ret, FAIL, "H5RS_ancat"); + + /* Get pointer to raw string in ref-counted string */ + s = H5RS_get_str(rs); + CHECK_PTR(s, "H5RS_get_str"); + HDstrcpy(buf, "fo"); + cmp = HDstrcmp(s, buf); + VERIFY(cmp, 0, "HDstrcmp"); + + /* Append another string to ref-counted string */ + ret = H5RS_ancat(rs, "bar", 2); + CHECK(ret, FAIL, "H5RS_ancat"); + + /* Get pointer to raw string in ref-counted string */ + s = H5RS_get_str(rs); + CHECK_PTR(s, "H5RS_get_str"); + HDstrcpy(buf, "foba"); + cmp = HDstrcmp(s, buf); + VERIFY(cmp, 0, "HDstrcmp"); + + /* Decrement reference count for string */ + ret = H5RS_decr(rs); CHECK(ret, FAIL, "H5RS_decr"); +} /* end test_refstr_ancat() */ -} /* end test_refstr_own() */ +/**************************************************************** +** +** test_refstr_aputc(): Test basic H5RS (ref-counted strings) code. +** Tests appending characters to ref-counted strings. +** +****************************************************************/ +static void +test_refstr_aputc(void) +{ + H5RS_str_t *rs; /* Ref-counted string created */ + const char *s; /* Pointer to raw string in ref-counted string */ + char buf[256]; /* Buffer to compare against */ + int cmp; /* Comparison value */ + herr_t ret; /* Generic return value */ + + /* Output message about test being performed */ + MESSAGE(5, ("Testing Appending Strings to Ref-Counted Strings\n")); + + /* Wrap ref-counted string around existing buffer */ + rs = H5RS_create(NULL); + CHECK_PTR(rs, "H5RS_create"); + + /* Append first character to ref-counted string */ + ret = H5RS_aputc(rs, 'f'); + CHECK(ret, FAIL, "H5RS_ancat"); + + /* Get pointer to raw string in ref-counted string */ + s = H5RS_get_str(rs); + CHECK_PTR(s, "H5RS_get_str"); + HDstrcpy(buf, "f"); + cmp = HDstrcmp(s, buf); + VERIFY(cmp, 0, "HDstrcmp"); + + /* Append another character to ref-counted string */ + ret = H5RS_aputc(rs, 'o'); + CHECK(ret, FAIL, "H5RS_ancat"); + + /* Get pointer to raw string in ref-counted string */ + s = H5RS_get_str(rs); + CHECK_PTR(s, "H5RS_get_str"); + HDstrcpy(buf, "fo"); + cmp = HDstrcmp(s, buf); + VERIFY(cmp, 0, "HDstrcmp"); + + /* Decrement reference count for string */ + ret = H5RS_decr(rs); + CHECK(ret, FAIL, "H5RS_decr"); +} /* end test_refstr_aputc() */ /**************************************************************** ** @@ -366,9 +533,11 @@ test_refstr(void) test_refstr_dup(); /* Test ref-counted string duplication */ test_refstr_cmp(); /* Test ref-counted string comparison */ test_refstr_wrap(); /* Test ref-counted string wrapping */ - test_refstr_own(); /* Test ref-counted string ownership transfer */ + test_refstr_asprintf_cat(); /* Test ref-counted string printf-formatted output */ + test_refstr_acat(); /* Test ref-counted string appends */ + test_refstr_ancat(); /* Test ref-counted length-limited string appends */ + test_refstr_aputc(); /* Test ref-counted character appends */ /* Finalize ref-counted strings testing data */ test_refstr_finalize(); -} /* end test_refstr() */ - +} /* end test_refstr() */ |