1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc. 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */ 7e4fafb146e85cdfcf9d5418597b6818aa0754adatfarina@chromium.org 8ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com#include "SkRandom.h" 9b00cd7258c5ccf856c0dc72840e082306251b278reed@android.com#include "SkRefCnt.h" 10ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com#include "SkTSearch.h" 11ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com#include "SkTSort.h" 12ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com#include "SkUtils.h" 138f6884aab8aecd7657cf3f9cdbc682f0deca29c5tfarina@chromium.org#include "Test.h" 14ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com 15b00cd7258c5ccf856c0dc72840e082306251b278reed@android.comclass RefClass : public SkRefCnt { 16b00cd7258c5ccf856c0dc72840e082306251b278reed@android.compublic: 17a22e2117e44efa4298dd0eb6df304a8166c8e9c3robertphillips@google.com SK_DECLARE_INST_COUNT(RefClass) 18a22e2117e44efa4298dd0eb6df304a8166c8e9c3robertphillips@google.com 19b00cd7258c5ccf856c0dc72840e082306251b278reed@android.com RefClass(int n) : fN(n) {} 20b00cd7258c5ccf856c0dc72840e082306251b278reed@android.com int get() const { return fN; } 21b00cd7258c5ccf856c0dc72840e082306251b278reed@android.com 22b00cd7258c5ccf856c0dc72840e082306251b278reed@android.comprivate: 23b00cd7258c5ccf856c0dc72840e082306251b278reed@android.com int fN; 24a22e2117e44efa4298dd0eb6df304a8166c8e9c3robertphillips@google.com 25a22e2117e44efa4298dd0eb6df304a8166c8e9c3robertphillips@google.com typedef SkRefCnt INHERITED; 26b00cd7258c5ccf856c0dc72840e082306251b278reed@android.com}; 27b00cd7258c5ccf856c0dc72840e082306251b278reed@android.com 28a67573e25faa81ea65e6fc368f66d3f0c0a5f189reed@google.comstatic void test_autounref(skiatest::Reporter* reporter) { 29a67573e25faa81ea65e6fc368f66d3f0c0a5f189reed@google.com RefClass obj(0); 30a67573e25faa81ea65e6fc368f66d3f0c0a5f189reed@google.com REPORTER_ASSERT(reporter, 1 == obj.getRefCnt()); 31a67573e25faa81ea65e6fc368f66d3f0c0a5f189reed@google.com 32a67573e25faa81ea65e6fc368f66d3f0c0a5f189reed@google.com SkAutoTUnref<RefClass> tmp(&obj); 33a67573e25faa81ea65e6fc368f66d3f0c0a5f189reed@google.com REPORTER_ASSERT(reporter, &obj == tmp.get()); 34a67573e25faa81ea65e6fc368f66d3f0c0a5f189reed@google.com REPORTER_ASSERT(reporter, 1 == obj.getRefCnt()); 35a67573e25faa81ea65e6fc368f66d3f0c0a5f189reed@google.com 36a67573e25faa81ea65e6fc368f66d3f0c0a5f189reed@google.com REPORTER_ASSERT(reporter, &obj == tmp.detach()); 37a67573e25faa81ea65e6fc368f66d3f0c0a5f189reed@google.com REPORTER_ASSERT(reporter, 1 == obj.getRefCnt()); 38a67573e25faa81ea65e6fc368f66d3f0c0a5f189reed@google.com REPORTER_ASSERT(reporter, NULL == tmp.detach()); 39a67573e25faa81ea65e6fc368f66d3f0c0a5f189reed@google.com REPORTER_ASSERT(reporter, NULL == tmp.get()); 40a67573e25faa81ea65e6fc368f66d3f0c0a5f189reed@google.com 41a67573e25faa81ea65e6fc368f66d3f0c0a5f189reed@google.com obj.ref(); 42a67573e25faa81ea65e6fc368f66d3f0c0a5f189reed@google.com REPORTER_ASSERT(reporter, 2 == obj.getRefCnt()); 43a67573e25faa81ea65e6fc368f66d3f0c0a5f189reed@google.com { 44a67573e25faa81ea65e6fc368f66d3f0c0a5f189reed@google.com SkAutoTUnref<RefClass> tmp2(&obj); 45a67573e25faa81ea65e6fc368f66d3f0c0a5f189reed@google.com } 46a67573e25faa81ea65e6fc368f66d3f0c0a5f189reed@google.com REPORTER_ASSERT(reporter, 1 == obj.getRefCnt()); 47a67573e25faa81ea65e6fc368f66d3f0c0a5f189reed@google.com} 48a67573e25faa81ea65e6fc368f66d3f0c0a5f189reed@google.com 494d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.comstatic void test_autostarray(skiatest::Reporter* reporter) { 504d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com RefClass obj0(0); 514d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com RefClass obj1(1); 524d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com REPORTER_ASSERT(reporter, 1 == obj0.getRefCnt()); 534d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com REPORTER_ASSERT(reporter, 1 == obj1.getRefCnt()); 544d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com 554d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com { 564d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com SkAutoSTArray<2, SkRefPtr<RefClass> > tmp; 574d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com REPORTER_ASSERT(reporter, 0 == tmp.count()); 584d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com 594d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com tmp.reset(0); // test out reset(0) when already at 0 604d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com tmp.reset(4); // this should force a new allocation 614d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com REPORTER_ASSERT(reporter, 4 == tmp.count()); 624d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com tmp[0] = &obj0; 634d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com tmp[1] = &obj1; 644d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com REPORTER_ASSERT(reporter, 2 == obj0.getRefCnt()); 654d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com REPORTER_ASSERT(reporter, 2 == obj1.getRefCnt()); 664d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com 674d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com // test out reset with data in the array (and a new allocation) 684d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com tmp.reset(0); 694d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com REPORTER_ASSERT(reporter, 0 == tmp.count()); 704d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com REPORTER_ASSERT(reporter, 1 == obj0.getRefCnt()); 714d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com REPORTER_ASSERT(reporter, 1 == obj1.getRefCnt()); 729c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com 734d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com tmp.reset(2); // this should use the preexisting allocation 744d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com REPORTER_ASSERT(reporter, 2 == tmp.count()); 754d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com tmp[0] = &obj0; 764d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com tmp[1] = &obj1; 774d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com } 784d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com 794d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com // test out destructor with data in the array (and using existing allocation) 804d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com REPORTER_ASSERT(reporter, 1 == obj0.getRefCnt()); 814d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com REPORTER_ASSERT(reporter, 1 == obj1.getRefCnt()); 824d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com 834d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com { 844d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com // test out allocating ctor (this should allocate new memory) 854d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com SkAutoSTArray<2, SkRefPtr<RefClass> > tmp(4); 864d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com REPORTER_ASSERT(reporter, 4 == tmp.count()); 874d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com 884d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com tmp[0] = &obj0; 894d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com tmp[1] = &obj1; 904d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com REPORTER_ASSERT(reporter, 2 == obj0.getRefCnt()); 914d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com REPORTER_ASSERT(reporter, 2 == obj1.getRefCnt()); 924d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com 934d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com // Test out resut with data in the array and malloced storage 944d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com tmp.reset(0); 954d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com REPORTER_ASSERT(reporter, 1 == obj0.getRefCnt()); 964d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com REPORTER_ASSERT(reporter, 1 == obj1.getRefCnt()); 974d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com 984d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com tmp.reset(2); // this should use the preexisting storage 994d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com tmp[0] = &obj0; 1004d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com tmp[1] = &obj1; 1014d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com REPORTER_ASSERT(reporter, 2 == obj0.getRefCnt()); 1024d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com REPORTER_ASSERT(reporter, 2 == obj1.getRefCnt()); 1034d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com 1044d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com tmp.reset(4); // this should force a new malloc 1054d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com REPORTER_ASSERT(reporter, 1 == obj0.getRefCnt()); 1064d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com REPORTER_ASSERT(reporter, 1 == obj1.getRefCnt()); 1074d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com 1084d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com tmp[0] = &obj0; 1094d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com tmp[1] = &obj1; 1104d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com REPORTER_ASSERT(reporter, 2 == obj0.getRefCnt()); 1114d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com REPORTER_ASSERT(reporter, 2 == obj1.getRefCnt()); 1124d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com } 1134d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com 1144d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com REPORTER_ASSERT(reporter, 1 == obj0.getRefCnt()); 1154d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com REPORTER_ASSERT(reporter, 1 == obj1.getRefCnt()); 1164d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com} 1174d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com 118bcc56836ea31583bdf593d3c8c069efa0f43139depoger@google.com///////////////////////////////////////////////////////////////////////////// 119b00cd7258c5ccf856c0dc72840e082306251b278reed@android.com 120ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com#define kSEARCH_COUNT 91 121ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com 122ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.comstatic void test_search(skiatest::Reporter* reporter) { 123ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com int i, array[kSEARCH_COUNT]; 124e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org SkRandom rand; 125ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com 126ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com for (i = 0; i < kSEARCH_COUNT; i++) { 127ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com array[i] = rand.nextS(); 128ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com } 129ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com 130ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com SkTHeapSort<int>(array, kSEARCH_COUNT); 131ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com // make sure we got sorted properly 132ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com for (i = 1; i < kSEARCH_COUNT; i++) { 133ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com REPORTER_ASSERT(reporter, array[i-1] <= array[i]); 134ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com } 135ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com 136ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com // make sure we can find all of our values 137ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com for (i = 0; i < kSEARCH_COUNT; i++) { 138ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com int index = SkTSearch<int>(array, kSEARCH_COUNT, array[i], sizeof(int)); 139ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com REPORTER_ASSERT(reporter, index == i); 140ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com } 141ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com 142ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com // make sure that random values are either found, or the correct 143ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com // insertion index is returned 144ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com for (i = 0; i < 10000; i++) { 145ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com int value = rand.nextS(); 146ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com int index = SkTSearch<int>(array, kSEARCH_COUNT, value, sizeof(int)); 147ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com 148ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com if (index >= 0) { 149ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com REPORTER_ASSERT(reporter, 150ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com index < kSEARCH_COUNT && array[index] == value); 151ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com } else { 152ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com index = ~index; 153ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com REPORTER_ASSERT(reporter, index <= kSEARCH_COUNT); 154ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com if (index < kSEARCH_COUNT) { 155ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com REPORTER_ASSERT(reporter, value < array[index]); 156ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com if (index > 0) { 157ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com REPORTER_ASSERT(reporter, value > array[index - 1]); 158ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com } 159ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com } else { 160ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com // we should append the new value 161ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com REPORTER_ASSERT(reporter, value > array[kSEARCH_COUNT - 1]); 162ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com } 163ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com } 164ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com } 165ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com} 166ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com 167ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.comstatic void test_utf16(skiatest::Reporter* reporter) { 168ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com static const SkUnichar gUni[] = { 169ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com 0x10000, 0x18080, 0x20202, 0xFFFFF, 0x101234 170ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com }; 17180e39a77b16f4396eed230efea1d0b2fc8cbfb00reed@android.com 172ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com uint16_t buf[2]; 17380e39a77b16f4396eed230efea1d0b2fc8cbfb00reed@android.com 174ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com for (size_t i = 0; i < SK_ARRAY_COUNT(gUni); i++) { 175ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com size_t count = SkUTF16_FromUnichar(gUni[i], buf); 176ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com REPORTER_ASSERT(reporter, count == 2); 177ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com size_t count2 = SkUTF16_CountUnichars(buf, 2); 178ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com REPORTER_ASSERT(reporter, count2 == 1); 179ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com const uint16_t* ptr = buf; 180ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com SkUnichar c = SkUTF16_NextUnichar(&ptr); 181ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com REPORTER_ASSERT(reporter, c == gUni[i]); 182ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com REPORTER_ASSERT(reporter, ptr - buf == 2); 183ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com } 184ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com} 185ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com 186e4fafb146e85cdfcf9d5418597b6818aa0754adatfarina@chromium.orgDEF_TEST(Utils, reporter) { 187ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com static const struct { 188ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com const char* fUtf8; 189ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com SkUnichar fUni; 190ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com } gTest[] = { 191ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com { "a", 'a' }, 192ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com { "\x7f", 0x7f }, 193ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com { "\xC2\x80", 0x80 }, 194ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com { "\xC3\x83", (3 << 6) | 3 }, 195ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com { "\xDF\xBF", 0x7ff }, 196ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com { "\xE0\xA0\x80", 0x800 }, 197ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com { "\xE0\xB0\xB8", 0xC38 }, 198ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com { "\xE3\x83\x83", (3 << 12) | (3 << 6) | 3 }, 199ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com { "\xEF\xBF\xBF", 0xFFFF }, 200ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com { "\xF0\x90\x80\x80", 0x10000 }, 201ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com { "\xF3\x83\x83\x83", (3 << 18) | (3 << 12) | (3 << 6) | 3 } 202ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com }; 203ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com 204ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com for (size_t i = 0; i < SK_ARRAY_COUNT(gTest); i++) { 205ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com const char* p = gTest[i].fUtf8; 206ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com int n = SkUTF8_CountUnichars(p); 207ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com SkUnichar u0 = SkUTF8_ToUnichar(gTest[i].fUtf8); 208ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com SkUnichar u1 = SkUTF8_NextUnichar(&p); 209ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com 210ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com REPORTER_ASSERT(reporter, n == 1); 211ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com REPORTER_ASSERT(reporter, u0 == u1); 212ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com REPORTER_ASSERT(reporter, u0 == gTest[i].fUni); 213ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com REPORTER_ASSERT(reporter, 214ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com p - gTest[i].fUtf8 == (int)strlen(gTest[i].fUtf8)); 215ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com } 21680e39a77b16f4396eed230efea1d0b2fc8cbfb00reed@android.com 217ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com test_utf16(reporter); 218ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com test_search(reporter); 219a67573e25faa81ea65e6fc368f66d3f0c0a5f189reed@google.com test_autounref(reporter); 2204d3767373942c55be893d3bbbfe35e1975c2e1b4robertphillips@google.com test_autostarray(reporter); 221ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com} 222