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