aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/unit/testSparseState.cxx
diff options
context:
space:
mode:
authornyamatongwe <unknown>2011-02-13 10:08:08 +1100
committernyamatongwe <unknown>2011-02-13 10:08:08 +1100
commit0e4ae90f839d6ab1bfbd84327ee498a96390172d (patch)
tree93e017190d0f7620d4b7bed9c92fe320a9c67084 /test/unit/testSparseState.cxx
parenta66ec5a196b0207fa23c529a13cf5662d11b2b6f (diff)
downloadscintilla-mirror-0e4ae90f839d6ab1bfbd84327ee498a96390172d.tar.gz
Added Merge method to SparseState to make it possible to detect significant
changes in lexers which will require styling beyond the end of the current range.
Diffstat (limited to 'test/unit/testSparseState.cxx')
-rw-r--r--test/unit/testSparseState.cxx101
1 files changed, 100 insertions, 1 deletions
diff --git a/test/unit/testSparseState.cxx b/test/unit/testSparseState.cxx
index 74f1032b2..a30240d62 100644
--- a/test/unit/testSparseState.cxx
+++ b/test/unit/testSparseState.cxx
@@ -95,13 +95,112 @@ TEST_F(SparseStateTest, ReplaceLast) {
EXPECT_EQ(32, pss->ValueAt(3));
}
-TEST_F(SparseStateTest, CheckOnlyChangeAppended) {
+TEST_F(SparseStateTest, OnlyChangeAppended) {
pss->Set(0, 30);
pss->Set(2, 31);
pss->Set(3, 31);
EXPECT_EQ(2u, pss->size());
}
+TEST_F(SparseStateTest, MergeBetween) {
+ pss->Set(0, 30);
+ pss->Set(2, 32);
+ pss->Set(4, 34);
+ EXPECT_EQ(3u, pss->size());
+
+ SparseState<int> ssAdditions(3);
+ ssAdditions.Set(4, 34);
+ EXPECT_EQ(1u, ssAdditions.size());
+ bool mergeChanged = pss->Merge(ssAdditions,5);
+ EXPECT_EQ(0, mergeChanged);
+
+ ssAdditions.Set(4, 44);
+ EXPECT_EQ(1u, ssAdditions.size());
+ mergeChanged = pss->Merge(ssAdditions,5);
+ EXPECT_EQ(true, mergeChanged);
+ EXPECT_EQ(3u, pss->size());
+ EXPECT_EQ(44, pss->ValueAt(4));
+}
+
+TEST_F(SparseStateTest, MergeAtExisting) {
+ pss->Set(0, 30);
+ pss->Set(2, 32);
+ pss->Set(4, 34);
+ EXPECT_EQ(3u, pss->size());
+
+ SparseState<int> ssAdditions(4);
+ ssAdditions.Set(4, 34);
+ EXPECT_EQ(1u, ssAdditions.size());
+ bool mergeChanged = pss->Merge(ssAdditions,5);
+ EXPECT_EQ(0, mergeChanged);
+
+ ssAdditions.Set(4, 44);
+ EXPECT_EQ(1u, ssAdditions.size());
+ mergeChanged = pss->Merge(ssAdditions,5);
+ EXPECT_EQ(true, mergeChanged);
+ EXPECT_EQ(3u, pss->size());
+ EXPECT_EQ(44, pss->ValueAt(4));
+}
+
+TEST_F(SparseStateTest, MergeWhichRemoves) {
+ pss->Set(0, 30);
+ pss->Set(2, 32);
+ pss->Set(4, 34);
+ EXPECT_EQ(3u, pss->size());
+
+ SparseState<int> ssAdditions(2);
+ ssAdditions.Set(2, 22);
+ EXPECT_EQ(1u, ssAdditions.size());
+ EXPECT_EQ(22, ssAdditions.ValueAt(2));
+ bool mergeChanged = pss->Merge(ssAdditions,5);
+ EXPECT_EQ(true, mergeChanged);
+ EXPECT_EQ(2u, pss->size());
+ EXPECT_EQ(22, pss->ValueAt(2));
+}
+
+TEST_F(SparseStateTest, MergeIgnoreSome) {
+ pss->Set(0, 30);
+ pss->Set(2, 32);
+ pss->Set(4, 34);
+
+ SparseState<int> ssAdditions(2);
+ ssAdditions.Set(2, 32);
+ bool mergeChanged = pss->Merge(ssAdditions,3);
+
+ EXPECT_EQ(0, mergeChanged);
+ EXPECT_EQ(2u, pss->size());
+ EXPECT_EQ(32, pss->ValueAt(2));
+}
+
+TEST_F(SparseStateTest, MergeIgnoreSomeStart) {
+ pss->Set(0, 30);
+ pss->Set(2, 32);
+ pss->Set(4, 34);
+
+ SparseState<int> ssAdditions(2);
+ ssAdditions.Set(2, 32);
+ bool mergeChanged = pss->Merge(ssAdditions,2);
+
+ EXPECT_EQ(0, mergeChanged);
+ EXPECT_EQ(2u, pss->size());
+ EXPECT_EQ(32, pss->ValueAt(2));
+}
+
+TEST_F(SparseStateTest, MergeIgnoreRepeat) {
+ pss->Set(0, 30);
+ pss->Set(2, 32);
+ pss->Set(4, 34);
+
+ SparseState<int> ssAdditions(5);
+ // Appending same value as at end of pss.
+ ssAdditions.Set(5, 34);
+ bool mergeChanged = pss->Merge(ssAdditions,6);
+
+ EXPECT_EQ(0, mergeChanged);
+ EXPECT_EQ(3u, pss->size());
+ EXPECT_EQ(34, pss->ValueAt(4));
+}
+
class SparseStateStringTest : public ::testing::Test {
protected:
virtual void SetUp() {