summaryrefslogtreecommitdiff
path: root/libartbase/base/bit_table_test.cc
diff options
context:
space:
mode:
author David Srbecky <dsrbecky@google.com> 2018-05-24 14:56:51 +0100
committer David Srbecky <dsrbecky@google.com> 2018-05-25 16:54:15 +0100
commit159c9ddb930b84fac127f90032ed33c13ee15ff4 (patch)
treeb6a10fff7263c1761ac445696ce833942707fa4d /libartbase/base/bit_table_test.cc
parentdd966bc5b30aac068ee25d8f9bdb18a53904e312 (diff)
Add deduplication logic to BitTableBuilder.
Test: test-art-host-gtest-stack_map_test Test: test-art-host-gtest-bit_table_test Change-Id: Ide5d38f6e9f111e0583ff7934f81b266b9d0d6ca
Diffstat (limited to 'libartbase/base/bit_table_test.cc')
-rw-r--r--libartbase/base/bit_table_test.cc28
1 files changed, 28 insertions, 0 deletions
diff --git a/libartbase/base/bit_table_test.cc b/libartbase/base/bit_table_test.cc
index e6f0d53541..f579440199 100644
--- a/libartbase/base/bit_table_test.cc
+++ b/libartbase/base/bit_table_test.cc
@@ -142,4 +142,32 @@ TEST(BitTableTest, TestBigTable) {
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