File: equals.phpt

package info (click to toggle)
php-decimal 1.5.0-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 456 kB
  • sloc: ansic: 1,928; xml: 102; makefile: 2
file content (132 lines) | stat: -rw-r--r-- 4,439 bytes parent folder | download
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
--TEST--
Decimal::equals
--SKIPIF--
<?php
if (!extension_loaded("decimal")) echo "skip";
?>
--FILE--
<?php
use Decimal\Decimal;

/**
 * Shortcut to construct a new decimal.
 */
function decimal(...$args) { return new Decimal(...$args); }

$tests = [
    [decimal(),  0,      true],
    [decimal(),  null,   false],
    [decimal(),  false,  false],
    [decimal(),  0.0,    true],
    [decimal(),  "",     false],

    [decimal(1), 0,      false],
    [decimal(1), null,   false],
    [decimal(1), false,  false],
    [decimal(1), 0.0,    false],
    [decimal(1), "",     false],

    [decimal(),  1,      false],
    [decimal(),  true,   true],
    [decimal(),  1.0,    false],
    [decimal(),  "1",    false],

    [decimal(1), 1,      true],
    [decimal(1), true,   true],
    [decimal(1), 1.0,    true],
    [decimal(1), "1",    true],

    [decimal("0.1"),        0.1,    true],
    [decimal("0.2"),        0.2,    true],
    [decimal("0.200"),      0.2,    true],
    [decimal("-0.1"),      -0.1,    true],
    [decimal("-0.2"),      -0.2,    true],
    [decimal("1E-10"),      1E-10,  true],
    [decimal("1E+10"),      1E+10,  true],
    [decimal("-1E-10"),    -1E-10,  true],
    [decimal("-1E+10"),    -1E+10,  true],

    [decimal("0.1000000000000000000001"), 0.1,  false],
    [decimal("0.2000000000000000000001"), 0.2,  false],

    [decimal("0.0000000000000000000001"), 0.1,  false],
    [decimal("0.0000000000000000000001"), 0.0,  false],

    [decimal("0.1"),        "0.01",             false],
    [decimal("0.1"),        "0.1",              true],
    [decimal("0.1"),        "0.2",              false],
    [decimal("0.2"),        "0.1",              false],
    [decimal("0.01"),       "0.1",              false],

    [decimal(),             decimal(),          true],
    [decimal(),             decimal(0),         true],
    [decimal("0.1"),        decimal(0),         false],
    [decimal("0.1"),        decimal("0.01"),    false],
    [decimal("0.1"),        decimal("0.1"),     true],
    [decimal("0.1"),        decimal("0.2"),     false],
    [decimal("0.2"),        decimal("0.1"),     false],
    [decimal("0.01"),       decimal("0.1"),     false],

    /* Equal value, precision considered. */
    [decimal(0, 10),        decimal(0),         false],
    [decimal(0, 10),        decimal(0, 9),      false],
    [decimal(0, 10),        decimal(0, 10),     true],

    [decimal('1', 10),      decimal('1'),       false],
    [decimal('1', 10),      decimal('1', 9),    false],
    [decimal('1', 10),      decimal('1', 10),   true],

    [decimal(NAN, 10),      decimal(NAN),       false],
    [decimal(NAN, 10),      decimal(NAN, 9),    false],
    [decimal(NAN, 10),      decimal(NAN, 10),   false],

    /* Match PHP on special numbers. */
    [decimal( "INF"),       decimal( "NAN"),    INF ==  NAN],
    [decimal( "INF"),       decimal( "INF"),    INF ==  INF],
    [decimal( "INF"),       decimal("-INF"),    INF == -INF],
    [decimal("-INF"),       decimal( "NAN"),   -INF ==  NAN],
    [decimal("-INF"),       decimal( "INF"),   -INF ==  INF],
    [decimal("-INF"),       decimal("-INF"),   -INF == -INF],
    [decimal( "NAN"),       decimal( "NAN"),    NAN ==  NAN],
    [decimal( "NAN"),       decimal( "INF"),    NAN ==  INF],
    [decimal( "NAN"),       decimal("-INF"),    NAN == -INF],

    [decimal( "INF"),       NAN,                INF ==  NAN],
    [decimal( "INF"),       INF,                INF ==  INF],
    [decimal( "INF"),      -INF,                INF == -INF],
    [decimal("-INF"),       NAN,               -INF ==  NAN],
    [decimal("-INF"),       INF,               -INF ==  INF],
    [decimal("-INF"),      -INF,               -INF == -INF],
    [decimal( "NAN"),       NAN,                NAN ==  NAN],
    [decimal( "NAN"),       INF,                NAN ==  INF],
    [decimal( "NAN"),      -INF,                NAN == -INF],
];

foreach ($tests as $index => $test) {
    list($op1, $op2, $expect) = $test;

    $results = [
        $op1 == $op2,
        $op2 == $op1,
      !($op1 != $op2),
      !($op2 != $op1),
    ];

    if ($op1 instanceof Decimal) {
        $results[] = $op1->equals($op2);
    }

    if ($op2 instanceof Decimal) {
        $results[] = $op2->equals($op1);
    }

    foreach ($results as $result) {
        if ($result !== $expect) {
            var_dump(compact("op1", "op2", "result", "expect"));
            break;
        }
    }
}

?>
--EXPECT--