Test for id overflow and string deduplication in SharedValueStores (#3319)

Follow-on to #3311
This commit is contained in:
josh11b
2023-10-20 20:40:48 +00:00
committed by GitHub
parent a46e7dd967
commit 5b3b7aa3ed
2 changed files with 7 additions and 1 deletions
+3 -1
View File
@@ -84,7 +84,8 @@ class ValueStore {
public:
// Stores the value and returns an ID to reference it.
auto Add(typename IdT::IndexedType value) -> IdT {
auto id = IdT(values_.size());
IdT id = IdT(values_.size());
CARBON_CHECK(id.index >= 0) << "Id overflow";
values_.push_back(std::move(value));
return id;
}
@@ -109,6 +110,7 @@ class ValueStore<StringId> {
auto Add(llvm::StringRef value) -> StringId {
auto [it, inserted] = map_.insert({value, StringId(values_.size())});
if (inserted) {
CARBON_CHECK(it->second.index >= 0) << "Too many unique strings";
values_.push_back(value);
}
return it->second;
+4
View File
@@ -66,6 +66,10 @@ TEST(ValueStore, String) {
EXPECT_THAT(a_id, Not(Eq(b_id)));
EXPECT_THAT(value_stores.strings().Get(a_id), Eq(a));
EXPECT_THAT(value_stores.strings().Get(b_id), Eq(b));
// Adding the same string again should return the same id.
EXPECT_THAT(value_stores.strings().Add(a), Eq(a_id));
EXPECT_THAT(value_stores.strings().Add(b), Eq(b_id));
}
} // namespace