Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixed integer range minus bugs #690

Merged
merged 10 commits into from Oct 5, 2021
Merged

Conversation

staabm
Copy link
Contributor

@staabm staabm commented Sep 27, 2021

Fixes Integer-Range-Minus bugs mentioned in phpstan/phpstan#5614

assertType('int<5, 100>', $r1 * $r2);
assertType('float|int<0, 1>', $r1 / $r2);

assertType('int<-99, 19>', $r1 - $r3);
Copy link
Contributor Author

@staabm staabm Sep 27, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this line is covering https://phpstan.org/r/0f2bf43b-e5a6-436b-ac44-e62a2c60ae94 from "Wrong inference with Minus" of phpstan/phpstan#5614

@@ -254,16 +255,18 @@ public function math($i, $j, $z, $pi, $r1, $r2, $rMin, $rMax, $x, $y) {
assertType('float|int<1, max>', $rMax / 4);

assertType('int<6, 20>', $r1 + $r2);
assertType('int<-4, 0>', $r1 - $r2);
assertType('int<-9, 5>', $r1 - $r2);
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

assertType('int<min, 15>', $r1 + $rMin);
assertType('int<min, 5>', $r1 - $rMin);
assertType('int<min, 50>', $r1 * $rMin);
assertType('float|int<min, 2>', $r1 / $rMin);
assertType('int<min, 15>', $rMin + $r1);
assertType('int<min, -5>', $rMin - $r1);
assertType('int<-5, max>', $rMin - $r1);
Copy link
Contributor Author

@staabm staabm Sep 27, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@@ -272,7 +275,7 @@ public function math($i, $j, $z, $pi, $r1, $r2, $rMin, $rMax, $x, $y) {
assertType('int<5, max>', $r1 * $rMax);
assertType('float|int<0, max>', $r1 / $rMax);
assertType('int<6, max>', $rMax + $r1);
assertType('int<4, max>', $rMax - $r1);
assertType('int<-5, max>', $rMax - $r1);
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@@ -52,7 +52,7 @@ public function doBaz(int $rangeFiveBoth, int $rangeFiveLeft, int $rangeFiveRigh
assertType('int', $rangeFiveRight - $rangeFiveLeft);

assertType('int<-10, 10>', $rangeFiveBoth + $rangeFiveBoth);
assertType('0', $rangeFiveBoth - $rangeFiveBoth);
assertType('int<-10, 10>', $rangeFiveBoth - $rangeFiveBoth);
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.


assertType('int<min, 10>', $rangeFiveRight + $rangeFiveBoth);
assertType('int<min, 0>', $rangeFiveRight - $rangeFiveBoth);
assertType('int<0, max>', $rangeFiveRight - $rangeFiveBoth);
Copy link
Contributor Author

@staabm staabm Sep 27, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@@ -61,10 +61,10 @@ public function doBaz(int $rangeFiveBoth, int $rangeFiveLeft, int $rangeFiveRigh
assertType('int<min, 0>', $rangeFiveBoth - $rangeFiveRight);

assertType('int<-10, max>', $rangeFiveLeft + $rangeFiveBoth);
assertType('int<0, max>', $rangeFiveLeft - $rangeFiveBoth);
assertType('int<-10, max>', $rangeFiveLeft - $rangeFiveBoth);
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@staabm staabm marked this pull request as ready for review September 27, 2021 15:19
@staabm
Copy link
Contributor Author

staabm commented Sep 27, 2021

should be good to go. remaining test-errors are unrelated.

//cc @orklah

@staabm staabm marked this pull request as draft September 27, 2021 16:17
@staabm
Copy link
Contributor Author

staabm commented Sep 27, 2021

Note the -∞ instead of ∞

oh, I need to double check the new expectations..


assertType('int<min, 10>', $rangeFiveRight + $rangeFiveBoth);
assertType('int<min, 0>', $rangeFiveRight - $rangeFiveBoth);
assertType('int<min, 10>', $rangeFiveRight - $rangeFiveBoth);
Copy link
Contributor Author

@staabm staabm Sep 28, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

assertType('int<min, 15>', $r1 + $rMin);
assertType('int<min, 5>', $r1 - $rMin);
assertType('int<min, 50>', $r1 * $rMin);
assertType('float|int<min, 2>', $r1 / $rMin);
assertType('int<min, 15>', $rMin + $r1);
assertType('int<min, -5>', $rMin - $r1);
assertType('int<min, 4>', $rMin - $r1);
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.


assertType('int<-10, max>', $rangeFiveBoth + $rangeFiveLeft);
assertType('int', $rangeFiveBoth - $rangeFiveLeft);

assertType('int<min, 10>', $rangeFiveBoth + $rangeFiveRight);
assertType('int<min, 0>', $rangeFiveBoth - $rangeFiveRight);
assertType('int<-10, max>', $rangeFiveBoth - $rangeFiveRight);
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

assertType('int<min, 15>', $r1 + $rMin);
assertType('int<min, 5>', $r1 - $rMin);
assertType('int<-4, max>', $r1 - $rMin);
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@staabm staabm marked this pull request as ready for review September 28, 2021 11:47
@staabm
Copy link
Contributor Author

staabm commented Sep 28, 2021

now for real - should be good to go. remaining test-errors are unrelated.

@ondrejmirtes ondrejmirtes merged commit d365eff into phpstan:master Oct 5, 2021
@ondrejmirtes
Copy link
Member

Thank you!

@staabm staabm deleted the minus-range-bugs branch October 5, 2021 14:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
3 participants