WeakHashListTests.cs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. using Avalonia.Utilities;
  2. using Xunit;
  3. namespace Avalonia.Base.UnitTests.Utilities;
  4. public class WeakHashListTests
  5. {
  6. [Fact]
  7. public void Is_Empty_Works()
  8. {
  9. var target = new WeakHashList<string>();
  10. Assert.True(target.IsEmpty);
  11. target.Add("1");
  12. Assert.False(target.IsEmpty);
  13. target.Remove("1");
  14. Assert.True(target.IsEmpty);
  15. // Fill array storage.
  16. var arrMaxSize = WeakHashList<string>.DefaultArraySize;
  17. for (int i = 0; i < arrMaxSize; i++)
  18. {
  19. target.Add(i.ToString());
  20. }
  21. Assert.False(target.IsEmpty);
  22. // This goes above array storage and upgrades to a dictionary.
  23. target.Add(arrMaxSize.ToString());
  24. Assert.False(target.IsEmpty);
  25. // Remove everything, this should still keep an empty dictionary.
  26. for (int i = 0; i < arrMaxSize + 1; i++)
  27. {
  28. target.Remove(i.ToString());
  29. }
  30. Assert.True(target.IsEmpty);
  31. }
  32. [Fact]
  33. public void Array_Compact_After_Remove_Works()
  34. {
  35. var target = new WeakHashList<string>();
  36. // Use all slots in array storage.
  37. var arrMaxSize = WeakHashList<string>.DefaultArraySize;
  38. for (int i = 0; i < arrMaxSize; i++)
  39. {
  40. target.Add(i.ToString());
  41. }
  42. // This should compact the array.
  43. target.Remove("3");
  44. // And new value should fill empty space.
  45. target.Add("42");
  46. }
  47. }