blob: cdbbda206c18af810049dc0ad43bfaa3d0eaf3da [file] [log] [blame]
// 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