chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
// 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
|
||||
Reference in New Issue
Block a user