| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 #include "Test.h" | 8 #include "Test.h" |
| 9 #include "SkData.h" | 9 #include "SkData.h" |
| 10 #include "SkDataTable.h" | 10 #include "SkDataTable.h" |
| 11 #include "SkOrderedReadBuffer.h" | 11 #include "SkOrderedReadBuffer.h" |
| 12 #include "SkOrderedWriteBuffer.h" | 12 #include "SkOrderedWriteBuffer.h" |
| 13 #include "SkOSFile.h" | 13 #include "SkOSFile.h" |
| 14 #include "SkStream.h" | 14 #include "SkStream.h" |
| 15 | 15 |
| 16 static void test_is_equal(skiatest::Reporter* reporter, | 16 static void test_is_equal(skiatest::Reporter* reporter, |
| 17 const SkDataTable* a, const SkDataTable* b) { | 17 const SkDataTable* a, const SkDataTable* b) { |
| 18 REPORTER_ASSERT(reporter, a->count() == b->count()); | 18 REPORTER_ASSERT(reporter, a->count() == b->count()); |
| 19 for (int i = 0; i < a->count(); ++i) { | 19 for (int i = 0; i < a->count(); ++i) { |
| 20 size_t sizea, sizeb; | 20 size_t sizea, sizeb; |
| 21 const void* mema = a->at(i, &sizea); | 21 const void* mema = a->at(i, &sizea); |
| 22 const void* memb = b->at(i, &sizeb); | 22 const void* memb = b->at(i, &sizeb); |
| 23 REPORTER_ASSERT(reporter, sizea == sizeb); | 23 REPORTER_ASSERT(reporter, sizea == sizeb); |
| 24 REPORTER_ASSERT(reporter, !memcmp(mema, memb, sizea)); | 24 REPORTER_ASSERT(reporter, !memcmp(mema, memb, sizea)); |
| 25 } | 25 } |
| 26 } | 26 } |
| 27 | 27 |
| 28 static void test_datatable_flatten(skiatest::Reporter* reporter, | |
| 29 SkDataTable* table) { | |
| 30 SkOrderedWriteBuffer wb(1024); | |
| 31 wb.writeFlattenable(table); | |
| 32 | |
| 33 size_t wsize = wb.size(); | |
| 34 SkAutoMalloc storage(wsize); | |
| 35 wb.writeToMemory(storage.get()); | |
| 36 | |
| 37 SkOrderedReadBuffer rb(storage.get(), wsize); | |
| 38 SkAutoTUnref<SkDataTable> newTable((SkDataTable*)rb.readFlattenable()); | |
| 39 | |
| 40 test_is_equal(reporter, table, newTable); | |
| 41 } | |
| 42 | |
| 43 static void test_datatable_is_empty(skiatest::Reporter* reporter, | 28 static void test_datatable_is_empty(skiatest::Reporter* reporter, |
| 44 SkDataTable* table) { | 29 SkDataTable* table) { |
| 45 REPORTER_ASSERT(reporter, table->isEmpty()); | 30 REPORTER_ASSERT(reporter, table->isEmpty()); |
| 46 REPORTER_ASSERT(reporter, 0 == table->count()); | 31 REPORTER_ASSERT(reporter, 0 == table->count()); |
| 47 test_datatable_flatten(reporter, table); | |
| 48 } | 32 } |
| 49 | 33 |
| 50 static void test_emptytable(skiatest::Reporter* reporter) { | 34 static void test_emptytable(skiatest::Reporter* reporter) { |
| 51 SkAutoTUnref<SkDataTable> table0(SkDataTable::NewEmpty()); | 35 SkAutoTUnref<SkDataTable> table0(SkDataTable::NewEmpty()); |
| 52 SkAutoTUnref<SkDataTable> table1(SkDataTable::NewCopyArrays(NULL, NULL, 0)); | 36 SkAutoTUnref<SkDataTable> table1(SkDataTable::NewCopyArrays(NULL, NULL, 0)); |
| 53 SkAutoTUnref<SkDataTable> table2(SkDataTable::NewCopyArray(NULL, 0, 0)); | 37 SkAutoTUnref<SkDataTable> table2(SkDataTable::NewCopyArray(NULL, 0, 0)); |
| 54 SkAutoTUnref<SkDataTable> table3(SkDataTable::NewArrayProc(NULL, 0, 0, | 38 SkAutoTUnref<SkDataTable> table3(SkDataTable::NewArrayProc(NULL, 0, 0, |
| 55 NULL, NULL)); | 39 NULL, NULL)); |
| 56 | 40 |
| 57 test_datatable_is_empty(reporter, table0); | 41 test_datatable_is_empty(reporter, table0); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 70 SkAutoTUnref<SkDataTable> itable(SkDataTable::NewCopyArray(idata, | 54 SkAutoTUnref<SkDataTable> itable(SkDataTable::NewCopyArray(idata, |
| 71 sizeof(idata[0]), | 55 sizeof(idata[0]), |
| 72 icount)); | 56 icount)); |
| 73 REPORTER_ASSERT(reporter, itable->count() == icount); | 57 REPORTER_ASSERT(reporter, itable->count() == icount); |
| 74 for (int i = 0; i < icount; ++i) { | 58 for (int i = 0; i < icount; ++i) { |
| 75 size_t size; | 59 size_t size; |
| 76 REPORTER_ASSERT(reporter, sizeof(int) == itable->atSize(i)); | 60 REPORTER_ASSERT(reporter, sizeof(int) == itable->atSize(i)); |
| 77 REPORTER_ASSERT(reporter, *itable->atT<int>(i, &size) == idata[i]); | 61 REPORTER_ASSERT(reporter, *itable->atT<int>(i, &size) == idata[i]); |
| 78 REPORTER_ASSERT(reporter, sizeof(int) == size); | 62 REPORTER_ASSERT(reporter, sizeof(int) == size); |
| 79 } | 63 } |
| 80 test_datatable_flatten(reporter, itable); | |
| 81 } | 64 } |
| 82 | 65 |
| 83 static void test_vartable(skiatest::Reporter* reporter) { | 66 static void test_vartable(skiatest::Reporter* reporter) { |
| 84 const char* str[] = { | 67 const char* str[] = { |
| 85 "", "a", "be", "see", "deigh", "ef", "ggggggggggggggggggggggggggg" | 68 "", "a", "be", "see", "deigh", "ef", "ggggggggggggggggggggggggggg" |
| 86 }; | 69 }; |
| 87 int count = SK_ARRAY_COUNT(str); | 70 int count = SK_ARRAY_COUNT(str); |
| 88 size_t sizes[SK_ARRAY_COUNT(str)]; | 71 size_t sizes[SK_ARRAY_COUNT(str)]; |
| 89 for (int i = 0; i < count; ++i) { | 72 for (int i = 0; i < count; ++i) { |
| 90 sizes[i] = strlen(str[i]) + 1; | 73 sizes[i] = strlen(str[i]) + 1; |
| 91 } | 74 } |
| 92 | 75 |
| 93 SkAutoTUnref<SkDataTable> table(SkDataTable::NewCopyArrays( | 76 SkAutoTUnref<SkDataTable> table(SkDataTable::NewCopyArrays( |
| 94 (const void*const*)str, sizes, count)); | 77 (const void*const*)str, sizes, count)); |
| 95 | 78 |
| 96 REPORTER_ASSERT(reporter, table->count() == count); | 79 REPORTER_ASSERT(reporter, table->count() == count); |
| 97 for (int i = 0; i < count; ++i) { | 80 for (int i = 0; i < count; ++i) { |
| 98 size_t size; | 81 size_t size; |
| 99 REPORTER_ASSERT(reporter, table->atSize(i) == sizes[i]); | 82 REPORTER_ASSERT(reporter, table->atSize(i) == sizes[i]); |
| 100 REPORTER_ASSERT(reporter, !strcmp(table->atT<const char>(i, &size), | 83 REPORTER_ASSERT(reporter, !strcmp(table->atT<const char>(i, &size), |
| 101 str[i])); | 84 str[i])); |
| 102 REPORTER_ASSERT(reporter, size == sizes[i]); | 85 REPORTER_ASSERT(reporter, size == sizes[i]); |
| 103 | 86 |
| 104 const char* s = table->atStr(i); | 87 const char* s = table->atStr(i); |
| 105 REPORTER_ASSERT(reporter, strlen(s) == strlen(str[i])); | 88 REPORTER_ASSERT(reporter, strlen(s) == strlen(str[i])); |
| 106 } | 89 } |
| 107 test_datatable_flatten(reporter, table); | |
| 108 } | 90 } |
| 109 | 91 |
| 110 static void test_tablebuilder(skiatest::Reporter* reporter) { | 92 static void test_tablebuilder(skiatest::Reporter* reporter) { |
| 111 const char* str[] = { | 93 const char* str[] = { |
| 112 "", "a", "be", "see", "deigh", "ef", "ggggggggggggggggggggggggggg" | 94 "", "a", "be", "see", "deigh", "ef", "ggggggggggggggggggggggggggg" |
| 113 }; | 95 }; |
| 114 int count = SK_ARRAY_COUNT(str); | 96 int count = SK_ARRAY_COUNT(str); |
| 115 | 97 |
| 116 SkDataTableBuilder builder(16); | 98 SkDataTableBuilder builder(16); |
| 117 | 99 |
| 118 for (int i = 0; i < count; ++i) { | 100 for (int i = 0; i < count; ++i) { |
| 119 builder.append(str[i], strlen(str[i]) + 1); | 101 builder.append(str[i], strlen(str[i]) + 1); |
| 120 } | 102 } |
| 121 SkAutoTUnref<SkDataTable> table(builder.detachDataTable()); | 103 SkAutoTUnref<SkDataTable> table(builder.detachDataTable()); |
| 122 | 104 |
| 123 REPORTER_ASSERT(reporter, table->count() == count); | 105 REPORTER_ASSERT(reporter, table->count() == count); |
| 124 for (int i = 0; i < count; ++i) { | 106 for (int i = 0; i < count; ++i) { |
| 125 size_t size; | 107 size_t size; |
| 126 REPORTER_ASSERT(reporter, table->atSize(i) == strlen(str[i]) + 1); | 108 REPORTER_ASSERT(reporter, table->atSize(i) == strlen(str[i]) + 1); |
| 127 REPORTER_ASSERT(reporter, !strcmp(table->atT<const char>(i, &size), | 109 REPORTER_ASSERT(reporter, !strcmp(table->atT<const char>(i, &size), |
| 128 str[i])); | 110 str[i])); |
| 129 REPORTER_ASSERT(reporter, size == strlen(str[i]) + 1); | 111 REPORTER_ASSERT(reporter, size == strlen(str[i]) + 1); |
| 130 | 112 |
| 131 const char* s = table->atStr(i); | 113 const char* s = table->atStr(i); |
| 132 REPORTER_ASSERT(reporter, strlen(s) == strlen(str[i])); | 114 REPORTER_ASSERT(reporter, strlen(s) == strlen(str[i])); |
| 133 } | 115 } |
| 134 test_datatable_flatten(reporter, table); | |
| 135 } | 116 } |
| 136 | 117 |
| 137 static void test_globaltable(skiatest::Reporter* reporter) { | 118 static void test_globaltable(skiatest::Reporter* reporter) { |
| 138 static const int gData[] = { | 119 static const int gData[] = { |
| 139 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 | 120 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 |
| 140 }; | 121 }; |
| 141 int count = SK_ARRAY_COUNT(gData); | 122 int count = SK_ARRAY_COUNT(gData); |
| 142 | 123 |
| 143 SkAutoTUnref<SkDataTable> table(SkDataTable::NewArrayProc(gData, | 124 SkAutoTUnref<SkDataTable> table(SkDataTable::NewArrayProc(gData, |
| 144 sizeof(gData[0]), count, NULL, NULL)); | 125 sizeof(gData[0]), count, NULL, NULL)); |
| 145 | 126 |
| 146 REPORTER_ASSERT(reporter, table->count() == count); | 127 REPORTER_ASSERT(reporter, table->count() == count); |
| 147 for (int i = 0; i < count; ++i) { | 128 for (int i = 0; i < count; ++i) { |
| 148 size_t size; | 129 size_t size; |
| 149 REPORTER_ASSERT(reporter, table->atSize(i) == sizeof(int)); | 130 REPORTER_ASSERT(reporter, table->atSize(i) == sizeof(int)); |
| 150 REPORTER_ASSERT(reporter, *table->atT<const char>(i, &size) == i); | 131 REPORTER_ASSERT(reporter, *table->atT<const char>(i, &size) == i); |
| 151 REPORTER_ASSERT(reporter, sizeof(int) == size); | 132 REPORTER_ASSERT(reporter, sizeof(int) == size); |
| 152 } | 133 } |
| 153 test_datatable_flatten(reporter, table); | |
| 154 } | 134 } |
| 155 | 135 |
| 156 static void TestDataTable(skiatest::Reporter* reporter) { | 136 static void TestDataTable(skiatest::Reporter* reporter) { |
| 157 test_emptytable(reporter); | 137 test_emptytable(reporter); |
| 158 test_simpletable(reporter); | 138 test_simpletable(reporter); |
| 159 test_vartable(reporter); | 139 test_vartable(reporter); |
| 160 test_tablebuilder(reporter); | 140 test_tablebuilder(reporter); |
| 161 test_globaltable(reporter); | 141 test_globaltable(reporter); |
| 162 } | 142 } |
| 163 | 143 |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 251 assert_len(reporter, tmp, 0); | 231 assert_len(reporter, tmp, 0); |
| 252 tmp->unref(); | 232 tmp->unref(); |
| 253 | 233 |
| 254 test_cstring(reporter); | 234 test_cstring(reporter); |
| 255 test_files(reporter); | 235 test_files(reporter); |
| 256 } | 236 } |
| 257 | 237 |
| 258 #include "TestClassDef.h" | 238 #include "TestClassDef.h" |
| 259 DEFINE_TESTCLASS("Data", DataTestClass, TestData) | 239 DEFINE_TESTCLASS("Data", DataTestClass, TestData) |
| 260 DEFINE_TESTCLASS("DataTable", DataTableTestClass, TestDataTable) | 240 DEFINE_TESTCLASS("DataTable", DataTableTestClass, TestDataTable) |
| OLD | NEW |