1--TEST-- 2compare() 3--EXTENSIONS-- 4intl 5--SKIPIF-- 6<?php if (version_compare(INTL_ICU_VERSION, '51.2') >= 0) die('skip for ICU < 51.2'); ?> 7--FILE-- 8<?php 9 10/* 11 * Compare various string pairs using various locales. 12 */ 13 14 15/* 16 * Converts comparison result to a character. 17 */ 18function cmp_to_char( $comp_res ) 19{ 20 switch( $comp_res ) 21 { 22 case 0: // UCOL_EQUAL 23 return '='; 24 case 1: // UCOL_GREATER 25 return '>'; 26 case -1: // UCOL_LESS 27 return '<'; 28 default: 29 return '?'; 30 } 31} 32 33/* 34 * Compare string pairs in the given array 35 * using specified locale. 36 */ 37function compare_pairs( $locale, $test_array ) 38{ 39 $res_str = ''; 40 41 $coll = ut_coll_create( $locale ); 42 43 foreach( $test_array as $test_strings ) 44 { 45 list( $str1, $str2 ) = $test_strings; 46 47 // Compare strings. 48 $res_val = cmp_to_char( ut_coll_compare( $coll, $str1, $str2 ) ); 49 50 // Concatenate result strings. 51 $res_str .= dump( $str1 ) . 52 ' ' . $res_val . ' ' . 53 dump( $str2 ) . "\n"; 54 } 55 56 return $res_str; 57 58} 59 60function ut_main() 61{ 62 $res_str = ''; 63 64 // Compare strings using en_US locale. 65 $test_params = array( 66 array( 'abc', 'abc' ), 67 array( 'Abc', 'abc' ), 68 array( 'a' , 'abc' ), 69 array( 'a' , '' ), 70 array( '' , '' ), 71 array( 'a' , 'b' ), 72 array( 'ab' , 'b' ), 73 array( 'ab' , 'a' ), 74 array( 123 , 'abc' ), 75 array( 'ac' , null ), 76 array( '.' , '.' ), 77 // Try to compare long strings. 78 array( 'abcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcde', 79 'abcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdea'), 80 array( null , null ) 81 ); 82 83 $res_str .= compare_pairs( 'en_US', $test_params ); 84 85 86 // Compare strings using ru_RU locale. 87 $test_params = array( 88 array( 'а', 'б' ), 89 array( 'а', 'аа' ), 90 array( 'аб', 'ба' ), 91 array( 'а', ',' ), 92 array( 'а', 'b' ), 93 array( 'а', 'bb' ), 94 array( 'а', 'ab' ), 95 array( 'а', null ) 96 ); 97 98 $res_str .= compare_pairs( 'ru_RU', $test_params ); 99 100 101 // Compare strings using lt_LT locale. 102 $test_params = array( 103 array( 'y', 'k' ) 104 ); 105 106 $res_str .= compare_pairs( 'lt_LT', $test_params ); 107 108 return $res_str; 109} 110 111include_once( 'ut_common.inc' ); 112ut_run(); 113?> 114--EXPECT-- 115'abc' = 'abc' 116'Abc' > 'abc' 117'a' < 'abc' 118'a' > '' 119'' = '' 120'a' < 'b' 121'ab' < 'b' 122'ab' > 'a' 123123 < 'abc' 124'ac' > NULL 125'.' = '.' 126'abcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcde' < 'abcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdea' 127NULL = NULL 128'а' < 'б' 129'а' < 'аа' 130'аб' < 'ба' 131'а' > ',' 132'а' > 'b' 133'а' > 'bb' 134'а' > 'ab' 135'а' > NULL 136'y' < 'k' 137