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