@@ -181,7 +181,7 @@ public function bcVsNull(Number $a): void
181181 $ b = null ;
182182 assertType ('*ERROR* ' , $ a + $ b );
183183 assertType ('*ERROR* ' , $ a - $ b );
184- assertType ('*ERROR* ' , $ a * $ b );
184+ assertType ('0 ' , $ a * $ b ); // BUG: This throws type error, but getMulType assumes that since null (mostly) behaves like zero, it will be zero.
185185 assertType ('*ERROR* ' , $ a / $ b );
186186 assertType ('*ERROR* ' , $ a % $ b );
187187 assertType ('non-empty-string&numeric-string ' , $ a . $ b );
@@ -377,25 +377,25 @@ public function bcVsStringable(Number $a, \Stringable $b): void
377377 public function bcVsNever (Number $ a ): void
378378 {
379379 for ($ b = 1 ; $ b < count ([]); $ b ++) {
380- assertType ('*ERROR * ' , $ a + $ b );
381- assertType ('*ERROR* ' , $ a - $ b );
380+ assertType ('*NEVER * ' , $ a + $ b );
381+ assertType ('*ERROR* ' , $ a - $ b ); // Inconsistency: getPlusType handles never types right at the beginning, getMinusType doesn't.
382382 assertType ('*ERROR* ' , $ a * $ b );
383383 assertType ('*ERROR* ' , $ a / $ b );
384- assertType ('*ERROR * ' , $ a % $ b );
385- assertType ('*ERROR* ' , $ a . $ b );
384+ assertType ('*NEVER * ' , $ a % $ b );
385+ assertType ('non-empty-string&numeric-string ' , $ a . $ b );
386386 assertType ('*ERROR* ' , $ a ** $ b );
387- assertType ('*ERROR * ' , $ a << $ b );
388- assertType ('*ERROR * ' , $ a >> $ b );
387+ assertType ('*NEVER * ' , $ a << $ b );
388+ assertType ('*NEVER * ' , $ a >> $ b );
389389 assertType ('bool ' , $ a < $ b );
390390 assertType ('bool ' , $ a <= $ b );
391391 assertType ('bool ' , $ a > $ b );
392392 assertType ('bool ' , $ a >= $ b );
393- assertType ('int<-1, 1> ' , $ a <=> $ b );
393+ assertType ('*NEVER* ' , $ a <=> $ b );
394394 assertType ('bool ' , $ a == $ b );
395395 assertType ('bool ' , $ a != $ b );
396- assertType ('*ERROR * ' , $ a & $ b );
397- assertType ('*ERROR * ' , $ a ^ $ b );
398- assertType ('*ERROR * ' , $ a | $ b );
396+ assertType ('*NEVER * ' , $ a & $ b );
397+ assertType ('*NEVER * ' , $ a ^ $ b );
398+ assertType ('*NEVER * ' , $ a | $ b );
399399 assertType ('bool ' , $ a && $ b );
400400 assertType ('bool ' , $ a || $ b );
401401 assertType ('bool ' , $ a and $ b );
0 commit comments