Add deduplication logic to BitTableBuilder.
Test: test-art-host-gtest-stack_map_test
Test: test-art-host-gtest-bit_table_test
Change-Id: Ide5d38f6e9f111e0583ff7934f81b266b9d0d6ca
diff --git a/libartbase/base/bit_table_test.cc b/libartbase/base/bit_table_test.cc
index e6f0d53..f579440 100644
--- a/libartbase/base/bit_table_test.cc
+++ b/libartbase/base/bit_table_test.cc
@@ -142,4 +142,32 @@
EXPECT_EQ(32u, table.NumColumnBits(3));
}
+TEST(BitTableTest, TestDedup) {
+ MallocArenaPool pool;
+ ArenaStack arena_stack(&pool);
+ ScopedArenaAllocator allocator(&arena_stack);
+
+ struct RowData {
+ uint32_t a;
+ uint32_t b;
+ };
+ BitTableBuilder<RowData> builder(&allocator);
+ RowData value0{1, 2};
+ RowData value1{3, 4};
+ RowData value2{56948505, 0};
+ RowData value3{67108869, 0};
+ FNVHash<MemoryRegion> hasher;
+ EXPECT_EQ(hasher(MemoryRegion(&value2, sizeof(RowData))),
+ hasher(MemoryRegion(&value3, sizeof(RowData)))); // Test hash collision.
+ EXPECT_EQ(0u, builder.Dedup(&value0));
+ EXPECT_EQ(1u, builder.Dedup(&value1));
+ EXPECT_EQ(2u, builder.Dedup(&value2));
+ EXPECT_EQ(3u, builder.Dedup(&value3));
+ EXPECT_EQ(0u, builder.Dedup(&value0));
+ EXPECT_EQ(1u, builder.Dedup(&value1));
+ EXPECT_EQ(2u, builder.Dedup(&value2));
+ EXPECT_EQ(3u, builder.Dedup(&value3));
+ EXPECT_EQ(4u, builder.size());
+}
+
} // namespace art