Index: gpu/command_buffer/common/id_allocator_test.cc |
diff --git a/gpu/command_buffer/common/id_allocator_test.cc b/gpu/command_buffer/common/id_allocator_test.cc |
index 5d32e40b1bdd6a01ac48884c62eaf45afc1a36cd..e4c2140782535cca890488ac3a8a989616961c7c 100644 |
--- a/gpu/command_buffer/common/id_allocator_test.cc |
+++ b/gpu/command_buffer/common/id_allocator_test.cc |
@@ -125,4 +125,61 @@ TEST_F(IdAllocatorTest, RedundantFreeIsIgnored) { |
EXPECT_NE(kInvalidResource, id3); |
} |
+TEST_F(IdAllocatorTest, AllocateIDRange) { |
+ const ResourceId kMaxPossibleOffset = ~static_cast<ResourceId>(0); |
+ |
+ IdAllocator* allocator = id_allocator(); |
+ |
+ ResourceId id1 = allocator->AllocateIDRange(1); |
+ EXPECT_EQ(1u, id1); |
+ ResourceId id2 = allocator->AllocateIDRange(2); |
+ EXPECT_EQ(2u, id2); |
+ ResourceId id3 = allocator->AllocateIDRange(3); |
+ EXPECT_EQ(4u, id3); |
+ ResourceId id4 = allocator->AllocateID(); |
+ EXPECT_EQ(7u, id4); |
+ allocator->FreeID(3); |
+ ResourceId id5 = allocator->AllocateIDRange(1); |
+ EXPECT_EQ(3u, id5); |
+ allocator->FreeID(5); |
+ allocator->FreeID(2); |
+ allocator->FreeID(4); |
+ ResourceId id6 = allocator->AllocateIDRange(2); |
+ EXPECT_EQ(4u, id6); |
+ ResourceId id7 = allocator->AllocateIDAtOrAbove(kMaxPossibleOffset); |
+ EXPECT_EQ(kMaxPossibleOffset, id7); |
+ ResourceId id8 = allocator->AllocateIDAtOrAbove(kMaxPossibleOffset); |
+ EXPECT_EQ(2u, id8); |
+ ResourceId id9 = allocator->AllocateIDRange(50); |
+ EXPECT_EQ(8u, id9); |
+ ResourceId id10 = allocator->AllocateIDRange(50); |
+ EXPECT_EQ(58u, id10); |
+ // Remove all the low-numbered ids. |
+ allocator->FreeID(1); |
+ allocator->FreeID(15); |
+ allocator->FreeIDRange(2, 107); |
+ ResourceId id11 = allocator->AllocateIDRange(100); |
+ EXPECT_EQ(1u, id11); |
+ allocator->FreeID(kMaxPossibleOffset); |
+ ResourceId id12 = allocator->AllocateIDRange(100); |
+ EXPECT_EQ(101u, id12); |
+ |
+ ResourceId id13 = allocator->AllocateIDAtOrAbove(kMaxPossibleOffset - 2u); |
+ EXPECT_EQ(kMaxPossibleOffset, id13); |
+ ResourceId id14 = allocator->AllocateIDRange(3); |
+ EXPECT_EQ(201u, id14); |
+} |
+ |
+TEST_F(IdAllocatorTest, AllocateIDRangeNoWrapInRange) { |
+ const ResourceId kMaxPossibleOffset = ~static_cast<ResourceId>(0); |
+ |
+ IdAllocator* allocator = id_allocator(); |
+ ResourceId id1 = allocator->AllocateIDAtOrAbove(kMaxPossibleOffset - 2u); |
+ EXPECT_EQ(kMaxPossibleOffset - 2u, id1); |
+ ResourceId id3 = allocator->AllocateIDRange(3); |
+ EXPECT_EQ(1u, id3); |
+ ResourceId id2 = allocator->AllocateIDRange(2); |
+ EXPECT_EQ(kMaxPossibleOffset - 1, id2); |
+} |
+ |
} // namespace gpu |