TEST(StringPoolTest, SortAndMaintainIndexesInReferences) { StringPool pool; StringPool::Ref ref = pool.makeRef(u"z"); StringPool::StyleRef ref2 = pool.makeRef(StyleString{ {u"a"} }); StringPool::Ref ref3 = pool.makeRef(u"m"); EXPECT_EQ(*ref, u"z"); EXPECT_EQ(0u, ref.getIndex()); EXPECT_EQ(*(ref2->str), u"a"); EXPECT_EQ(1u, ref2.getIndex()); EXPECT_EQ(*ref3, u"m"); EXPECT_EQ(2u, ref3.getIndex()); pool.sort([](const StringPool::Entry& a, const StringPool::Entry& b) -> bool { return a.value < b.value; }); EXPECT_EQ(*ref, u"z"); EXPECT_EQ(2u, ref.getIndex()); EXPECT_EQ(*(ref2->str), u"a"); EXPECT_EQ(0u, ref2.getIndex()); EXPECT_EQ(*ref3, u"m"); EXPECT_EQ(1u, ref3.getIndex()); }
TEST(StringPoolTest, SortAndStillDedupe) { StringPool pool; StringPool::Ref ref = pool.makeRef(u"z"); StringPool::Ref ref2 = pool.makeRef(u"a"); StringPool::Ref ref3 = pool.makeRef(u"m"); pool.sort([](const StringPool::Entry& a, const StringPool::Entry& b) -> bool { return a.value < b.value; }); StringPool::Ref ref4 = pool.makeRef(u"z"); StringPool::Ref ref5 = pool.makeRef(u"a"); StringPool::Ref ref6 = pool.makeRef(u"m"); EXPECT_EQ(ref4.getIndex(), ref.getIndex()); EXPECT_EQ(ref5.getIndex(), ref2.getIndex()); EXPECT_EQ(ref6.getIndex(), ref3.getIndex()); }