diff options
author | 2018-05-24 14:56:51 +0100 | |
---|---|---|
committer | 2018-05-25 16:54:15 +0100 | |
commit | 159c9ddb930b84fac127f90032ed33c13ee15ff4 (patch) | |
tree | b6a10fff7263c1761ac445696ce833942707fa4d /libartbase/base/bit_table_test.cc | |
parent | dd966bc5b30aac068ee25d8f9bdb18a53904e312 (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.cc | 28 |
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 |