summaryrefslogtreecommitdiff
path: root/Zend/tests/string_to_number_comparison.phpt
blob: 86ba8a7a8b765799f6a51e1bcb710b521cc21fc3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
--TEST--
String to number comparison
--FILE--
<?php

// This tests the examples from the RFC.

function format($val) {
    if (is_float($val)) {
        if (is_nan($val)) return "NAN";
        if ($val == INF) return "INF";
        if ($val == -INF) return "-INF";
    }
    return json_encode($val);
}

function compare_eq($val1, $val2) {
    echo format($val1), " == ", format($val2), ": ", format($val1 == $val2), "\n";
}

function compare_3way($val1, $val2) {
    echo format($val1), " <=> ", format($val2), ": ", format($val1 <=> $val2), "\n";
}

compare_eq(42, "000042");
compare_eq(42, "42.0");
compare_eq(42.0, "+42.0E0");
compare_eq(0, "0e214987142012");
echo "\n";

compare_eq("42", "000042");
compare_eq("42", "42.0");
compare_eq("42.0", "+42.0E0");
compare_eq("0", "0e214987142012");
echo "\n";

compare_eq(42, "   42");
compare_eq(42, "42   ");
compare_eq(42, "42abc");
compare_eq(42, "abc42");
compare_eq( 0, "abc42");
echo "\n";

compare_eq(INF, "INF");
compare_eq(-INF, "-INF");
compare_eq(NAN, "NAN");
compare_eq(INF, "1e1000");
compare_eq(-INF, "-1e1000");
echo "\n";

$float = 1.75;

echo "precision=14:\n";
ini_set('precision', 14);
compare_3way($float, "1.75abc");
compare_3way((string) $float, "1.75abc");

echo "precision=0:\n";
ini_set('precision', 0);
compare_3way($float, "1.75abc");
compare_3way((string) $float, "1.75abc");

?>
--EXPECT--
42 == "000042": true
42 == "42.0": true
42 == "+42.0E0": true
0 == "0e214987142012": true

"42" == "000042": true
"42" == "42.0": true
"42.0" == "+42.0E0": true
"0" == "0e214987142012": true

42 == "   42": true
42 == "42   ": true
42 == "42abc": false
42 == "abc42": false
0 == "abc42": false

INF == "INF": true
-INF == "-INF": true
NAN == "NAN": false
INF == "1e1000": true
-INF == "-1e1000": true

precision=14:
1.75 <=> "1.75abc": -1
"1.75" <=> "1.75abc": -1
precision=0:
1.75 <=> "1.75abc": 1
"2" <=> "1.75abc": 1