mirror of
https://github.com/nodejs/node.git
synced 2025-05-15 17:51:35 +00:00

PR-URL: https://github.com/nodejs/node/pull/42657 Reviewed-By: Darshan Sen <raisinten@gmail.com> Reviewed-By: Richard Lau <rlau@redhat.com> Reviewed-By: Jiawen Geng <technicalcute@gmail.com> Reviewed-By: Michael Dawson <midawson@redhat.com>
82 lines
2.6 KiB
C++
82 lines
2.6 KiB
C++
// Copyright 2022 the V8 project 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 "src/heap/base/active-system-pages.h"
|
|
|
|
#include "testing/gtest/include/gtest/gtest.h"
|
|
|
|
namespace heap {
|
|
namespace base {
|
|
|
|
TEST(ActiveSystemPagesTest, Add) {
|
|
ActiveSystemPages pages;
|
|
const size_t kPageSizeBits = 0;
|
|
EXPECT_EQ(pages.Add(0, 1, kPageSizeBits), size_t{1});
|
|
EXPECT_EQ(pages.Add(1, 2, kPageSizeBits), size_t{1});
|
|
EXPECT_EQ(pages.Add(63, 64, kPageSizeBits), size_t{1});
|
|
EXPECT_EQ(pages.Size(kPageSizeBits), size_t{3});
|
|
|
|
// Try to add page a second time.
|
|
EXPECT_EQ(pages.Add(0, 2, kPageSizeBits), size_t{0});
|
|
}
|
|
|
|
TEST(ActiveSystemPagesTest, AddUnalignedRange) {
|
|
ActiveSystemPages pages;
|
|
const size_t kPageSizeBits = 12;
|
|
const size_t kPageSize = size_t{1} << kPageSizeBits;
|
|
const size_t kWordSize = 8;
|
|
EXPECT_EQ(pages.Add(0, kPageSize + kWordSize, kPageSizeBits), size_t{2});
|
|
EXPECT_EQ(pages.Add(3 * kPageSize - kWordSize, 3 * kPageSize, kPageSizeBits),
|
|
size_t{1});
|
|
EXPECT_EQ(pages.Add(kPageSize + kWordSize, 3 * kPageSize - kWordSize,
|
|
kPageSizeBits),
|
|
size_t{0});
|
|
EXPECT_EQ(pages.Size(kPageSizeBits), size_t{3} * kPageSize);
|
|
}
|
|
|
|
TEST(ActiveSystemPagesTest, AddFullBitset) {
|
|
ActiveSystemPages pages;
|
|
const size_t kPageSizeBits = 0;
|
|
EXPECT_EQ(pages.Add(0, 64, kPageSizeBits), size_t{64});
|
|
EXPECT_EQ(pages.Add(0, 64, kPageSizeBits), size_t{0});
|
|
EXPECT_EQ(pages.Size(kPageSizeBits), size_t{64});
|
|
}
|
|
|
|
TEST(ActiveSystemPagesTest, Reduce) {
|
|
ActiveSystemPages original;
|
|
const size_t kPageSizeBits = 0;
|
|
EXPECT_EQ(original.Add(0, 3, kPageSizeBits), size_t{3});
|
|
|
|
ActiveSystemPages updated;
|
|
EXPECT_EQ(updated.Add(1, 3, kPageSizeBits), size_t{2});
|
|
|
|
EXPECT_EQ(original.Reduce(updated), size_t{1});
|
|
}
|
|
|
|
TEST(ActiveSystemPagesTest, ReduceFullBitset) {
|
|
ActiveSystemPages original;
|
|
const size_t kPageSizeBits = 0;
|
|
EXPECT_EQ(original.Add(0, 64, kPageSizeBits), size_t{64});
|
|
|
|
ActiveSystemPages updated;
|
|
EXPECT_EQ(updated.Add(63, 64, kPageSizeBits), size_t{1});
|
|
|
|
EXPECT_EQ(original.Reduce(updated), size_t{63});
|
|
}
|
|
|
|
TEST(ActiveSystemPagesTest, Clear) {
|
|
ActiveSystemPages pages;
|
|
const size_t kPageSizeBits = 0;
|
|
EXPECT_EQ(pages.Add(0, 64, kPageSizeBits), size_t{64});
|
|
EXPECT_EQ(pages.Clear(), size_t{64});
|
|
EXPECT_EQ(pages.Size(kPageSizeBits), size_t{0});
|
|
|
|
EXPECT_EQ(pages.Add(0, 2, kPageSizeBits), size_t{2});
|
|
EXPECT_EQ(pages.Clear(), size_t{2});
|
|
EXPECT_EQ(pages.Size(kPageSizeBits), size_t{0});
|
|
}
|
|
|
|
} // namespace base
|
|
} // namespace heap
|