collator_compare.phpt 3.0 KB

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