// Copyright 2020 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/index-generator.h" #include "test/unittests/test-utils.h" namespace v8 { namespace internal { TEST(IndexGeneratorTest, Empty) { IndexGenerator gen(0); EXPECT_EQ(base::nullopt, gen.GetNext()); } TEST(IndexGeneratorTest, GetNext) { IndexGenerator gen(11); EXPECT_EQ(0U, gen.GetNext()); EXPECT_EQ(5U, gen.GetNext()); EXPECT_EQ(2U, gen.GetNext()); EXPECT_EQ(8U, gen.GetNext()); EXPECT_EQ(1U, gen.GetNext()); EXPECT_EQ(3U, gen.GetNext()); EXPECT_EQ(6U, gen.GetNext()); EXPECT_EQ(9U, gen.GetNext()); EXPECT_EQ(4U, gen.GetNext()); EXPECT_EQ(7U, gen.GetNext()); EXPECT_EQ(10U, gen.GetNext()); EXPECT_EQ(base::nullopt, gen.GetNext()); } TEST(IndexGeneratorTest, GiveBack) { IndexGenerator gen(4); EXPECT_EQ(0U, gen.GetNext()); EXPECT_EQ(2U, gen.GetNext()); EXPECT_EQ(1U, gen.GetNext()); gen.GiveBack(2); gen.GiveBack(0); EXPECT_EQ(0U, gen.GetNext()); EXPECT_EQ(2U, gen.GetNext()); EXPECT_EQ(3U, gen.GetNext()); EXPECT_EQ(base::nullopt, gen.GetNext()); } } // namespace internal } // namespace v8