committed by
GitHub
2 changed files with 74 additions and 5 deletions
@ -0,0 +1,66 @@ |
|||
using Avalonia.Utilities; |
|||
using Xunit; |
|||
|
|||
namespace Avalonia.Base.UnitTests.Utilities; |
|||
|
|||
public class WeakHashListTests |
|||
{ |
|||
[Fact] |
|||
public void Is_Empty_Works() |
|||
{ |
|||
var target = new WeakHashList<string>(); |
|||
|
|||
Assert.True(target.IsEmpty); |
|||
|
|||
target.Add("1"); |
|||
|
|||
Assert.False(target.IsEmpty); |
|||
|
|||
target.Remove("1"); |
|||
|
|||
Assert.True(target.IsEmpty); |
|||
|
|||
// Fill array storage.
|
|||
var arrMaxSize = WeakHashList<string>.DefaultArraySize; |
|||
|
|||
for (int i = 0; i < arrMaxSize; i++) |
|||
{ |
|||
target.Add(i.ToString()); |
|||
} |
|||
|
|||
Assert.False(target.IsEmpty); |
|||
|
|||
// This goes above array storage and upgrades to a dictionary.
|
|||
target.Add(arrMaxSize.ToString()); |
|||
|
|||
Assert.False(target.IsEmpty); |
|||
|
|||
// Remove everything, this should still keep an empty dictionary.
|
|||
for (int i = 0; i < arrMaxSize + 1; i++) |
|||
{ |
|||
target.Remove(i.ToString()); |
|||
} |
|||
|
|||
Assert.True(target.IsEmpty); |
|||
} |
|||
|
|||
[Fact] |
|||
public void Array_Compact_After_Remove_Works() |
|||
{ |
|||
var target = new WeakHashList<string>(); |
|||
|
|||
// Use all slots in array storage.
|
|||
var arrMaxSize = WeakHashList<string>.DefaultArraySize; |
|||
|
|||
for (int i = 0; i < arrMaxSize; i++) |
|||
{ |
|||
target.Add(i.ToString()); |
|||
} |
|||
|
|||
// This should compact the array.
|
|||
target.Remove("3"); |
|||
|
|||
// And new value should fill empty space.
|
|||
target.Add("42"); |
|||
} |
|||
} |
|||
Loading…
Reference in new issue