1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/* 2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru******************************************************************************* 3ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 4ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Copyright (C) 2003, International Business Machines 5ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Corporation and others. All Rights Reserved. 6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru******************************************************************************* 8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* file name: csorttst.c 9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* encoding: US-ASCII 10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* tab size: 8 (not used) 11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* indentation:4 12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* created on: 2003aug04 14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* created by: Markus W. Scherer 15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* 16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru* Test internal sorting functions. 17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/ 18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/utypes.h" 20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "cmemory.h" 21ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "cintltst.h" 22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "uarrsort.h" 23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 24ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0])) 25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustatic void 27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruSortTest(void) { 28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uint16_t small[]={ 8, 1, 2, 5, 4, 3, 7, 6 }; 29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t medium[]={ 10, 8, 1, 2, 5, 5, -1, 6, 4, 3, 9, 7, 5 }; 30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uint32_t large[]={ 21, 10, 20, 19, 11, 12, 13, 10, 10, 10, 10, 31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 8, 1, 2, 5, 10, 10, 4, 17, 18, 3, 9, 10, 7, 6, 14, 15, 16 }; 32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int32_t i; 34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode errorCode; 35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* sort small array (stable) */ 37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_sortArray(small, LENGTHOF(small), sizeof(small[0]), uprv_uint16Comparator, NULL, TRUE, &errorCode); 39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(U_FAILURE(errorCode)) { 40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("uprv_sortArray(small) failed - %s\n", u_errorName(errorCode)); 41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for(i=1; i<LENGTHOF(small); ++i) { 44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(small[i-1]>small[i]) { 45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("uprv_sortArray(small) mis-sorted [%d]=%u > [%d]=%u\n", i-1, small[i-1], i, small[i]); 46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* for medium, add bits that will not be compared, to test stability */ 51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for(i=0; i<LENGTHOF(medium); ++i) { 52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru medium[i]=(medium[i]<<4)|i; 53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* sort medium array (stable) */ 56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_sortArray(medium, LENGTHOF(medium), sizeof(medium[0]), uprv_int32Comparator, NULL, TRUE, &errorCode); 57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(U_FAILURE(errorCode)) { 58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("uprv_sortArray(medium) failed - %s\n", u_errorName(errorCode)); 59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for(i=1; i<LENGTHOF(medium); ++i) { 62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(medium[i-1]>=medium[i]) { 63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("uprv_sortArray(medium) mis-sorted [%d]=%u > [%d]=%u\n", i-1, medium[i-1], i, medium[i]); 64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru /* sort large array (not stable) */ 69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errorCode=U_ZERO_ERROR; 70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru uprv_sortArray(large, LENGTHOF(large), sizeof(large[0]), uprv_uint32Comparator, NULL, FALSE, &errorCode); 71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(U_FAILURE(errorCode)) { 72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("uprv_sortArray(large) failed - %s\n", u_errorName(errorCode)); 73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for(i=1; i<LENGTHOF(large); ++i) { 76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(large[i-1]>large[i]) { 77ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru log_err("uprv_sortArray(large) mis-sorted [%d]=%u > [%d]=%u\n", i-1, large[i-1], i, large[i]); 78ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 79ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 80ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 81ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 82ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 83ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid 84ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruaddSortTest(TestNode** root); 85ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 86ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid 87ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruaddSortTest(TestNode** root) { 88ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru addTest(root, &SortTest, "tsutil/sorttest/SortTest"); 89ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 90