1b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com/* 2b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com * Copyright 2012 Google Inc. 3b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com * 4b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com * Use of this source code is governed by a BSD-style license that can be 5b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com * found in the LICENSE file. 6b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com */ 7b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com 8b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com#include "Simplify.h" 9b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com 10b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.comnamespace SimplifyFindTopTest { 11b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com 12b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com#include "Simplify.cpp" 13b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com 14b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com} // end of SimplifyFindTopTest namespace 15b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com 16b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com#include "Intersection_Tests.h" 17b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com 18b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.comstatic const SimplifyFindTopTest::Segment* testCommon( 19b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com SkTArray<SimplifyFindTopTest::Contour>& contours, 201577e8f9c5bc8436cc71d3438c6d0b9f02c38338caryclark@google.com int& index, int& end) { 21b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com SkTDArray<SimplifyFindTopTest::Contour*> contourList; 224eeda37a7456876cb8d509a4ea43c7f4c684477acaryclark@google.com makeContourList(contours, contourList, false, false); 2365f9f0a1664a9cb38157ccfbcc3e0e936af0a58ecaryclark@google.com addIntersectTs(contourList[0], contourList[0]); 24b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com if (contours.count() > 1) { 25b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com SkASSERT(contours.count() == 2); 2665f9f0a1664a9cb38157ccfbcc3e0e936af0a58ecaryclark@google.com addIntersectTs(contourList[0], contourList[1]); 2765f9f0a1664a9cb38157ccfbcc3e0e936af0a58ecaryclark@google.com addIntersectTs(contourList[1], contourList[1]); 28b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com } 29b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com fixOtherTIndex(contourList); 30fb51afb03e76c5701fffaa847584a8b7b2c18a7ecaryclark@google.com#if SORTABLE_CONTOURS // old way 31534aa5b9460639a09b9dc30d29e77782e44b8fffcaryclark@google.com SimplifyFindTopTest::Segment* topStart = findTopContour(contourList); 32b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com const SimplifyFindTopTest::Segment* topSegment = topStart->findTop(index, 331577e8f9c5bc8436cc71d3438c6d0b9f02c38338caryclark@google.com end); 34fb51afb03e76c5701fffaa847584a8b7b2c18a7ecaryclark@google.com#else 35f839c0359c308fd06895d9f73fc12c4f3869e399caryclark@google.com SkPoint bestXY = {SK_ScalarMin, SK_ScalarMin}; 36db0b3e099f888213535c4ad4c785b84544309033caryclark@google.com bool done, unsortable = false; 37f839c0359c308fd06895d9f73fc12c4f3869e399caryclark@google.com const SimplifyFindTopTest::Segment* topSegment = 38db0b3e099f888213535c4ad4c785b84544309033caryclark@google.com findSortableTop(contourList, index, end, bestXY, unsortable, done, true); 39fb51afb03e76c5701fffaa847584a8b7b2c18a7ecaryclark@google.com#endif 40b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com return topSegment; 41b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com} 42b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com 43b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.comstatic void test(const SkPath& path) { 44b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com SkTArray<SimplifyFindTopTest::Contour> contours; 45b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com SimplifyFindTopTest::EdgeBuilder builder(path, contours); 461577e8f9c5bc8436cc71d3438c6d0b9f02c38338caryclark@google.com int index, end; 4765f9f0a1664a9cb38157ccfbcc3e0e936af0a58ecaryclark@google.com testCommon(contours, index, end); 481577e8f9c5bc8436cc71d3438c6d0b9f02c38338caryclark@google.com SkASSERT(index + 1 == end); 49b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com} 50b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com 51b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.comstatic void test(const SkPath& path, SkScalar x1, SkScalar y1, 52b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com SkScalar x2, SkScalar y2) { 53b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com SkTArray<SimplifyFindTopTest::Contour> contours; 54b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com SimplifyFindTopTest::EdgeBuilder builder(path, contours); 551577e8f9c5bc8436cc71d3438c6d0b9f02c38338caryclark@google.com int index, end; 56b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com const SimplifyFindTopTest::Segment* topSegment = 5765f9f0a1664a9cb38157ccfbcc3e0e936af0a58ecaryclark@google.com testCommon(contours, index, end); 581577e8f9c5bc8436cc71d3438c6d0b9f02c38338caryclark@google.com SkPoint pts[2]; 591577e8f9c5bc8436cc71d3438c6d0b9f02c38338caryclark@google.com double firstT = topSegment->t(index); 60a3f05facab01712a1b58e60a70b0dbdb90a39830caryclark@google.com pts[0] = topSegment->xyAtT(&topSegment->span(index)); 611577e8f9c5bc8436cc71d3438c6d0b9f02c38338caryclark@google.com int direction = index < end ? 1 : -1; 621577e8f9c5bc8436cc71d3438c6d0b9f02c38338caryclark@google.com do { 631577e8f9c5bc8436cc71d3438c6d0b9f02c38338caryclark@google.com index += direction; 641577e8f9c5bc8436cc71d3438c6d0b9f02c38338caryclark@google.com double nextT = topSegment->t(index); 651577e8f9c5bc8436cc71d3438c6d0b9f02c38338caryclark@google.com if (nextT == firstT) { 661577e8f9c5bc8436cc71d3438c6d0b9f02c38338caryclark@google.com continue; 671577e8f9c5bc8436cc71d3438c6d0b9f02c38338caryclark@google.com } 68a3f05facab01712a1b58e60a70b0dbdb90a39830caryclark@google.com pts[1] = topSegment->xyAtT(&topSegment->span(index)); 691577e8f9c5bc8436cc71d3438c6d0b9f02c38338caryclark@google.com if (pts[0] != pts[1]) { 701577e8f9c5bc8436cc71d3438c6d0b9f02c38338caryclark@google.com break; 711577e8f9c5bc8436cc71d3438c6d0b9f02c38338caryclark@google.com } 721577e8f9c5bc8436cc71d3438c6d0b9f02c38338caryclark@google.com } while (true); 731577e8f9c5bc8436cc71d3438c6d0b9f02c38338caryclark@google.com SkASSERT(pts[0].fX == x1); 741577e8f9c5bc8436cc71d3438c6d0b9f02c38338caryclark@google.com SkASSERT(pts[0].fY == y1); 751577e8f9c5bc8436cc71d3438c6d0b9f02c38338caryclark@google.com SkASSERT(pts[1].fX == x2); 761577e8f9c5bc8436cc71d3438c6d0b9f02c38338caryclark@google.com SkASSERT(pts[1].fY == y2); 77b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com} 78b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com 79b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.comstatic void testLine1() { 80b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com SkPath path; 81b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com path.moveTo(2,0); 82b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com path.lineTo(1,1); 83b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com path.lineTo(0,0); 84b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com path.close(); 85b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com test(path); 86b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com} 87b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com 88b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.comstatic void addInnerCWTriangle(SkPath& path) { 89b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com path.moveTo(3,0); 90b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com path.lineTo(4,1); 91b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com path.lineTo(2,1); 92b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com path.close(); 93b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com} 94b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com 95b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.comstatic void addInnerCCWTriangle(SkPath& path) { 96b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com path.moveTo(3,0); 97b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com path.lineTo(2,1); 98b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com path.lineTo(4,1); 99b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com path.close(); 100b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com} 101b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com 102b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.comstatic void addOuterCWTriangle(SkPath& path) { 103b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com path.moveTo(3,0); 104b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com path.lineTo(6,2); 105b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com path.lineTo(0,2); 106b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com path.close(); 107b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com} 108b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com 109b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.comstatic void addOuterCCWTriangle(SkPath& path) { 110b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com path.moveTo(3,0); 111b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com path.lineTo(0,2); 112b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com path.lineTo(6,2); 113b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com path.close(); 114b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com} 115b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com 116b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.comstatic void testLine2() { 117b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com SkPath path; 118b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com addInnerCWTriangle(path); 119b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com addOuterCWTriangle(path); 1201577e8f9c5bc8436cc71d3438c6d0b9f02c38338caryclark@google.com test(path, 0, 2, 3, 0); 121b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com} 122b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com 123b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.comstatic void testLine3() { 124b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com SkPath path; 125b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com addOuterCWTriangle(path); 126b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com addInnerCWTriangle(path); 1271577e8f9c5bc8436cc71d3438c6d0b9f02c38338caryclark@google.com test(path, 0, 2, 3, 0); 128b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com} 129b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com 130b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.comstatic void testLine4() { 131b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com SkPath path; 132b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com addInnerCCWTriangle(path); 133b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com addOuterCWTriangle(path); 1341577e8f9c5bc8436cc71d3438c6d0b9f02c38338caryclark@google.com test(path, 0, 2, 3, 0); 135b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com} 136b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com 137b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.comstatic void testLine5() { 138b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com SkPath path; 139b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com addOuterCWTriangle(path); 140b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com addInnerCCWTriangle(path); 1411577e8f9c5bc8436cc71d3438c6d0b9f02c38338caryclark@google.com test(path, 0, 2, 3, 0); 142b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com} 143b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com 144b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.comstatic void testLine6() { 145b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com SkPath path; 146b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com addInnerCWTriangle(path); 147b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com addOuterCCWTriangle(path); 1481577e8f9c5bc8436cc71d3438c6d0b9f02c38338caryclark@google.com test(path, 0, 2, 3, 0); 149b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com} 150b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com 151b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.comstatic void testLine7() { 152b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com SkPath path; 153b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com addOuterCCWTriangle(path); 154b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com addInnerCWTriangle(path); 1551577e8f9c5bc8436cc71d3438c6d0b9f02c38338caryclark@google.com test(path, 0, 2, 3, 0); 156b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com} 157b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com 158b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.comstatic void testLine8() { 159b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com SkPath path; 160b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com addInnerCCWTriangle(path); 161b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com addOuterCCWTriangle(path); 1621577e8f9c5bc8436cc71d3438c6d0b9f02c38338caryclark@google.com test(path, 0, 2, 3, 0); 163b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com} 164b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com 165b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.comstatic void testLine9() { 166b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com SkPath path; 167b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com addOuterCCWTriangle(path); 168b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com addInnerCCWTriangle(path); 1691577e8f9c5bc8436cc71d3438c6d0b9f02c38338caryclark@google.com test(path, 0, 2, 3, 0); 170b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com} 171b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com 172b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.comstatic void testQuads() { 173b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com SkPath path; 174b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com path.moveTo(2,0); 175b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com path.quadTo(1,1, 0,0); 176b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com path.close(); 177b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com test(path); 178b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com} 179b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com 180b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.comstatic void testCubics() { 181b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com SkPath path; 182b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com path.moveTo(2,0); 183b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com path.cubicTo(2,3, 1,1, 0,0); 184b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com path.close(); 185b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com test(path); 186b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com} 187b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com 188b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.comstatic void (*tests[])() = { 189b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com testLine1, 190b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com testLine2, 191b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com testLine3, 192b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com testLine4, 193b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com testLine5, 194b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com testLine6, 195b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com testLine7, 196b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com testLine8, 197b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com testLine9, 198b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com testQuads, 199b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com testCubics 200b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com}; 201b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com 202b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.comstatic const size_t testCount = sizeof(tests) / sizeof(tests[0]); 203b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com 204b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.comstatic void (*firstTest)() = 0; 205b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.comstatic bool skipAll = false; 206b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com 207b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.comvoid SimplifyFindTop_Test() { 208b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com if (skipAll) { 209b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com return; 210b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com } 211b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com size_t index = 0; 212b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com if (firstTest) { 213b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com while (index < testCount && tests[index] != firstTest) { 214b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com ++index; 215b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com } 216b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com } 217b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com bool firstTestComplete = false; 218b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com for ( ; index < testCount; ++index) { 219b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com (*tests[index])(); 220b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com firstTestComplete = true; 221b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com } 222b45a1b46ee25e9b19800b028bb1ca925212ac7b4caryclark@google.com} 223