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 8e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com#include "SkMetaData.h" 98f6884aab8aecd7657cf3f9cdbc682f0deca29c5tfarina@chromium.org#include "Test.h" 1087f3ba4847aa575016eb3a21e944197d757df8c0halcanary#include "SkRefCnt.h" 11e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com 12e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.comstatic void test_ptrs(skiatest::Reporter* reporter) { 13e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com SkRefCnt ref; 14bbb61d7268b26d240afde2c924cb7d1370aa4071mtklein REPORTER_ASSERT(reporter, ref.unique()); 15e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com 16e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com { 17e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com SkMetaData md0, md1; 18e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com const char name[] = "refcnt"; 19e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com 20e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com md0.setRefCnt(name, &ref); 21e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com REPORTER_ASSERT(reporter, md0.findRefCnt(name)); 22e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com REPORTER_ASSERT(reporter, md0.hasRefCnt(name, &ref)); 23bbb61d7268b26d240afde2c924cb7d1370aa4071mtklein REPORTER_ASSERT(reporter, !ref.unique()); 24e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com 25e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com md1 = md0; 26e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com REPORTER_ASSERT(reporter, md1.findRefCnt(name)); 27e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com REPORTER_ASSERT(reporter, md1.hasRefCnt(name, &ref)); 28bbb61d7268b26d240afde2c924cb7d1370aa4071mtklein REPORTER_ASSERT(reporter, !ref.unique()); 29e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com 30e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com REPORTER_ASSERT(reporter, md0.removeRefCnt(name)); 31e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com REPORTER_ASSERT(reporter, !md0.findRefCnt(name)); 32e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com REPORTER_ASSERT(reporter, !md0.hasRefCnt(name, &ref)); 33bbb61d7268b26d240afde2c924cb7d1370aa4071mtklein REPORTER_ASSERT(reporter, !ref.unique()); 34e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com } 35bbb61d7268b26d240afde2c924cb7d1370aa4071mtklein REPORTER_ASSERT(reporter, ref.unique()); 36e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com} 37e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com 38e4fafb146e85cdfcf9d5418597b6818aa0754adatfarina@chromium.orgDEF_TEST(MetaData, reporter) { 39e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com SkMetaData m1; 40d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 41e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com REPORTER_ASSERT(reporter, !m1.findS32("int")); 42e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com REPORTER_ASSERT(reporter, !m1.findScalar("scalar")); 43e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com REPORTER_ASSERT(reporter, !m1.findString("hello")); 44e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com REPORTER_ASSERT(reporter, !m1.removeS32("int")); 45e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com REPORTER_ASSERT(reporter, !m1.removeScalar("scalar")); 46e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com REPORTER_ASSERT(reporter, !m1.removeString("hello")); 47e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com REPORTER_ASSERT(reporter, !m1.removeString("true")); 48e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com REPORTER_ASSERT(reporter, !m1.removeString("false")); 49d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 50e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com m1.setS32("int", 12345); 51e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com m1.setScalar("scalar", SK_Scalar1 * 42); 52e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com m1.setString("hello", "world"); 53e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com m1.setPtr("ptr", &m1); 54e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com m1.setBool("true", true); 55e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com m1.setBool("false", false); 56d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 57e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com int32_t n; 58e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com SkScalar s; 59d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 60e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com m1.setScalar("scalar", SK_Scalar1/2); 61d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 62e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com REPORTER_ASSERT(reporter, m1.findS32("int", &n) && n == 12345); 63e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com REPORTER_ASSERT(reporter, m1.findScalar("scalar", &s) && s == SK_Scalar1/2); 64e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com REPORTER_ASSERT(reporter, !strcmp(m1.findString("hello"), "world")); 65e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com REPORTER_ASSERT(reporter, m1.hasBool("true", true)); 66e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com REPORTER_ASSERT(reporter, m1.hasBool("false", false)); 67d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 68e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com SkMetaData::Iter iter(m1); 69e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com const char* name; 70d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 71e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com static const struct { 72e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com const char* fName; 73e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com SkMetaData::Type fType; 74e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com int fCount; 75e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com } gElems[] = { 76e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com { "int", SkMetaData::kS32_Type, 1 }, 77e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com { "scalar", SkMetaData::kScalar_Type, 1 }, 78e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com { "ptr", SkMetaData::kPtr_Type, 1 }, 79e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com { "hello", SkMetaData::kString_Type, sizeof("world") }, 80e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com { "true", SkMetaData::kBool_Type, 1 }, 81e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com { "false", SkMetaData::kBool_Type, 1 } 82e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com }; 83d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 84e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com int loop = 0; 85e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com int count; 86e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com SkMetaData::Type t; 872880df2609eba09b555ca37be04b6ad89290c765Tom Hudson while ((name = iter.next(&t, &count)) != nullptr) 88e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com { 89e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com int match = 0; 90e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com for (unsigned i = 0; i < SK_ARRAY_COUNT(gElems); i++) 91e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com { 92e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com if (!strcmp(name, gElems[i].fName)) 93e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com { 94e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com match += 1; 95e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com REPORTER_ASSERT(reporter, gElems[i].fType == t); 96e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com REPORTER_ASSERT(reporter, gElems[i].fCount == count); 97e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com } 98e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com } 99e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com REPORTER_ASSERT(reporter, match == 1); 100e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com loop += 1; 101e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com } 102e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com REPORTER_ASSERT(reporter, loop == SK_ARRAY_COUNT(gElems)); 103d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 104e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com REPORTER_ASSERT(reporter, m1.removeS32("int")); 105e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com REPORTER_ASSERT(reporter, m1.removeScalar("scalar")); 106e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com REPORTER_ASSERT(reporter, m1.removeString("hello")); 107e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com REPORTER_ASSERT(reporter, m1.removeBool("true")); 108e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com REPORTER_ASSERT(reporter, m1.removeBool("false")); 109d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 110e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com REPORTER_ASSERT(reporter, !m1.findS32("int")); 111e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com REPORTER_ASSERT(reporter, !m1.findScalar("scalar")); 112e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com REPORTER_ASSERT(reporter, !m1.findString("hello")); 113e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com REPORTER_ASSERT(reporter, !m1.findBool("true")); 114e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com REPORTER_ASSERT(reporter, !m1.findBool("false")); 115e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com 116e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com test_ptrs(reporter); 117e733071abeb9cce9f524f5a85851bc7fbb8d867breed@google.com} 118