22caefdaba
X-SVN-Rev: 6722
252 lines
8.1 KiB
C
252 lines
8.1 KiB
C
/********************************************************************
|
|
* 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; i<sizeof(testCmpe32array)/sizeof(testCmpe32array[0]); i++) {
|
|
if(testCmpe32array[i].lead == 0) {
|
|
ucmpe32_set32(a, testCmpe32array[i].trail, testCmpe32array[i].value);
|
|
} else {
|
|
ucmpe32_setSurrogate(a, testCmpe32array[i].lead, testCmpe32array[i].trail, testCmpe32array[i].value);
|
|
}
|
|
}
|
|
}
|
|
|
|
static void query(CompactEIntArray *a) {
|
|
int32_t i = 0;
|
|
int32_t result = 0;
|
|
for(i = 0; i<sizeof(testCmpe32array)/sizeof(testCmpe32array[0]); i++) {
|
|
if(testCmpe32array[i].lead == 0) {
|
|
result = ucmpe32_get(a, testCmpe32array[i].trail);
|
|
if(result != testCmpe32array[i].value) {
|
|
log_err("Wrong value for %04X, expected %08X, got %08X\n",
|
|
testCmpe32array[i].trail, testCmpe32array[i].value, result);
|
|
}
|
|
} else {
|
|
if(a->fCompact == 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);
|
|
}
|
|
}
|