Skip to content

Commit 12dc8e7

Browse files
committed
Add new tests and some for __equals too
1 parent 9f419cf commit 12dc8e7

26 files changed

+425
-173
lines changed

Zend/tests/compareTo/array-in-array.phpt

Lines changed: 0 additions & 26 deletions
This file was deleted.

Zend/tests/compareTo/array-sort.phpt

Lines changed: 0 additions & 19 deletions
This file was deleted.

Zend/tests/compareTo/compare-basic.phpt

Lines changed: 0 additions & 20 deletions
This file was deleted.

Zend/tests/compareTo/compare-inheritance.phpt

Lines changed: 0 additions & 72 deletions
This file was deleted.

Zend/tests/compareTo/compare-to-scalar.phpt

Lines changed: 0 additions & 18 deletions
This file was deleted.
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
--TEST--
2+
__compareTo: Supported by array functions with ordering semantics (sorting)
3+
--FILE--
4+
<?php
5+
include("setup.inc");
6+
7+
$a = new Comparable(3);
8+
$b = new Comparable(1);
9+
$c = new Comparable(2);
10+
11+
$array = [$a, $b, $c];
12+
13+
sort($array);
14+
15+
var_dump($array[0]);
16+
var_dump($array[1]);
17+
var_dump($array[2]);
18+
19+
?>
20+
--EXPECTF--
21+
object(Comparable)#2 (2) {
22+
["decoy":protected]=>
23+
int(-1)
24+
["value":protected]=>
25+
int(1)
26+
}
27+
object(Comparable)#3 (2) {
28+
["decoy":protected]=>
29+
int(-2)
30+
["value":protected]=>
31+
int(2)
32+
}
33+
object(Comparable)#1 (2) {
34+
["decoy":protected]=>
35+
int(-3)
36+
["value":protected]=>
37+
int(3)
38+
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
--TEST--
2+
__compareTo: Basic comparison behaviour
3+
--FILE--
4+
<?php
5+
include("setup.inc");
6+
7+
var_dump(new Comparable(1) < new Comparable(0)); // false
8+
var_dump(new Comparable(1) < new Comparable(1)); // false
9+
var_dump(new Comparable(1) < new Comparable(2)); // true
10+
11+
var_dump(new Comparable(1) > new Comparable(0)); // true
12+
var_dump(new Comparable(1) > new Comparable(1)); // false
13+
var_dump(new Comparable(1) > new Comparable(2)); // false
14+
15+
var_dump(new Comparable(1) <= new Comparable(0)); // false
16+
var_dump(new Comparable(1) <= new Comparable(1)); // true
17+
var_dump(new Comparable(1) <= new Comparable(2)); // true
18+
19+
var_dump(new Comparable(1) >= new Comparable(0)); // true
20+
var_dump(new Comparable(1) >= new Comparable(1)); // true
21+
var_dump(new Comparable(1) >= new Comparable(2)); // false
22+
23+
var_dump(new Comparable(1) == new Comparable(0)); // false
24+
var_dump(new Comparable(1) == new Comparable(1)); // true
25+
var_dump(new Comparable(1) == new Comparable(2)); // false
26+
27+
var_dump(new Comparable(1) != new Comparable(0)); // true
28+
var_dump(new Comparable(1) != new Comparable(1)); // false
29+
var_dump(new Comparable(1) != new Comparable(2)); // true
30+
31+
var_dump(new Comparable(1) === new Comparable(0)); // false
32+
var_dump(new Comparable(1) === new Comparable(1)); // false
33+
var_dump(new Comparable(1) === new Comparable(2)); // false
34+
35+
var_dump(new Comparable(1) !== new Comparable(0)); // true
36+
var_dump(new Comparable(1) !== new Comparable(1)); // true
37+
var_dump(new Comparable(1) !== new Comparable(2)); // true
38+
39+
var_dump(new Comparable(1) <=> new Comparable(0)); // 1
40+
var_dump(new Comparable(1) <=> new Comparable(1)); // 0
41+
var_dump(new Comparable(1) <=> new Comparable(2)); // -1
42+
43+
?>
44+
--EXPECTF--
45+
bool(false)
46+
bool(false)
47+
bool(true)
48+
bool(true)
49+
bool(false)
50+
bool(false)
51+
bool(false)
52+
bool(true)
53+
bool(true)
54+
bool(true)
55+
bool(true)
56+
bool(false)
57+
bool(false)
58+
bool(true)
59+
bool(false)
60+
bool(true)
61+
bool(false)
62+
bool(true)
63+
bool(false)
64+
bool(false)
65+
bool(false)
66+
bool(true)
67+
bool(true)
68+
bool(true)
69+
int(1)
70+
int(0)
71+
int(-1)
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
--TEST--
2+
__compareTo: Supported by array functions with equality semantics (searching)
3+
--FILE--
4+
<?php
5+
include("setup.inc");
6+
7+
$a = new Comparable(1);
8+
$b = new Comparable(2);
9+
$c = new Comparable(3);
10+
11+
$array = [$a, $b, $c];
12+
13+
var_dump(in_array($a, $array));
14+
var_dump(in_array($b, $array));
15+
var_dump(in_array($c, $array));
16+
17+
/* Yes, because __compareTo returned 0 */
18+
var_dump(in_array(new Comparable(1), $array));
19+
var_dump(in_array(new Comparable(2), $array));
20+
var_dump(in_array(new Comparable(3), $array));
21+
22+
/* Yes, because __compareTo returned 0 and we haven't implemented __equals */
23+
var_dump(in_array(1, $array));
24+
var_dump(in_array(2, $array));
25+
var_dump(in_array(3, $array));
26+
27+
var_dump(in_array(new Comparable(4), $array)); // no
28+
var_dump(in_array(new Comparable(5), $array)); // no
29+
30+
?>
31+
--EXPECTF--
32+
bool(true)
33+
bool(true)
34+
bool(true)
35+
bool(true)
36+
bool(true)
37+
bool(true)
38+
bool(true)
39+
bool(true)
40+
bool(true)
41+
bool(false)
42+
bool(false)
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
--TEST--
2+
__compareTo: Inheritance of magic method
3+
--FILE--
4+
<?php
5+
include("setup.inc");
6+
7+
/**
8+
* Inherits base behaviour
9+
*/
10+
class InheritedComparable extends Comparable
11+
{
12+
13+
}
14+
15+
/**
16+
* Inherits and overrides base behaviour through another.
17+
*/
18+
class ReversedComparable extends InheritedComparable
19+
{
20+
public function __compareTo($other) {
21+
return parent::__compareTo($other) * -1;
22+
}
23+
}
24+
25+
/**
26+
* Compare against an extending object
27+
*/
28+
var_dump(new Comparable(1) <=> new InheritedComparable(0)); // 1
29+
var_dump(new Comparable(1) <=> new InheritedComparable(1)); // 0
30+
var_dump(new Comparable(1) <=> new InheritedComparable(2)); // -1
31+
32+
var_dump(new InheritedComparable(1) <=> new Comparable(0)); // 1
33+
var_dump(new InheritedComparable(1) <=> new Comparable(1)); // 0
34+
var_dump(new InheritedComparable(1) <=> new Comparable(2)); // -1
35+
36+
/**
37+
* Compare against an extending object that overrides the base behaviour.
38+
*/
39+
var_dump(new Comparable(1) <=> new ReversedComparable(0)); // 1
40+
var_dump(new Comparable(1) <=> new ReversedComparable(1)); // 0
41+
var_dump(new Comparable(1) <=> new ReversedComparable(2)); // -1
42+
43+
/**
44+
* These will use ReversedComparable's __compareTo
45+
*/
46+
var_dump(new ReversedComparable(1) <=> new Comparable(0)); // -1
47+
var_dump(new ReversedComparable(1) <=> new Comparable(1)); // 0
48+
var_dump(new ReversedComparable(1) <=> new Comparable(2)); // 1
49+
50+
51+
?>
52+
--EXPECTF--
53+
int(1)
54+
int(0)
55+
int(-1)
56+
int(1)
57+
int(0)
58+
int(-1)
59+
int(1)
60+
int(0)
61+
int(-1)
62+
int(-1)
63+
int(0)
64+
int(1)

0 commit comments

Comments
 (0)