Index: unittest/IceELFSectionTest.cpp |
diff --git a/unittest/IceELFSectionTest.cpp b/unittest/IceELFSectionTest.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d4716905dc72031cb0b1a7ed08478870bfbe89bb |
--- /dev/null |
+++ b/unittest/IceELFSectionTest.cpp |
@@ -0,0 +1,116 @@ |
+//===- unittest/IceELFSectionTest.cpp - ELF Section unit tests ------------===// |
+// |
+// The Subzero Code Generator |
+// |
+// This file is distributed under the University of Illinois Open Source |
+// License. See LICENSE.TXT for details. |
+// |
+//===----------------------------------------------------------------------===// |
+ |
+#include "IceDefs.h" |
+#include "IceELFSection.h" |
+#include "gtest/gtest.h" |
+ |
+namespace Ice { |
+namespace { |
+ |
+// Test string table layout for various permutations. Test that pop, |
+// lollipop, and lipop are able to share data, while the other strings do not. |
+void CheckStringTablePermLayout(const ELFStringTableSection &Strtab) { |
+ size_t pop_index = Strtab.getIndex("pop"); |
+ size_t lollipop_index = Strtab.getIndex("lollipop"); |
+ size_t lipop_index = Strtab.getIndex("lipop"); |
+ size_t pops_index = Strtab.getIndex("pops"); |
+ size_t unpop_index = Strtab.getIndex("unpop"); |
+ size_t popular_index = Strtab.getIndex("popular"); |
+ size_t a_index = Strtab.getIndex("a"); |
+ |
+ EXPECT_EQ(pop_index, lollipop_index + (IceString("lollipop").size() - |
+ IceString("pop").size())); |
+ EXPECT_EQ(lipop_index, lollipop_index + (IceString("lollipop").size() - |
+ IceString("lipop").size())); |
+ // The rest happen to be sorted this way. |
+ EXPECT_EQ(1U, pops_index); |
+ EXPECT_EQ(popular_index, pops_index + IceString("pops").size() + 1); |
+ EXPECT_EQ(unpop_index, popular_index + IceString("popular").size() + 1); |
+ EXPECT_EQ(lollipop_index, unpop_index + IceString("unpop").size() + 1); |
+ EXPECT_EQ(a_index, lollipop_index + IceString("lollipop").size() + 1); |
+} |
+ |
+TEST(IceELFSectionTest, StringTableBuilderPerm1) { |
+ ELFStringTableSection Strtab(".strtab", SHT_STRTAB, 0, 1, 0); |
+ Strtab.add("pop"); |
+ Strtab.add("lollipop"); |
+ Strtab.add("lipop"); |
+ Strtab.add("pops"); |
+ Strtab.add("unpop"); |
+ Strtab.add("popular"); |
+ Strtab.add("a"); |
+ Strtab.doLayout(); |
+ CheckStringTablePermLayout(Strtab); |
+} |
+ |
+TEST(IceELFSectionTest, StringTableBuilderPerm2) { |
+ ELFStringTableSection Strtab(".strtab", SHT_STRTAB, 0, 1, 0); |
+ Strtab.add("lollipop"); |
+ Strtab.add("pop"); |
+ Strtab.add("unpop"); |
+ Strtab.add("pops"); |
+ Strtab.add("popular"); |
+ Strtab.add("lipop"); |
+ Strtab.add("a"); |
+ Strtab.doLayout(); |
+ CheckStringTablePermLayout(Strtab); |
+} |
+ |
+TEST(IceELFSectionTest, StringTableBuilderPerm3) { |
+ ELFStringTableSection Strtab(".strtab", SHT_STRTAB, 0, 1, 0); |
+ Strtab.add("pops"); |
+ Strtab.add("a"); |
+ Strtab.add("lipop"); |
+ Strtab.add("popular"); |
+ Strtab.add("pop"); |
+ Strtab.add("unpop"); |
+ Strtab.add("lollipop"); |
+ Strtab.doLayout(); |
+ CheckStringTablePermLayout(Strtab); |
+} |
+ |
+TEST(IceELFSectionTest, StringTableBuilderPerm4) { |
+ ELFStringTableSection Strtab(".strtab", SHT_STRTAB, 0, 1, 0); |
+ Strtab.add("unpop"); |
+ Strtab.add("pop"); |
+ Strtab.add("lollipop"); |
+ Strtab.add("a"); |
+ Strtab.add("popular"); |
+ Strtab.add("pops"); |
+ Strtab.add("lipop"); |
+ Strtab.doLayout(); |
+ CheckStringTablePermLayout(Strtab); |
+} |
+ |
+// Test that adding duplicate strings is fine. |
+TEST(IceELFSectionTest, StringTableBuilderDuplicates) { |
+ ELFStringTableSection Strtab(".strtab", SHT_STRTAB, 0, 1, 0); |
+ Strtab.add("unpop"); |
+ Strtab.add("pop"); |
+ Strtab.add("lollipop"); |
+ Strtab.add("a"); |
+ Strtab.add("popular"); |
+ Strtab.add("pops"); |
+ Strtab.add("lipop"); |
+ |
+ Strtab.add("lipop"); |
+ Strtab.add("pops"); |
+ Strtab.add("popular"); |
+ Strtab.add("a"); |
+ Strtab.add("lollipop"); |
+ Strtab.add("pop"); |
+ Strtab.add("unpop"); |
+ |
+ Strtab.doLayout(); |
+ CheckStringTablePermLayout(Strtab); |
+} |
+ |
+} // end of anonymous namespace |
+} // end of namespace Ice |