| 
					
				 | 
			
			
				@@ -380,3 +380,42 @@ func TestErase(t *testing.T) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	assert.Equal(t, alloc.Used(), 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	assert.Equal(t, alloc.Size(), 11) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func TestAllocatorHibernateBoot(t *testing.T) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	alloc := NewAllocator() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	for i := 0; i < 10000; i++ { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		n := alloc.malloc() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		alloc.storage[n].item.Key = uint32(i) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		alloc.storage[n].item.Value = uint32(i) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		alloc.storage[n].left = uint32(i) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		alloc.storage[n].right = uint32(i) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		alloc.storage[n].parent = uint32(i) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		alloc.storage[n].color = i%2 == 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	alloc.Hibernate() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.Nil(t, alloc.storage) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.Equal(t, alloc.Size(), 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.Equal(t, alloc.hibernatedLen, 10001) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.PanicsWithValue(t, "hibernated allocators cannot be used", func() { alloc.Used() }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.PanicsWithValue(t, "hibernated allocators cannot be used", func() { alloc.malloc() }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.PanicsWithValue(t, "hibernated allocators cannot be used", func() { alloc.free(0) }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.PanicsWithValue(t, "cannot clone a hibernated allocator", func() { alloc.Clone() }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	alloc.Boot() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.Equal(t, alloc.hibernatedLen, 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	for n := 1; n <= 10000; n++ { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assert.Equal(t, alloc.storage[n].item.Key, uint32(n-1)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assert.Equal(t, alloc.storage[n].item.Value, uint32(n-1)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assert.Equal(t, alloc.storage[n].left, uint32(n-1)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assert.Equal(t, alloc.storage[n].right, uint32(n-1)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assert.Equal(t, alloc.storage[n].parent, uint32(n-1)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assert.Equal(t, alloc.storage[n].color, (n-1)%2 == 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func TestAllocatorHibernateBootEmpty(t *testing.T) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	alloc := NewAllocator() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	alloc.Hibernate() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	alloc.Boot() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.Equal(t, alloc.Size(), 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	assert.Equal(t, alloc.Used(), 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |