File tree Expand file tree Collapse file tree 5 files changed +44
-4
lines changed
Expand file tree Collapse file tree 5 files changed +44
-4
lines changed Original file line number Diff line number Diff line change 1010use Munus \Collection \Traversable ;
1111use Munus \Control \Option ;
1212use Munus \Control \TryTo ;
13+ use Munus \Value \Comparable ;
1314use Munus \Value \Comparator ;
1415
1516/**
2122 *
2223 * @template T
2324 */
24- abstract class Value
25+ abstract class Value implements Comparable
2526{
2627 /**
2728 * Checks, if the underlying value is absent.
Original file line number Diff line number Diff line change 1+ <?php
2+
3+ declare (strict_types=1 );
4+
5+ namespace Munus \Value ;
6+
7+ interface Comparable
8+ {
9+ public function equals (self $ other ): bool ;
10+ }
Original file line number Diff line number Diff line change 55namespace Munus \Value ;
66
77use Munus \Tuple ;
8- use Munus \Value ;
98
109final class Comparator
1110{
@@ -15,11 +14,11 @@ final class Comparator
1514 */
1615 public static function equals ($ a , $ b ): bool
1716 {
18- if ($ a instanceof Value ) {
17+ if ($ a instanceof Comparable ) {
1918 return $ a ->equals ($ b );
2019 }
2120
22- if ($ b instanceof Value ) {
21+ if ($ b instanceof Comparable ) {
2322 return $ b ->equals ($ a );
2423 }
2524
Original file line number Diff line number Diff line change 1+ <?php
2+
3+ declare (strict_types=1 );
4+
5+ namespace Munus \Tests \Stub ;
6+
7+ use Munus \Value \Comparable ;
8+
9+ final class Event implements Comparable
10+ {
11+ public function __construct (public string $ id , public string $ name )
12+ {
13+ }
14+
15+ public function equals (Comparable $ other ): bool
16+ {
17+ return self ::class === $ other ::class && $ this ->name === $ other ->name ;
18+ }
19+ }
Original file line number Diff line number Diff line change 55namespace Munus \Tests \Value ;
66
77use Munus \Collection \GenericList ;
8+ use Munus \Tests \Stub \Event ;
89use Munus \Value \Comparator ;
910use PHPUnit \Framework \TestCase ;
1011
@@ -29,4 +30,14 @@ public function testCompareObjects(): void
2930 self ::assertTrue (Comparator::equals ($ object3 , $ object1 ->append (2 )));
3031 self ::assertFalse (Comparator::equals ($ object1 , $ object3 ));
3132 }
33+
34+ public function testCompareComparableObject (): void
35+ {
36+ $ event = new Event ('123 ' , 'event ' );
37+
38+ self ::assertTrue (Comparator::equals ($ event , new Event ('456 ' , 'event ' )));
39+ self ::assertTrue (Comparator::equals ($ event , new Event ('789 ' , 'event ' )));
40+ self ::assertFalse (Comparator::equals ($ event , new Event ('123 ' , 'event1 ' )));
41+ self ::assertFalse (Comparator::equals ($ event , new Event ('456 ' , 'event1 ' )));
42+ }
3243}
You can’t perform that action at this time.
0 commit comments