| Index: source/test/cintltst/hpmufn.c
|
| diff --git a/source/test/cintltst/hpmufn.c b/source/test/cintltst/hpmufn.c
|
| deleted file mode 100644
|
| index edb7a989ce67670252cfe9bc2559df779ededfff..0000000000000000000000000000000000000000
|
| --- a/source/test/cintltst/hpmufn.c
|
| +++ /dev/null
|
| @@ -1,194 +0,0 @@
|
| -/********************************************************************
|
| - * COPYRIGHT:
|
| - * Copyright (c) 2003-2015, International Business Machines Corporation and
|
| - * others. All Rights Reserved.
|
| - ********************************************************************/
|
| -/*
|
| -* File hpmufn.c
|
| -*
|
| -*/
|
| -
|
| -#include "unicode/utypes.h"
|
| -#include "unicode/putil.h"
|
| -#include "unicode/uclean.h"
|
| -#include "unicode/uchar.h"
|
| -#include "unicode/ures.h"
|
| -#include "cintltst.h"
|
| -#include "unicode/utrace.h"
|
| -#include <stdlib.h>
|
| -#include <string.h>
|
| -
|
| -/**
|
| - * This should align the memory properly on any machine.
|
| - */
|
| -typedef union {
|
| - long t1;
|
| - double t2;
|
| - void *t3;
|
| -} ctest_AlignedMemory;
|
| -
|
| -static void TestHeapFunctions(void);
|
| -
|
| -void addHeapMutexTest(TestNode **root);
|
| -
|
| -
|
| -void
|
| -addHeapMutexTest(TestNode** root)
|
| -{
|
| - addTest(root, &TestHeapFunctions, "hpmufn/TestHeapFunctions" );
|
| -}
|
| -
|
| -static int32_t gMutexFailures = 0;
|
| -
|
| -#define TEST_STATUS(status, expected) \
|
| -if (status != expected) { \
|
| -log_err_status(status, "FAIL at %s:%d. Actual status = \"%s\"; Expected status = \"%s\"\n", \
|
| - __FILE__, __LINE__, u_errorName(status), u_errorName(expected)); gMutexFailures++; }
|
| -
|
| -
|
| -#define TEST_ASSERT(expr) \
|
| -if (!(expr)) { \
|
| - log_err("FAILED Assertion \"" #expr "\" at %s:%d.\n", __FILE__, __LINE__); \
|
| - gMutexFailures++; \
|
| -}
|
| -
|
| -
|
| -/* These tests do cleanup and reinitialize ICU in the course of their operation.
|
| - * The ICU data directory must be preserved across these operations.
|
| - * Here is a helper function to assist with that.
|
| - */
|
| -static char *safeGetICUDataDirectory() {
|
| - const char *dataDir = u_getDataDirectory(); /* Returned string vanashes with u_cleanup */
|
| - char *retStr = NULL;
|
| - if (dataDir != NULL) {
|
| - retStr = (char *)malloc(strlen(dataDir)+1);
|
| - strcpy(retStr, dataDir);
|
| - }
|
| - return retStr;
|
| -}
|
| -
|
| -
|
| -
|
| -/*
|
| - * Test Heap Functions.
|
| - * Implemented on top of the standard malloc heap.
|
| - * All blocks increased in size by 8 to 16 bytes, and the poiner returned to ICU is
|
| - * offset up by 8 to 16, which should cause a good heap corruption if one of our "blocks"
|
| - * ends up being freed directly, without coming through us.
|
| - * Allocations are counted, to check that ICU actually does call back to us.
|
| - */
|
| -int gBlockCount = 0;
|
| -const void *gContext;
|
| -
|
| -static void * U_CALLCONV myMemAlloc(const void *context, size_t size) {
|
| - char *retPtr = (char *)malloc(size+sizeof(ctest_AlignedMemory));
|
| - if (retPtr != NULL) {
|
| - retPtr += sizeof(ctest_AlignedMemory);
|
| - }
|
| - gBlockCount ++;
|
| - return retPtr;
|
| -}
|
| -
|
| -static void U_CALLCONV myMemFree(const void *context, void *mem) {
|
| - char *freePtr = (char *)mem;
|
| - if (freePtr != NULL) {
|
| - freePtr -= sizeof(ctest_AlignedMemory);
|
| - }
|
| - free(freePtr);
|
| -}
|
| -
|
| -
|
| -
|
| -static void * U_CALLCONV myMemRealloc(const void *context, void *mem, size_t size) {
|
| - char *p = (char *)mem;
|
| - char *retPtr;
|
| -
|
| - if (p!=NULL) {
|
| - p -= sizeof(ctest_AlignedMemory);
|
| - }
|
| - retPtr = realloc(p, size+sizeof(ctest_AlignedMemory));
|
| - if (retPtr != NULL) {
|
| - p += sizeof(ctest_AlignedMemory);
|
| - }
|
| - return retPtr;
|
| -}
|
| -
|
| -
|
| -static void TestHeapFunctions() {
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - UResourceBundle *rb = NULL;
|
| - char *icuDataDir;
|
| - UVersionInfo unicodeVersion = {0,0,0,0};
|
| -
|
| - icuDataDir = safeGetICUDataDirectory(); /* save icu data dir, so we can put it back
|
| - * after doing u_cleanup(). */
|
| -
|
| -
|
| - /* Verify that ICU can be cleaned up and reinitialized successfully.
|
| - * Failure here usually means that some ICU service didn't clean up successfully,
|
| - * probably because some earlier test accidently left something open. */
|
| - ctest_resetICU();
|
| -
|
| - /* Un-initialize ICU */
|
| - u_cleanup();
|
| -
|
| - /* Can not set memory functions with NULL values */
|
| - status = U_ZERO_ERROR;
|
| - u_setMemoryFunctions(&gContext, NULL, myMemRealloc, myMemFree, &status);
|
| - TEST_STATUS(status, U_ILLEGAL_ARGUMENT_ERROR);
|
| - status = U_ZERO_ERROR;
|
| - u_setMemoryFunctions(&gContext, myMemAlloc, NULL, myMemFree, &status);
|
| - TEST_STATUS(status, U_ILLEGAL_ARGUMENT_ERROR);
|
| - status = U_ZERO_ERROR;
|
| - u_setMemoryFunctions(&gContext, myMemAlloc, myMemRealloc, NULL, &status);
|
| - TEST_STATUS(status, U_ILLEGAL_ARGUMENT_ERROR);
|
| -
|
| - /* u_setMemoryFunctions() should work with null or non-null context pointer */
|
| - status = U_ZERO_ERROR;
|
| - u_setMemoryFunctions(NULL, myMemAlloc, myMemRealloc, myMemFree, &status);
|
| - TEST_STATUS(status, U_ZERO_ERROR);
|
| - u_setMemoryFunctions(&gContext, myMemAlloc, myMemRealloc, myMemFree, &status);
|
| - TEST_STATUS(status, U_ZERO_ERROR);
|
| -
|
| -
|
| - /* After reinitializing ICU, we can not set the memory funcs again. */
|
| - status = U_ZERO_ERROR;
|
| - u_setDataDirectory(icuDataDir);
|
| - u_init(&status);
|
| - TEST_STATUS(status, U_ZERO_ERROR);
|
| -
|
| - /* Doing ICU operations should cause allocations to come through our test heap */
|
| - gBlockCount = 0;
|
| - status = U_ZERO_ERROR;
|
| - rb = ures_open(NULL, "es", &status);
|
| - TEST_STATUS(status, U_ZERO_ERROR);
|
| - if (gBlockCount == 0) {
|
| - log_err("Heap functions are not being called from ICU.\n");
|
| - }
|
| - ures_close(rb);
|
| -
|
| - /* Cleanup should put the heap back to its default implementation. */
|
| - ctest_resetICU();
|
| - u_getUnicodeVersion(unicodeVersion);
|
| - if (unicodeVersion[0] <= 0) {
|
| - log_err("Properties doesn't reinitialize without u_init.\n");
|
| - }
|
| - status = U_ZERO_ERROR;
|
| - u_init(&status);
|
| - TEST_STATUS(status, U_ZERO_ERROR);
|
| -
|
| - /* ICU operations should no longer cause allocations to come through our test heap */
|
| - gBlockCount = 0;
|
| - status = U_ZERO_ERROR;
|
| - rb = ures_open(NULL, "fr", &status);
|
| - TEST_STATUS(status, U_ZERO_ERROR);
|
| - if (gBlockCount != 0) {
|
| - log_err("Heap functions did not reset after u_cleanup.\n");
|
| - }
|
| - ures_close(rb);
|
| - free(icuDataDir);
|
| -
|
| - ctest_resetICU();
|
| -}
|
| -
|
| -
|
|
|