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