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