TEST(ScopedPointerSet, add) { ScopedFooSet set; const size_t kCount = 100U; Foo::resetStats(); for (size_t n = 0; n < kCount; ++n) { set.add(new Foo(n)); EXPECT_EQ(n + 1U, set.size()); EXPECT_EQ(n + 1U, Foo::mCreates); EXPECT_EQ(0U, Foo::mDeletes); } bool flags[kCount]; for (size_t n = 0; n < kCount; ++n) { flags[n] = false; } Foo** array = set.toArray(); ASSERT_TRUE(array); for (size_t n = 0; n < kCount; ++n) { Foo* foo = array[n]; ASSERT_TRUE(foo); EXPECT_FALSE(flags[foo->value()]); flags[foo->value()] = true; } ::free(array); }
TEST(ScopedPointerSet, Iterator) { ScopedFooSet set; const size_t kCount = 100U; Foo* foos[kCount]; for (size_t n = 0; n < kCount; ++n) { foos[n] = new Foo(n); set.add(foos[n]); } EXPECT_EQ(kCount, set.size()); bool flags[kCount]; for (size_t n = 0; n < kCount; ++n) { flags[n] = false; } PointerSet<Foo>::Iterator iter(&set); for (size_t n = 0; n < kCount; ++n) { EXPECT_TRUE(iter.hasNext()); Foo* foo = iter.next(); EXPECT_TRUE(foo); ASSERT_LT(foo->value(), kCount); EXPECT_FALSE(flags[foo->value()]) << "Item #" << foo->value(); flags[foo->value()] = true; } EXPECT_FALSE(iter.next()); }