Reuse SIRT for C++ references
Change-Id: I8310e55da42f55f7ec60f6b17face436c77a979f
diff --git a/src/intern_table_test.cc b/src/intern_table_test.cc
index d9a6a45..a0c47ec 100644
--- a/src/intern_table_test.cc
+++ b/src/intern_table_test.cc
@@ -11,26 +11,27 @@
TEST_F(InternTableTest, Intern) {
InternTable intern_table;
- const String* foo_1 = intern_table.InternStrong(3, "foo");
- const String* foo_2 = intern_table.InternStrong(3, "foo");
- const String* foo_3 = String::AllocFromModifiedUtf8("foo");
- const String* bar = intern_table.InternStrong(3, "bar");
+ SirtRef<String> foo_1(intern_table.InternStrong(3, "foo"));
+ SirtRef<String> foo_2(intern_table.InternStrong(3, "foo"));
+ SirtRef<String> foo_3(String::AllocFromModifiedUtf8("foo"));
+ SirtRef<String> bar(intern_table.InternStrong(3, "bar"));
EXPECT_TRUE(foo_1->Equals("foo"));
EXPECT_TRUE(foo_2->Equals("foo"));
EXPECT_TRUE(foo_3->Equals("foo"));
- EXPECT_TRUE(foo_1 != NULL);
- EXPECT_TRUE(foo_2 != NULL);
- EXPECT_EQ(foo_1, foo_2);
- EXPECT_NE(foo_1, bar);
- EXPECT_NE(foo_2, bar);
- EXPECT_NE(foo_3, bar);
+ EXPECT_TRUE(foo_1.get() != NULL);
+ EXPECT_TRUE(foo_2.get() != NULL);
+ EXPECT_EQ(foo_1.get(), foo_2.get());
+ EXPECT_NE(foo_1.get(), bar.get());
+ EXPECT_NE(foo_2.get(), bar.get());
+ EXPECT_NE(foo_3.get(), bar.get());
}
TEST_F(InternTableTest, Size) {
InternTable t;
EXPECT_EQ(0U, t.Size());
t.InternStrong(3, "foo");
- t.InternWeak(String::AllocFromModifiedUtf8("foo"));
+ SirtRef<String> foo(String::AllocFromModifiedUtf8("foo"));
+ t.InternWeak(foo.get());
EXPECT_EQ(1U, t.Size());
t.InternStrong(3, "bar");
EXPECT_EQ(2U, t.Size());
@@ -72,21 +73,24 @@
InternTable t;
t.InternStrong(3, "foo");
t.InternStrong(3, "bar");
- const String* s0 = t.InternWeak(String::AllocFromModifiedUtf8("hello"));
- const String* s1 = t.InternWeak(String::AllocFromModifiedUtf8("world"));
+ SirtRef<String> hello(String::AllocFromModifiedUtf8("hello"));
+ SirtRef<String> world(String::AllocFromModifiedUtf8("world"));
+ SirtRef<String> s0(t.InternWeak(hello.get()));
+ SirtRef<String> s1(t.InternWeak(world.get()));
EXPECT_EQ(4U, t.Size());
// We should traverse only the weaks...
TestPredicate p;
- p.Expect(s0);
- p.Expect(s1);
+ p.Expect(s0.get());
+ p.Expect(s1.get());
t.SweepInternTableWeaks(IsMarked, &p);
EXPECT_EQ(2U, t.Size());
// Just check that we didn't corrupt the unordered_multimap.
- t.InternWeak(String::AllocFromModifiedUtf8("still here"));
+ SirtRef<String> still_here(String::AllocFromModifiedUtf8("still here"));
+ t.InternWeak(still_here.get());
EXPECT_EQ(3U, t.Size());
}
@@ -94,41 +98,45 @@
{
// Strongs are never weak.
InternTable t;
- String* foo_1 = t.InternStrong(3, "foo");
- EXPECT_FALSE(t.ContainsWeak(foo_1));
- String* foo_2 = t.InternStrong(3, "foo");
- EXPECT_FALSE(t.ContainsWeak(foo_2));
- EXPECT_EQ(foo_1, foo_2);
+ SirtRef<String> interned_foo_1(t.InternStrong(3, "foo"));
+ EXPECT_FALSE(t.ContainsWeak(interned_foo_1.get()));
+ SirtRef<String> interned_foo_2(t.InternStrong(3, "foo"));
+ EXPECT_FALSE(t.ContainsWeak(interned_foo_2.get()));
+ EXPECT_EQ(interned_foo_1.get(), interned_foo_2.get());
}
{
// Weaks are always weak.
InternTable t;
- String* foo_1 = t.InternWeak(String::AllocFromModifiedUtf8("foo"));
- EXPECT_TRUE(t.ContainsWeak(foo_1));
- String* foo_2 = t.InternWeak(String::AllocFromModifiedUtf8("foo"));
- EXPECT_TRUE(t.ContainsWeak(foo_2));
- EXPECT_EQ(foo_1, foo_2);
+ SirtRef<String> foo_1(String::AllocFromModifiedUtf8("foo"));
+ SirtRef<String> foo_2(String::AllocFromModifiedUtf8("foo"));
+ EXPECT_NE(foo_1.get(), foo_2.get());
+ SirtRef<String> interned_foo_1(t.InternWeak(foo_1.get()));
+ SirtRef<String> interned_foo_2(t.InternWeak(foo_2.get()));
+ EXPECT_TRUE(t.ContainsWeak(interned_foo_2.get()));
+ EXPECT_EQ(interned_foo_1.get(), interned_foo_2.get());
}
{
// A weak can be promoted to a strong.
InternTable t;
- String* foo_1 = t.InternWeak(String::AllocFromModifiedUtf8("foo"));
- EXPECT_TRUE(t.ContainsWeak(foo_1));
- String* foo_2 = t.InternStrong(3, "foo");
- EXPECT_FALSE(t.ContainsWeak(foo_2));
- EXPECT_EQ(foo_1, foo_2);
+ SirtRef<String> foo(String::AllocFromModifiedUtf8("foo"));
+ SirtRef<String> interned_foo_1(t.InternWeak(foo.get()));
+ EXPECT_TRUE(t.ContainsWeak(interned_foo_1.get()));
+ SirtRef<String> interned_foo_2(t.InternStrong(3, "foo"));
+ EXPECT_FALSE(t.ContainsWeak(interned_foo_2.get()));
+ EXPECT_EQ(interned_foo_1.get(), interned_foo_2.get());
}
{
// Interning a weak after a strong gets you the strong.
InternTable t;
- String* foo_1 = t.InternStrong(3, "foo");
- EXPECT_FALSE(t.ContainsWeak(foo_1));
- String* foo_2 = t.InternWeak(String::AllocFromModifiedUtf8("foo"));
- EXPECT_FALSE(t.ContainsWeak(foo_2));
- EXPECT_EQ(foo_1, foo_2);
+ SirtRef<String> interned_foo_1(t.InternStrong(3, "foo"));
+ EXPECT_FALSE(t.ContainsWeak(interned_foo_1.get()));
+ SirtRef<String> foo(String::AllocFromModifiedUtf8("foo"));
+ SirtRef<String> interned_foo_2(t.InternWeak(foo.get()));
+ EXPECT_FALSE(t.ContainsWeak(interned_foo_2.get()));
+ EXPECT_EQ(interned_foo_1.get(), interned_foo_2.get());
}
}