pw_tokenizer: Fix iterator post-increment
Fix the TokenDatabase::Iterator's post-increment operator, which
previously behaved the same as the pre-increment operator.
Change-Id: I750cf227160c939510fc306e0eb3e863b84352e0
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/12663
Reviewed-by: Armando Montanez <amontanez@google.com>
Commit-Queue: Wyatt Hepler <hepler@google.com>
diff --git a/pw_tokenizer/public/pw_tokenizer/token_database.h b/pw_tokenizer/public/pw_tokenizer/token_database.h
index ae1ebaf..8be56d0 100644
--- a/pw_tokenizer/public/pw_tokenizer/token_database.h
+++ b/pw_tokenizer/public/pw_tokenizer/token_database.h
@@ -98,7 +98,11 @@
}
return *this;
}
- constexpr Iterator operator++(int) { return operator++(); }
+ constexpr Iterator operator++(int) {
+ Iterator previous(raw_, string_);
+ operator++();
+ return previous;
+ }
constexpr bool operator==(const Iterator& rhs) const {
return raw_ == rhs.raw_;
}
diff --git a/pw_tokenizer/token_database_test.cc b/pw_tokenizer/token_database_test.cc
index 0dccfb6..e06780f 100644
--- a/pw_tokenizer/token_database_test.cc
+++ b/pw_tokenizer/token_database_test.cc
@@ -150,6 +150,20 @@
kBasicDatabase.size());
}
+TEST(TokenDatabase, Iterator_PreIncrement) {
+ auto it = kBasicDatabase.begin();
+ EXPECT_EQ((++it)->token, 2u);
+ EXPECT_STREQ(it.entry().string, "goodbye");
+}
+
+TEST(TokenDatabase, Iterator_PostIncrement) {
+ auto it = kBasicDatabase.begin();
+ EXPECT_EQ((it++)->token, 1u);
+
+ EXPECT_EQ(it->token, 2u);
+ EXPECT_STREQ(it.entry().string, "goodbye");
+}
+
TEST(TokenDatabase, SingleEntryLookup_FirstEntry) {
auto match = kBasicDatabase.Find(1);
ASSERT_EQ(match.size(), 1u);