/******************************************************************** * COPYRIGHT: * Copyright (c) 1998-2001, International Business Machines Corporation and * others. All Rights Reserved. ********************************************************************/ /* * File test.c * * Modification History: * * Date Name Description * 07/28/2000 Madhu Creation ******************************************************************************* */ #include "unicode/utypes.h" #include "ucmp8.h" #include "ucmpe32.h" #include "cmemory.h" #include "cintltst.h" #include "ucol_imp.h" static void TestUCMP8API(void); static void TestUCMPE32API(void); void addCompactArrayTest(TestNode** root); void addCompactArrayTest(TestNode** root) { addTest(root, &TestUCMP8API, "ucmptst/TestUCMP8API"); addTest(root, &TestUCMPE32API, "ucmptst/TestUCMPE32API"); } static void TestUCMP8API(){ CompactByteArray* ucmp8Array=NULL; CompactByteArray ucmp8Array1; CompactByteArray ucmp8Array2; int32_t i=0; uint8_t *values; uint8_t *valuesSet; uint8_t const TEST_DEFAULT_VALUE = (uint8_t)0xFF; /*ucmp8_open*/ log_verbose("Testing ucmp8_open()\n"); ucmp8Array=ucmp8_open(TEST_DEFAULT_VALUE); if(ucmp8Array == NULL){ log_err("ERROR: ucmp8_open() failed\n"); } if( (int32_t)ucmp8_getCount(ucmp8Array) != (int32_t)ucmp8_getkUnicodeCount()) { log_err("ERROR: ucmp8_open failed\n"); } /*ucmp8_init*/ log_verbose("Testing ucmp8_init()\n"); ucmp8_init(&ucmp8Array1, TEST_DEFAULT_VALUE); if( (int32_t)ucmp8_getCount(&ucmp8Array1) != (int32_t)ucmp8_getkUnicodeCount() || ucmp8_getIndex(&ucmp8Array1) == NULL || ucmp8_getArray(&ucmp8Array1) == NULL || ucmp8Array1.fBogus != FALSE){ log_err("Error: ucmp8_init() failed\n"); } /*ucmp8_initBogus*/ log_verbose("Testing ucmp8_initBogus()\n"); ucmp8_initBogus(&ucmp8Array2); if((int32_t)ucmp8_getCount(&ucmp8Array2) != ucmp8Array2.fCount || ucmp8_getIndex(&ucmp8Array2) != NULL || ucmp8_getArray(&ucmp8Array2) != NULL || ucmp8Array2.fBogus != TRUE){ log_err("Error: ucmp8_initBogus() failed\n"); } /*ucmp8_getkBlockCount*/ if(ucmp8_getkBlockCount() != 128 ){ log_err("Error in ucmp8_getkBlockCount()\n"); } values=(uint8_t*)ucmp8_getArray(&ucmp8Array1); if(values[0] !=TEST_DEFAULT_VALUE){ log_err("Error: getArray() or init failed\n"); } /*ucmp8_compact*/ if(ucmp8Array1.fCompact == TRUE){ log_err("Error: ucmp8_open failed Got compact for expanded data\n"); } ucmp8_compact(&ucmp8Array1, 1); if(ucmp8Array1.fCompact != TRUE){ log_err("Error: ucmp8_compact failed\n"); } /*ucmp8_set*/ ucmp8_set(&ucmp8Array1, 0, (uint8_t)0xFE); valuesSet=(uint8_t*)ucmp8_getArray(&ucmp8Array1); if(valuesSet[0] != (uint8_t)0xFE ){ log_err("ERROR: ucmp8_set() failed\n"); } if(ucmp8Array1.fCompact == TRUE){ log_err("Error: ucmp8_set didn't expand the compact data \n"); } /*ucmp8_set*/ ucmp8_compact(&ucmp8Array1, 1); ucmp8_set(&ucmp8Array1, 0, (uint8_t)0xFD); valuesSet=(uint8_t*)ucmp8_getArray(&ucmp8Array1); if(valuesSet[0] != (uint8_t)0xFD ){ log_err("ERROR: ucmp8_set() failed\n"); } if(ucmp8Array1.fCompact == TRUE){ log_err("Error: ucmp8_set didn't expand the compact data \n"); } /*ucmp8_setRange*/ ucmp8_compact(&ucmp8Array1, 1); ucmp8_setRange(&ucmp8Array1, 0, 10, (uint8_t)0xFD); valuesSet=(uint8_t*)ucmp8_getArray(&ucmp8Array1); for(i =0 ; i< 10; i++ ){ if(valuesSet[0] != (uint8_t)0xFD ){ log_err("ERROR: ucmp8_set() failed\n"); break; } } ucmp8_close(ucmp8Array); ucmp8_close(&ucmp8Array1); ucmp8_close(&ucmp8Array2); } void addCompactArrayTest(TestNode** root); struct { UChar lead; UChar trail; int32_t value; } testCmpe32array[] = { { 0x0, 0x0020, 0x00000020 }, { 0x0, 0x0040, 0x00000040 }, { 0x0, 0x004B, 0x0000004B }, { 0x0, 0x00AC, 0x000000AC }, { 0x0, 0x0400, 0x00000400 }, { 0x0, 0xa123, 0x0000a123 }, { 0x0, 0xeeee, 0x0000eeee }, { 0xd800, 0xdc00, 0x0001000 }, { 0xd900, 0xdc00, 0x0005000 } }; static void fillup(CompactEIntArray *a) { int32_t i = 0; for(i = 0; ifCompact == TRUE) { result = ucmpe32_get(a, testCmpe32array[i].lead); result = ucmpe32_getSurrogate(a, result, testCmpe32array[i].trail); if(result != ucmpe32_getSurrogateEx(a, testCmpe32array[i].lead, testCmpe32array[i].trail)) { log_err("results for getsurrogate and getsurrogateex do not match in compacted array\n"); } } else { result = ucmpe32_getSurrogateEx(a, testCmpe32array[i].lead, testCmpe32array[i].trail); } if(result != testCmpe32array[i].value) { log_err("Wrong value for %04X %04X, expected %08X, got %08X\n", testCmpe32array[i].lead, testCmpe32array[i].trail, testCmpe32array[i].value, result); } } } } static void TestUCMPE32API(){ CompactEIntArray *ucmpe32Array=NULL, *ucmpe32Clone = NULL; int32_t i=0; /*int32_t *values;*/ int32_t const TEST_DEFAULT_VALUE = 0xFFFF; UErrorCode status = U_ZERO_ERROR; /*ucmpe32_open*/ log_verbose("Testing ucmpe32_open()\n"); ucmpe32Array=ucmpe32_open(UCOL_NOT_FOUND, UCOL_SPECIAL_FLAG | (SURROGATE_TAG<<24), UCOL_SPECIAL_FLAG | (LEAD_SURROGATE_TAG<<24), &status); if(U_FAILURE(status) || ucmpe32Array == NULL){ log_err("ERROR: ucmpe32_open() failed\n"); status = U_ZERO_ERROR; } else { fillup(ucmpe32Array); query(ucmpe32Array); log_verbose("Testing ucmpe32_clone()\n"); ucmpe32Clone=ucmpe32_clone(ucmpe32Array, &status); if(U_FAILURE(status) || ucmpe32Clone == NULL){ log_err("ERROR: ucmpe32_clone() failed\n"); status = U_ZERO_ERROR; } else { query(ucmpe32Clone); ucmpe32_close(ucmpe32Clone); ucmpe32Clone = NULL; } log_verbose("Testing ucmpe32_flattenMem()\n"); { UMemoryStream *MS = uprv_mstrm_openNew(65536); int32_t size = ucmpe32_flattenMem(ucmpe32Array, MS); int32_t len = 0; const uint8_t *buff = NULL; if(size > 0) { log_err("Managed to flatten uncompacted array\n"); } ucmpe32_compact(ucmpe32Array); query(ucmpe32Array); /* try after compacting */ size = ucmpe32_flattenMem(ucmpe32Array, MS); buff = uprv_mstrm_getBuffer(MS, &len); if(size == 0 || len == 0 || buff == NULL) { log_err("Unable to flatten!\n"); } else { log_verbose("Testing ucmpe32_openFromData()\n"); ucmpe32Clone = ucmpe32_openFromData(&buff, &status); if(U_FAILURE(status) || ucmpe32Clone == NULL){ log_err("ERROR: ucmpe32_openFromData() failed\n"); status = U_ZERO_ERROR; } else { query(ucmpe32Clone); ucmpe32_close(ucmpe32Clone); ucmpe32Clone = NULL; } } uprv_mstrm_close(MS); } ucmpe32_close(ucmpe32Array); } }