com.wallstop-studios.unity-helpers 2.0.0-rc58 → 2.0.0-rc59

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (298) hide show
  1. package/.config/dotnet-tools.json +9 -9
  2. package/.editorconfig +184 -184
  3. package/.gitattributes +63 -63
  4. package/.github/workflows/npm-publish.yml +66 -66
  5. package/.pre-commit-config.yaml +21 -21
  6. package/Editor/AnimationCopier.cs +181 -181
  7. package/Editor/AnimationCopier.cs.meta +2 -2
  8. package/Editor/AnimationCreator.cs +253 -253
  9. package/Editor/AnimationCreator.cs.meta +11 -11
  10. package/Editor/AnimationEventEditor.cs +887 -887
  11. package/Editor/AnimatorControllerCopier.cs +162 -162
  12. package/Editor/AnimatorControllerCopier.cs.meta +2 -2
  13. package/Editor/CustomEditors/MatchColliderToSpriteEditor.cs +34 -34
  14. package/Editor/CustomEditors/MatchColliderToSpriteEditor.cs.meta +2 -2
  15. package/Editor/CustomEditors.meta +2 -2
  16. package/Editor/FitTextureSizeWizard.cs +147 -147
  17. package/Editor/FitTextureSizeWizard.cs.meta +2 -2
  18. package/Editor/PrefabCheckWizard.cs +170 -170
  19. package/Editor/PrefabCheckWizard.cs.meta +11 -11
  20. package/Editor/SpriteSettingsApplier.cs +272 -272
  21. package/Editor/SpriteSettingsApplier.cs.meta +2 -2
  22. package/Editor/StringInListeDrawer.cs +56 -56
  23. package/Editor/TextureResizerWizard.cs +181 -181
  24. package/Editor/TextureResizerWizard.cs.meta +2 -2
  25. package/Editor/TextureSettingsApplier.cs +178 -178
  26. package/Editor/TextureSettingsApplier.cs.meta +2 -2
  27. package/Editor/Utils/DxReadOnlyPropertyDrawer.cs +26 -26
  28. package/Editor/Utils/DxReadOnlyPropertyDrawer.cs.meta +11 -11
  29. package/Editor/Utils/EditorUtilities.cs +22 -22
  30. package/Editor/Utils/EditorUtilities.cs.meta +11 -11
  31. package/Editor/Utils.meta +8 -8
  32. package/Editor/WShowIfPropertyDrawer.cs +63 -63
  33. package/Editor/WallstopStudios.UnityHelpers.Editor.asmdef +17 -17
  34. package/Editor/WallstopStudios.UnityHelpers.Editor.asmdef.meta +7 -7
  35. package/LICENSE +21 -21
  36. package/LICENSE.md +6 -6
  37. package/LICENSE.meta +7 -7
  38. package/README.md +177 -177
  39. package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.dll.meta +33 -33
  40. package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.xml +223 -223
  41. package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.xml.meta +7 -7
  42. package/Runtime/Binaries/System.Text.Encodings.Web.dll.meta +33 -33
  43. package/Runtime/Binaries/System.Text.Encodings.Web.xml +935 -935
  44. package/Runtime/Binaries/System.Text.Encodings.Web.xml.meta +7 -7
  45. package/Runtime/Binaries/System.Text.Json.dll.meta +33 -33
  46. package/Runtime/Binaries/System.Text.Json.xml +4829 -4829
  47. package/Runtime/Binaries/System.Text.Json.xml.meta +7 -7
  48. package/Runtime/Binaries.meta +8 -8
  49. package/Runtime/Core/Attributes/AnimationEventAttribute.cs +131 -131
  50. package/Runtime/Core/Attributes/ChildComponentAttribute.cs +209 -209
  51. package/Runtime/Core/Attributes/DxReadOnlyAttribute.cs +6 -6
  52. package/Runtime/Core/Attributes/KSerializableAttribute.cs +19 -19
  53. package/Runtime/Core/Attributes/NotNullAttribute.cs +32 -32
  54. package/Runtime/Core/Attributes/ParentComponent.cs +185 -185
  55. package/Runtime/Core/Attributes/RelationalComponentExtensions.cs +14 -14
  56. package/Runtime/Core/Attributes/SiblingComponentAttribute.cs +117 -117
  57. package/Runtime/Core/Attributes/SiblingComponentAttribute.cs.meta +11 -11
  58. package/Runtime/Core/Attributes/ValidateAssignmentAttribute.cs +101 -101
  59. package/Runtime/Core/Attributes/ValidateAssignmentAttribute.cs.meta +11 -11
  60. package/Runtime/Core/Attributes/WShowIfAttribute.cs +16 -16
  61. package/Runtime/Core/Attributes.meta +8 -8
  62. package/Runtime/Core/DataStructure/Adapters/FastVector2Int.cs +92 -92
  63. package/Runtime/Core/DataStructure/Adapters/FastVector3Int.cs +185 -185
  64. package/Runtime/Core/DataStructure/Adapters/KGuid.cs +305 -305
  65. package/Runtime/Core/DataStructure/Adapters/KVector2.cs +80 -80
  66. package/Runtime/Core/DataStructure/Circle.cs +50 -50
  67. package/Runtime/Core/DataStructure/CyclicBuffer.cs +193 -153
  68. package/Runtime/Core/DataStructure/ISpatialTree.cs +60 -60
  69. package/Runtime/Core/DataStructure/ISpatialTree.cs.meta +11 -11
  70. package/Runtime/Core/DataStructure/KDTree.cs +292 -292
  71. package/Runtime/Core/DataStructure/KDTree.cs.meta +11 -11
  72. package/Runtime/Core/DataStructure/QuadTree.cs +287 -287
  73. package/Runtime/Core/DataStructure/RTree.cs +346 -346
  74. package/Runtime/Core/DataStructure/RTree.cs.meta +11 -11
  75. package/Runtime/Core/DataStructure/StringWrapper.cs +91 -91
  76. package/Runtime/Core/DataStructure/TimedCache.cs +66 -66
  77. package/Runtime/Core/Extension/AnimatorExtensions.cs +25 -25
  78. package/Runtime/Core/Extension/AsyncOperationExtensions.cs +110 -110
  79. package/Runtime/Core/Extension/CircleExtensions.cs +25 -25
  80. package/Runtime/Core/Extension/ColorExtensions.cs +629 -629
  81. package/Runtime/Core/Extension/DictionaryExtensions.cs +279 -279
  82. package/Runtime/Core/Extension/DirectionExtensions.cs +213 -213
  83. package/Runtime/Core/Extension/EnumExtensions.cs +37 -37
  84. package/Runtime/Core/Extension/EnumExtensions.cs.meta +2 -2
  85. package/Runtime/Core/Extension/HashSetExtensions.cs +12 -12
  86. package/Runtime/Core/Extension/IEnumerableExtensions.cs +122 -122
  87. package/Runtime/Core/Extension/IListExtensions.cs +146 -106
  88. package/Runtime/Core/Extension/LoggingExtensions.cs +258 -258
  89. package/Runtime/Core/Extension/RandomExtensions.cs +109 -109
  90. package/Runtime/Core/Extension/SerializedPropertyExtensions.cs +157 -157
  91. package/Runtime/Core/Extension/StringExtensions.cs +180 -151
  92. package/Runtime/Core/Extension/UnityExtensions.cs +1608 -1608
  93. package/Runtime/Core/Helper/ArrayConverter.cs +39 -39
  94. package/Runtime/Core/Helper/ArrayConverter.cs.meta +2 -2
  95. package/Runtime/Core/Helper/AssignUtilities.cs +14 -14
  96. package/Runtime/Core/Helper/AssignUtilities.cs.meta +11 -11
  97. package/Runtime/Core/Helper/DirectoryHelper.cs +132 -0
  98. package/Runtime/Core/Helper/DirectoryHelper.cs.meta +3 -0
  99. package/Runtime/Core/Helper/Enumerables.cs +17 -17
  100. package/Runtime/Core/Helper/FormattingHelpers.cs +32 -32
  101. package/Runtime/Core/Helper/Geometry.cs +43 -43
  102. package/Runtime/Core/Helper/Helpers.cs +722 -722
  103. package/Runtime/Core/Helper/Helpers.cs.meta +11 -11
  104. package/Runtime/Core/Helper/IterationHelpers.cs +32 -32
  105. package/Runtime/Core/Helper/IterationHelpers.cs.meta +11 -11
  106. package/Runtime/Core/Helper/LifetimeHelpers.cs +13 -13
  107. package/Runtime/Core/Helper/Objects.cs +769 -769
  108. package/Runtime/Core/Helper/Partials/LogHelpers.cs +13 -13
  109. package/Runtime/Core/Helper/Partials/LogHelpers.cs.meta +2 -2
  110. package/Runtime/Core/Helper/Partials/MathHelpers.cs +30 -30
  111. package/Runtime/Core/Helper/Partials/MathHelpers.cs.meta +2 -2
  112. package/Runtime/Core/Helper/Partials/ObjectHelpers.cs +388 -388
  113. package/Runtime/Core/Helper/Partials/ObjectHelpers.cs.meta +2 -2
  114. package/Runtime/Core/Helper/Partials/TransformHelpers.cs +189 -189
  115. package/Runtime/Core/Helper/Partials/TransformHelpers.cs.meta +2 -2
  116. package/Runtime/Core/Helper/Partials.meta +2 -2
  117. package/Runtime/Core/Helper/ReflectionHelpers.cs +452 -452
  118. package/Runtime/Core/Helper/ReflectionHelpers.cs.meta +2 -2
  119. package/Runtime/Core/Helper/SceneHelper.cs +209 -209
  120. package/Runtime/Core/Helper/SpriteHelpers.cs +41 -41
  121. package/Runtime/Core/Helper/SpriteHelpers.cs.meta +11 -11
  122. package/Runtime/Core/Helper/StringInList.cs +31 -31
  123. package/Runtime/Core/Helper/StringInList.cs.meta +11 -11
  124. package/Runtime/Core/Helper/UnityMainThreadDispatcher.cs +82 -82
  125. package/Runtime/Core/Helper/WallMath.cs +166 -166
  126. package/Runtime/Core/Math/Line.cs +55 -55
  127. package/Runtime/Core/Math/Parabola.cs +47 -47
  128. package/Runtime/Core/Math/PointPolygonCheck.cs +36 -36
  129. package/Runtime/Core/Math/PointPolygonCheck.cs.meta +11 -11
  130. package/Runtime/Core/Math/Range.cs +92 -92
  131. package/Runtime/Core/Math/XXHash.cs +310 -310
  132. package/Runtime/Core/Math/XXHash.cs.meta +11 -11
  133. package/Runtime/Core/Model/Direction.cs +43 -43
  134. package/Runtime/Core/OneOf/FastOneOf.cs +152 -152
  135. package/Runtime/Core/OneOf/None.cs +4 -4
  136. package/Runtime/Core/Random/AbstractRandom.cs +585 -585
  137. package/Runtime/Core/Random/DotNetRandom.cs +54 -54
  138. package/Runtime/Core/Random/DotNetRandom.cs.meta +2 -2
  139. package/Runtime/Core/Random/IRandom.cs +161 -161
  140. package/Runtime/Core/Random/LinearCongruentialGenerator.cs +49 -49
  141. package/Runtime/Core/Random/NativePcgRandom.cs +97 -97
  142. package/Runtime/Core/Random/PRNG.cs +7 -7
  143. package/Runtime/Core/Random/PRNG.cs.meta +2 -2
  144. package/Runtime/Core/Random/PcgRandom.cs +149 -149
  145. package/Runtime/Core/Random/PerlinNoise.cs +369 -369
  146. package/Runtime/Core/Random/PerlinNoise.cs.meta +2 -2
  147. package/Runtime/Core/Random/RandomState.cs +131 -131
  148. package/Runtime/Core/Random/RandomUtilities.cs +26 -26
  149. package/Runtime/Core/Random/RandomUtilities.cs.meta +11 -11
  150. package/Runtime/Core/Random/RomuDuo.cs +116 -116
  151. package/Runtime/Core/Random/RomuDuo.cs.meta +2 -2
  152. package/Runtime/Core/Random/SplitMix64.cs +94 -94
  153. package/Runtime/Core/Random/SplitMix64.cs.meta +2 -2
  154. package/Runtime/Core/Random/SquirrelRandom.cs +84 -84
  155. package/Runtime/Core/Random/SystemRandom.cs +162 -162
  156. package/Runtime/Core/Random/ThreadLocalRandom.cs +12 -12
  157. package/Runtime/Core/Random/UnityRandom.cs +57 -57
  158. package/Runtime/Core/Random/UnityRandom.cs.meta +11 -11
  159. package/Runtime/Core/Random/WyRandom.cs +121 -121
  160. package/Runtime/Core/Random/WyRandom.cs.meta +2 -2
  161. package/Runtime/Core/Random/XorShiftRandom.cs +52 -52
  162. package/Runtime/Core/Random/XorShiftRandom.cs.meta +11 -11
  163. package/Runtime/Core/Random/XorShiroRandom.cs +119 -119
  164. package/Runtime/Core/Random/XorShiroRandom.cs.meta +2 -2
  165. package/Runtime/Core/Serialization/JsonConverters/ColorConverter.cs +88 -88
  166. package/Runtime/Core/Serialization/JsonConverters/GameObjectConverter.cs +37 -37
  167. package/Runtime/Core/Serialization/JsonConverters/Matrix4x4Converter.cs +218 -218
  168. package/Runtime/Core/Serialization/JsonConverters/TypeConverter.cs +28 -28
  169. package/Runtime/Core/Serialization/JsonConverters/Vector2Converter.cs +74 -74
  170. package/Runtime/Core/Serialization/JsonConverters/Vector3Converter.cs +81 -81
  171. package/Runtime/Core/Serialization/JsonConverters/Vector4Converter.cs +88 -88
  172. package/Runtime/Core/Serialization/Serializer.cs +195 -195
  173. package/Runtime/Core/Threading/SingleThreadedThreadPool.cs +113 -113
  174. package/Runtime/Protobuf-Net/System.Buffers.dll.meta +33 -33
  175. package/Runtime/Protobuf-Net/System.Collections.Immutable.dll.meta +33 -33
  176. package/Runtime/Protobuf-Net/System.Collections.Immutable.xml +5379 -5379
  177. package/Runtime/Protobuf-Net/System.Collections.Immutable.xml.meta +7 -7
  178. package/Runtime/Protobuf-Net/System.Numerics.Vectors.dll.meta +33 -33
  179. package/Runtime/Protobuf-Net/System.Runtime.CompilerServices.Unsafe.dll.meta +33 -33
  180. package/Runtime/Protobuf-Net/System.Runtime.CompilerServices.Unsafe.xml +290 -290
  181. package/Runtime/Protobuf-Net/System.Runtime.CompilerServices.Unsafe.xml.meta +7 -7
  182. package/Runtime/Protobuf-Net/protobuf-net.Core.dll.meta +33 -33
  183. package/Runtime/Protobuf-Net/protobuf-net.dll.meta +33 -33
  184. package/Runtime/UI/LayeredImage.cs +364 -364
  185. package/Runtime/UI/LayeredImage.cs.meta +2 -2
  186. package/Runtime/UI.meta +2 -2
  187. package/Runtime/Utils/AnimationEventEqualityComparer.cs +161 -161
  188. package/Runtime/Utils/AnimatorEnumStateMachine.cs +88 -88
  189. package/Runtime/Utils/Buffers.cs +33 -33
  190. package/Runtime/Utils/CenterPointOffset.cs +30 -30
  191. package/Runtime/Utils/CenterPointOffset.cs.meta +2 -2
  192. package/Runtime/Utils/CircleLineRenderer.cs +134 -134
  193. package/Runtime/Utils/CoroutineHandler.cs +4 -4
  194. package/Runtime/Utils/CoroutineHandler.cs.meta +2 -2
  195. package/Runtime/Utils/DeferredDisposalResult.cs +23 -23
  196. package/Runtime/Utils/MatchColliderToSprite.cs +94 -94
  197. package/Runtime/Utils/MatchColliderToSprite.cs.meta +2 -2
  198. package/Runtime/Utils/Oscillator.cs +27 -27
  199. package/Runtime/Utils/RuntimeSingleton.cs +69 -69
  200. package/Runtime/Utils/RuntimeSingleton.cs.meta +11 -11
  201. package/Runtime/Utils/SetTextureImportData.cs +69 -69
  202. package/Runtime/Utils/SpriteRendererMetadata.cs +374 -374
  203. package/Runtime/Utils/SpriteRendererMetadata.cs.meta +2 -2
  204. package/Runtime/Utils/SpriteRendererSyncer.cs +100 -100
  205. package/Runtime/Utils/SpriteRendererSyncer.cs.meta +2 -2
  206. package/Runtime/Utils/StartTracker.cs +15 -0
  207. package/Runtime/Utils/StartTracker.cs.meta +3 -0
  208. package/Runtime/Utils/TextureScale.cs +179 -179
  209. package/Runtime/Utils/TextureScale.cs.meta +2 -2
  210. package/Runtime/Utils/UnityObjectNameComparer.cs +33 -0
  211. package/Runtime/Utils/UnityObjectNameComparer.cs.meta +3 -0
  212. package/Runtime/WallstopStudios.UnityHelpers.asmdef +13 -13
  213. package/Tests/Runtime/Attributes/ChildComponentTests.cs +81 -81
  214. package/Tests/Runtime/Attributes/Components/ExpectChildSpriteRenderers.cs +28 -28
  215. package/Tests/Runtime/Attributes/Components/ExpectParentSpriteRenderers.cs +28 -28
  216. package/Tests/Runtime/Attributes/ParentComponentTests.cs +68 -68
  217. package/Tests/Runtime/Components/RelationalComponentTesterComplex.cs +34 -34
  218. package/Tests/Runtime/Components/RelationalComponentTesterComplex.cs.meta +2 -2
  219. package/Tests/Runtime/Components/RelationalComponentsTesterSimple.cs +40 -40
  220. package/Tests/Runtime/Components.meta +2 -2
  221. package/Tests/Runtime/DataStructures/BalancedKDTreeTests.cs +14 -14
  222. package/Tests/Runtime/DataStructures/BalancedKDTreeTests.cs.meta +11 -11
  223. package/Tests/Runtime/DataStructures/CyclicBufferTests.cs +324 -324
  224. package/Tests/Runtime/DataStructures/QuadTreeTests.cs +14 -14
  225. package/Tests/Runtime/DataStructures/QuadTreeTests.cs.meta +11 -11
  226. package/Tests/Runtime/DataStructures/SpatialTreeTests.cs +130 -130
  227. package/Tests/Runtime/DataStructures/SpatialTreeTests.cs.meta +11 -11
  228. package/Tests/Runtime/DataStructures/UnbalancedKDTreeTests.cs +14 -14
  229. package/Tests/Runtime/DataStructures/UnbalancedKDTreeTests.cs.meta +11 -11
  230. package/Tests/Runtime/DataStructures.meta +8 -8
  231. package/Tests/Runtime/Extensions/DictionaryExtensionTests.cs +439 -439
  232. package/Tests/Runtime/Extensions/DictionaryExtensionTests.cs.meta +2 -2
  233. package/Tests/Runtime/Extensions/EnumExtensionTests.cs +128 -128
  234. package/Tests/Runtime/Extensions/EnumExtensionTests.cs.meta +2 -2
  235. package/Tests/Runtime/Extensions/IListExtensionTests.cs +104 -104
  236. package/Tests/Runtime/Extensions/RandomExtensionTests.cs +27 -27
  237. package/Tests/Runtime/Extensions/RandomExtensionTests.cs.meta +2 -2
  238. package/Tests/Runtime/Extensions/StringExtensionTests.cs +31 -31
  239. package/Tests/Runtime/Extensions/StringExtensionTests.cs.meta +2 -2
  240. package/Tests/Runtime/Extensions.meta +2 -2
  241. package/Tests/Runtime/Helper/ArrayConverterTests.cs +19 -19
  242. package/Tests/Runtime/Helper/ArrayConverterTests.cs.meta +2 -2
  243. package/Tests/Runtime/Helper/FormattingHelperTests.cs +129 -129
  244. package/Tests/Runtime/Helper/FormattingHelperTests.cs.meta +2 -2
  245. package/Tests/Runtime/Helper/ObjectHelperTests.cs +402 -402
  246. package/Tests/Runtime/Helper/ObjectHelperTests.cs.meta +2 -2
  247. package/Tests/Runtime/Helper/ReflectionHelperTests.cs +536 -536
  248. package/Tests/Runtime/Helper/SceneHelperTests.cs +94 -94
  249. package/Tests/Runtime/Helper/WallMathTests.cs +233 -233
  250. package/Tests/Runtime/Helper/WallMathTests.cs.meta +2 -2
  251. package/Tests/Runtime/Helper.meta +2 -2
  252. package/Tests/Runtime/Performance/KDTreePerformanceTests.cs +14 -14
  253. package/Tests/Runtime/Performance/KDTreePerformanceTests.cs.meta +11 -11
  254. package/Tests/Runtime/Performance/QuadTreePerformanceTests.cs +14 -14
  255. package/Tests/Runtime/Performance/QuadTreePerformanceTests.cs.meta +11 -11
  256. package/Tests/Runtime/Performance/RandomPerformanceTests.cs +157 -157
  257. package/Tests/Runtime/Performance/RandomPerformanceTests.cs.meta +11 -11
  258. package/Tests/Runtime/Performance/RelationComponentPerformanceTests.cs +61 -61
  259. package/Tests/Runtime/Performance/RelationComponentPerformanceTests.cs.meta +2 -2
  260. package/Tests/Runtime/Performance/SpatialTreePerformanceTest.cs +154 -154
  261. package/Tests/Runtime/Performance/SpatialTreePerformanceTest.cs.meta +11 -11
  262. package/Tests/Runtime/Performance/UnbalancedKDTreeTests.cs +14 -14
  263. package/Tests/Runtime/Performance/UnbalancedKDTreeTests.cs.meta +11 -11
  264. package/Tests/Runtime/Performance.meta +8 -8
  265. package/Tests/Runtime/Random/DotNetRandomTests.cs +9 -9
  266. package/Tests/Runtime/Random/DotNetRandomTests.cs.meta +2 -2
  267. package/Tests/Runtime/Random/LinearCongruentialGeneratorTests.cs +12 -12
  268. package/Tests/Runtime/Random/PcgRandomTests.cs +9 -9
  269. package/Tests/Runtime/Random/PcgRandomTests.cs.meta +11 -11
  270. package/Tests/Runtime/Random/RandomTestBase.cs +787 -787
  271. package/Tests/Runtime/Random/RandomTestBase.cs.meta +11 -11
  272. package/Tests/Runtime/Random/RomuDuoRandomTests.cs +9 -9
  273. package/Tests/Runtime/Random/RomuDuoRandomTests.cs.meta +2 -2
  274. package/Tests/Runtime/Random/SplitMix64RandomTests.cs +9 -9
  275. package/Tests/Runtime/Random/SplitMix64RandomTests.cs.meta +2 -2
  276. package/Tests/Runtime/Random/SquirrelRandomTests.cs +14 -14
  277. package/Tests/Runtime/Random/SquirrelRandomTests.cs.meta +11 -11
  278. package/Tests/Runtime/Random/SystemRandomTests.cs +10 -10
  279. package/Tests/Runtime/Random/SystemRandomTests.cs.meta +11 -11
  280. package/Tests/Runtime/Random/UnityRandomTests.cs +9 -9
  281. package/Tests/Runtime/Random/UnityRandomTests.cs.meta +11 -11
  282. package/Tests/Runtime/Random/WyRandomTests.cs +9 -9
  283. package/Tests/Runtime/Random/WyRandomTests.cs.meta +2 -2
  284. package/Tests/Runtime/Random/XorShiftRandomTests.cs +9 -9
  285. package/Tests/Runtime/Random/XorShiftRandomTests.cs.meta +11 -11
  286. package/Tests/Runtime/Random/XorShiroRandomTests.cs +9 -9
  287. package/Tests/Runtime/Random/XorShiroRandomTests.cs.meta +2 -2
  288. package/Tests/Runtime/Random.meta +8 -8
  289. package/Tests/Runtime/Serialization/JsonSerializationTest.cs +156 -156
  290. package/Tests/Runtime/Serialization/JsonSerializationTest.cs.meta +2 -2
  291. package/Tests/Runtime/Serialization.meta +2 -2
  292. package/Tests/Runtime/Utils/SpriteRendererMetadataTests.cs +399 -399
  293. package/Tests/Runtime/Utils/SpriteRendererMetadataTests.cs.meta +2 -2
  294. package/Tests/Runtime/Utils.meta +2 -2
  295. package/Tests/Runtime/WallstopStudios.UnityHelpers.Tests.Runtime.asmdef +22 -22
  296. package/Tests/Runtime/WallstopStudios.UnityHelpers.Tests.Runtime.asmdef.meta +7 -7
  297. package/Tests/Runtime.meta +8 -8
  298. package/package.json +38 -38
