46 lines
1.2 KiB
C++
46 lines
1.2 KiB
C++
// 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 <gtest/gtest.h>
|
|
|
|
#include <unordered_set>
|
|
|
|
#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<int> id_set;
|
|
static bool exists(int id) { return id_set.count(id) > 0; }
|
|
};
|
|
|
|
std::unordered_set<int> TestIdTraits::id_set;
|
|
|
|
TEST(AbaListTest, TestGc) {
|
|
ListOfABAFreeId<int, TestIdTraits> 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
|