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