diff options
author | 2016-01-22 08:34:35 -0800 | |
---|---|---|
committer | 2016-01-22 08:34:35 -0800 | |
commit | 5e0883cf57176134155fb70c9bc51dbb0f0c67fb (patch) | |
tree | 4348dd9a8a5d9e56b0b6ed848f3d86eae85c4a4e /tests/ScaleToSidesTest.cpp | |
parent | 5286f0222ccb65ce1dbe235adc225b79057dd0ae (diff) |
Fix bounds of checking if a radii are too long for a side.
BUG=skia:4692,skia:4413
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1617763003
Review URL: https://codereview.chromium.org/1617763003
Diffstat (limited to 'tests/ScaleToSidesTest.cpp')
-rw-r--r-- | tests/ScaleToSidesTest.cpp | 57 |
1 files changed, 33 insertions, 24 deletions
diff --git a/tests/ScaleToSidesTest.cpp b/tests/ScaleToSidesTest.cpp index 60e82be529..513f0c98b6 100644 --- a/tests/ScaleToSidesTest.cpp +++ b/tests/ScaleToSidesTest.cpp @@ -7,23 +7,27 @@ #include "SkScaleToSides.h" -#include <cfloat> +#include <algorithm> #include "Test.h" DEF_TEST(ScaleToSides, reporter) { - float interestingValues[] = { - 0.0f, - 0.5f, - 1.0f, - 2.0f, - 3.0f, - 33.0f, - 33554430.0f, - 33554431.0f, - 33554464.0f, - 333333332.0f, - 333333333.0f, - 333333334.0f, + double interestingValues[] = { + // From skp bitbucket + 111.60000228881836, + 55.800003051757813, + 0.99999996581812677920, + 0.0, + 0.5, + 1.0, + 2.0, + 3.0, + 33.0, + 33554430.0, + 33554431.0, + 33554464.0, + 333333332.0, + 333333333.0, + 333333334.0, FLT_MAX, FLT_EPSILON, FLT_MIN @@ -31,16 +35,21 @@ DEF_TEST(ScaleToSides, reporter) { int numInterestingValues = (int)SK_ARRAY_COUNT(interestingValues); - for (int i = 0; i < numInterestingValues; i++) { - for (int j = 0; j < numInterestingValues; j++) { - for (int k = 0; k < numInterestingValues; k++) { - float radius1 = interestingValues[i]; - float radius2 = interestingValues[j]; - float width = interestingValues[k]; - if (width > 0.0f) { - double scale = (double)width / ((double)radius1 + (double)radius2); - if (scale < 1.0) { - ScaleToSides::AdjustRadii(width, scale, &radius1, &radius2); + for (int s = 0; s <= numInterestingValues; s++) { + for (int i = 0; i < numInterestingValues; i++) { + for (int j = 0; j < numInterestingValues; j++) { + for (int k = 0; k < numInterestingValues; k++) { + float radius1 = (float)interestingValues[i]; + float radius2 = (float)interestingValues[j]; + double width = interestingValues[k]; + double scale = width / ((double)radius1 + (double)radius2); + if (width > 0.0) { + if (s != 0) { + scale = std::min(scale, interestingValues[s-1]); + } + if (scale < 1.0 && scale > 0.0) { + ScaleToSides::AdjustRadii(width, scale, &radius1, &radius2); + } } } } |