summaryrefslogtreecommitdiffstats
path: root/test/dtypes.c
diff options
context:
space:
mode:
authorRaymond Lu <songyulu@hdfgroup.org>2011-11-10 20:08:39 (GMT)
committerRaymond Lu <songyulu@hdfgroup.org>2011-11-10 20:08:39 (GMT)
commit6e0f6e4ebc5aefc9ccce51a1bf2de37d1ab98dc0 (patch)
treec90fef8de757da386b25914dac6a92cd33816590 /test/dtypes.c
parent68da0f773642748d996b498e28b0d39dc3b08710 (diff)
downloadhdf5-6e0f6e4ebc5aefc9ccce51a1bf2de37d1ab98dc0.zip
hdf5-6e0f6e4ebc5aefc9ccce51a1bf2de37d1ab98dc0.tar.gz
hdf5-6e0f6e4ebc5aefc9ccce51a1bf2de37d1ab98dc0.tar.bz2
[svn-r21736] Issue 7582 - The library allowed the conversion of strings between ASCII and UTF8. I added more test cases to the previous commit. Now it has conversion from UTF8 to ASCII, ASCII to UTF8, VL and fixed length, and H5Tconvert.
Tested on jam, koala, linew.
Diffstat (limited to 'test/dtypes.c')
-rw-r--r--test/dtypes.c129
1 files changed, 107 insertions, 22 deletions
diff --git a/test/dtypes.c b/test/dtypes.c
index 648650f..23a7bac 100644
--- a/test/dtypes.c
+++ b/test/dtypes.c
@@ -113,6 +113,8 @@ typedef enum dtype_t {
/* Constant for testing conversion of UTF-8 characters */
#define UTF8_DATASET "utf8"
#define UTF8_DATASET2 "2nd_utf8"
+#define ASCII_DATASET "ascii"
+#define ASCII_DATASET2 "2nd_ascii"
/* Count opaque conversions */
static int num_opaque_conversions_g = 0;
@@ -7026,23 +7028,40 @@ error:
} /* end test_deprec() */
#endif /* H5_NO_DEPRECATED_SYMBOLS */
-int test_utf_conv()
+
+/*-------------------------------------------------------------------------
+ * Function: test_utf_ascii_conv
+ *
+ * Purpose: Make sure the library doesn't conversion strings between
+ * ASCII and UTF8.
+ *
+ * Return: Success: 0
+ * Failure: number of errors
+ *
+ * Programmer: Raymond Lu
+ * 10 November 2011
+ *-------------------------------------------------------------------------
+ */
+int test_utf_ascii_conv(void)
{
hid_t fid;
hid_t did;
hid_t utf8_vtid, ascii_vtid;
hid_t utf8_tid, ascii_tid;
hid_t sid;
- const char *utf8 = "foo!";
- char *ascii = NULL;
- char ascii2[4];
+ const char *utf8_w = "foo!";
+ char *ascii_r = NULL;
+ const char *ascii_w = "bar!";
+ char *utf8_r = NULL;
+
+ char ascii2[4], utf8_2[4];
herr_t status;
TESTING("string conversion between ASCII and UTF");
- /***********************************
- * Test VL string conversion
- ***********************************/
+ /************************************************
+ * Test VL string conversion from UTF8 to ASCII
+ ************************************************/
/* Create a variable-length string */
if((utf8_vtid = H5Tcopy(H5T_C_S1)) < 0) FAIL_STACK_ERROR
@@ -7059,37 +7078,70 @@ int test_utf_conv()
/* Set the character set for the string to ASCII (should already be so) */
if((status = H5Tset_cset(ascii_vtid, H5T_CSET_ASCII) < 0)) FAIL_STACK_ERROR
+ /* Test conversion in memory */
+ H5E_BEGIN_TRY {
+ status = H5Tconvert(utf8_vtid, ascii_vtid, 1, (void *)utf8_w, NULL, H5P_DEFAULT);
+ } H5E_END_TRY
+ if(status >= 0)
+ FAIL_STACK_ERROR
+
/* Create a file */
if((fid = H5Fcreate(FILENAME[10], H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0) FAIL_STACK_ERROR
/* Create a scalar dataspace for the dataset */
if((sid = H5Screate(H5S_SCALAR)) < 0) FAIL_STACK_ERROR
- /* Create a dataset */
+ /* Create a dataset of UTF8 string type */
if((did = H5Dcreate2(fid, UTF8_DATASET, utf8_vtid, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) FAIL_STACK_ERROR
/* Write the UTF8 string, as UTF8 */
- if((status = H5Dwrite(did, utf8_vtid, H5S_ALL, H5S_ALL, H5P_DEFAULT, &utf8)) < 0) FAIL_STACK_ERROR
+ if((status = H5Dwrite(did, utf8_vtid, H5S_ALL, H5S_ALL, H5P_DEFAULT, &utf8_w)) < 0) FAIL_STACK_ERROR
/* Read the UTF8 string, as ASCII, supposed to fail */
H5E_BEGIN_TRY {
- status = H5Dread(did, ascii_vtid, H5S_ALL, H5S_ALL, H5P_DEFAULT, &ascii);
+ status = H5Dread(did, ascii_vtid, H5S_ALL, H5S_ALL, H5P_DEFAULT, &ascii_r);
} H5E_END_TRY
if(status >= 0)
FAIL_STACK_ERROR
+ /* Close the dataset */
+ if((status = H5Dclose(did)) < 0) FAIL_STACK_ERROR
+
+ /************************************************
+ * Test VL string conversion from ASCII to UTF8
+ ************************************************/
+ /* Test conversion in memory */
+ H5E_BEGIN_TRY {
+ status = H5Tconvert(ascii_vtid, utf8_vtid, 1, (void *)ascii_w, NULL, H5P_DEFAULT);
+ } H5E_END_TRY
+ if(status >= 0)
+ FAIL_STACK_ERROR
+
+ /* Create a dataset of ASCII string type */
+ if((did = H5Dcreate2(fid, ASCII_DATASET, ascii_vtid, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) FAIL_STACK_ERROR
+
+ /* Write the ASCII string, as ASCII */
+ if((status = H5Dwrite(did, ascii_vtid, H5S_ALL, H5S_ALL, H5P_DEFAULT, &ascii_w)) < 0) FAIL_STACK_ERROR
+
+ /* Read the ASCII string, as UTF8, supposed to fail */
+ H5E_BEGIN_TRY {
+ status = H5Dread(did, utf8_vtid, H5S_ALL, H5S_ALL, H5P_DEFAULT, &utf8_r);
+ } H5E_END_TRY
+ if(status >= 0)
+ FAIL_STACK_ERROR
+
+ /* Close the dataset */
+ if((status = H5Dclose(did)) < 0) FAIL_STACK_ERROR
+
/* Close the UTF8 VL-string datatype */
if((status = H5Tclose(utf8_vtid)) < 0) FAIL_STACK_ERROR
/* Close the ASCII VL-string datatype */
if((status = H5Tclose(ascii_vtid)) < 0) FAIL_STACK_ERROR
- /* Close the dataset */
- if((status = H5Dclose(did)) < 0) FAIL_STACK_ERROR
-
- /***************************************
- * Test fixed-length string conversion
- ***************************************/
+ /**********************************************************
+ * Test fixed-length string conversion from UTF8 to ASCII
+ **********************************************************/
/* Create a fixed-length UTF8 string */
if((utf8_tid = H5Tcopy(H5T_C_S1)) < 0) FAIL_STACK_ERROR
@@ -7106,28 +7158,61 @@ int test_utf_conv()
/* Set the character set for the string to ASCII (should already be so) */
if((status = H5Tset_cset(ascii_tid, H5T_CSET_ASCII) < 0)) FAIL_STACK_ERROR
+ /* Test conversion in memory */
+ H5E_BEGIN_TRY {
+ status = H5Tconvert(utf8_tid, ascii_tid, 1, utf8_2, NULL, H5P_DEFAULT);
+ } H5E_END_TRY
+ if(status >= 0)
+ FAIL_STACK_ERROR
+
/* Create a dataset */
if((did = H5Dcreate2(fid, UTF8_DATASET2, utf8_tid, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) FAIL_STACK_ERROR
/* Write the UTF8 string, as UTF8 */
- if((status = H5Dwrite(did, utf8_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, &utf8)) < 0) FAIL_STACK_ERROR
+ if((status = H5Dwrite(did, utf8_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, &utf8_w)) < 0) FAIL_STACK_ERROR
/* Read the UTF8 string as ASCII, supposed to fail */
H5E_BEGIN_TRY {
- status = H5Dread(did, ascii_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, ascii2);
+ status = H5Dread(did, ascii_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, &ascii2);
} H5E_END_TRY
if(status >= 0)
FAIL_STACK_ERROR
+ /* Close the dataset */
+ if((status = H5Dclose(did)) < 0) FAIL_STACK_ERROR
+
+ /**********************************************************
+ * Test fixed-length string conversion from ASCII to UTF8
+ **********************************************************/
+ /* Test conversion in memory */
+ H5E_BEGIN_TRY {
+ status = H5Tconvert(ascii_tid, utf8_tid, 1, ascii2, NULL, H5P_DEFAULT);
+ } H5E_END_TRY
+ if(status >= 0)
+ FAIL_STACK_ERROR
+
+ /* Create a dataset */
+ if((did = H5Dcreate2(fid, ASCII_DATASET2, ascii_tid, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) FAIL_STACK_ERROR
+
+ /* Write the ASCII string, as ASCII */
+ if((status = H5Dwrite(did, ascii_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, &ascii_w)) < 0) FAIL_STACK_ERROR
+
+ /* Read the UTF8 string as ASCII, supposed to fail */
+ H5E_BEGIN_TRY {
+ status = H5Dread(did, utf8_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, &utf8_2);
+ } H5E_END_TRY
+ if(status >= 0)
+ FAIL_STACK_ERROR
+
+ /* Close the dataset */
+ if((status = H5Dclose(did)) < 0) FAIL_STACK_ERROR
+
/* Close the UTF8 string datatype */
if((status = H5Tclose(utf8_tid)) < 0) FAIL_STACK_ERROR
/* Close the ASCII string datatype */
if((status = H5Tclose(ascii_tid)) < 0) FAIL_STACK_ERROR
- /* Close the dataset */
- if((status = H5Dclose(did)) < 0) FAIL_STACK_ERROR
-
/* Close the dataspace */
if((status = H5Sclose(sid)) < 0) FAIL_STACK_ERROR
@@ -7233,7 +7318,7 @@ main(void)
nerrors += test_bitfield_funcs();
nerrors += test_opaque();
nerrors += test_set_order();
- nerrors += test_utf_conv();
+ nerrors += test_utf_ascii_conv();
if(nerrors) {
printf("***** %lu FAILURE%s! *****\n",