static void TestPackedUInt(skiatest::Reporter* reporter) { // we know that packeduint tries to write 1, 2 or 4 bytes for the length, // so we test values around each of those transitions (and a few others) const size_t sizes[] = { 0, 1, 2, 0xFC, 0xFD, 0xFE, 0xFF, 0x100, 0x101, 32767, 32768, 32769, 0xFFFD, 0xFFFE, 0xFFFF, 0x10000, 0x10001, 0xFFFFFD, 0xFFFFFE, 0xFFFFFF, 0x1000000, 0x1000001, 0x7FFFFFFE, 0x7FFFFFFF, 0x80000000, 0x80000001, 0xFFFFFFFE, 0xFFFFFFFF }; size_t i; SkDynamicMemoryWStream wstream; for (i = 0; i < SK_ARRAY_COUNT(sizes); ++i) { bool success = wstream.writePackedUInt(sizes[i]); REPORTER_ASSERT(reporter, success); } std::unique_ptr<SkStreamAsset> rstream(wstream.detachAsStream()); for (i = 0; i < SK_ARRAY_COUNT(sizes); ++i) { size_t n; if (!rstream->readPackedUInt(&n)) { ERRORF(reporter, "[%d] sizes:%x could not be read\n", i, sizes[i]); } if (sizes[i] != n) { ERRORF(reporter, "[%d] sizes:%x != n:%x\n", i, sizes[i], n); } } }