dedupe_set_test.cc revision e21dc3db191df04c100620965bee4617b3b24397
1193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier/* 2193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier * Copyright (C) 2013 The Android Open Source Project 3193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier * 4193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier * Licensed under the Apache License, Version 2.0 (the "License"); 5193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier * you may not use this file except in compliance with the License. 6193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier * You may obtain a copy of the License at 7193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier * 8193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier * http://www.apache.org/licenses/LICENSE-2.0 9193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier * 10193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier * Unless required by applicable law or agreed to in writing, software 11193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier * distributed under the License is distributed on an "AS IS" BASIS, 12193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier * See the License for the specific language governing permissions and 14193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier * limitations under the License. 15193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier */ 16193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier 17193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier#include "dedupe_set.h" 18e21dc3db191df04c100620965bee4617b3b24397Andreas Gampe 19e21dc3db191df04c100620965bee4617b3b24397Andreas Gampe#include <algorithm> 20e21dc3db191df04c100620965bee4617b3b24397Andreas Gampe#include <cstdio> 21e21dc3db191df04c100620965bee4617b3b24397Andreas Gampe 22ba150c37d582eeeb8c11ba5245edc281cf31793cBrian Carlstrom#include "gtest/gtest.h" 23ba150c37d582eeeb8c11ba5245edc281cf31793cBrian Carlstrom#include "thread-inl.h" 24193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier 25193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartiernamespace art { 26193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier 27193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartierclass DedupeHashFunc { 28193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier public: 29193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier size_t operator()(const std::vector<uint8_t>& array) const { 30193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier size_t hash = 0; 31193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier for (uint8_t c : array) { 32193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier hash += c; 33193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier hash += hash << 10; 34193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier hash += hash >> 6; 35193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier } 36193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier return hash; 37193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier } 38193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier}; 39413e89f277ec6ba1bdf2040f5b5611f29a27a447Brian CarlstromTEST(DedupeSetTest, Test) { 40193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier Thread* self = Thread::Current(); 41193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier typedef std::vector<uint8_t> ByteArray; 42e21dc3db191df04c100620965bee4617b3b24397Andreas Gampe SwapAllocator<void> swap(nullptr); 43e21dc3db191df04c100620965bee4617b3b24397Andreas Gampe DedupeSet<ByteArray, SwapVector<uint8_t>, size_t, DedupeHashFunc> deduplicator("test", swap); 44e21dc3db191df04c100620965bee4617b3b24397Andreas Gampe SwapVector<uint8_t>* array1; 45193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier { 46193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier ByteArray test1; 47193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier test1.push_back(10); 48193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier test1.push_back(20); 49193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier test1.push_back(30); 50193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier test1.push_back(45); 51e21dc3db191df04c100620965bee4617b3b24397Andreas Gampe 52193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier array1 = deduplicator.Add(self, test1); 53e21dc3db191df04c100620965bee4617b3b24397Andreas Gampe ASSERT_NE(array1, nullptr); 54e21dc3db191df04c100620965bee4617b3b24397Andreas Gampe ASSERT_TRUE(std::equal(test1.begin(), test1.end(), array1->begin())); 55193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier } 56193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier 57e21dc3db191df04c100620965bee4617b3b24397Andreas Gampe SwapVector<uint8_t>* array2; 58193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier { 59193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier ByteArray test1; 60193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier test1.push_back(10); 61193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier test1.push_back(20); 62193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier test1.push_back(30); 63193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier test1.push_back(45); 64193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier array2 = deduplicator.Add(self, test1); 65193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier ASSERT_EQ(array2, array1); 66e21dc3db191df04c100620965bee4617b3b24397Andreas Gampe ASSERT_TRUE(std::equal(test1.begin(), test1.end(), array2->begin())); 67193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier } 68193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier 69e21dc3db191df04c100620965bee4617b3b24397Andreas Gampe SwapVector<uint8_t>* array3; 70193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier { 71193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier ByteArray test1; 72193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier test1.push_back(10); 73193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier test1.push_back(22); 74193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier test1.push_back(30); 75193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier test1.push_back(47); 76193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier array3 = deduplicator.Add(self, test1); 77e21dc3db191df04c100620965bee4617b3b24397Andreas Gampe ASSERT_NE(array3, nullptr); 78e21dc3db191df04c100620965bee4617b3b24397Andreas Gampe ASSERT_TRUE(std::equal(test1.begin(), test1.end(), array3->begin())); 79193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier } 80193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier} 81193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier 82193bad9b9cfd10642043fa2ebbfc68bd5f9ede4bMathieu Chartier} // namespace art 83