/* Improve code coverage of UPropsVectors */ static void TestUPropsVector() { UErrorCode errorCode = U_ILLEGAL_ARGUMENT_ERROR; UPropsVectors *pv = upvec_open(100, &errorCode); if (pv != NULL) { log_err("Should have returned NULL if UErrorCode is an error."); return; } errorCode = U_ZERO_ERROR; pv = upvec_open(-1, &errorCode); if (pv != NULL || U_SUCCESS(errorCode)) { log_err("Should have returned NULL if column is less than 0.\n"); return; } errorCode = U_ZERO_ERROR; pv = upvec_open(100, &errorCode); if (pv == NULL || U_FAILURE(errorCode)) { log_err("Unable to open UPropsVectors.\n"); return; } if (upvec_getValue(pv, 0, 1) != 0) { log_err("upvec_getValue should return 0.\n"); } if (upvec_getRow(pv, 0, NULL, NULL) == NULL) { log_err("upvec_getRow should not return NULL.\n"); } if (upvec_getArray(pv, NULL, NULL) != NULL) { log_err("upvec_getArray should return NULL.\n"); } upvec_close(pv); }
U_CFUNC int32_t writeAdditionalData(FILE *f, uint8_t *p, int32_t capacity, int32_t indexes[UPROPS_INDEX_COUNT]) { const uint32_t *pvArray; int32_t pvRows, pvCount; int32_t length; UErrorCode errorCode; pvArray=upvec_getArray(pv, &pvRows, NULL); pvCount=pvRows*UPROPS_VECTOR_WORDS; errorCode=U_ZERO_ERROR; length=utrie_serialize(newTrie, p, capacity, NULL, TRUE, &errorCode); if(U_FAILURE(errorCode)) { fprintf(stderr, "genprops error: unable to serialize trie for additional properties: %s\n", u_errorName(errorCode)); exit(errorCode); } if(p!=NULL) { if(beVerbose) { printf("size in bytes of additional props trie:%5u\n", (int)length); } if(f!=NULL) { UTrie trie={ NULL }; UTrie2 *trie2; utrie_unserialize(&trie, p, length, &errorCode); if(U_FAILURE(errorCode)) { fprintf( stderr, "genprops error: failed to utrie_unserialize(trie for additional properties) - %s\n", u_errorName(errorCode)); exit(errorCode); } /* use UTrie2 */ trie2=utrie2_fromUTrie(&trie, trie.initialValue, &errorCode); if(U_FAILURE(errorCode)) { fprintf( stderr, "genprops error: utrie2_fromUTrie() failed - %s\n", u_errorName(errorCode)); exit(errorCode); } { /* delete lead surrogate code unit values */ UChar lead; trie2=utrie2_cloneAsThawed(trie2, &errorCode); for(lead=0xd800; lead<0xdc00; ++lead) { utrie2_set32ForLeadSurrogateCodeUnit(trie2, lead, trie2->initialValue, &errorCode); } utrie2_freeze(trie2, UTRIE2_16_VALUE_BITS, &errorCode); if(U_FAILURE(errorCode)) { fprintf( stderr, "genbidi error: deleting lead surrogate code unit values failed - %s\n", u_errorName(errorCode)); exit(errorCode); } } usrc_writeUTrie2Arrays(f, "static const uint16_t propsVectorsTrie_index[%ld]={\n", NULL, trie2, "\n};\n\n"); usrc_writeUTrie2Struct(f, "static const UTrie2 propsVectorsTrie={\n", trie2, "propsVectorsTrie_index", NULL, "};\n\n"); utrie2_close(trie2); } p+=length; capacity-=length; /* set indexes */ indexes[UPROPS_ADDITIONAL_VECTORS_INDEX]= indexes[UPROPS_ADDITIONAL_TRIE_INDEX]+length/4; indexes[UPROPS_ADDITIONAL_VECTORS_COLUMNS_INDEX]=UPROPS_VECTOR_WORDS; indexes[UPROPS_RESERVED_INDEX]= indexes[UPROPS_ADDITIONAL_VECTORS_INDEX]+pvCount; indexes[UPROPS_MAX_VALUES_INDEX]= (((int32_t)U_EA_COUNT-1)<<UPROPS_EA_SHIFT)| (((int32_t)UBLOCK_COUNT-1)<<UPROPS_BLOCK_SHIFT)| (((int32_t)USCRIPT_CODE_LIMIT-1)&UPROPS_SCRIPT_MASK); indexes[UPROPS_MAX_VALUES_2_INDEX]= (((int32_t)U_LB_COUNT-1)<<UPROPS_LB_SHIFT)| (((int32_t)U_SB_COUNT-1)<<UPROPS_SB_SHIFT)| (((int32_t)U_WB_COUNT-1)<<UPROPS_WB_SHIFT)| (((int32_t)U_GCB_COUNT-1)<<UPROPS_GCB_SHIFT)| ((int32_t)U_DT_COUNT-1); } if(p!=NULL && (pvCount*4)<=capacity) { if(f!=NULL) { usrc_writeArray(f, "static const uint32_t propsVectors[%ld]={\n", pvArray, 32, pvCount, "};\n\n"); fprintf(f, "static const int32_t countPropsVectors=%ld;\n", (long)pvCount); fprintf(f, "static const int32_t propsVectorsColumns=%ld;\n", (long)indexes[UPROPS_ADDITIONAL_VECTORS_COLUMNS_INDEX]); } else { uprv_memcpy(p, pvArray, pvCount*4); } if(beVerbose) { printf("number of additional props vectors: %5u\n", (int)pvRows); printf("number of 32-bit words per vector: %5u\n", UPROPS_VECTOR_WORDS); } } length+=pvCount*4; return length; }