NullableConcurrentDictionaryTests.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. using System;
  2. using System.Collections.Concurrent;
  3. using System.Collections.Generic;
  4. using Masuit.Tools.Systems;
  5. using Xunit;
  6. namespace Masuit.Tools.Abstractions.Test.Systems;
  7. public class NullableConcurrentDictionaryTests
  8. {
  9. [Fact]
  10. public void Test_AddAndRetrieveValue()
  11. {
  12. var dictionary = new NullableConcurrentDictionary<string, int>();
  13. dictionary["key1"] = 1;
  14. Assert.True(dictionary.TryGetValue("key1", out var value));
  15. Assert.Equal(1, value);
  16. }
  17. [Fact]
  18. public void Test_FallbackValue()
  19. {
  20. var dictionary = new NullableConcurrentDictionary<string, int>(-1);
  21. Assert.Equal(-1, dictionary["nonexistent"]);
  22. }
  23. [Fact]
  24. public void Test_ContainsKey()
  25. {
  26. var dictionary = new NullableConcurrentDictionary<string, int>();
  27. dictionary["key1"] = 1;
  28. Assert.True(dictionary.ContainsKey("key1"));
  29. Assert.False(dictionary.ContainsKey("key2"));
  30. }
  31. [Fact]
  32. public void Test_TryAdd()
  33. {
  34. var dictionary = new NullableConcurrentDictionary<string, int>();
  35. Assert.True(dictionary.TryAdd("key1", 1));
  36. Assert.False(dictionary.TryAdd("key1", 2));
  37. }
  38. [Fact]
  39. public void Test_TryRemove()
  40. {
  41. var dictionary = new NullableConcurrentDictionary<string, int>();
  42. dictionary["key1"] = 1;
  43. Assert.True(dictionary.TryRemove("key1", out var value));
  44. Assert.Equal(1, value);
  45. Assert.False(dictionary.TryRemove("key1", out _));
  46. }
  47. [Fact]
  48. public void Test_TryUpdate()
  49. {
  50. var dictionary = new NullableConcurrentDictionary<string, int>();
  51. dictionary["key1"] = 1;
  52. Assert.True(dictionary.TryUpdate("key1", 2, 1));
  53. Assert.Equal(2, dictionary["key1"]);
  54. Assert.False(dictionary.TryUpdate("key1", 3, 1));
  55. }
  56. [Fact]
  57. public void Test_ImplicitConversionFromDictionary()
  58. {
  59. var dict = new Dictionary<string, int> { { "key1", 1 } };
  60. NullableConcurrentDictionary<string, int> nullableDict = dict;
  61. Assert.Equal(1, nullableDict["key1"]);
  62. }
  63. [Fact]
  64. public void Test_ImplicitConversionFromConcurrentDictionary()
  65. {
  66. var dict = new ConcurrentDictionary<string, int>();
  67. dict["key1"] = 1;
  68. NullableConcurrentDictionary<string, int> nullableDict = dict;
  69. Assert.Equal(1, nullableDict["key1"]);
  70. }
  71. [Fact]
  72. public void Test_ImplicitConversionToConcurrentDictionary()
  73. {
  74. var nullableDict = new NullableConcurrentDictionary<string, int>();
  75. nullableDict["key1"] = 1;
  76. ConcurrentDictionary<string, int> dict = nullableDict;
  77. Assert.Equal(1, dict["key1"]);
  78. }
  79. [Fact]
  80. public void Test_IndexerWithCondition()
  81. {
  82. var dictionary = new NullableConcurrentDictionary<string, int>(-1);
  83. dictionary["key1"] = 1;
  84. dictionary["key2"] = 2;
  85. Assert.Equal(2, dictionary[new Func<string, bool>(key => key == "key2")]);
  86. Assert.Equal(-1, dictionary[new Func<string, bool>(key => key == "key3")]);
  87. }
  88. }
  89. public class NullableConcurrentDictionaryTestsImpl : NullableConcurrentDictionaryTests
  90. {
  91. }