ClipStackTest.cpp revision 80214e26c57c5fea954006400852e8999e201923
1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc. 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */ 8bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.com#include "Test.h" 9bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.com#include "SkClipStack.h" 101e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org#include "SkPath.h" 111e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org#include "SkRect.h" 121e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org 1380214e26c57c5fea954006400852e8999e201923robertphillips@google.com 1480214e26c57c5fea954006400852e8999e201923robertphillips@google.com 151e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.orgstatic void test_assign_and_comparison(skiatest::Reporter* reporter) { 161e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org SkClipStack s; 17d9f2dea5328c9ab455852f2e4928cca7c71c6b05reed@google.com bool doAA = false; 181e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org 1980214e26c57c5fea954006400852e8999e201923robertphillips@google.com REPORTER_ASSERT(reporter, 0 == s.getSaveCount()); 2080214e26c57c5fea954006400852e8999e201923robertphillips@google.com 211e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org // Build up a clip stack with a path, an empty clip, and a rect. 221e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org s.save(); 2380214e26c57c5fea954006400852e8999e201923robertphillips@google.com REPORTER_ASSERT(reporter, 1 == s.getSaveCount()); 2480214e26c57c5fea954006400852e8999e201923robertphillips@google.com 251e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org SkPath p; 261e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org p.moveTo(5, 6); 271e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org p.lineTo(7, 8); 281e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org p.lineTo(5, 9); 291e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org p.close(); 30d9f2dea5328c9ab455852f2e4928cca7c71c6b05reed@google.com s.clipDevPath(p, SkRegion::kIntersect_Op, doAA); 311e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org 321e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org s.save(); 3380214e26c57c5fea954006400852e8999e201923robertphillips@google.com REPORTER_ASSERT(reporter, 2 == s.getSaveCount()); 3480214e26c57c5fea954006400852e8999e201923robertphillips@google.com 351e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org SkRect r = SkRect::MakeLTRB(1, 2, 3, 4); 36d9f2dea5328c9ab455852f2e4928cca7c71c6b05reed@google.com s.clipDevRect(r, SkRegion::kIntersect_Op, doAA); 371e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org r = SkRect::MakeLTRB(10, 11, 12, 13); 38d9f2dea5328c9ab455852f2e4928cca7c71c6b05reed@google.com s.clipDevRect(r, SkRegion::kIntersect_Op, doAA); 391e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org 401e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org s.save(); 4180214e26c57c5fea954006400852e8999e201923robertphillips@google.com REPORTER_ASSERT(reporter, 3 == s.getSaveCount()); 4280214e26c57c5fea954006400852e8999e201923robertphillips@google.com 431e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org r = SkRect::MakeLTRB(14, 15, 16, 17); 44d9f2dea5328c9ab455852f2e4928cca7c71c6b05reed@google.com s.clipDevRect(r, SkRegion::kUnion_Op, doAA); 451e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org 461e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org // Test that assignment works. 471e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org SkClipStack copy = s; 481e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org REPORTER_ASSERT(reporter, s == copy); 491e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org 501e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org // Test that different save levels triggers not equal. 511e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org s.restore(); 5280214e26c57c5fea954006400852e8999e201923robertphillips@google.com REPORTER_ASSERT(reporter, 2 == s.getSaveCount()); 531e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org REPORTER_ASSERT(reporter, s != copy); 541e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org 551e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org // Test that an equal, but not copied version is equal. 561e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org s.save(); 5780214e26c57c5fea954006400852e8999e201923robertphillips@google.com REPORTER_ASSERT(reporter, 3 == s.getSaveCount()); 5880214e26c57c5fea954006400852e8999e201923robertphillips@google.com 591e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org r = SkRect::MakeLTRB(14, 15, 16, 17); 60d9f2dea5328c9ab455852f2e4928cca7c71c6b05reed@google.com s.clipDevRect(r, SkRegion::kUnion_Op, doAA); 611e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org REPORTER_ASSERT(reporter, s == copy); 621e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org 631e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org // Test that a different op on one level triggers not equal. 641e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org s.restore(); 6580214e26c57c5fea954006400852e8999e201923robertphillips@google.com REPORTER_ASSERT(reporter, 2 == s.getSaveCount()); 661e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org s.save(); 6780214e26c57c5fea954006400852e8999e201923robertphillips@google.com REPORTER_ASSERT(reporter, 3 == s.getSaveCount()); 6880214e26c57c5fea954006400852e8999e201923robertphillips@google.com 691e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org r = SkRect::MakeLTRB(14, 15, 16, 17); 70d9f2dea5328c9ab455852f2e4928cca7c71c6b05reed@google.com s.clipDevRect(r, SkRegion::kIntersect_Op, doAA); 711e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org REPORTER_ASSERT(reporter, s != copy); 721e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org 731e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org // Test that different state (clip type) triggers not equal. 744c4337291d873c4f27cb7903645863dc65b98a7btomhudson@google.com // NO LONGER VALID: if a path contains only a rect, we turn 754c4337291d873c4f27cb7903645863dc65b98a7btomhudson@google.com // it into a bare rect for performance reasons (working 764c4337291d873c4f27cb7903645863dc65b98a7btomhudson@google.com // around Chromium/JavaScript bad pattern). 774c4337291d873c4f27cb7903645863dc65b98a7btomhudson@google.com/* 781e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org s.restore(); 791e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org s.save(); 801e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org SkPath rp; 811e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org rp.addRect(r); 82d9f2dea5328c9ab455852f2e4928cca7c71c6b05reed@google.com s.clipDevPath(rp, SkRegion::kUnion_Op, doAA); 831e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org REPORTER_ASSERT(reporter, s != copy); 844c4337291d873c4f27cb7903645863dc65b98a7btomhudson@google.com*/ 851e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org 861e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org // Test that different rects triggers not equal. 871e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org s.restore(); 8880214e26c57c5fea954006400852e8999e201923robertphillips@google.com REPORTER_ASSERT(reporter, 2 == s.getSaveCount()); 891e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org s.save(); 9080214e26c57c5fea954006400852e8999e201923robertphillips@google.com REPORTER_ASSERT(reporter, 3 == s.getSaveCount()); 9180214e26c57c5fea954006400852e8999e201923robertphillips@google.com 921e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org r = SkRect::MakeLTRB(24, 25, 26, 27); 93d9f2dea5328c9ab455852f2e4928cca7c71c6b05reed@google.com s.clipDevRect(r, SkRegion::kUnion_Op, doAA); 941e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org REPORTER_ASSERT(reporter, s != copy); 951e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org 961e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org // Sanity check 971e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org s.restore(); 9880214e26c57c5fea954006400852e8999e201923robertphillips@google.com REPORTER_ASSERT(reporter, 2 == s.getSaveCount()); 9980214e26c57c5fea954006400852e8999e201923robertphillips@google.com 1001e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org copy.restore(); 10180214e26c57c5fea954006400852e8999e201923robertphillips@google.com REPORTER_ASSERT(reporter, 2 == copy.getSaveCount()); 1021e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org REPORTER_ASSERT(reporter, s == copy); 1031e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org s.restore(); 10480214e26c57c5fea954006400852e8999e201923robertphillips@google.com REPORTER_ASSERT(reporter, 1 == s.getSaveCount()); 1051e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org copy.restore(); 10680214e26c57c5fea954006400852e8999e201923robertphillips@google.com REPORTER_ASSERT(reporter, 1 == copy.getSaveCount()); 1071e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org REPORTER_ASSERT(reporter, s == copy); 1081e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org 1091e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org // Test that different paths triggers not equal. 1101e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org s.restore(); 11180214e26c57c5fea954006400852e8999e201923robertphillips@google.com REPORTER_ASSERT(reporter, 0 == s.getSaveCount()); 1121e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org s.save(); 11380214e26c57c5fea954006400852e8999e201923robertphillips@google.com REPORTER_ASSERT(reporter, 1 == s.getSaveCount()); 11480214e26c57c5fea954006400852e8999e201923robertphillips@google.com 1151e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org p.addRect(r); 116d9f2dea5328c9ab455852f2e4928cca7c71c6b05reed@google.com s.clipDevPath(p, SkRegion::kIntersect_Op, doAA); 1171e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org REPORTER_ASSERT(reporter, s != copy); 1181e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org} 119bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.com 120bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.comstatic void assert_count(skiatest::Reporter* reporter, const SkClipStack& stack, 121bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.com int count) { 12280214e26c57c5fea954006400852e8999e201923robertphillips@google.com SkClipStack::B2TIter iter(stack); 123bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.com int counter = 0; 124bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.com while (iter.next()) { 125bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.com counter += 1; 126bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.com } 127bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.com REPORTER_ASSERT(reporter, count == counter); 128bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.com} 129bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.com 13080214e26c57c5fea954006400852e8999e201923robertphillips@google.comstatic void test_iterators(skiatest::Reporter* reporter) { 13180214e26c57c5fea954006400852e8999e201923robertphillips@google.com SkClipStack stack; 13280214e26c57c5fea954006400852e8999e201923robertphillips@google.com 13380214e26c57c5fea954006400852e8999e201923robertphillips@google.com static const SkRect gRects[] = { 13480214e26c57c5fea954006400852e8999e201923robertphillips@google.com { 0, 0, 40, 40 }, 13580214e26c57c5fea954006400852e8999e201923robertphillips@google.com { 60, 0, 100, 40 }, 13680214e26c57c5fea954006400852e8999e201923robertphillips@google.com { 0, 60, 40, 100 }, 13780214e26c57c5fea954006400852e8999e201923robertphillips@google.com { 60, 60, 100, 100 } 13880214e26c57c5fea954006400852e8999e201923robertphillips@google.com }; 13980214e26c57c5fea954006400852e8999e201923robertphillips@google.com 14080214e26c57c5fea954006400852e8999e201923robertphillips@google.com for (size_t i = 0; i < SK_ARRAY_COUNT(gRects); i++) { 14180214e26c57c5fea954006400852e8999e201923robertphillips@google.com // the union op will prevent these from being fused together 14280214e26c57c5fea954006400852e8999e201923robertphillips@google.com stack.clipDevRect(gRects[i], SkRegion::kUnion_Op, false); 14380214e26c57c5fea954006400852e8999e201923robertphillips@google.com } 14480214e26c57c5fea954006400852e8999e201923robertphillips@google.com 14580214e26c57c5fea954006400852e8999e201923robertphillips@google.com assert_count(reporter, stack, 4); 14680214e26c57c5fea954006400852e8999e201923robertphillips@google.com 14780214e26c57c5fea954006400852e8999e201923robertphillips@google.com // bottom to top iteration 14880214e26c57c5fea954006400852e8999e201923robertphillips@google.com { 14980214e26c57c5fea954006400852e8999e201923robertphillips@google.com const SkClipStack::B2TIter::Clip* clip = NULL; 15080214e26c57c5fea954006400852e8999e201923robertphillips@google.com 15180214e26c57c5fea954006400852e8999e201923robertphillips@google.com SkClipStack::B2TIter iter(stack); 15280214e26c57c5fea954006400852e8999e201923robertphillips@google.com int i; 15380214e26c57c5fea954006400852e8999e201923robertphillips@google.com 15480214e26c57c5fea954006400852e8999e201923robertphillips@google.com for (i = 0, clip = iter.next(); clip; ++i, clip = iter.next()) { 15580214e26c57c5fea954006400852e8999e201923robertphillips@google.com REPORTER_ASSERT(reporter, *clip->fRect == gRects[i]); 15680214e26c57c5fea954006400852e8999e201923robertphillips@google.com } 15780214e26c57c5fea954006400852e8999e201923robertphillips@google.com 15880214e26c57c5fea954006400852e8999e201923robertphillips@google.com SkASSERT(i == 4); 15980214e26c57c5fea954006400852e8999e201923robertphillips@google.com } 16080214e26c57c5fea954006400852e8999e201923robertphillips@google.com 16180214e26c57c5fea954006400852e8999e201923robertphillips@google.com // top to bottom iteration 16280214e26c57c5fea954006400852e8999e201923robertphillips@google.com { 16380214e26c57c5fea954006400852e8999e201923robertphillips@google.com const SkClipStack::Iter::Clip* clip = NULL; 16480214e26c57c5fea954006400852e8999e201923robertphillips@google.com 16580214e26c57c5fea954006400852e8999e201923robertphillips@google.com SkClipStack::Iter iter(stack, SkClipStack::Iter::kTop_IterStart); 16680214e26c57c5fea954006400852e8999e201923robertphillips@google.com int i; 16780214e26c57c5fea954006400852e8999e201923robertphillips@google.com 16880214e26c57c5fea954006400852e8999e201923robertphillips@google.com for (i = 3, clip = iter.prev(); clip; --i, clip = iter.prev()) { 16980214e26c57c5fea954006400852e8999e201923robertphillips@google.com REPORTER_ASSERT(reporter, *clip->fRect == gRects[i]); 17080214e26c57c5fea954006400852e8999e201923robertphillips@google.com } 17180214e26c57c5fea954006400852e8999e201923robertphillips@google.com 17280214e26c57c5fea954006400852e8999e201923robertphillips@google.com SkASSERT(i == -1); 17380214e26c57c5fea954006400852e8999e201923robertphillips@google.com } 17480214e26c57c5fea954006400852e8999e201923robertphillips@google.com 17580214e26c57c5fea954006400852e8999e201923robertphillips@google.com // skipToTopmost 17680214e26c57c5fea954006400852e8999e201923robertphillips@google.com { 17780214e26c57c5fea954006400852e8999e201923robertphillips@google.com const SkClipStack::Iter::Clip*clip = NULL; 17880214e26c57c5fea954006400852e8999e201923robertphillips@google.com 17980214e26c57c5fea954006400852e8999e201923robertphillips@google.com SkClipStack::Iter iter(stack, SkClipStack::Iter::kBottom_IterStart); 18080214e26c57c5fea954006400852e8999e201923robertphillips@google.com 18180214e26c57c5fea954006400852e8999e201923robertphillips@google.com clip = iter.skipToTopmost(SkRegion::kUnion_Op); 18280214e26c57c5fea954006400852e8999e201923robertphillips@google.com REPORTER_ASSERT(reporter, *clip->fRect == gRects[3]); 18380214e26c57c5fea954006400852e8999e201923robertphillips@google.com } 18480214e26c57c5fea954006400852e8999e201923robertphillips@google.com} 18580214e26c57c5fea954006400852e8999e201923robertphillips@google.com 186bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.comstatic void TestClipStack(skiatest::Reporter* reporter) { 187bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.com SkClipStack stack; 188bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.com 18980214e26c57c5fea954006400852e8999e201923robertphillips@google.com REPORTER_ASSERT(reporter, 0 == stack.getSaveCount()); 190bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.com assert_count(reporter, stack, 0); 191bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.com 192bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.com static const SkIRect gRects[] = { 193bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.com { 0, 0, 100, 100 }, 194bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.com { 25, 25, 125, 125 }, 195bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.com { 0, 0, 1000, 1000 }, 196bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.com { 0, 0, 75, 75 } 197bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.com }; 198bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.com for (size_t i = 0; i < SK_ARRAY_COUNT(gRects); i++) { 199d9f2dea5328c9ab455852f2e4928cca7c71c6b05reed@google.com stack.clipDevRect(gRects[i], SkRegion::kIntersect_Op); 200bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.com } 201bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.com 202bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.com // all of the above rects should have been intersected, leaving only 1 rect 20380214e26c57c5fea954006400852e8999e201923robertphillips@google.com SkClipStack::B2TIter iter(stack); 20480214e26c57c5fea954006400852e8999e201923robertphillips@google.com const SkClipStack::B2TIter::Clip* clip = iter.next(); 2052047f00e4698f83499ab91911999a65c21a951c9epoger@google.com SkRect answer; 2062047f00e4698f83499ab91911999a65c21a951c9epoger@google.com answer.iset(25, 25, 75, 75); 207bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.com 208bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.com REPORTER_ASSERT(reporter, clip); 209bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.com REPORTER_ASSERT(reporter, clip->fRect); 210bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.com REPORTER_ASSERT(reporter, !clip->fPath); 211bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.com REPORTER_ASSERT(reporter, SkRegion::kIntersect_Op == clip->fOp); 212bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.com REPORTER_ASSERT(reporter, *clip->fRect == answer); 213bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.com // now check that we only had one in our iterator 214bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.com REPORTER_ASSERT(reporter, !iter.next()); 215bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.com 216bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.com stack.reset(); 21780214e26c57c5fea954006400852e8999e201923robertphillips@google.com REPORTER_ASSERT(reporter, 0 == stack.getSaveCount()); 218bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.com assert_count(reporter, stack, 0); 2191e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org 2201e1c36f4f89ad39e1d248edb745919e493242c68vandebo@chromium.org test_assign_and_comparison(reporter); 22180214e26c57c5fea954006400852e8999e201923robertphillips@google.com test_iterators(reporter); 222bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.com} 223bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.com 224bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.com#include "TestClassDef.h" 225bdee9fc778d4387d805d717f2cd7fc7074991fdbreed@google.comDEFINE_TESTCLASS("ClipStack", TestClipStackClass, TestClipStack) 226