aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--lexlib/SparseState.h4
-rw-r--r--test/unit/testSparseState.cxx7
2 files changed, 10 insertions, 1 deletions
diff --git a/lexlib/SparseState.h b/lexlib/SparseState.h
index 39b6e605a..953800a44 100644
--- a/lexlib/SparseState.h
+++ b/lexlib/SparseState.h
@@ -30,7 +30,9 @@ class SparseState {
public:
void Set(int position, T value) {
Delete(position);
- states.push_back(State(position, value));
+ if ((states.size() == 0) || (value != states[states.size()-1].value)) {
+ states.push_back(State(position, value));
+ }
}
T ValueAt(int position) {
if (!states.size())
diff --git a/test/unit/testSparseState.cxx b/test/unit/testSparseState.cxx
index f16f829d4..74f1032b2 100644
--- a/test/unit/testSparseState.cxx
+++ b/test/unit/testSparseState.cxx
@@ -95,6 +95,13 @@ TEST_F(SparseStateTest, ReplaceLast) {
EXPECT_EQ(32, pss->ValueAt(3));
}
+TEST_F(SparseStateTest, CheckOnlyChangeAppended) {
+ pss->Set(0, 30);
+ pss->Set(2, 31);
+ pss->Set(3, 31);
+ EXPECT_EQ(2u, pss->size());
+}
+
class SparseStateStringTest : public ::testing::Test {
protected:
virtual void SetUp() {