1 /* 2 * TEST SUITE FOR MB/WC FUNCTIONS IN C LIBRARY 3 * 4 * FILE: dat_wcscoll.c 5 * 6 * WCSCOLL: int wcscoll (const wchar_t *ws1, const wchar_t *ws2); 7 */ 8 9 /* 10 * CAUTION: 11 * When LC_COLLATE (or LC_ALL) is set for ja_JP.EUC, 12 * wcscoll() core-dumps for big values such as 0x3041 13 * (0x0041 is okay) in glibc 2.1.2. 14 * 15 * NOTE: 16 * a) When 0 is expected as a return value, set ret_flg=1. 17 * - the return value is compared with an expected value: ret_val. 18 * b) When a positive value is expected as a return value, 19 * set ret_flg=0 and set cmp_flg=+1. 20 * - the return value is not compared with the expected value 21 * (can not be compared); instead, the test program checks 22 * if the return value is positive when cmp_flg=+1. 23 * c) When a negative value is expected as a return value, 24 * ...... 25 * d) When data contains invalid values, set err_val to the expected errno. 26 * Set ret_flg=0 and cmp_flg=0 so that it doesn't compare 27 * the return value with an expected value or doesn't check 28 * the sign of the return value. 29 * 30 * 31 * ------------------------------------------- 32 * CASE err_val ret_flg ret_val cmp_flg 33 * ------------------------------------------- 34 * a) 0 1 0 0 35 * b) 0 0 0 +1 36 * c) 0 0 0 -1 37 * d) EINVAL 0 0 0 38 * ------------------------------------------- 39 */ 40 41 42 TST_WCSCOLL tst_wcscoll_loc [] = { 43 44 { { Twcscoll, TST_LOC_de }, 45 { 46 { /*input.*/ { { 0x00E1,0x00E2,0x00E3,0x0000 }, 47 { 0x00E1,0x00E2,0x00E3,0x0000 }, }, /* #1 */ 48 /*expect*/ { 0,1,0, 0, }, 49 }, 50 { /*input.*/ { { 0x0000,0x00E1,0x00E3,0x0000 }, 51 { 0x0000,0x00E2,0x00E3,0x0000 }, }, /* #2 */ 52 /*expect*/ { 0,1,0, 0, }, 53 }, 54 { /*input.*/ { { 0x00E1,0x00E1,0x00E3,0x0000 }, 55 { 0x0000,0x00E2,0x00E3,0x0000 }, }, /* #3 */ 56 /*expect*/ { 0,0,0, +1, }, 57 }, 58 { /*input.*/ { { 0x0000,0x00E2,0x00E3,0x0000 }, 59 { 0x00E1,0x00E1,0x00E3,0x0000 }, }, /* #4 */ 60 /*expect*/ { 0,0,0, -1, }, 61 }, 62 { /*input.*/ { { 0x00E1,0x0042,0x00E3,0x0000 }, 63 { 0x00E1,0x0061,0x00E3,0x0000 }, }, /* #5 */ 64 /*expect*/ { 0,0,0, +1, }, 65 }, 66 { /*input.*/ { { 0x00E1,0x0061,0x00E3,0x0000 }, 67 { 0x00E1,0x0042,0x00E3,0x0000 }, }, /* #6 */ 68 /*expect*/ { 0,0,0, -1, }, 69 }, 70 { /*input.*/ { { 0x00E1,0x00E2,0x0000 }, 71 { 0x00E1,0x00E2,0x00E9,0x0000 }, }, /* #7 */ 72 /*expect*/ { 0,0,0, -1, }, 73 }, 74 { /*input.*/ { { 0x00E1,0x00E2,0x00E9,0x0000 }, 75 { 0x00E1,0x00E2,0x0000 }, }, /* #8 */ 76 /*expect*/ { 0,0,0, +1, }, 77 }, 78 { /*input.*/ { { 0x00E1,0x0092,0x00E9,0x0000 }, 79 { 0x00E1,0x008E,0x00E9,0x0000 }, }, /* #9 */ 80 /*expect*/ { 0,0,0, +1, }, 81 }, 82 { /*input.*/ { { 0x00E1,0x008E,0x00E9,0x0000 }, 83 { 0x00E1,0x0092,0x00E9,0x0000 }, }, /* #10 */ 84 /*expect*/ { 0,0,0, -1, }, 85 }, 86 { .is_last = 1 } 87 } 88 }, 89 { { Twcscoll, TST_LOC_enUS }, 90 { 91 { /*input.*/ { { 0x0041,0x0042,0x0043,0x0000 }, 92 { 0x0041,0x0042,0x0043,0x0000 }, }, /* #1 */ 93 /*expect*/ { 0,1,0, 0, }, 94 }, 95 { /*input.*/ { { 0x0000,0x0041,0x0043,0x0000 }, 96 { 0x0000,0x0042,0x0043,0x0000 }, }, /* #2 */ 97 /*expect*/ { 0,1,0, 0, }, 98 }, 99 { /*input.*/ { { 0x0041,0x0041,0x0043,0x0000 }, 100 { 0x0000,0x0042,0x0043,0x0000 }, }, /* #3 */ 101 /*expect*/ { 0,0,0, +1, }, 102 }, 103 { /*input.*/ { { 0x0000,0x0042,0x0043,0x0000 }, 104 { 0x0041,0x0041,0x0043,0x0000 }, }, /* #4 */ 105 /*expect*/ { 0,0,0, -1, }, 106 }, 107 /* XXX Correct order is lowercase before uppercase. */ 108 { /*input.*/ { { 0x0041,0x0042,0x0043,0x0000 }, 109 { 0x0041,0x0061,0x0043,0x0000 }, }, /* #5 */ 110 /*expect*/ { 0,0,0, +1, }, 111 }, 112 { /*input.*/ { { 0x0041,0x0061,0x0043,0x0000 }, 113 { 0x0041,0x0042,0x0043,0x0000 }, }, /* #6 */ 114 /*expect*/ { 0,0,0, -1, }, 115 }, 116 { /*input.*/ { { 0x0041,0x0042,0x0000 }, 117 { 0x0041,0x0042,0x0049,0x0000 }, }, /* #7 */ 118 /*expect*/ { 0,0,0, -1, }, 119 }, 120 { /*input.*/ { { 0x0041,0x0042,0x0049,0x0000 }, 121 { 0x0041,0x0042,0x0000 }, }, /* #8 */ 122 /*expect*/ { 0,0,0, +1, }, 123 }, 124 /* Do not assume position of character out of range. */ 125 { /*input.*/ { { 0x0041,0x0092,0x0049,0x0000 }, 126 { 0x0041,0x008E,0x0049,0x0000 }, }, /* #9 */ 127 /*expect*/ { 0,0,0, 0, }, 128 }, 129 { /*input.*/ { { 0x0041,0x008E,0x0049,0x0000 }, 130 { 0x0041,0x0092,0x0049,0x0000 }, }, /* #10 */ 131 /*expect*/ { 0,0,0, 0, }, 132 }, 133 { .is_last = 1 } 134 } 135 }, 136 { { Twcscoll, TST_LOC_eucJP }, 137 { 138 { /*input.*/ { { 0x3041,0x3042,0x3043,0x0000 }, 139 { 0x3041,0x3042,0x3043,0x0000 }, }, /* #1 */ 140 /*expect*/ { 0,1,0, 0, }, 141 }, 142 { /*input.*/ { { 0x0000,0x3041,0x3043,0x0000 }, 143 { 0x0000,0x3042,0x3043,0x0000 }, }, /* #2 */ 144 /*expect*/ { 0,1,0, 0, }, 145 }, 146 { /*input.*/ { { 0x3041,0x3041,0x3043,0x0000 }, 147 { 0x0000,0x3042,0x3043,0x0000 }, }, /* #3 */ 148 /*expect*/ { 0,0,0, +1, }, 149 }, 150 { /*input.*/ { { 0x0000,0x3042,0x3043,0x0000 }, 151 { 0x3041,0x3041,0x3043,0x0000 }, }, /* #4 */ 152 /*expect*/ { 0,0,0, -1, }, 153 }, 154 { /*input.*/ { { 0x3041,0x0042,0x3043,0x0000 }, 155 { 0x3041,0x0061,0x3043,0x0000 }, }, /* #5 */ 156 /*expect*/ { 0,0,0, -1, }, 157 }, 158 { /*input.*/ { { 0x3041,0x0061,0x3043,0x0000 }, 159 { 0x3041,0x0042,0x3043,0x0000 }, }, /* #6 */ 160 /*expect*/ { 0,0,0, +1, }, 161 }, 162 { /*input.*/ { { 0x3041,0x3042,0xFF71,0x0000 }, 163 { 0x3041,0x3042,0x30A2,0x0000 }, }, /* #7 */ 164 /*expect*/ { 0,0,0, -1, }, 165 }, 166 { /*input.*/ { { 0x3041,0x3042,0x30A2,0x0000 }, 167 { 0x3041,0x3042,0xFF71,0x0000 }, }, /* #8 */ 168 /*expect*/ { 0,0,0, +1, }, 169 }, 170 { /*input.*/ { { 0x30FF,0x3092,0x3049,0x0000 }, 171 { 0x3041,0x308E,0x3049,0x0000 }, }, /* #9 */ 172 /*expect*/ { 0,0,0, -1, }, 173 }, 174 { /*input.*/ { { 0x3041,0x308E,0x3049,0x0000 }, 175 { 0x30FF,0x3092,0x3049,0x0000 }, }, /* #10 */ 176 /*expect*/ { 0,0,0, +1, }, 177 }, 178 { .is_last = 1 } 179 } 180 }, 181 { { Twcscoll, TST_LOC_end } } 182 }; 183