From 061cc21b61e04ecb6120a6e66ea04f89b82200c2 Mon Sep 17 00:00:00 2001 From: Jim Van Verth Date: Wed, 11 Jul 2018 14:09:09 -0400 Subject: Add more tests for PolyUtils * Add fuzzer * Add bench tests * Add additional unit test * Fix some bugs these exposed. Bug: skia: Change-Id: I6c587c92cb6cff32ab8300020b78f9f247d2bf64 Reviewed-on: https://skia-review.googlesource.com/139169 Commit-Queue: Jim Van Verth Reviewed-by: Kevin Lubick Reviewed-by: Robert Phillips --- fuzz/FuzzPolyUtils.cpp | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 fuzz/FuzzPolyUtils.cpp (limited to 'fuzz/FuzzPolyUtils.cpp') diff --git a/fuzz/FuzzPolyUtils.cpp b/fuzz/FuzzPolyUtils.cpp new file mode 100644 index 0000000000..fda5b5f34a --- /dev/null +++ b/fuzz/FuzzPolyUtils.cpp @@ -0,0 +1,48 @@ +/* + * Copyright 2018 Google LLC + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "Fuzz.h" +#include "FuzzCommon.h" +#include "SkPolyUtils.h" + +void inline ignoreResult(bool ) {} + +DEF_FUZZ(PolyUtils, fuzz) { + int count; + fuzz->nextRange(&count, 0, 512); + SkAutoSTMalloc<64, SkPoint> polygon(count); + for (int index = 0; index < count; ++index) { + fuzz->next(&polygon[index].fX, &polygon[index].fY); + } + + ignoreResult(SkGetPolygonWinding(polygon, count)); + ignoreResult(SkIsConvexPolygon(polygon, count)); + ignoreResult(SkIsSimplePolygon(polygon, count)); + + SkScalar inset; + fuzz->next(&inset); + SkTDArray output; + ignoreResult(SkInsetConvexPolygon(polygon, count, inset, &output)); + std::function distanceFunc = [fuzz](const SkPoint& p) { + SkScalar retVal; + fuzz->next(&retVal); + return retVal; + }; + ignoreResult(SkInsetConvexPolygon(polygon, count, distanceFunc, &output)); + + SkScalar offset; + fuzz->next(&offset); + ignoreResult(SkOffsetSimplePolygon(polygon, count, offset, &output)); + ignoreResult(SkOffsetSimplePolygon(polygon, count, distanceFunc, &output)); + + SkAutoSTMalloc<64, uint16_t> indexMap(count); + for (int index = 0; index < count; ++index) { + fuzz->next(&indexMap[index]); + } + SkTDArray outputIndices; + ignoreResult(SkTriangulateSimplePolygon(polygon, indexMap, count, &outputIndices)); +} -- cgit v1.2.3