1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2016 Google Inc. 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#include "src/core/SkScaleToSides.h" 9cb93a386Sopenharmony_ci 10cb93a386Sopenharmony_ci#include "tests/Test.h" 11cb93a386Sopenharmony_ci 12cb93a386Sopenharmony_ci#include <algorithm> 13cb93a386Sopenharmony_ci 14cb93a386Sopenharmony_ciDEF_TEST(ScaleToSides, reporter) { 15cb93a386Sopenharmony_ci double interestingValues[] = { 16cb93a386Sopenharmony_ci // From sample app - PathFuzzer 17cb93a386Sopenharmony_ci 260.01662826538085938, 18cb93a386Sopenharmony_ci 63.61007690429687500, 19cb93a386Sopenharmony_ci 795.98901367187500000, 20cb93a386Sopenharmony_ci 217.71697616577148438, 21cb93a386Sopenharmony_ci 686.15960693359375000, 22cb93a386Sopenharmony_ci 556.57641601562500000, 23cb93a386Sopenharmony_ci // From skp bitbucket 24cb93a386Sopenharmony_ci 111.60000228881836, 25cb93a386Sopenharmony_ci 55.800003051757813, 26cb93a386Sopenharmony_ci 0.99999996581812677920, 27cb93a386Sopenharmony_ci 0.0, 28cb93a386Sopenharmony_ci 0.5, 29cb93a386Sopenharmony_ci 1.0, 30cb93a386Sopenharmony_ci 2.0, 31cb93a386Sopenharmony_ci 3.0, 32cb93a386Sopenharmony_ci 33.0, 33cb93a386Sopenharmony_ci 33554430.0, 34cb93a386Sopenharmony_ci 33554431.0, 35cb93a386Sopenharmony_ci 33554464.0, 36cb93a386Sopenharmony_ci 333333332.0, 37cb93a386Sopenharmony_ci 333333333.0, 38cb93a386Sopenharmony_ci 333333334.0, 39cb93a386Sopenharmony_ci FLT_MAX, 40cb93a386Sopenharmony_ci FLT_EPSILON, 41cb93a386Sopenharmony_ci FLT_MIN, 42cb93a386Sopenharmony_ci 340282569745034499980078846904281071616.0, 43cb93a386Sopenharmony_ci 170141284872517249990039423452140535808.0, 44cb93a386Sopenharmony_ci 170141244307698042686698575557637963776.0, 45cb93a386Sopenharmony_ci }; 46cb93a386Sopenharmony_ci 47cb93a386Sopenharmony_ci int numInterestingValues = (int)SK_ARRAY_COUNT(interestingValues); 48cb93a386Sopenharmony_ci 49cb93a386Sopenharmony_ci for (int s = 0; s <= numInterestingValues; s++) { 50cb93a386Sopenharmony_ci for (int i = 0; i < numInterestingValues; i++) { 51cb93a386Sopenharmony_ci for (int j = 0; j < numInterestingValues; j++) { 52cb93a386Sopenharmony_ci for (int k = 0; k < numInterestingValues; k++) { 53cb93a386Sopenharmony_ci // We're about to cast values i and j to float, don't bother if they won't fit. 54cb93a386Sopenharmony_ci // (Is there a more robust way to test this, like SkTFitsIn but double->float?) 55cb93a386Sopenharmony_ci if (interestingValues[i] > FLT_MAX || 56cb93a386Sopenharmony_ci interestingValues[j] > FLT_MAX) { 57cb93a386Sopenharmony_ci continue; 58cb93a386Sopenharmony_ci } 59cb93a386Sopenharmony_ci float radius1 = (float)interestingValues[i]; 60cb93a386Sopenharmony_ci float radius2 = (float)interestingValues[j]; 61cb93a386Sopenharmony_ci double width = interestingValues[k]; 62cb93a386Sopenharmony_ci double scale = sk_ieee_double_divide(width, (double)radius1 + (double)radius2); 63cb93a386Sopenharmony_ci if (width > 0.0) { 64cb93a386Sopenharmony_ci if (s != 0) { 65cb93a386Sopenharmony_ci scale = std::min(scale, interestingValues[s-1]); 66cb93a386Sopenharmony_ci } 67cb93a386Sopenharmony_ci if (scale < 1.0 && scale > 0.0) { 68cb93a386Sopenharmony_ci SkScaleToSides::AdjustRadii(width, scale, &radius1, &radius2); 69cb93a386Sopenharmony_ci } 70cb93a386Sopenharmony_ci } 71cb93a386Sopenharmony_ci } 72cb93a386Sopenharmony_ci } 73cb93a386Sopenharmony_ci } 74cb93a386Sopenharmony_ci } 75cb93a386Sopenharmony_ci} 76