// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include #include #include "bthread/list_of_abafree_id.h" namespace bthread { // define TestId struct TestIdTraits { static const size_t BLOCK_SIZE = 16; static const size_t MAX_ENTRIES = 1000; static const size_t INIT_GC_SIZE = 100; static const int ID_INIT = 0xFF; static std::unordered_set id_set; static bool exists(int id) { return id_set.count(id) > 0; } }; std::unordered_set TestIdTraits::id_set; TEST(AbaListTest, TestGc) { ListOfABAFreeId aba_list; size_t wait_seq = 0; for (size_t i = 0; i < 1000000; i++) { size_t cnts[1]; aba_list.get_sizes(cnts, 1); if (wait_seq > cnts[0] + 1) { wait_seq = 0; TestIdTraits::id_set.clear(); } EXPECT_EQ(aba_list.add(i), 0); if (TestIdTraits::id_set.size() < 4) { TestIdTraits::id_set.insert(i); } else { wait_seq++; } } size_t cnts[1]; aba_list.get_sizes(cnts, 1); EXPECT_EQ(cnts[0], (size_t)96); } } // namespace bthread