1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/*
2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2016 Google Inc.
3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *
4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be
5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file.
6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */
7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkScaleToSides.h"
9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include <algorithm>
11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "Test.h"
12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotDEF_TEST(ScaleToSides, reporter) {
14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    double interestingValues[] = {
15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        // From sample app - PathFuzzer
16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        260.01662826538085938,
17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        63.61007690429687500,
18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        795.98901367187500000,
19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        217.71697616577148438,
20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        686.15960693359375000,
21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        556.57641601562500000,
22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        // From skp bitbucket
23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        111.60000228881836,
24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        55.800003051757813,
25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        0.99999996581812677920,
26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        0.0,
27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        0.5,
28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        1.0,
29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        2.0,
30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        3.0,
31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        33.0,
32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        33554430.0,
33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        33554431.0,
34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        33554464.0,
35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        333333332.0,
36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        333333333.0,
37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        333333334.0,
38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        FLT_MAX,
39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        FLT_EPSILON,
40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        FLT_MIN
41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    };
42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    int numInterestingValues = (int)SK_ARRAY_COUNT(interestingValues);
44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    for (int s = 0; s <= numInterestingValues; s++) {
46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        for (int i = 0; i < numInterestingValues; i++) {
47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            for (int j = 0; j < numInterestingValues; j++) {
48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                for (int k = 0; k < numInterestingValues; k++) {
49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                    float radius1 = (float)interestingValues[i];
50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                    float radius2 = (float)interestingValues[j];
51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                    double width = interestingValues[k];
52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                    double scale = width / ((double)radius1 + (double)radius2);
53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                    if (width > 0.0) {
54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                        if (s != 0) {
55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                            scale = std::min(scale, interestingValues[s-1]);
56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                        }
57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                        if (scale < 1.0 && scale > 0.0) {
58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                            SkScaleToSides::AdjustRadii(width, scale, &radius1, &radius2);
59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                        }
60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                    }
61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot                }
62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            }
63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        }
64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}
66