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