GrTestUtils.h revision 3e708c53f79a04b588b6ca8e535e61f986d80b47
1/*
2 * Copyright 2015 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
8#ifndef GrTestUtils_DEFINED
9#define GrTestUtils_DEFINED
10
11#include "SkTypes.h"
12
13#ifdef GR_TEST_UTILS
14
15#include "GrColor.h"
16#include "SkRandom.h"
17
18class SkMatrix;
19class SkRRect;
20struct SkRect;
21
22namespace GrTest {
23/**
24 * A helper for use in Test functions.
25 */
26const SkMatrix& TestMatrix(SkRandom*);
27const SkMatrix& TestMatrixPreservesRightAngles(SkRandom*);
28const SkMatrix& TestMatrixRectStaysRect(SkRandom*);
29const SkRect& TestRect(SkRandom*);
30const SkRRect& TestRRectSimple(SkRandom*);
31
32}
33
34static inline GrColor GrRandomColor(SkRandom* random) {
35    // There are only a few cases of random colors which interest us
36    enum ColorMode {
37        kAllOnes_ColorMode,
38        kAllZeros_ColorMode,
39        kAlphaOne_ColorMode,
40        kRandom_ColorMode,
41        kLast_ColorMode = kRandom_ColorMode
42    };
43
44    ColorMode colorMode = ColorMode(random->nextULessThan(kLast_ColorMode + 1));
45    GrColor color;
46    switch (colorMode) {
47        case kAllOnes_ColorMode:
48            color = GrColorPackRGBA(0xFF, 0xFF, 0xFF, 0xFF);
49            break;
50        case kAllZeros_ColorMode:
51            color = GrColorPackRGBA(0, 0, 0, 0);
52            break;
53        case kAlphaOne_ColorMode:
54            color = GrColorPackRGBA(random->nextULessThan(256),
55                                    random->nextULessThan(256),
56                                    random->nextULessThan(256),
57                                    0xFF);
58            break;
59        case kRandom_ColorMode: {
60                uint8_t alpha = random->nextULessThan(256);
61                color = GrColorPackRGBA(random->nextRangeU(0, alpha),
62                                        random->nextRangeU(0, alpha),
63                                        random->nextRangeU(0, alpha),
64                                        alpha);
65            break;
66        }
67    }
68    GrColorIsPMAssert(color);
69    return color;
70}
71
72static inline uint8_t GrRandomCoverage(SkRandom* random) {
73    enum CoverageMode {
74        kZero_CoverageMode,
75        kAllOnes_CoverageMode,
76        kRandom_CoverageMode,
77        kLast_CoverageMode = kRandom_CoverageMode
78    };
79
80    CoverageMode colorMode = CoverageMode(random->nextULessThan(kLast_CoverageMode + 1));
81    uint8_t coverage;
82    switch (colorMode) {
83        case kZero_CoverageMode:
84            coverage = 0;
85        case kAllOnes_CoverageMode:
86            coverage = 0xff;
87            break;
88        case kRandom_CoverageMode:
89            coverage = random->nextULessThan(256);
90            break;
91    }
92    return coverage;
93}
94
95#endif
96#endif
97