@@ -1,439 +1,439 @@
1
- namespace UnityHelpers.Tests.Extensions
2
- {
3
- using System;
4
- using System.Collections.Generic;
5
- using System.Linq;
6
- using Core.Extension;
7
- using NUnit.Framework;
8
-
9
- public sealed class DictionaryExtensionTests
10
- {
11
- [Test]
12
- public void GetOrAddValueProducer()
13
- {
14
- Dictionary<string, int> dictionary = new();
15
- int value = dictionary.GetOrAdd("test", () => 100);
16
- Assert.AreEqual(100, value);
17
- Assert.AreEqual(value, dictionary["test"]);
18
-
19
- int newValue = dictionary.GetOrAdd(
20
- "test",
21
- () =>
22
- {
23
- Assert.Fail("Value Producer should not have been called!");
24
- return 200;
25
- }
26
- );
27
- Assert.AreEqual(100, newValue);
28
-
29
- newValue = dictionary.GetOrAdd("test2", () => 300);
30
- Assert.AreEqual(300, newValue);
31
- Assert.AreEqual(100, dictionary["test"]);
32
- }
33
-
34
- [Test]
35
- public void GetOrAddKeyValueProducer()
36
- {
37
- Dictionary<string, int> dictionary = new();
38
- int value = dictionary.GetOrAdd(
39
- "test",
40
- key =>
41
- {
42
- Assert.AreEqual("test", key);
43
- return 100;
44
- }
45
- );
46
- Assert.AreEqual(100, value);
47
- Assert.AreEqual(value, dictionary["test"]);
48
-
49
- int newValue = dictionary.GetOrAdd(
50
- "test",
51
- key =>
52
- {
53
- Assert.Fail("Value Producer should not have been called!");
54
- return 200;
55
- }
56
- );
57
- Assert.AreEqual(100, newValue);
58
-
59
- newValue = dictionary.GetOrAdd(
60
- "test2",
61
- key =>
62
- {
63
- Assert.AreEqual("test2", key);
64
- return 300;
65
- }
66
- );
67
- Assert.AreEqual(300, newValue);
68
- Assert.AreEqual(100, dictionary["test"]);
69
- }
70
-
71
- [Test]
72
- public void GetOrElseValue()
73
- {
74
- Dictionary<string, int> dictionary = new();
75
- int value = dictionary.GetOrElse("test", 100);
76
- Assert.AreEqual(100, value);
77
- Assert.IsFalse(dictionary.ContainsKey("test"));
78
- dictionary["test"] = 150;
79
- value = dictionary.GetOrElse("test", 100);
80
- Assert.AreEqual(150, value);
81
- Assert.AreEqual(150, dictionary["test"]);
82
- }
83
-
84
- [Test]
85
- public void GetOrElseValueProducer()
86
- {
87
- Dictionary<string, int> dictionary = new();
88
- int value = dictionary.GetOrElse("test", () => 100);
89
- Assert.AreEqual(100, value);
90
- Assert.IsFalse(dictionary.ContainsKey("test"));
91
- dictionary["test"] = 150;
92
- value = dictionary.GetOrElse(
93
- "test",
94
- () =>
95
- {
96
- Assert.Fail("Producer should not be called.");
97
- return 100;
98
- }
99
- );
100
- Assert.AreEqual(150, value);
101
- Assert.AreEqual(150, dictionary["test"]);
102
- }
103
-
104
- [Test]
105
- public void GetOrElseKeyValueProducer()
106
- {
107
- Dictionary<string, int> dictionary = new();
108
- int value = dictionary.GetOrElse(
109
- "test",
110
- key =>
111
- {
112
- Assert.AreEqual("test", key);
113
- return 100;
114
- }
115
- );
116
- Assert.AreEqual(100, value);
117
- Assert.IsFalse(dictionary.ContainsKey("test"));
118
- dictionary["test"] = 150;
119
- value = dictionary.GetOrElse(
120
- "test",
121
- () =>
122
- {
123
- Assert.Fail("Producer should not be called.");
124
- return 100;
125
- }
126
- );
127
- Assert.AreEqual(150, value);
128
- Assert.AreEqual(150, dictionary["test"]);
129
- }
130
-
131
- [Test]
132
- public void GetOrAddNew()
133
- {
134
- Dictionary<string, List<int>> dictionary = new();
135
- List<int> value = dictionary.GetOrAdd("test");
136
- Assert.IsNotNull(value);
137
- Assert.AreEqual(value, dictionary["test"]);
138
- value.Add(1);
139
-
140
- List<int> newValue = dictionary.GetOrAdd("test");
141
- Assert.AreEqual(value, newValue);
142
- }
143
-
144
- [Test]
145
- public void GetOrElse()
146
- {
147
- IReadOnlyDictionary<string, int> dictionary = new Dictionary<string, int>();
148
- int value = dictionary.GetOrElse("test", 100);
149
- Assert.AreEqual(100, value);
150
- Assert.AreEqual(0, dictionary.Count);
151
- }
152
-
153
- [Test]
154
- public void AddOrUpdate()
155
- {
156
- Dictionary<string, int> dictionary = new();
157
- int value = dictionary.AddOrUpdate("test", key => 100, (key, existing) => existing + 1);
158
- Assert.AreEqual(100, value);
159
- Assert.AreEqual(100, dictionary["test"]);
160
- int expected = value;
161
- for (int i = 0; i < 100; ++i)
162
- {
163
- value = dictionary.AddOrUpdate("test", key => 100, (key, existing) => existing + 1);
164
- Assert.AreEqual(++expected, value);
165
- Assert.AreEqual(value, dictionary["test"]);
166
- }
167
-
168
- value = dictionary.AddOrUpdate("test2", key => 150, (key, existing) => existing + 1);
169
- Assert.AreEqual(150, value);
170
- Assert.AreEqual(150, dictionary["test2"]);
171
- Assert.AreEqual(expected, dictionary["test"]);
172
- }
173
-
174
- [Test]
175
- public void TryAdd()
176
- {
177
- Dictionary<string, int> dictionary = new();
178
- int value = dictionary.TryAdd(
179
- "test",
180
- key =>
181
- {
182
- Assert.AreEqual("test", key);
183
- return 150;
184
- }
185
- );
186
- Assert.AreEqual(150, value);
187
- Assert.AreEqual(value, dictionary["test"]);
188
-
189
- value = dictionary.TryAdd(
190
- "test",
191
- key =>
192
- {
193
- Assert.Fail("Creator should not have been called.");
194
- return 200;
195
- }
196
- );
197
- Assert.AreEqual(150, value);
198
- Assert.AreEqual(value, dictionary["test"]);
199
-
200
- value = dictionary.TryAdd(
201
- "test2",
202
- key =>
203
- {
204
- Assert.AreEqual("test2", key);
205
- return 350;
206
- }
207
- );
208
- Assert.AreEqual(350, value);
209
- Assert.AreEqual(value, dictionary["test2"]);
210
- Assert.AreEqual(150, dictionary["test"]);
211
- }
212
-
213
- [Test]
214
- public void Merge()
215
- {
216
- IReadOnlyDictionary<string, int> left = new Dictionary<string, int>()
217
- {
218
- ["only-on-left"] = 1,
219
- ["both"] = 1,
220
- };
221
-
222
- IReadOnlyDictionary<string, int> right = new Dictionary<string, int>()
223
- {
224
- ["only-on-right"] = 3,
225
- ["both"] = 2,
226
- };
227
-
228
- Dictionary<string, int> merged = left.Merge(right);
229
- Assert.AreEqual(3, merged.Count);
230
- Assert.AreEqual(1, merged["only-on-left"]);
231
- Assert.AreEqual(2, merged["both"]);
232
- Assert.AreEqual(3, merged["only-on-right"]);
233
-
234
- merged = right.Merge(left);
235
- Assert.AreEqual(3, merged.Count);
236
- Assert.AreEqual(1, merged["only-on-left"]);
237
- Assert.AreEqual(1, merged["both"]);
238
- Assert.AreEqual(3, merged["only-on-right"]);
239
-
240
- merged = left.Merge(left);
241
- Assert.AreEqual(2, merged.Count);
242
- Assert.AreEqual(1, merged["only-on-left"]);
243
- Assert.AreEqual(1, merged["both"]);
244
-
245
- merged = right.Merge(right);
246
- Assert.AreEqual(2, merged.Count);
247
- Assert.AreEqual(3, merged["only-on-right"]);
248
- Assert.AreEqual(2, merged["both"]);
249
- }
250
-
251
- [Test]
252
- public void Difference()
253
- {
254
- IReadOnlyDictionary<string, int> left = new Dictionary<string, int>()
255
- {
256
- ["only-on-left"] = 1,
257
- ["both"] = 1,
258
- };
259
-
260
- IReadOnlyDictionary<string, int> right = new Dictionary<string, int>()
261
- {
262
- ["only-on-right"] = 3,
263
- ["both"] = 2,
264
- };
265
-
266
- Dictionary<string, int> difference = left.Difference(right);
267
- Assert.AreEqual(2, difference.Count);
268
- Assert.AreEqual(2, difference["both"]);
269
- Assert.AreEqual(3, difference["only-on-right"]);
270
-
271
- difference = right.Difference(left);
272
- Assert.AreEqual(2, difference.Count);
273
- Assert.AreEqual(1, difference["both"]);
274
- Assert.AreEqual(1, difference["only-on-left"]);
275
-
276
- difference = left.Difference(left);
277
- Assert.AreEqual(0, difference.Count);
278
-
279
- difference = right.Difference(right);
280
- Assert.AreEqual(0, difference.Count);
281
- }
282
-
283
- [Test]
284
- public void Reverse()
285
- {
286
- IReadOnlyDictionary<string, int> initial = new Dictionary<string, int>()
287
- {
288
- ["one"] = 1,
289
- ["one-duplicate"] = 1,
290
- ["two"] = 2,
291
- ["three"] = 3,
292
- };
293
-
294
- Dictionary<int, string> reversed = initial.Reverse();
295
- Assert.AreEqual(3, reversed.Count);
296
- Assert.AreEqual("one-duplicate", reversed[1]);
297
- Assert.AreEqual("two", reversed[2]);
298
- Assert.AreEqual("three", reversed[3]);
299
- }
300
-
301
- [Test]
302
- public void ToDictionaryFromDictionary()
303
- {
304
- IReadOnlyDictionary<string, int> initial = new Dictionary<string, int>()
305
- {
306
- ["test"] = 1,
307
- ["test2"] = 2,
308
- };
309
-
310
- Dictionary<string, int> copy = initial.ToDictionary();
311
- Assert.AreEqual(2, copy.Count);
312
- Assert.AreEqual(1, copy["test"]);
313
- Assert.AreEqual(2, copy["test2"]);
314
- }
315
-
316
- [Test]
317
- public void ToDictionaryFromEnumerableKeyValuePair()
318
- {
319
- IEnumerable<KeyValuePair<string, int>> initial = new Dictionary<string, int>()
320
- {
321
- ["test"] = 1,
322
- ["test2"] = 2,
323
- };
324
-
325
- Dictionary<string, int> copy = initial.ToDictionary();
326
- Assert.AreEqual(2, copy.Count);
327
- Assert.AreEqual(1, copy["test"]);
328
- Assert.AreEqual(2, copy["test2"]);
329
- }
330
-
331
- [Test]
332
- public void ToDictionaryFromEnumerableValueTuple()
333
- {
334
- IEnumerable<(string, int)> initial = new Dictionary<string, int>()
335
- {
336
- ["test"] = 1,
337
- ["test2"] = 2,
338
- }.Select(kvp => (kvp.Key, kvp.Value));
339
-
340
- Dictionary<string, int> copy = initial.ToDictionary();
341
- Assert.AreEqual(2, copy.Count);
342
- Assert.AreEqual(1, copy["test"]);
343
- Assert.AreEqual(2, copy["test2"]);
344
- }
345
-
346
- [Test]
347
- public void ContentEqualsSame()
348
- {
349
- IReadOnlyDictionary<string, int> left = new Dictionary<string, int>()
350
- {
351
- ["one"] = 1,
352
- ["two"] = 2,
353
- };
354
-
355
- IReadOnlyDictionary<string, int> right = new Dictionary<string, int>()
356
- {
357
- ["one"] = 1,
358
- ["two"] = 2,
359
- };
360
-
361
- Assert.IsTrue(left.ContentEquals(right));
362
- Assert.IsTrue(left.ContentEquals(left));
363
- Assert.IsTrue(right.ContentEquals(left));
364
- Assert.IsTrue(right.ContentEquals(right));
365
- }
366
-
367
- [Test]
368
- public void ContentEqualsDifferentCount()
369
- {
370
- IReadOnlyDictionary<string, int> left = new Dictionary<string, int>()
371
- {
372
- ["one"] = 1,
373
- ["two"] = 2,
374
- };
375
-
376
- IReadOnlyDictionary<string, int> right = new Dictionary<string, int>()
377
- {
378
- ["one"] = 1,
379
- ["two"] = 2,
380
- ["three"] = 3,
381
- };
382
-
383
- Assert.IsFalse(left.ContentEquals(right));
384
- Assert.IsTrue(left.ContentEquals(left));
385
- Assert.IsFalse(right.ContentEquals(left));
386
- Assert.IsTrue(right.ContentEquals(right));
387
- }
388
-
389
- [Test]
390
- public void ContentEqualsDifferentValuesSameSize()
391
- {
392
- IReadOnlyDictionary<string, int> left = new Dictionary<string, int>()
393
- {
394
- ["one"] = 1,
395
- ["two"] = 2,
396
- };
397
-
398
- IReadOnlyDictionary<string, int> right = new Dictionary<string, int>()
399
- {
400
- ["one"] = 1,
401
- ["two"] = 20_000,
402
- };
403
-
404
- Assert.IsFalse(left.ContentEquals(right));
405
- Assert.IsTrue(left.ContentEquals(left));
406
- Assert.IsFalse(right.ContentEquals(left));
407
- Assert.IsTrue(right.ContentEquals(right));
408
- }
409
-
410
- [Test]
411
- public void ContentEqualsDifferentKeysSameSize()
412
- {
413
- IReadOnlyDictionary<string, int> left = new Dictionary<string, int>()
414
- {
415
- ["one"] = 1,
416
- ["two"] = 2,
417
- };
418
-
419
- IReadOnlyDictionary<string, int> right = new Dictionary<string, int>()
420
- {
421
- ["one"] = 1,
422
- ["three"] = 2,
423
- };
424
-
425
- Assert.IsFalse(left.ContentEquals(right));
426
- Assert.IsTrue(left.ContentEquals(left));
427
- Assert.IsFalse(right.ContentEquals(left));
428
- Assert.IsTrue(right.ContentEquals(right));
429
- }
430
-
431
- [Test]
432
- public void Deconstruct()
433
- {
434
- new KeyValuePair<string, int>("one", 1).Deconstruct(out string key, out int value);
435
- Assert.AreEqual("one", key);
436
- Assert.AreEqual(1, value);
437
- }
438
- }
439
- }
1
+ namespace UnityHelpers.Tests.Extensions
2
+ {
3
+ using System;
4
+ using System.Collections.Generic;
5
+ using System.Linq;
6
+ using Core.Extension;
7
+ using NUnit.Framework;
8
+
9
+ public sealed class DictionaryExtensionTests
10
+ {
11
+ [Test]
12
+ public void GetOrAddValueProducer()
13
+ {
14
+ Dictionary<string, int> dictionary = new();
15
+ int value = dictionary.GetOrAdd("test", () => 100);
16
+ Assert.AreEqual(100, value);
17
+ Assert.AreEqual(value, dictionary["test"]);
18
+
19
+ int newValue = dictionary.GetOrAdd(
20
+ "test",
21
+ () =>
22
+ {
23
+ Assert.Fail("Value Producer should not have been called!");
24
+ return 200;
25
+ }
26
+ );
27
+ Assert.AreEqual(100, newValue);
28
+
29
+ newValue = dictionary.GetOrAdd("test2", () => 300);
30
+ Assert.AreEqual(300, newValue);
31
+ Assert.AreEqual(100, dictionary["test"]);
32
+ }
33
+
34
+ [Test]
35
+ public void GetOrAddKeyValueProducer()
36
+ {
37
+ Dictionary<string, int> dictionary = new();
38
+ int value = dictionary.GetOrAdd(
39
+ "test",
40
+ key =>
41
+ {
42
+ Assert.AreEqual("test", key);
43
+ return 100;
44
+ }
45
+ );
46
+ Assert.AreEqual(100, value);
47
+ Assert.AreEqual(value, dictionary["test"]);
48
+
49
+ int newValue = dictionary.GetOrAdd(
50
+ "test",
51
+ key =>
52
+ {
53
+ Assert.Fail("Value Producer should not have been called!");
54
+ return 200;
55
+ }
56
+ );
57
+ Assert.AreEqual(100, newValue);
58
+
59
+ newValue = dictionary.GetOrAdd(
60
+ "test2",
61
+ key =>
62
+ {
63
+ Assert.AreEqual("test2", key);
64
+ return 300;
65
+ }
66
+ );
67
+ Assert.AreEqual(300, newValue);
68
+ Assert.AreEqual(100, dictionary["test"]);
69
+ }
70
+
71
+ [Test]
72
+ public void GetOrElseValue()
73
+ {
74
+ Dictionary<string, int> dictionary = new();
75
+ int value = dictionary.GetOrElse("test", 100);
76
+ Assert.AreEqual(100, value);
77
+ Assert.IsFalse(dictionary.ContainsKey("test"));
78
+ dictionary["test"] = 150;
79
+ value = dictionary.GetOrElse("test", 100);
80
+ Assert.AreEqual(150, value);
81
+ Assert.AreEqual(150, dictionary["test"]);
82
+ }
83
+
84
+ [Test]
85
+ public void GetOrElseValueProducer()
86
+ {
87
+ Dictionary<string, int> dictionary = new();
88
+ int value = dictionary.GetOrElse("test", () => 100);
89
+ Assert.AreEqual(100, value);
90
+ Assert.IsFalse(dictionary.ContainsKey("test"));
91
+ dictionary["test"] = 150;
92
+ value = dictionary.GetOrElse(
93
+ "test",
94
+ () =>
95
+ {
96
+ Assert.Fail("Producer should not be called.");
97
+ return 100;
98
+ }
99
+ );
100
+ Assert.AreEqual(150, value);
101
+ Assert.AreEqual(150, dictionary["test"]);
102
+ }
103
+
104
+ [Test]
105
+ public void GetOrElseKeyValueProducer()
106
+ {
107
+ Dictionary<string, int> dictionary = new();
108
+ int value = dictionary.GetOrElse(
109
+ "test",
110
+ key =>
111
+ {
112
+ Assert.AreEqual("test", key);
113
+ return 100;
114
+ }
115
+ );
116
+ Assert.AreEqual(100, value);
117
+ Assert.IsFalse(dictionary.ContainsKey("test"));
118
+ dictionary["test"] = 150;
119
+ value = dictionary.GetOrElse(
120
+ "test",
121
+ () =>
122
+ {
123
+ Assert.Fail("Producer should not be called.");
124
+ return 100;
125
+ }
126
+ );
127
+ Assert.AreEqual(150, value);
128
+ Assert.AreEqual(150, dictionary["test"]);
129
+ }
130
+
131
+ [Test]
132
+ public void GetOrAddNew()
133
+ {
134
+ Dictionary<string, List<int>> dictionary = new();
135
+ List<int> value = dictionary.GetOrAdd("test");
136
+ Assert.IsNotNull(value);
137
+ Assert.AreEqual(value, dictionary["test"]);
138
+ value.Add(1);
139
+
140
+ List<int> newValue = dictionary.GetOrAdd("test");
141
+ Assert.AreEqual(value, newValue);
142
+ }
143
+
144
+ [Test]
145
+ public void GetOrElse()
146
+ {
147
+ IReadOnlyDictionary<string, int> dictionary = new Dictionary<string, int>();
148
+ int value = dictionary.GetOrElse("test", 100);
149
+ Assert.AreEqual(100, value);
150
+ Assert.AreEqual(0, dictionary.Count);
151
+ }
152
+
153
+ [Test]
154
+ public void AddOrUpdate()
155
+ {
156
+ Dictionary<string, int> dictionary = new();
157
+ int value = dictionary.AddOrUpdate("test", key => 100, (key, existing) => existing + 1);
158
+ Assert.AreEqual(100, value);
159
+ Assert.AreEqual(100, dictionary["test"]);
160
+ int expected = value;
161
+ for (int i = 0; i < 100; ++i)
162
+ {
163
+ value = dictionary.AddOrUpdate("test", key => 100, (key, existing) => existing + 1);
164
+ Assert.AreEqual(++expected, value);
165
+ Assert.AreEqual(value, dictionary["test"]);
166
+ }
167
+
168
+ value = dictionary.AddOrUpdate("test2", key => 150, (key, existing) => existing + 1);
169
+ Assert.AreEqual(150, value);
170
+ Assert.AreEqual(150, dictionary["test2"]);
171
+ Assert.AreEqual(expected, dictionary["test"]);
172
+ }
173
+
174
+ [Test]
175
+ public void TryAdd()
176
+ {
177
+ Dictionary<string, int> dictionary = new();
178
+ int value = dictionary.TryAdd(
179
+ "test",
180
+ key =>
181
+ {
182
+ Assert.AreEqual("test", key);
183
+ return 150;
184
+ }
185
+ );
186
+ Assert.AreEqual(150, value);
187
+ Assert.AreEqual(value, dictionary["test"]);
188
+
189
+ value = dictionary.TryAdd(
190
+ "test",
191
+ key =>
192
+ {
193
+ Assert.Fail("Creator should not have been called.");
194
+ return 200;
195
+ }
196
+ );
197
+ Assert.AreEqual(150, value);
198
+ Assert.AreEqual(value, dictionary["test"]);
199
+
200
+ value = dictionary.TryAdd(
201
+ "test2",
202
+ key =>
203
+ {
204
+ Assert.AreEqual("test2", key);
205
+ return 350;
206
+ }
207
+ );
208
+ Assert.AreEqual(350, value);
209
+ Assert.AreEqual(value, dictionary["test2"]);
210
+ Assert.AreEqual(150, dictionary["test"]);
211
+ }
212
+
213
+ [Test]
214
+ public void Merge()
215
+ {
216
+ IReadOnlyDictionary<string, int> left = new Dictionary<string, int>()
217
+ {
218
+ ["only-on-left"] = 1,
219
+ ["both"] = 1,
220
+ };
221
+
222
+ IReadOnlyDictionary<string, int> right = new Dictionary<string, int>()
223
+ {
224
+ ["only-on-right"] = 3,
225
+ ["both"] = 2,
226
+ };
227
+
228
+ Dictionary<string, int> merged = left.Merge(right);
229
+ Assert.AreEqual(3, merged.Count);
230
+ Assert.AreEqual(1, merged["only-on-left"]);
231
+ Assert.AreEqual(2, merged["both"]);
232
+ Assert.AreEqual(3, merged["only-on-right"]);
233
+
234
+ merged = right.Merge(left);
235
+ Assert.AreEqual(3, merged.Count);
236
+ Assert.AreEqual(1, merged["only-on-left"]);
237
+ Assert.AreEqual(1, merged["both"]);
238
+ Assert.AreEqual(3, merged["only-on-right"]);
239
+
240
+ merged = left.Merge(left);
241
+ Assert.AreEqual(2, merged.Count);
242
+ Assert.AreEqual(1, merged["only-on-left"]);
243
+ Assert.AreEqual(1, merged["both"]);
244
+
245
+ merged = right.Merge(right);
246
+ Assert.AreEqual(2, merged.Count);
247
+ Assert.AreEqual(3, merged["only-on-right"]);
248
+ Assert.AreEqual(2, merged["both"]);
249
+ }
250
+
251
+ [Test]
252
+ public void Difference()
253
+ {
254
+ IReadOnlyDictionary<string, int> left = new Dictionary<string, int>()
255
+ {
256
+ ["only-on-left"] = 1,
257
+ ["both"] = 1,
258
+ };
259
+
260
+ IReadOnlyDictionary<string, int> right = new Dictionary<string, int>()
261
+ {
262
+ ["only-on-right"] = 3,
263
+ ["both"] = 2,
264
+ };
265
+
266
+ Dictionary<string, int> difference = left.Difference(right);
267
+ Assert.AreEqual(2, difference.Count);
268
+ Assert.AreEqual(2, difference["both"]);
269
+ Assert.AreEqual(3, difference["only-on-right"]);
270
+
271
+ difference = right.Difference(left);
272
+ Assert.AreEqual(2, difference.Count);
273
+ Assert.AreEqual(1, difference["both"]);
274
+ Assert.AreEqual(1, difference["only-on-left"]);
275
+
276
+ difference = left.Difference(left);
277
+ Assert.AreEqual(0, difference.Count);
278
+
279
+ difference = right.Difference(right);
280
+ Assert.AreEqual(0, difference.Count);
281
+ }
282
+
283
+ [Test]
284
+ public void Reverse()
285
+ {
286
+ IReadOnlyDictionary<string, int> initial = new Dictionary<string, int>()
287
+ {
288
+ ["one"] = 1,
289
+ ["one-duplicate"] = 1,
290
+ ["two"] = 2,
291
+ ["three"] = 3,
292
+ };
293
+
294
+ Dictionary<int, string> reversed = initial.Reverse();
295
+ Assert.AreEqual(3, reversed.Count);
296
+ Assert.AreEqual("one-duplicate", reversed[1]);
297
+ Assert.AreEqual("two", reversed[2]);
298
+ Assert.AreEqual("three", reversed[3]);
299
+ }
300
+
301
+ [Test]
302
+ public void ToDictionaryFromDictionary()
303
+ {
304
+ IReadOnlyDictionary<string, int> initial = new Dictionary<string, int>()
305
+ {
306
+ ["test"] = 1,
307
+ ["test2"] = 2,
308
+ };
309
+
310
+ Dictionary<string, int> copy = initial.ToDictionary();
311
+ Assert.AreEqual(2, copy.Count);
312
+ Assert.AreEqual(1, copy["test"]);
313
+ Assert.AreEqual(2, copy["test2"]);
314
+ }
315
+
316
+ [Test]
317
+ public void ToDictionaryFromEnumerableKeyValuePair()
318
+ {
319
+ IEnumerable<KeyValuePair<string, int>> initial = new Dictionary<string, int>()
320
+ {
321
+ ["test"] = 1,
322
+ ["test2"] = 2,
323
+ };
324
+
325
+ Dictionary<string, int> copy = initial.ToDictionary();
326
+ Assert.AreEqual(2, copy.Count);
327
+ Assert.AreEqual(1, copy["test"]);
328
+ Assert.AreEqual(2, copy["test2"]);
329
+ }
330
+
331
+ [Test]
332
+ public void ToDictionaryFromEnumerableValueTuple()
333
+ {
334
+ IEnumerable<(string, int)> initial = new Dictionary<string, int>()
335
+ {
336
+ ["test"] = 1,
337
+ ["test2"] = 2,
338
+ }.Select(kvp => (kvp.Key, kvp.Value));
339
+
340
+ Dictionary<string, int> copy = initial.ToDictionary();
341
+ Assert.AreEqual(2, copy.Count);
342
+ Assert.AreEqual(1, copy["test"]);
343
+ Assert.AreEqual(2, copy["test2"]);
344
+ }
345
+
346
+ [Test]
347
+ public void ContentEqualsSame()
348
+ {
349
+ IReadOnlyDictionary<string, int> left = new Dictionary<string, int>()
350
+ {
351
+ ["one"] = 1,
352
+ ["two"] = 2,
353
+ };
354
+
355
+ IReadOnlyDictionary<string, int> right = new Dictionary<string, int>()
356
+ {
357
+ ["one"] = 1,
358
+ ["two"] = 2,
359
+ };
360
+
361
+ Assert.IsTrue(left.ContentEquals(right));
362
+ Assert.IsTrue(left.ContentEquals(left));
363
+ Assert.IsTrue(right.ContentEquals(left));
364
+ Assert.IsTrue(right.ContentEquals(right));
365
+ }
366
+
367
+ [Test]
368
+ public void ContentEqualsDifferentCount()
369
+ {
370
+ IReadOnlyDictionary<string, int> left = new Dictionary<string, int>()
371
+ {
372
+ ["one"] = 1,
373
+ ["two"] = 2,
374
+ };
375
+
376
+ IReadOnlyDictionary<string, int> right = new Dictionary<string, int>()
377
+ {
378
+ ["one"] = 1,
379
+ ["two"] = 2,
380
+ ["three"] = 3,
381
+ };
382
+
383
+ Assert.IsFalse(left.ContentEquals(right));
384
+ Assert.IsTrue(left.ContentEquals(left));
385
+ Assert.IsFalse(right.ContentEquals(left));
386
+ Assert.IsTrue(right.ContentEquals(right));
387
+ }
388
+
389
+ [Test]
390
+ public void ContentEqualsDifferentValuesSameSize()
391
+ {
392
+ IReadOnlyDictionary<string, int> left = new Dictionary<string, int>()
393
+ {
394
+ ["one"] = 1,
395
+ ["two"] = 2,
396
+ };
397
+
398
+ IReadOnlyDictionary<string, int> right = new Dictionary<string, int>()
399
+ {
400
+ ["one"] = 1,
401
+ ["two"] = 20_000,
402
+ };
403
+
404
+ Assert.IsFalse(left.ContentEquals(right));
405
+ Assert.IsTrue(left.ContentEquals(left));
406
+ Assert.IsFalse(right.ContentEquals(left));
407
+ Assert.IsTrue(right.ContentEquals(right));
408
+ }
409
+
410
+ [Test]
411
+ public void ContentEqualsDifferentKeysSameSize()
412
+ {
413
+ IReadOnlyDictionary<string, int> left = new Dictionary<string, int>()
414
+ {
415
+ ["one"] = 1,
416
+ ["two"] = 2,
417
+ };
418
+
419
+ IReadOnlyDictionary<string, int> right = new Dictionary<string, int>()
420
+ {
421
+ ["one"] = 1,
422
+ ["three"] = 2,
423
+ };
424
+
425
+ Assert.IsFalse(left.ContentEquals(right));
426
+ Assert.IsTrue(left.ContentEquals(left));
427
+ Assert.IsFalse(right.ContentEquals(left));
428
+ Assert.IsTrue(right.ContentEquals(right));
429
+ }
430
+
431
+ [Test]
432
+ public void Deconstruct()
433
+ {
434
+ new KeyValuePair<string, int>("one", 1).Deconstruct(out string key, out int value);
435
+ Assert.AreEqual("one", key);
436
+ Assert.AreEqual(1, value);
437
+ }
438
+ }
439
+ }