2 * Copyright 2011 Google Inc.
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
11 class TestRC : public SkRefCnt {
13 SK_DECLARE_INST_COUNT(TestRC)
15 typedef SkRefCnt INHERITED;
18 DEF_TEST(RefDict, reporter) {
22 REPORTER_ASSERT(reporter, NULL == dict.find(NULL));
23 REPORTER_ASSERT(reporter, NULL == dict.find("foo"));
24 REPORTER_ASSERT(reporter, NULL == dict.find("bar"));
26 dict.set("foo", &data0);
27 REPORTER_ASSERT(reporter, &data0 == dict.find("foo"));
28 REPORTER_ASSERT(reporter, 2 == data0.getRefCnt());
30 dict.set("foo", &data0);
31 REPORTER_ASSERT(reporter, &data0 == dict.find("foo"));
32 REPORTER_ASSERT(reporter, 2 == data0.getRefCnt());
34 dict.set("foo", &data1);
35 REPORTER_ASSERT(reporter, &data1 == dict.find("foo"));
36 REPORTER_ASSERT(reporter, 1 == data0.getRefCnt());
37 REPORTER_ASSERT(reporter, 2 == data1.getRefCnt());
39 dict.set("foo", NULL);
40 REPORTER_ASSERT(reporter, NULL == dict.find("foo"));
41 REPORTER_ASSERT(reporter, 1 == data0.getRefCnt());
42 REPORTER_ASSERT(reporter, 1 == data1.getRefCnt());
44 dict.set("foo", &data0);
45 dict.set("bar", &data1);
46 REPORTER_ASSERT(reporter, &data0 == dict.find("foo"));
47 REPORTER_ASSERT(reporter, &data1 == dict.find("bar"));
48 REPORTER_ASSERT(reporter, 2 == data0.getRefCnt());
49 REPORTER_ASSERT(reporter, 2 == data1.getRefCnt());
51 dict.set("foo", &data1);
52 REPORTER_ASSERT(reporter, &data1 == dict.find("foo"));
53 REPORTER_ASSERT(reporter, &data1 == dict.find("bar"));
54 REPORTER_ASSERT(reporter, 1 == data0.getRefCnt());
55 REPORTER_ASSERT(reporter, 3 == data1.getRefCnt());
58 REPORTER_ASSERT(reporter, NULL == dict.find("foo"));
59 REPORTER_ASSERT(reporter, NULL == dict.find("bar"));
60 REPORTER_ASSERT(reporter, 1 == data0.getRefCnt());
61 REPORTER_ASSERT(reporter, 1 == data1.getRefCnt());
65 REPORTER_ASSERT(reporter, NULL == d.find("foo"));
66 REPORTER_ASSERT(reporter, 1 == data0.getRefCnt());
68 REPORTER_ASSERT(reporter, &data0 == d.find("foo"));
69 REPORTER_ASSERT(reporter, 2 == data0.getRefCnt());
70 // let d go out of scope still with a ref on data0
72 // be sure d's destructor lowered data0's owner count back to 1
73 REPORTER_ASSERT(reporter, 1 == data0.getRefCnt());