mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 22:02:55 +01:00
Test for id overflow and string deduplication in SharedValueStores (#3319)
Follow-on to #3311
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user