aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/unit/testSparseState.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'test/unit/testSparseState.cxx')
-rw-r--r--test/unit/testSparseState.cxx138
1 files changed, 138 insertions, 0 deletions
diff --git a/test/unit/testSparseState.cxx b/test/unit/testSparseState.cxx
new file mode 100644
index 000000000..f16f829d4
--- /dev/null
+++ b/test/unit/testSparseState.cxx
@@ -0,0 +1,138 @@
+// Unit Tests for Scintilla internal data structures
+
+#include <string>
+#include <vector>
+#include <algorithm>
+
+#include "Platform.h"
+
+#include "SparseState.h"
+
+#include <gtest/gtest.h>
+
+// Test SparseState.
+
+class SparseStateTest : public ::testing::Test {
+protected:
+ virtual void SetUp() {
+ pss = new SparseState<int>();
+ }
+
+ virtual void TearDown() {
+ delete pss;
+ pss = 0;
+ }
+
+ SparseState<int> *pss;
+};
+
+TEST_F(SparseStateTest, IsEmptyInitially) {
+ EXPECT_EQ(0u, pss->size());
+ int val = pss->ValueAt(0);
+ EXPECT_EQ(0, val);
+}
+
+TEST_F(SparseStateTest, SimpleSetAndGet) {
+ pss->Set(0, 22);
+ pss->Set(1, 23);
+ EXPECT_EQ(2u, pss->size());
+ EXPECT_EQ(0, pss->ValueAt(-1));
+ EXPECT_EQ(22, pss->ValueAt(0));
+ EXPECT_EQ(23, pss->ValueAt(1));
+ EXPECT_EQ(23, pss->ValueAt(2));
+}
+
+TEST_F(SparseStateTest, RetrieveBetween) {
+ pss->Set(0, 10);
+ pss->Set(2, 12);
+ EXPECT_EQ(2u, pss->size());
+ EXPECT_EQ(0, pss->ValueAt(-1));
+ EXPECT_EQ(10, pss->ValueAt(0));
+ EXPECT_EQ(10, pss->ValueAt(1));
+ EXPECT_EQ(12, pss->ValueAt(2));
+}
+
+TEST_F(SparseStateTest, RetrieveBefore) {
+ pss->Set(2, 12);
+ EXPECT_EQ(1u, pss->size());
+ EXPECT_EQ(0, pss->ValueAt(-1));
+ EXPECT_EQ(0, pss->ValueAt(0));
+ EXPECT_EQ(0, pss->ValueAt(1));
+ EXPECT_EQ(12, pss->ValueAt(2));
+}
+
+TEST_F(SparseStateTest, Delete) {
+ pss->Set(0, 30);
+ pss->Set(2, 32);
+ pss->Delete(2);
+ EXPECT_EQ(1u, pss->size());
+ EXPECT_EQ(0, pss->ValueAt(-1));
+ EXPECT_EQ(30, pss->ValueAt(0));
+ EXPECT_EQ(30, pss->ValueAt(1));
+ EXPECT_EQ(30, pss->ValueAt(2));
+}
+
+TEST_F(SparseStateTest, DeleteBetweeen) {
+ pss->Set(0, 30);
+ pss->Set(2, 32);
+ pss->Delete(1);
+ EXPECT_EQ(1u, pss->size());
+ EXPECT_EQ(0, pss->ValueAt(-1));
+ EXPECT_EQ(30, pss->ValueAt(0));
+ EXPECT_EQ(30, pss->ValueAt(1));
+ EXPECT_EQ(30, pss->ValueAt(2));
+}
+
+TEST_F(SparseStateTest, ReplaceLast) {
+ pss->Set(0, 30);
+ pss->Set(2, 31);
+ pss->Set(2, 32);
+ EXPECT_EQ(2u, pss->size());
+ EXPECT_EQ(0, pss->ValueAt(-1));
+ EXPECT_EQ(30, pss->ValueAt(0));
+ EXPECT_EQ(30, pss->ValueAt(1));
+ EXPECT_EQ(32, pss->ValueAt(2));
+ EXPECT_EQ(32, pss->ValueAt(3));
+}
+
+class SparseStateStringTest : public ::testing::Test {
+protected:
+ virtual void SetUp() {
+ pss = new SparseState<std::string>();
+ }
+
+ virtual void TearDown() {
+ delete pss;
+ pss = 0;
+ }
+
+ SparseState<std::string> *pss;
+};
+
+TEST_F(SparseStateStringTest, IsEmptyInitially) {
+ EXPECT_EQ(0u, pss->size());
+ std::string val = pss->ValueAt(0);
+ EXPECT_EQ("", val);
+}
+
+TEST_F(SparseStateStringTest, SimpleSetAndGet) {
+ EXPECT_EQ(0u, pss->size());
+ pss->Set(0, "22");
+ pss->Set(1, "23");
+ EXPECT_EQ(2u, pss->size());
+ EXPECT_EQ("", pss->ValueAt(-1));
+ EXPECT_EQ("22", pss->ValueAt(0));
+ EXPECT_EQ("23", pss->ValueAt(1));
+ EXPECT_EQ("23", pss->ValueAt(2));
+}
+
+TEST_F(SparseStateStringTest, DeleteBetweeen) {
+ pss->Set(0, "30");
+ pss->Set(2, "32");
+ pss->Delete(1);
+ EXPECT_EQ(1u, pss->size());
+ EXPECT_EQ("", pss->ValueAt(-1));
+ EXPECT_EQ("30", pss->ValueAt(0));
+ EXPECT_EQ("30", pss->ValueAt(1));
+ EXPECT_EQ("30", pss->ValueAt(2));
+}