com.wallstop-studios.unity-helpers 2.0.0-rc81.6 → 2.0.0-rc81.9

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 (1449) hide show
  1. package/.config/dotnet-tools.json +10 -10
  2. package/.csharpierignore +1 -0
  3. package/.csharpierrc.json +3 -0
  4. package/.editorconfig +184 -184
  5. package/.gitattributes +87 -63
  6. package/.githooks/pre-commit +49 -0
  7. package/.github/dependabot.yml +9 -9
  8. package/.github/workflows/csharpier.yml +135 -0
  9. package/.github/workflows/lint-doc-links.yml +27 -0
  10. package/.github/workflows/markdown-json.yml +41 -0
  11. package/.github/workflows/npm-publish.yml +75 -75
  12. package/.lychee.toml +26 -0
  13. package/.markdownlint.json +21 -0
  14. package/.markdownlintignore +8 -0
  15. package/.pre-commit-config.yaml +39 -22
  16. package/.prettierignore +22 -0
  17. package/.prettierrc.json +20 -0
  18. package/AGENTS.md +52 -0
  19. package/{Third Party Notices.md.meta → AGENTS.md.meta} +7 -7
  20. package/CHANGELOG.md.meta +7 -7
  21. package/DATA_STRUCTURES.md +324 -0
  22. package/DATA_STRUCTURES.md.meta +7 -0
  23. package/Docs/Images/attribute_resolution.svg +40 -0
  24. package/Docs/Images/attribute_resolution.svg.meta +7 -0
  25. package/Docs/Images/bitset.svg +47 -0
  26. package/Docs/Images/bitset.svg.meta +7 -0
  27. package/Docs/Images/concave_hull.svg +30 -0
  28. package/Docs/Images/concave_hull.svg.meta +7 -0
  29. package/Docs/Images/convex_hull.svg +29 -0
  30. package/Docs/Images/convex_hull.svg.meta +7 -0
  31. package/Docs/Images/cyclic_buffer.svg +37 -0
  32. package/Docs/Images/cyclic_buffer.svg.meta +7 -0
  33. package/Docs/Images/data_distribution_decision.svg +88 -0
  34. package/Docs/Images/data_distribution_decision.svg.meta +7 -0
  35. package/Docs/Images/deque.svg +64 -0
  36. package/Docs/Images/deque.svg.meta +7 -0
  37. package/Docs/Images/deque_queue.svg +107 -0
  38. package/Docs/Images/deque_queue.svg.meta +7 -0
  39. package/Docs/Images/disjoint_set.svg +47 -0
  40. package/Docs/Images/disjoint_set.svg.meta +7 -0
  41. package/Docs/Images/effects_pipeline.svg +59 -0
  42. package/Docs/Images/effects_pipeline.svg.meta +7 -0
  43. package/Docs/Images/geometry_edge_cases.svg +61 -0
  44. package/Docs/Images/geometry_edge_cases.svg.meta +7 -0
  45. package/Docs/Images/heap.svg +56 -0
  46. package/Docs/Images/heap.svg.meta +7 -0
  47. package/Docs/Images/kdtree_2d.svg +38 -0
  48. package/Docs/Images/kdtree_2d.svg.meta +7 -0
  49. package/Docs/Images/kdtree_3d.svg +83 -0
  50. package/Docs/Images/kdtree_3d.svg.meta +7 -0
  51. package/Docs/Images/octree_3d.svg +79 -0
  52. package/Docs/Images/octree_3d.svg.meta +7 -0
  53. package/Docs/Images/polyline_simplify.svg +18 -0
  54. package/Docs/Images/polyline_simplify.svg.meta +7 -0
  55. package/Docs/Images/quadtree_2d.svg +37 -0
  56. package/Docs/Images/quadtree_2d.svg.meta +7 -0
  57. package/Docs/Images/query_boundaries.svg +38 -0
  58. package/Docs/Images/query_boundaries.svg.meta +7 -0
  59. package/Docs/Images/random_generators.svg +105 -0
  60. package/Docs/Images/random_generators.svg.meta +7 -0
  61. package/Docs/Images/reflection_scan.svg +33 -0
  62. package/Docs/Images/reflection_scan.svg.meta +7 -0
  63. package/Docs/Images/relational_wiring.svg +75 -0
  64. package/Docs/Images/relational_wiring.svg.meta +7 -0
  65. package/Docs/Images/rtree_2d.svg +27 -0
  66. package/Docs/Images/rtree_2d.svg.meta +7 -0
  67. package/Docs/Images/rtree_3d.svg +79 -0
  68. package/Docs/Images/rtree_3d.svg.meta +7 -0
  69. package/Docs/Images/serialization_flow.svg +50 -0
  70. package/Docs/Images/serialization_flow.svg.meta +7 -0
  71. package/Docs/Images/singletons_lifecycle.svg +54 -0
  72. package/Docs/Images/singletons_lifecycle.svg.meta +7 -0
  73. package/Docs/Images/sparse_set.svg +54 -0
  74. package/Docs/Images/sparse_set.svg.meta +7 -0
  75. package/Docs/Images/trie.svg +55 -0
  76. package/Docs/Images/trie.svg.meta +7 -0
  77. package/Docs/Images.meta +8 -0
  78. package/Docs.meta +8 -0
  79. package/EDITOR_TOOLS_GUIDE.md +1976 -0
  80. package/EDITOR_TOOLS_GUIDE.md.meta +7 -0
  81. package/EFFECTS_SYSTEM.md +242 -0
  82. package/EFFECTS_SYSTEM.md.meta +7 -0
  83. package/EFFECTS_SYSTEM_TUTORIAL.md +467 -0
  84. package/EFFECTS_SYSTEM_TUTORIAL.md.meta +7 -0
  85. package/Editor/AnimationEventEditor.cs +1393 -874
  86. package/Editor/AnimationEventEditor.cs.meta +11 -11
  87. package/Editor/AssemblyInfo.cs +4 -0
  88. package/Editor/AssemblyInfo.cs.meta +3 -0
  89. package/Editor/AssetProcessors/SpriteLabelProcessor.cs +138 -111
  90. package/Editor/AssetProcessors/SpriteLabelProcessor.cs.meta +2 -2
  91. package/Editor/AssetProcessors.meta +2 -2
  92. package/Editor/Core/Helper/AnimationEventHelpers.cs +204 -0
  93. package/{Runtime/Core/DataStructure/ISpatialTree.cs.meta → Editor/Core/Helper/AnimationEventHelpers.cs.meta} +11 -11
  94. package/Editor/Core/Helper.meta +8 -0
  95. package/Editor/Core.meta +8 -0
  96. package/Editor/CustomDrawers/IntDropdownDrawer.cs +46 -46
  97. package/Editor/CustomDrawers/IntDropdownDrawer.cs.meta +2 -2
  98. package/Editor/CustomDrawers/StringInListeDrawer.cs +135 -135
  99. package/Editor/CustomDrawers/StringInListeDrawer.cs.meta +2 -2
  100. package/Editor/CustomDrawers/WShowIfPropertyDrawer.cs +105 -105
  101. package/Editor/CustomDrawers/WShowIfPropertyDrawer.cs.meta +2 -2
  102. package/Editor/CustomDrawers.meta +2 -2
  103. package/Editor/CustomEditors/MatchColliderToSpriteEditor.cs +32 -32
  104. package/Editor/CustomEditors/MatchColliderToSpriteEditor.cs.meta +2 -2
  105. package/Editor/CustomEditors/PersistentDirectoryGUI.cs +799 -799
  106. package/Editor/CustomEditors/PersistentDirectoryGUI.cs.meta +2 -2
  107. package/Editor/CustomEditors/PolygonCollider2DOptimizerEditor.cs +38 -40
  108. package/Editor/CustomEditors/PolygonCollider2DOptimizerEditor.cs.meta +2 -2
  109. package/Editor/CustomEditors/SourceFolderEntryDrawer.cs +685 -413
  110. package/Editor/CustomEditors/SourceFolderEntryDrawer.cs.meta +2 -2
  111. package/Editor/CustomEditors/TexturePlatformOverrideEntryDrawer.cs +146 -0
  112. package/{Runtime/Core/DataStructure/KDTree.cs.meta → Editor/CustomEditors/TexturePlatformOverrideEntryDrawer.cs.meta} +11 -11
  113. package/Editor/CustomEditors.meta +2 -2
  114. package/Editor/Extensions/SerializedPropertyExtensions.cs +217 -190
  115. package/Editor/Extensions/SerializedPropertyExtensions.cs.meta +2 -2
  116. package/Editor/Extensions/UnityExtensions.cs +50 -26
  117. package/Editor/Extensions/UnityExtensions.cs.meta +2 -2
  118. package/Editor/Extensions.meta +2 -2
  119. package/Editor/FitTextureSizeWindow.cs +785 -332
  120. package/Editor/FitTextureSizeWindow.cs.meta +2 -2
  121. package/Editor/Persistence/MultiFileSelectorPersistenceManager.cs +62 -0
  122. package/{Runtime/Core/DataStructure/QuadTree.cs.meta → Editor/Persistence/MultiFileSelectorPersistenceManager.cs.meta} +11 -11
  123. package/Editor/Persistence/MultiFileSelectorPersistenceWindow.cs +65 -0
  124. package/Editor/Persistence/MultiFileSelectorPersistenceWindow.cs.meta +11 -0
  125. package/Editor/Persistence.meta +8 -0
  126. package/Editor/PersistentDirectorySettings.cs +529 -248
  127. package/Editor/PersistentDirectorySettings.cs.meta +2 -2
  128. package/Editor/PrefabChecker.cs +1329 -741
  129. package/Editor/PrefabChecker.cs.meta +11 -11
  130. package/Editor/Sprites/AnimationCopier.cs +1518 -789
  131. package/Editor/Sprites/AnimationCopier.cs.meta +2 -2
  132. package/Editor/Sprites/AnimationCreator.cs +1532 -881
  133. package/Editor/Sprites/AnimationCreator.cs.meta +11 -11
  134. package/Editor/Sprites/AnimationViewerWindow.cs +1634 -1522
  135. package/Editor/Sprites/AnimationViewerWindow.cs.meta +2 -2
  136. package/Editor/Sprites/ScriptableSpriteAtlas.cs +251 -178
  137. package/Editor/Sprites/ScriptableSpriteAtlas.cs.meta +2 -2
  138. package/Editor/Sprites/ScriptableSpriteAtlasEditor.cs +1470 -1026
  139. package/Editor/Sprites/ScriptableSpriteAtlasEditor.cs.meta +2 -2
  140. package/Editor/Sprites/SpriteCropper.cs +1013 -523
  141. package/Editor/Sprites/SpriteCropper.cs.meta +2 -2
  142. package/Editor/Sprites/SpritePivotAdjustor.cs +605 -265
  143. package/Editor/Sprites/SpritePivotAdjustor.cs.meta +2 -2
  144. package/Editor/Sprites/SpriteSettingsApplier.cs +942 -918
  145. package/Editor/Sprites/SpriteSettingsApplier.cs.meta +2 -2
  146. package/Editor/Sprites/SpriteSettingsApplierAPI.cs +441 -0
  147. package/Editor/Sprites/SpriteSettingsApplierAPI.cs.meta +11 -0
  148. package/Editor/Sprites/SpriteSettingsProfileCollection.cs +12 -0
  149. package/Editor/Sprites/SpriteSettingsProfileCollection.cs.meta +11 -0
  150. package/Editor/Sprites/SpriteSheetAnimationCreator.cs +1586 -1537
  151. package/Editor/Sprites/SpriteSheetAnimationCreator.cs.meta +2 -2
  152. package/Editor/Sprites/TexturePlatformNameHelper.cs +78 -0
  153. package/Editor/Sprites/TexturePlatformNameHelper.cs.meta +11 -0
  154. package/Editor/Sprites/TextureResizerWizard.cs +434 -175
  155. package/Editor/Sprites/TextureResizerWizard.cs.meta +2 -2
  156. package/Editor/Sprites/TextureSettingsApplierAPI.cs +359 -0
  157. package/Editor/Sprites/TextureSettingsApplierAPI.cs.meta +11 -0
  158. package/Editor/Sprites/TextureSettingsApplierWindow.cs +605 -0
  159. package/Editor/Sprites/TextureSettingsApplierWindow.cs.meta +11 -0
  160. package/Editor/Sprites.meta +2 -2
  161. package/Editor/Styles/AnimationViewer.uss +115 -115
  162. package/Editor/Styles/AnimationViewer.uss.meta +2 -2
  163. package/Editor/Styles/AnimationViewer.uxml +56 -56
  164. package/Editor/Styles/AnimationViewer.uxml.meta +2 -2
  165. package/Editor/Styles/SpriteSheetAnimationCreator.uss +10 -0
  166. package/Editor/Styles/SpriteSheetAnimationCreator.uss.meta +11 -0
  167. package/Editor/Styles.meta +2 -2
  168. package/Editor/Tags/AttributeMetadataCacheEditor.cs +46 -0
  169. package/Editor/Tags/AttributeMetadataCacheEditor.cs.meta +11 -0
  170. package/Editor/Tags/AttributeMetadataCacheGenerator.cs +258 -0
  171. package/Editor/Tags/AttributeMetadataCacheGenerator.cs.meta +11 -0
  172. package/Editor/Tags.meta +8 -0
  173. package/Editor/Tools/ImageBlurTool.cs +451 -409
  174. package/Editor/Tools/ImageBlurTool.cs.meta +2 -2
  175. package/Editor/Tools.meta +2 -2
  176. package/Editor/Utils/DxReadOnlyPropertyDrawer.cs +26 -26
  177. package/Editor/Utils/DxReadOnlyPropertyDrawer.cs.meta +11 -11
  178. package/Editor/Utils/EditorUi.cs +228 -0
  179. package/Editor/Utils/EditorUi.cs.meta +11 -0
  180. package/Editor/Utils/EditorUtilities.cs +22 -22
  181. package/Editor/Utils/EditorUtilities.cs.meta +11 -11
  182. package/Editor/Utils/ScriptableObjectSingletonCreator.cs +633 -52
  183. package/Editor/Utils/ScriptableObjectSingletonCreator.cs.meta +2 -2
  184. package/Editor/Utils.meta +8 -8
  185. package/Editor/Visuals/EnhancedImageEditor.cs +160 -160
  186. package/Editor/Visuals/EnhancedImageEditor.cs.meta +11 -11
  187. package/Editor/Visuals.meta +2 -2
  188. package/Editor/WallstopStudios.UnityHelpers.Editor.asmdef +14 -18
  189. package/Editor/WallstopStudios.UnityHelpers.Editor.asmdef.meta +7 -7
  190. package/Editor.meta +8 -8
  191. package/GETTING_STARTED.md +425 -0
  192. package/GETTING_STARTED.md.meta +7 -0
  193. package/GLOSSARY.md +313 -0
  194. package/GLOSSARY.md.meta +7 -0
  195. package/HULLS.md +45 -0
  196. package/HULLS.md.meta +7 -0
  197. package/INDEX.md +429 -0
  198. package/INDEX.md.meta +7 -0
  199. package/LICENSE +21 -21
  200. package/LICENSE.md +7 -7
  201. package/LICENSE.md.meta +7 -7
  202. package/LICENSE.meta +7 -7
  203. package/MATH_AND_EXTENSIONS.md +316 -0
  204. package/MATH_AND_EXTENSIONS.md.meta +7 -0
  205. package/RANDOM_PERFORMANCE.md +140 -0
  206. package/RANDOM_PERFORMANCE.md.meta +7 -0
  207. package/README.md +3195 -188
  208. package/README.md.meta +7 -7
  209. package/REFLECTION_HELPERS.md +272 -0
  210. package/REFLECTION_HELPERS.md.meta +7 -0
  211. package/RELATIONAL_COMPONENTS.md +543 -0
  212. package/RELATIONAL_COMPONENTS.md.meta +7 -0
  213. package/Runtime/AssemblyInfo.cs +7 -0
  214. package/Runtime/AssemblyInfo.cs.meta +11 -0
  215. package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.dll +0 -0
  216. package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.dll.meta +33 -33
  217. package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.xml +499 -278
  218. package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.xml.meta +7 -7
  219. package/Runtime/Binaries/System.IO.Pipelines.dll +0 -0
  220. package/Runtime/Binaries/System.IO.Pipelines.dll.meta +33 -0
  221. package/Runtime/Binaries/System.IO.Pipelines.xml +702 -0
  222. package/Runtime/Binaries/System.IO.Pipelines.xml.meta +7 -0
  223. package/Runtime/Binaries/System.Text.Encodings.Web.dll +0 -0
  224. package/Runtime/Binaries/System.Text.Encodings.Web.dll.meta +33 -33
  225. package/Runtime/Binaries/System.Text.Encodings.Web.xml +1084 -1079
  226. package/Runtime/Binaries/System.Text.Encodings.Web.xml.meta +7 -7
  227. package/Runtime/Binaries/System.Text.Json.dll +0 -0
  228. package/Runtime/Binaries/System.Text.Json.dll.meta +33 -33
  229. package/Runtime/Binaries/System.Text.Json.xml +10217 -8116
  230. package/Runtime/Binaries/System.Text.Json.xml.meta +7 -7
  231. package/Runtime/Binaries.meta +8 -8
  232. package/Runtime/Core/Attributes/AnimationEventAttribute.cs +10 -138
  233. package/Runtime/Core/Attributes/AnimationEventAttribute.cs.meta +11 -11
  234. package/Runtime/Core/Attributes/BaseRelationalComponentAttribute.cs +841 -0
  235. package/Runtime/Core/Attributes/BaseRelationalComponentAttribute.cs.meta +11 -0
  236. package/Runtime/Core/Attributes/ChildComponentAttribute.cs +284 -226
  237. package/Runtime/Core/Attributes/ChildComponentAttribute.cs.meta +11 -11
  238. package/Runtime/Core/Attributes/DxReadOnlyAttribute.cs +6 -6
  239. package/Runtime/Core/Attributes/DxReadOnlyAttribute.cs.meta +11 -11
  240. package/Runtime/Core/Attributes/EnumDisplayNameAttribute.cs +15 -15
  241. package/Runtime/Core/Attributes/EnumDisplayNameAttribute.cs.meta +2 -2
  242. package/Runtime/Core/Attributes/IRelationalComponentAssigner.cs +36 -0
  243. package/Runtime/Core/Attributes/IRelationalComponentAssigner.cs.meta +11 -0
  244. package/Runtime/Core/Attributes/IntDropdownAttribute.cs +14 -14
  245. package/Runtime/Core/Attributes/IntDropdownAttribute.cs.meta +2 -2
  246. package/Runtime/Core/Attributes/KSerializableAttribute.cs +19 -19
  247. package/Runtime/Core/Attributes/KSerializableAttribute.cs.meta +11 -11
  248. package/Runtime/Core/Attributes/NotNullAttribute.cs +32 -32
  249. package/Runtime/Core/Attributes/NotNullAttribute.cs.meta +11 -11
  250. package/Runtime/Core/Attributes/ParentComponentAttribute.cs +376 -0
  251. package/Runtime/Core/Attributes/{ParentComponent.cs.meta → ParentComponentAttribute.cs.meta} +11 -11
  252. package/Runtime/Core/Attributes/RelationalComponentAssigner.cs +107 -0
  253. package/Runtime/Core/Attributes/RelationalComponentAssigner.cs.meta +11 -0
  254. package/Runtime/Core/Attributes/RelationalComponentExtensions.cs +61 -14
  255. package/Runtime/Core/Attributes/RelationalComponentExtensions.cs.meta +11 -11
  256. package/Runtime/Core/Attributes/RelationalComponentInitializer.cs +331 -0
  257. package/Runtime/Core/Attributes/RelationalComponentInitializer.cs.meta +11 -0
  258. package/Runtime/Core/Attributes/ScriptableSingletonPathAttribute.cs +15 -15
  259. package/Runtime/Core/Attributes/ScriptableSingletonPathAttribute.cs.meta +2 -2
  260. package/Runtime/Core/Attributes/SiblingComponentAttribute.cs +264 -137
  261. package/Runtime/Core/Attributes/SiblingComponentAttribute.cs.meta +11 -11
  262. package/Runtime/Core/Attributes/ValidateAssignmentAttribute.cs +115 -106
  263. package/Runtime/Core/Attributes/ValidateAssignmentAttribute.cs.meta +11 -11
  264. package/Runtime/Core/Attributes/ValueHelpers.cs +10 -0
  265. package/Runtime/Core/Attributes/ValueHelpers.cs.meta +3 -0
  266. package/Runtime/Core/Attributes/WShowIfAttribute.cs +24 -24
  267. package/Runtime/Core/Attributes/WShowIfAttribute.cs.meta +2 -2
  268. package/Runtime/Core/Attributes.meta +8 -8
  269. package/Runtime/Core/DataStructure/Adapters/FastVector2Int.cs +192 -92
  270. package/Runtime/Core/DataStructure/Adapters/FastVector2Int.cs.meta +11 -11
  271. package/Runtime/Core/DataStructure/Adapters/FastVector3Int.cs +268 -185
  272. package/Runtime/Core/DataStructure/Adapters/FastVector3Int.cs.meta +11 -11
  273. package/Runtime/Core/DataStructure/Adapters/KGuid.cs +360 -305
  274. package/Runtime/Core/DataStructure/Adapters/KGuid.cs.meta +11 -11
  275. package/Runtime/Core/DataStructure/Adapters/KVector2.cs +146 -80
  276. package/Runtime/Core/DataStructure/Adapters/KVector2.cs.meta +11 -11
  277. package/Runtime/Core/DataStructure/Adapters.meta +8 -8
  278. package/Runtime/Core/DataStructure/BitSet.cs +626 -0
  279. package/Runtime/Core/DataStructure/BitSet.cs.meta +11 -0
  280. package/Runtime/Core/DataStructure/BoundingBox3D.cs +405 -0
  281. package/Runtime/Core/DataStructure/BoundingBox3D.cs.meta +11 -0
  282. package/Runtime/Core/DataStructure/Circle.cs +203 -50
  283. package/Runtime/Core/DataStructure/Circle.cs.meta +11 -11
  284. package/Runtime/Core/DataStructure/CyclicBuffer.cs +489 -266
  285. package/Runtime/Core/DataStructure/CyclicBuffer.cs.meta +11 -11
  286. package/Runtime/Core/DataStructure/Deque.cs +561 -0
  287. package/Runtime/Core/DataStructure/Deque.cs.meta +11 -0
  288. package/Runtime/Core/DataStructure/DisjointSet.cs +483 -0
  289. package/Runtime/Core/DataStructure/DisjointSet.cs.meta +11 -0
  290. package/Runtime/Core/DataStructure/Heap.cs +514 -0
  291. package/Runtime/Core/DataStructure/Heap.cs.meta +11 -0
  292. package/Runtime/Core/DataStructure/{ISpatialTree.cs → ISpatialTree2D.cs} +25 -21
  293. package/Runtime/Core/DataStructure/ISpatialTree2D.cs.meta +11 -0
  294. package/Runtime/Core/DataStructure/ISpatialTree3D.cs +33 -0
  295. package/Runtime/Core/DataStructure/ISpatialTree3D.cs.meta +11 -0
  296. package/Runtime/Core/DataStructure/ImmutableBitSet.cs +398 -0
  297. package/Runtime/Core/DataStructure/ImmutableBitSet.cs.meta +3 -0
  298. package/Runtime/Core/DataStructure/KDTree2D.cs +852 -0
  299. package/Runtime/Core/DataStructure/KDTree2D.cs.meta +11 -0
  300. package/Runtime/Core/DataStructure/KDTree3D.cs +911 -0
  301. package/Runtime/Core/DataStructure/KDTree3D.cs.meta +11 -0
  302. package/Runtime/Core/DataStructure/OctTree3D.cs +983 -0
  303. package/Runtime/Core/DataStructure/OctTree3D.cs.meta +11 -0
  304. package/Runtime/Core/DataStructure/PriorityQueue.cs +194 -0
  305. package/Runtime/Core/DataStructure/PriorityQueue.cs.meta +11 -0
  306. package/Runtime/Core/DataStructure/QuadTree2D.cs +722 -0
  307. package/Runtime/Core/DataStructure/QuadTree2D.cs.meta +11 -0
  308. package/Runtime/Core/DataStructure/RTree2D.cs +704 -0
  309. package/Runtime/Core/DataStructure/{RTree.cs.meta → RTree2D.cs.meta} +11 -11
  310. package/Runtime/Core/DataStructure/RTree3D.cs +775 -0
  311. package/Runtime/Core/DataStructure/RTree3D.cs.meta +11 -0
  312. package/Runtime/Core/DataStructure/SparseSet.cs +597 -0
  313. package/Runtime/Core/DataStructure/SparseSet.cs.meta +11 -0
  314. package/Runtime/Core/DataStructure/SpatialHash2D.cs +312 -0
  315. package/Runtime/Core/DataStructure/SpatialHash2D.cs.meta +3 -0
  316. package/Runtime/Core/DataStructure/SpatialHash3D.cs +341 -0
  317. package/Runtime/Core/DataStructure/SpatialHash3D.cs.meta +11 -0
  318. package/Runtime/Core/DataStructure/Sphere.cs +264 -0
  319. package/Runtime/Core/DataStructure/Sphere.cs.meta +11 -0
  320. package/Runtime/Core/DataStructure/StringWrapper.cs +115 -91
  321. package/Runtime/Core/DataStructure/StringWrapper.cs.meta +11 -11
  322. package/Runtime/Core/DataStructure/TimedCache.cs +88 -66
  323. package/Runtime/Core/DataStructure/TimedCache.cs.meta +11 -11
  324. package/Runtime/Core/DataStructure/Trie.cs +660 -359
  325. package/Runtime/Core/DataStructure/Trie.cs.meta +2 -2
  326. package/Runtime/Core/DataStructure.meta +8 -8
  327. package/Runtime/Core/Extension/AnimatorExtensions.cs +40 -25
  328. package/Runtime/Core/Extension/AnimatorExtensions.cs.meta +11 -11
  329. package/Runtime/Core/Extension/AsyncOperationExtensions.cs +404 -110
  330. package/Runtime/Core/Extension/AsyncOperationExtensions.cs.meta +2 -2
  331. package/Runtime/Core/Extension/CircleExtensions.cs +125 -25
  332. package/Runtime/Core/Extension/CircleExtensions.cs.meta +11 -11
  333. package/Runtime/Core/Extension/ColorExtensions.cs +983 -644
  334. package/Runtime/Core/Extension/ColorExtensions.cs.meta +11 -11
  335. package/Runtime/Core/Extension/DictionaryExtensions.cs +606 -299
  336. package/Runtime/Core/Extension/DictionaryExtensions.cs.meta +11 -11
  337. package/Runtime/Core/Extension/DirectionExtensions.cs +377 -213
  338. package/Runtime/Core/Extension/DirectionExtensions.cs.meta +11 -11
  339. package/Runtime/Core/Extension/EnumExtensions.cs +535 -137
  340. package/Runtime/Core/Extension/EnumExtensions.cs.meta +2 -2
  341. package/Runtime/Core/Extension/IEnumerableExtensions.cs +341 -124
  342. package/Runtime/Core/Extension/IEnumerableExtensions.cs.meta +11 -11
  343. package/Runtime/Core/Extension/IListExtensions.cs +767 -248
  344. package/Runtime/Core/Extension/IListExtensions.cs.meta +11 -11
  345. package/Runtime/Core/Extension/IReadonlyListExtensions.cs +687 -37
  346. package/Runtime/Core/Extension/IReadonlyListExtensions.cs.meta +2 -2
  347. package/Runtime/Core/Extension/ProtoEqualityExtensions.cs +292 -0
  348. package/Runtime/Core/Extension/ProtoEqualityExtensions.cs.meta +3 -0
  349. package/Runtime/Core/Extension/RandomExtensions.cs +938 -109
  350. package/Runtime/Core/Extension/RandomExtensions.cs.meta +11 -11
  351. package/Runtime/Core/Extension/StringExtensions.cs +1635 -239
  352. package/Runtime/Core/Extension/StringExtensions.cs.meta +11 -11
  353. package/Runtime/Core/Extension/UnityExtensions.cs +4555 -1689
  354. package/Runtime/Core/Extension/UnityExtensions.cs.meta +11 -11
  355. package/Runtime/Core/Extension/WallstopStudiosLogger.cs +271 -245
  356. package/Runtime/Core/Extension/WallstopStudiosLogger.cs.meta +11 -11
  357. package/Runtime/Core/Extension.meta +8 -8
  358. package/Runtime/Core/Helper/ArrayConverter.cs +73 -39
  359. package/Runtime/Core/Helper/ArrayConverter.cs.meta +2 -2
  360. package/Runtime/Core/Helper/AssignUtilities.cs +33 -14
  361. package/Runtime/Core/Helper/AssignUtilities.cs.meta +11 -11
  362. package/Runtime/Core/Helper/DirectoryHelper.cs +210 -196
  363. package/Runtime/Core/Helper/DirectoryHelper.cs.meta +2 -2
  364. package/Runtime/Core/Helper/Enumerables.cs +51 -17
  365. package/Runtime/Core/Helper/Enumerables.cs.meta +11 -11
  366. package/Runtime/Core/Helper/FileHelper.cs +97 -77
  367. package/Runtime/Core/Helper/FileHelper.cs.meta +2 -2
  368. package/Runtime/Core/Helper/FormattingHelpers.cs +49 -38
  369. package/Runtime/Core/Helper/FormattingHelpers.cs.meta +2 -2
  370. package/Runtime/Core/Helper/FuncBasedComparer.cs +29 -0
  371. package/Runtime/Core/Helper/FuncBasedComparer.cs.meta +3 -0
  372. package/Runtime/Core/Helper/Geometry.cs +65 -43
  373. package/Runtime/Core/Helper/Geometry.cs.meta +11 -11
  374. package/Runtime/Core/Helper/Helpers.cs +1271 -831
  375. package/Runtime/Core/Helper/Helpers.cs.meta +11 -11
  376. package/Runtime/Core/Helper/IterationHelpers.cs +83 -32
  377. package/Runtime/Core/Helper/IterationHelpers.cs.meta +11 -11
  378. package/Runtime/Core/Helper/LifetimeHelpers.cs +20 -13
  379. package/Runtime/Core/Helper/LifetimeHelpers.cs.meta +11 -11
  380. package/Runtime/Core/Helper/LineHelper.cs +259 -194
  381. package/Runtime/Core/Helper/LineHelper.cs.meta +2 -2
  382. package/Runtime/Core/Helper/Logging/UnityLogTagFormatter.cs +549 -539
  383. package/Runtime/Core/Helper/Logging/UnityLogTagFormatter.cs.meta +2 -2
  384. package/Runtime/Core/Helper/Logging.meta +2 -2
  385. package/Runtime/Core/Helper/Objects.cs +477 -769
  386. package/Runtime/Core/Helper/Objects.cs.meta +11 -11
  387. package/Runtime/Core/Helper/Partials/LogHelpers.cs +13 -13
  388. package/Runtime/Core/Helper/Partials/LogHelpers.cs.meta +2 -2
  389. package/Runtime/Core/Helper/Partials/MathHelpers.cs +45 -30
  390. package/Runtime/Core/Helper/Partials/MathHelpers.cs.meta +2 -2
  391. package/Runtime/Core/Helper/Partials/ObjectHelpers.cs +506 -400
  392. package/Runtime/Core/Helper/Partials/ObjectHelpers.cs.meta +2 -2
  393. package/Runtime/Core/Helper/Partials/TransformHelpers.cs +393 -377
  394. package/Runtime/Core/Helper/Partials/TransformHelpers.cs.meta +2 -2
  395. package/Runtime/Core/Helper/Partials.meta +2 -2
  396. package/Runtime/Core/Helper/PathHelper.cs +42 -15
  397. package/Runtime/Core/Helper/PathHelper.cs.meta +2 -2
  398. package/Runtime/Core/Helper/ReflectionHelpers.cs +5287 -1963
  399. package/Runtime/Core/Helper/ReflectionHelpers.cs.meta +2 -2
  400. package/Runtime/Core/Helper/ReverseComparer.cs +33 -0
  401. package/Runtime/Core/Helper/ReverseComparer.cs.meta +3 -0
  402. package/Runtime/Core/Helper/SceneHelper.cs +251 -224
  403. package/Runtime/Core/Helper/SceneHelper.cs.meta +2 -2
  404. package/Runtime/Core/Helper/SpriteHelpers.cs +50 -41
  405. package/Runtime/Core/Helper/SpriteHelpers.cs.meta +11 -11
  406. package/Runtime/Core/Helper/StringInList.cs +61 -35
  407. package/Runtime/Core/Helper/StringInList.cs.meta +11 -11
  408. package/Runtime/Core/Helper/TestAssemblyHelper.cs +134 -0
  409. package/Runtime/Core/Helper/TestAssemblyHelper.cs.meta +11 -0
  410. package/Runtime/Core/Helper/UnityMainThreadDispatcher.cs +100 -82
  411. package/Runtime/Core/Helper/UnityMainThreadDispatcher.cs.meta +2 -2
  412. package/Runtime/Core/Helper/WallMath.cs +672 -166
  413. package/Runtime/Core/Helper/WallMath.cs.meta +11 -11
  414. package/Runtime/Core/Helper.meta +8 -8
  415. package/Runtime/Core/Math/Line2D.cs +263 -0
  416. package/Runtime/Core/Math/Line2D.cs.meta +11 -0
  417. package/Runtime/Core/Math/Line3D.cs +452 -0
  418. package/Runtime/Core/Math/Line3D.cs.meta +11 -0
  419. package/Runtime/Core/Math/Parabola.cs +241 -47
  420. package/Runtime/Core/Math/Parabola.cs.meta +11 -11
  421. package/Runtime/Core/Math/PointPolygonCheck.cs +175 -36
  422. package/Runtime/Core/Math/PointPolygonCheck.cs.meta +11 -11
  423. package/Runtime/Core/Math/Range.cs +157 -92
  424. package/Runtime/Core/Math/Range.cs.meta +11 -11
  425. package/Runtime/Core/Math.meta +8 -8
  426. package/Runtime/Core/Model/Direction.cs +25 -43
  427. package/Runtime/Core/Model/Direction.cs.meta +11 -11
  428. package/Runtime/Core/Model.meta +8 -8
  429. package/Runtime/Core/OneOf/FastOneOf.cs +252 -152
  430. package/Runtime/Core/OneOf/FastOneOf.cs.meta +11 -11
  431. package/Runtime/Core/OneOf/FastOneOf2.cs +198 -0
  432. package/Runtime/Core/OneOf/FastOneOf2.cs.meta +11 -0
  433. package/Runtime/Core/OneOf/FastOneOf4.cs +324 -0
  434. package/Runtime/Core/OneOf/FastOneOf4.cs.meta +11 -0
  435. package/Runtime/Core/OneOf/None.cs +30 -4
  436. package/Runtime/Core/OneOf/None.cs.meta +11 -11
  437. package/Runtime/Core/OneOf.meta +8 -8
  438. package/Runtime/Core/Random/AbstractRandom.cs +1318 -655
  439. package/Runtime/Core/Random/AbstractRandom.cs.meta +11 -11
  440. package/Runtime/Core/Random/DotNetRandom.cs +118 -54
  441. package/Runtime/Core/Random/DotNetRandom.cs.meta +2 -2
  442. package/Runtime/Core/Random/IRandom.cs +203 -161
  443. package/Runtime/Core/Random/IRandom.cs.meta +11 -11
  444. package/Runtime/Core/Random/IllusionFlow.cs +171 -107
  445. package/Runtime/Core/Random/IllusionFlow.cs.meta +2 -2
  446. package/Runtime/Core/Random/LinearCongruentialGenerator.cs +90 -49
  447. package/Runtime/Core/Random/LinearCongruentialGenerator.cs.meta +2 -2
  448. package/Runtime/Core/Random/NativePcgRandom.cs +139 -97
  449. package/Runtime/Core/Random/NativePcgRandom.cs.meta +11 -11
  450. package/Runtime/Core/Random/PRNG.cs +21 -7
  451. package/Runtime/Core/Random/PRNG.cs.meta +2 -2
  452. package/Runtime/Core/Random/PcgRandom.cs +243 -149
  453. package/Runtime/Core/Random/PcgRandom.cs.meta +11 -11
  454. package/Runtime/Core/Random/PerlinNoise.cs +369 -369
  455. package/Runtime/Core/Random/PerlinNoise.cs.meta +2 -2
  456. package/Runtime/Core/Random/RandomComparer.cs +34 -0
  457. package/Runtime/Core/Random/RandomComparer.cs.meta +3 -0
  458. package/Runtime/Core/Random/RandomState.cs +206 -131
  459. package/Runtime/Core/Random/RandomState.cs.meta +11 -11
  460. package/Runtime/Core/Random/RandomUtilities.cs +55 -26
  461. package/Runtime/Core/Random/RandomUtilities.cs.meta +11 -11
  462. package/Runtime/Core/Random/RomuDuo.cs +171 -116
  463. package/Runtime/Core/Random/RomuDuo.cs.meta +2 -2
  464. package/Runtime/Core/Random/SplitMix64.cs +134 -94
  465. package/Runtime/Core/Random/SplitMix64.cs.meta +2 -2
  466. package/Runtime/Core/Random/SquirrelRandom.cs +127 -84
  467. package/Runtime/Core/Random/SquirrelRandom.cs.meta +11 -11
  468. package/Runtime/Core/Random/SystemRandom.cs +203 -162
  469. package/Runtime/Core/Random/SystemRandom.cs.meta +11 -11
  470. package/Runtime/Core/Random/ThreadLocalRandom.cs +25 -12
  471. package/Runtime/Core/Random/ThreadLocalRandom.cs.meta +11 -11
  472. package/Runtime/Core/Random/UnityRandom.cs +109 -57
  473. package/Runtime/Core/Random/UnityRandom.cs.meta +11 -11
  474. package/Runtime/Core/Random/WyRandom.cs +158 -121
  475. package/Runtime/Core/Random/WyRandom.cs.meta +2 -2
  476. package/Runtime/Core/Random/XorShiftRandom.cs +106 -52
  477. package/Runtime/Core/Random/XorShiftRandom.cs.meta +11 -11
  478. package/Runtime/Core/Random/XoroShiroRandom.cs +184 -119
  479. package/Runtime/Core/Random/XoroShiroRandom.cs.meta +2 -2
  480. package/Runtime/Core/Random.meta +8 -8
  481. package/Runtime/Core/Serialization/JsonConverters/AnimationCurveConverter.cs +248 -0
  482. package/Runtime/Core/Serialization/JsonConverters/AnimationCurveConverter.cs.meta +11 -0
  483. package/Runtime/Core/Serialization/JsonConverters/BitSetConverter.cs +119 -0
  484. package/Runtime/Core/Serialization/JsonConverters/BitSetConverter.cs.meta +11 -0
  485. package/Runtime/Core/Serialization/JsonConverters/BoundingSphereConverter.cs +74 -0
  486. package/Runtime/Core/Serialization/JsonConverters/BoundingSphereConverter.cs.meta +11 -0
  487. package/Runtime/Core/Serialization/JsonConverters/BoundsConverter.cs +132 -0
  488. package/Runtime/Core/Serialization/JsonConverters/BoundsConverter.cs.meta +11 -0
  489. package/Runtime/Core/Serialization/JsonConverters/BoundsIntConverter.cs +135 -0
  490. package/Runtime/Core/Serialization/JsonConverters/BoundsIntConverter.cs.meta +11 -0
  491. package/Runtime/Core/Serialization/JsonConverters/Color32Converter.cs +98 -0
  492. package/Runtime/Core/Serialization/JsonConverters/Color32Converter.cs.meta +11 -0
  493. package/Runtime/Core/Serialization/JsonConverters/ColorBlockConverter.cs +123 -0
  494. package/Runtime/Core/Serialization/JsonConverters/ColorBlockConverter.cs.meta +11 -0
  495. package/Runtime/Core/Serialization/JsonConverters/ColorConverter.cs +88 -88
  496. package/Runtime/Core/Serialization/JsonConverters/ColorConverter.cs.meta +2 -2
  497. package/Runtime/Core/Serialization/JsonConverters/CyclicBufferConverterFactory.cs +112 -0
  498. package/Runtime/Core/Serialization/JsonConverters/CyclicBufferConverterFactory.cs.meta +11 -0
  499. package/Runtime/Core/Serialization/JsonConverters/DequeConverterFactory.cs +62 -0
  500. package/Runtime/Core/Serialization/JsonConverters/DequeConverterFactory.cs.meta +11 -0
  501. package/Runtime/Core/Serialization/JsonConverters/FastVector2IntConverter.cs +72 -0
  502. package/Runtime/Core/Serialization/JsonConverters/FastVector2IntConverter.cs.meta +11 -0
  503. package/Runtime/Core/Serialization/JsonConverters/FastVector3IntConverter.cs +80 -0
  504. package/Runtime/Core/Serialization/JsonConverters/FastVector3IntConverter.cs.meta +11 -0
  505. package/Runtime/Core/Serialization/JsonConverters/GameObjectConverter.cs +36 -36
  506. package/Runtime/Core/Serialization/JsonConverters/GameObjectConverter.cs.meta +2 -2
  507. package/Runtime/Core/Serialization/JsonConverters/GradientConverter.cs +245 -0
  508. package/Runtime/Core/Serialization/JsonConverters/GradientConverter.cs.meta +11 -0
  509. package/Runtime/Core/Serialization/JsonConverters/Hash128Converter.cs +92 -0
  510. package/Runtime/Core/Serialization/JsonConverters/Hash128Converter.cs.meta +11 -0
  511. package/Runtime/Core/Serialization/JsonConverters/ImmutableBitSetConverter.cs +119 -0
  512. package/Runtime/Core/Serialization/JsonConverters/ImmutableBitSetConverter.cs.meta +11 -0
  513. package/Runtime/Core/Serialization/JsonConverters/KVector2Converter.cs +72 -0
  514. package/Runtime/Core/Serialization/JsonConverters/KVector2Converter.cs.meta +11 -0
  515. package/Runtime/Core/Serialization/JsonConverters/LayerMaskConverter.cs +95 -0
  516. package/Runtime/Core/Serialization/JsonConverters/LayerMaskConverter.cs.meta +11 -0
  517. package/Runtime/Core/Serialization/JsonConverters/Matrix4x4Converter.cs +237 -218
  518. package/Runtime/Core/Serialization/JsonConverters/Matrix4x4Converter.cs.meta +2 -2
  519. package/Runtime/Core/Serialization/JsonConverters/MinMaxCurveConverter.cs +142 -0
  520. package/Runtime/Core/Serialization/JsonConverters/MinMaxCurveConverter.cs.meta +11 -0
  521. package/Runtime/Core/Serialization/JsonConverters/MinMaxGradientConverter.cs +135 -0
  522. package/Runtime/Core/Serialization/JsonConverters/MinMaxGradientConverter.cs.meta +11 -0
  523. package/Runtime/Core/Serialization/JsonConverters/PlaneConverter.cs +79 -0
  524. package/Runtime/Core/Serialization/JsonConverters/PlaneConverter.cs.meta +11 -0
  525. package/Runtime/Core/Serialization/JsonConverters/PoseConverter.cs +76 -0
  526. package/Runtime/Core/Serialization/JsonConverters/PoseConverter.cs.meta +11 -0
  527. package/Runtime/Core/Serialization/JsonConverters/QuaternionConverter.cs +88 -0
  528. package/Runtime/Core/Serialization/JsonConverters/QuaternionConverter.cs.meta +11 -0
  529. package/Runtime/Core/Serialization/JsonConverters/RangeConverterFactory.cs +106 -0
  530. package/Runtime/Core/Serialization/JsonConverters/RangeConverterFactory.cs.meta +11 -0
  531. package/Runtime/Core/Serialization/JsonConverters/RangeIntConverter.cs +71 -0
  532. package/Runtime/Core/Serialization/JsonConverters/RangeIntConverter.cs.meta +11 -0
  533. package/Runtime/Core/Serialization/JsonConverters/Ray2DConverter.cs +80 -0
  534. package/Runtime/Core/Serialization/JsonConverters/Ray2DConverter.cs.meta +11 -0
  535. package/Runtime/Core/Serialization/JsonConverters/RayConverter.cs +76 -0
  536. package/Runtime/Core/Serialization/JsonConverters/RayConverter.cs.meta +11 -0
  537. package/Runtime/Core/Serialization/JsonConverters/RaycastHitConverter.cs +115 -0
  538. package/Runtime/Core/Serialization/JsonConverters/RaycastHitConverter.cs.meta +11 -0
  539. package/Runtime/Core/Serialization/JsonConverters/RectConverter.cs +84 -0
  540. package/Runtime/Core/Serialization/JsonConverters/RectConverter.cs.meta +11 -0
  541. package/Runtime/Core/Serialization/JsonConverters/RectIntConverter.cs +88 -0
  542. package/Runtime/Core/Serialization/JsonConverters/RectIntConverter.cs.meta +11 -0
  543. package/Runtime/Core/Serialization/JsonConverters/RectOffsetConverter.cs +87 -0
  544. package/Runtime/Core/Serialization/JsonConverters/RectOffsetConverter.cs.meta +11 -0
  545. package/Runtime/Core/Serialization/JsonConverters/RenderTextureDescriptorConverter.cs +264 -0
  546. package/Runtime/Core/Serialization/JsonConverters/RenderTextureDescriptorConverter.cs.meta +11 -0
  547. package/Runtime/Core/Serialization/JsonConverters/ResolutionConverter.cs +158 -0
  548. package/Runtime/Core/Serialization/JsonConverters/ResolutionConverter.cs.meta +11 -0
  549. package/Runtime/Core/Serialization/JsonConverters/SceneConverter.cs +103 -0
  550. package/Runtime/Core/Serialization/JsonConverters/SceneConverter.cs.meta +11 -0
  551. package/Runtime/Core/Serialization/JsonConverters/SphericalHarmonicsL2Converter.cs +121 -0
  552. package/Runtime/Core/Serialization/JsonConverters/SphericalHarmonicsL2Converter.cs.meta +11 -0
  553. package/Runtime/Core/Serialization/JsonConverters/TouchConverter.cs +54 -0
  554. package/Runtime/Core/Serialization/JsonConverters/TouchConverter.cs.meta +11 -0
  555. package/Runtime/Core/Serialization/JsonConverters/TypeConverter.cs +30 -28
  556. package/Runtime/Core/Serialization/JsonConverters/TypeConverter.cs.meta +2 -2
  557. package/Runtime/Core/Serialization/JsonConverters/Vector2Converter.cs +72 -74
  558. package/Runtime/Core/Serialization/JsonConverters/Vector2Converter.cs.meta +11 -11
  559. package/Runtime/Core/Serialization/JsonConverters/Vector2IntConverter.cs +72 -0
  560. package/Runtime/Core/Serialization/JsonConverters/Vector2IntConverter.cs.meta +11 -0
  561. package/Runtime/Core/Serialization/JsonConverters/Vector3Converter.cs +80 -81
  562. package/Runtime/Core/Serialization/JsonConverters/Vector3Converter.cs.meta +11 -11
  563. package/Runtime/Core/Serialization/JsonConverters/Vector3IntConverter.cs +80 -0
  564. package/Runtime/Core/Serialization/JsonConverters/Vector3IntConverter.cs.meta +11 -0
  565. package/Runtime/Core/Serialization/JsonConverters/Vector4Converter.cs +88 -88
  566. package/Runtime/Core/Serialization/JsonConverters/Vector4Converter.cs.meta +2 -2
  567. package/Runtime/Core/Serialization/JsonConverters.meta +8 -8
  568. package/Runtime/Core/Serialization/ProtobufUnitySurrogates.cs +383 -0
  569. package/Runtime/Core/Serialization/ProtobufUnitySurrogates.cs.meta +11 -0
  570. package/Runtime/Core/Serialization/Serializer.cs +2020 -195
  571. package/Runtime/Core/Serialization/Serializer.cs.meta +11 -11
  572. package/Runtime/Core/Serialization.meta +8 -8
  573. package/Runtime/Core/Threading/SingleThreadedThreadPool.cs +228 -228
  574. package/Runtime/Core/Threading/SingleThreadedThreadPool.cs.meta +11 -11
  575. package/Runtime/Core/Threading.meta +8 -8
  576. package/Runtime/Core.meta +8 -8
  577. package/Runtime/Integrations/VContainer/ObjectResolverRelationalExtensions.cs +185 -0
  578. package/Runtime/Integrations/VContainer/ObjectResolverRelationalExtensions.cs.meta +11 -0
  579. package/Runtime/Integrations/VContainer/RelationalComponentEntryPoint.cs +109 -0
  580. package/Runtime/Integrations/VContainer/RelationalComponentEntryPoint.cs.meta +11 -0
  581. package/Runtime/Integrations/VContainer/RelationalComponentsBuilderExtensions.cs +78 -0
  582. package/Runtime/Integrations/VContainer/RelationalComponentsBuilderExtensions.cs.meta +11 -0
  583. package/Runtime/Integrations/VContainer/RelationalSceneAssignmentOptions.cs +83 -0
  584. package/Runtime/Integrations/VContainer/RelationalSceneAssignmentOptions.cs.meta +11 -0
  585. package/Runtime/Integrations/VContainer/WallstopStudios.UnityHelpers.Integration.VContainer.asmdef +30 -0
  586. package/Runtime/Integrations/VContainer/WallstopStudios.UnityHelpers.Integration.VContainer.asmdef.meta +7 -0
  587. package/Runtime/Integrations/VContainer.meta +8 -0
  588. package/Runtime/Integrations/Zenject/DiContainerRelationalExtensions.cs +180 -0
  589. package/Runtime/Integrations/Zenject/DiContainerRelationalExtensions.cs.meta +11 -0
  590. package/Runtime/Integrations/Zenject/RelationalComponentSceneInitializer.cs +105 -0
  591. package/Runtime/Integrations/Zenject/RelationalComponentSceneInitializer.cs.meta +11 -0
  592. package/Runtime/Integrations/Zenject/RelationalComponentsInstaller.cs +72 -0
  593. package/Runtime/Integrations/Zenject/RelationalComponentsInstaller.cs.meta +11 -0
  594. package/Runtime/Integrations/Zenject/RelationalSceneAssignmentOptions.cs +87 -0
  595. package/Runtime/Integrations/Zenject/RelationalSceneAssignmentOptions.cs.meta +11 -0
  596. package/Runtime/Integrations/Zenject/WallstopStudios.UnityHelpers.Integration.Zenject.asmdef +30 -0
  597. package/Runtime/Integrations/Zenject/WallstopStudios.UnityHelpers.Integration.Zenject.asmdef.meta +7 -0
  598. package/Runtime/Integrations/Zenject.meta +8 -0
  599. package/Runtime/Integrations.meta +8 -0
  600. package/Runtime/Protobuf-Net/System.Collections.Immutable.dll.meta +33 -33
  601. package/Runtime/Protobuf-Net/System.Runtime.CompilerServices.Unsafe.dll.meta +33 -33
  602. package/Runtime/Protobuf-Net/protobuf-net.Core.dll.meta +33 -33
  603. package/Runtime/Protobuf-Net/protobuf-net.dll.meta +33 -33
  604. package/Runtime/Protobuf-Net.meta +8 -8
  605. package/Runtime/Tags/AlwaysIncludeInAttributeMetadataCacheAttribute.cs +11 -0
  606. package/Runtime/Tags/AlwaysIncludeInAttributeMetadataCacheAttribute.cs.meta +11 -0
  607. package/Runtime/Tags/Attribute.cs +399 -205
  608. package/Runtime/Tags/Attribute.cs.meta +2 -2
  609. package/Runtime/Tags/AttributeEffect.cs +372 -281
  610. package/Runtime/Tags/AttributeEffect.cs.meta +2 -2
  611. package/Runtime/Tags/AttributeMetadataCache.cs +503 -0
  612. package/Runtime/Tags/AttributeMetadataCache.cs.meta +11 -0
  613. package/Runtime/Tags/AttributeMetadataFilters.cs +108 -0
  614. package/Runtime/Tags/AttributeMetadataFilters.cs.meta +11 -0
  615. package/Runtime/Tags/AttributeModification.cs +132 -48
  616. package/Runtime/Tags/AttributeModification.cs.meta +2 -2
  617. package/Runtime/Tags/AttributeUtilities.cs +376 -209
  618. package/Runtime/Tags/AttributeUtilities.cs.meta +2 -2
  619. package/Runtime/Tags/AttributesComponent.cs +237 -163
  620. package/Runtime/Tags/AttributesComponent.cs.meta +2 -2
  621. package/Runtime/Tags/CollisionSenses.cs +117 -91
  622. package/Runtime/Tags/CollisionSenses.cs.meta +2 -2
  623. package/Runtime/Tags/CosmeticEffectComponent.cs +112 -50
  624. package/Runtime/Tags/CosmeticEffectComponent.cs.meta +2 -2
  625. package/Runtime/Tags/CosmeticEffectData.cs +109 -63
  626. package/Runtime/Tags/CosmeticEffectData.cs.meta +2 -2
  627. package/Runtime/Tags/EffectHandle.cs +150 -65
  628. package/Runtime/Tags/EffectHandle.cs.meta +2 -2
  629. package/Runtime/Tags/EffectHandler.cs +470 -393
  630. package/Runtime/Tags/EffectHandler.cs.meta +2 -2
  631. package/Runtime/Tags/ModificationAction.cs +60 -9
  632. package/Runtime/Tags/ModificationAction.cs.meta +2 -2
  633. package/Runtime/Tags/ModifierDurationType.cs +71 -13
  634. package/Runtime/Tags/ModifierDurationType.cs.meta +2 -2
  635. package/Runtime/Tags/TagHandler.cs +373 -158
  636. package/Runtime/Tags/TagHandler.cs.meta +2 -2
  637. package/Runtime/Tags.meta +2 -2
  638. package/Runtime/Utils/AnimationEventEqualityComparer.cs +198 -161
  639. package/Runtime/Utils/AnimationEventEqualityComparer.cs.meta +11 -11
  640. package/Runtime/Utils/AnimatorEnumStateMachine.cs +110 -88
  641. package/Runtime/Utils/AnimatorEnumStateMachine.cs.meta +11 -11
  642. package/Runtime/Utils/Ascii85.cs +132 -115
  643. package/Runtime/Utils/Ascii85.cs.meta +2 -2
  644. package/Runtime/Utils/Buffers.cs +1151 -550
  645. package/Runtime/Utils/Buffers.cs.meta +11 -11
  646. package/Runtime/Utils/CenterPointOffset.cs +35 -30
  647. package/Runtime/Utils/CenterPointOffset.cs.meta +2 -2
  648. package/Runtime/Utils/ChildSpawner.cs +250 -157
  649. package/Runtime/Utils/ChildSpawner.cs.meta +2 -2
  650. package/Runtime/Utils/CircleLineRenderer.cs +142 -142
  651. package/Runtime/Utils/CircleLineRenderer.cs.meta +11 -11
  652. package/Runtime/Utils/CollisionProxy.cs +48 -48
  653. package/Runtime/Utils/CollisionProxy.cs.meta +2 -2
  654. package/Runtime/Utils/CoroutineHandler.cs +4 -4
  655. package/Runtime/Utils/CoroutineHandler.cs.meta +2 -2
  656. package/Runtime/Utils/DeferredDisposalResult.cs +20 -23
  657. package/Runtime/Utils/DeferredDisposalResult.cs.meta +2 -2
  658. package/Runtime/Utils/LZMA.cs +276 -53
  659. package/Runtime/Utils/LZMA.cs.meta +2 -2
  660. package/Runtime/Utils/MatchColliderToSprite.cs +104 -104
  661. package/Runtime/Utils/MatchColliderToSprite.cs.meta +2 -2
  662. package/Runtime/Utils/MatchTransform.cs +99 -82
  663. package/Runtime/Utils/MatchTransform.cs.meta +2 -2
  664. package/Runtime/Utils/Oscillator.cs +27 -27
  665. package/Runtime/Utils/Oscillator.cs.meta +11 -11
  666. package/Runtime/Utils/PolygonCollider2DOptimizer.cs +104 -83
  667. package/Runtime/Utils/PolygonCollider2DOptimizer.cs.meta +2 -2
  668. package/Runtime/Utils/RuntimeSingleton.cs +139 -88
  669. package/Runtime/Utils/RuntimeSingleton.cs.meta +11 -11
  670. package/Runtime/Utils/ScriptableObjectSingleton.cs +226 -85
  671. package/Runtime/Utils/ScriptableObjectSingleton.cs.meta +2 -2
  672. package/Runtime/Utils/SerializedStringComparer.cs +107 -107
  673. package/Runtime/Utils/SerializedStringComparer.cs.meta +2 -2
  674. package/Runtime/Utils/SetTextureImportData.cs +69 -69
  675. package/Runtime/Utils/SetTextureImportData.cs.meta +11 -11
  676. package/Runtime/Utils/SevenZip/Common/CRC.cs +70 -70
  677. package/Runtime/Utils/SevenZip/Common/CRC.cs.meta +11 -11
  678. package/Runtime/Utils/SevenZip/Common/InBuffer.cs +84 -84
  679. package/Runtime/Utils/SevenZip/Common/InBuffer.cs.meta +11 -11
  680. package/Runtime/Utils/SevenZip/Common/OutBuffer.cs +70 -70
  681. package/Runtime/Utils/SevenZip/Common/OutBuffer.cs.meta +11 -11
  682. package/Runtime/Utils/SevenZip/Common.meta +2 -2
  683. package/Runtime/Utils/SevenZip/Compress/LZ/IMatchFinder.cs +28 -28
  684. package/Runtime/Utils/SevenZip/Compress/LZ/IMatchFinder.cs.meta +11 -11
  685. package/Runtime/Utils/SevenZip/Compress/LZ/LzBinTree.cs +454 -454
  686. package/Runtime/Utils/SevenZip/Compress/LZ/LzBinTree.cs.meta +11 -11
  687. package/Runtime/Utils/SevenZip/Compress/LZ/LzInWindow.cs +179 -179
  688. package/Runtime/Utils/SevenZip/Compress/LZ/LzInWindow.cs.meta +11 -11
  689. package/Runtime/Utils/SevenZip/Compress/LZ/LzOutWindow.cs +137 -137
  690. package/Runtime/Utils/SevenZip/Compress/LZ/LzOutWindow.cs.meta +11 -11
  691. package/Runtime/Utils/SevenZip/Compress/LZ.meta +8 -8
  692. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaBase.cs +110 -110
  693. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaBase.cs.meta +11 -11
  694. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaDecoder.cs +525 -527
  695. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaDecoder.cs.meta +11 -11
  696. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaEncoder.cs +1891 -1904
  697. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaEncoder.cs.meta +11 -11
  698. package/Runtime/Utils/SevenZip/Compress/LZMA.meta +8 -8
  699. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoder.cs +242 -242
  700. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoder.cs.meta +11 -11
  701. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoderBit.cs +146 -149
  702. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoderBit.cs.meta +11 -11
  703. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoderBitTree.cs +177 -177
  704. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoderBitTree.cs.meta +11 -11
  705. package/Runtime/Utils/SevenZip/Compress/RangeCoder.meta +8 -8
  706. package/Runtime/Utils/SevenZip/Compress.meta +8 -8
  707. package/Runtime/Utils/SevenZip/ICoder.cs +177 -177
  708. package/Runtime/Utils/SevenZip/ICoder.cs.meta +11 -11
  709. package/Runtime/Utils/SevenZip.meta +2 -2
  710. package/Runtime/Utils/SpriteRendererMetadata.cs +346 -370
  711. package/Runtime/Utils/SpriteRendererMetadata.cs.meta +2 -2
  712. package/Runtime/Utils/SpriteRendererSyncer.cs +100 -100
  713. package/Runtime/Utils/SpriteRendererSyncer.cs.meta +2 -2
  714. package/Runtime/Utils/StartTracker.cs +15 -15
  715. package/Runtime/Utils/StartTracker.cs.meta +2 -2
  716. package/Runtime/Utils/TextureScale.cs +356 -179
  717. package/Runtime/Utils/TextureScale.cs.meta +2 -2
  718. package/Runtime/Utils/TypeNameSorter.cs +17 -17
  719. package/Runtime/Utils/TypeNameSorter.cs.meta +2 -2
  720. package/Runtime/Utils/UnityObjectNameComparer.cs +89 -89
  721. package/Runtime/Utils/UnityObjectNameComparer.cs.meta +2 -2
  722. package/Runtime/Utils.meta +8 -8
  723. package/Runtime/Visuals/AnimatedSpriteLayer.cs +217 -130
  724. package/Runtime/Visuals/AnimatedSpriteLayer.cs.meta +2 -2
  725. package/Runtime/Visuals/UGUI/EnhancedImage.cs +218 -85
  726. package/Runtime/Visuals/UGUI/EnhancedImage.cs.meta +2 -2
  727. package/Runtime/Visuals/UGUI.meta +2 -2
  728. package/Runtime/Visuals/UIToolkit/LayeredImage.cs +781 -484
  729. package/Runtime/Visuals/UIToolkit/LayeredImage.cs.meta +2 -2
  730. package/Runtime/Visuals/UIToolkit/MultiFileSelectorElement.cs +945 -322
  731. package/Runtime/Visuals/UIToolkit/MultiFileSelectorElement.cs.meta +2 -2
  732. package/Runtime/Visuals/UIToolkit.meta +2 -2
  733. package/Runtime/Visuals.meta +2 -2
  734. package/Runtime/WallstopStudios.UnityHelpers.asmdef +22 -14
  735. package/Runtime/WallstopStudios.UnityHelpers.asmdef.meta +7 -7
  736. package/Runtime.meta +8 -8
  737. package/SERIALIZATION.md +648 -0
  738. package/SERIALIZATION.md.meta +7 -0
  739. package/SINGLETONS.md +427 -0
  740. package/SINGLETONS.md.meta +7 -0
  741. package/SPATIAL_TREES_2D_GUIDE.md +261 -0
  742. package/SPATIAL_TREES_2D_GUIDE.md.meta +7 -0
  743. package/SPATIAL_TREES_3D_GUIDE.md +214 -0
  744. package/SPATIAL_TREES_3D_GUIDE.md.meta +7 -0
  745. package/SPATIAL_TREE_2D_PERFORMANCE.md +238 -0
  746. package/SPATIAL_TREE_2D_PERFORMANCE.md.meta +7 -0
  747. package/SPATIAL_TREE_3D_PERFORMANCE.md +240 -0
  748. package/SPATIAL_TREE_3D_PERFORMANCE.md.meta +7 -0
  749. package/SPATIAL_TREE_SEMANTICS.md +106 -0
  750. package/SPATIAL_TREE_SEMANTICS.md.meta +7 -0
  751. package/Samples~/DI - VContainer/Prefabs/RelationalConsumer.prefab +77 -0
  752. package/Samples~/DI - VContainer/Prefabs/RelationalConsumer.prefab.meta +8 -0
  753. package/Samples~/DI - VContainer/Prefabs/Spawner.prefab +47 -0
  754. package/Samples~/DI - VContainer/Prefabs/Spawner.prefab.meta +8 -0
  755. package/Samples~/DI - VContainer/Prefabs.meta +9 -0
  756. package/Samples~/DI - VContainer/README.md +334 -0
  757. package/Samples~/DI - VContainer/README.md.meta +8 -0
  758. package/Samples~/DI - VContainer/Scenes/VContainer_Sample.unity +120 -0
  759. package/Samples~/DI - VContainer/Scenes/VContainer_Sample.unity.meta +8 -0
  760. package/Samples~/DI - VContainer/Scenes.meta +9 -0
  761. package/Samples~/DI - VContainer/Scripts/GameLifetimeScope.cs +24 -0
  762. package/Samples~/DI - VContainer/Scripts/GameLifetimeScope.cs.meta +12 -0
  763. package/Samples~/DI - VContainer/Scripts/RelationalConsumer.cs +21 -0
  764. package/Samples~/DI - VContainer/Scripts/RelationalConsumer.cs.meta +12 -0
  765. package/Samples~/DI - VContainer/Scripts/Samples.UnityHelpers.DI.VContainer.asmdef +37 -0
  766. package/Samples~/DI - VContainer/Scripts/Samples.UnityHelpers.DI.VContainer.asmdef.meta +8 -0
  767. package/Samples~/DI - VContainer/Scripts/Spawner.cs +21 -0
  768. package/Samples~/DI - VContainer/Scripts/Spawner.cs.meta +12 -0
  769. package/Samples~/DI - VContainer/Scripts.meta +9 -0
  770. package/Samples~/DI - VContainer.meta +9 -0
  771. package/Samples~/DI - Zenject/Prefabs/RelationalConsumer.prefab +77 -0
  772. package/Samples~/DI - Zenject/Prefabs/RelationalConsumer.prefab.meta +8 -0
  773. package/Samples~/DI - Zenject/Prefabs/SpawnerZenject.prefab +47 -0
  774. package/Samples~/DI - Zenject/Prefabs/SpawnerZenject.prefab.meta +8 -0
  775. package/Samples~/DI - Zenject/Prefabs.meta +9 -0
  776. package/Samples~/DI - Zenject/README.md +389 -0
  777. package/Samples~/DI - Zenject/README.md.meta +7 -0
  778. package/Samples~/DI - Zenject/Scenes/Zenject_Sample.unity +164 -0
  779. package/Samples~/DI - Zenject/Scenes/Zenject_Sample.unity.meta +8 -0
  780. package/Samples~/DI - Zenject/Scenes.meta +9 -0
  781. package/Samples~/DI - Zenject/Scripts/RelationalConsumer.cs +19 -0
  782. package/Samples~/DI - Zenject/Scripts/RelationalConsumer.cs.meta +12 -0
  783. package/Samples~/DI - Zenject/Scripts/Samples.UnityHelpers.DI.Zenject.asmdef +36 -0
  784. package/Samples~/DI - Zenject/Scripts/Samples.UnityHelpers.DI.Zenject.asmdef.meta +8 -0
  785. package/Samples~/DI - Zenject/Scripts/SceneContextPlaceholder.cs +47 -0
  786. package/Samples~/DI - Zenject/Scripts/SceneContextPlaceholder.cs.meta +12 -0
  787. package/Samples~/DI - Zenject/Scripts/SpawnerZenject.cs +20 -0
  788. package/Samples~/DI - Zenject/Scripts/SpawnerZenject.cs.meta +12 -0
  789. package/Samples~/DI - Zenject/Scripts.meta +9 -0
  790. package/Samples~/DI - Zenject.meta +9 -0
  791. package/Samples~/Random - PRNG/README.md +12 -0
  792. package/Samples~/Random - PRNG/README.md.meta +8 -0
  793. package/Samples~/Random - PRNG/Scripts/RandomPrngDemo.cs +28 -0
  794. package/Samples~/Random - PRNG/Scripts/RandomPrngDemo.cs.meta +12 -0
  795. package/Samples~/Random - PRNG/Scripts/Samples.UnityHelpers.Random.Prng.asmdef +17 -0
  796. package/Samples~/Random - PRNG/Scripts/Samples.UnityHelpers.Random.Prng.asmdef.meta +8 -0
  797. package/Samples~/Random - PRNG/Scripts.meta +9 -0
  798. package/Samples~/Random - PRNG.meta +9 -0
  799. package/Samples~/Relational Components - Basic/README.md +19 -0
  800. package/Samples~/Relational Components - Basic/README.md.meta +8 -0
  801. package/Samples~/Relational Components - Basic/Scripts/RelationalBasicConsumer.cs +37 -0
  802. package/Samples~/Relational Components - Basic/Scripts/RelationalBasicConsumer.cs.meta +12 -0
  803. package/Samples~/Relational Components - Basic/Scripts/Samples.UnityHelpers.Relational.Basic.asmdef +17 -0
  804. package/Samples~/Relational Components - Basic/Scripts/Samples.UnityHelpers.Relational.Basic.asmdef.meta +8 -0
  805. package/Samples~/Relational Components - Basic/Scripts.meta +9 -0
  806. package/Samples~/Relational Components - Basic.meta +9 -0
  807. package/Samples~/Serialization - JSON/README.md +13 -0
  808. package/Samples~/Serialization - JSON/README.md.meta +8 -0
  809. package/Samples~/Serialization - JSON/Scripts/JsonSerializationDemo.cs +50 -0
  810. package/Samples~/Serialization - JSON/Scripts/JsonSerializationDemo.cs.meta +12 -0
  811. package/Samples~/Serialization - JSON/Scripts/Samples.UnityHelpers.Serialization.Json.asmdef +17 -0
  812. package/Samples~/Serialization - JSON/Scripts/Samples.UnityHelpers.Serialization.Json.asmdef.meta +8 -0
  813. package/Samples~/Serialization - JSON/Scripts.meta +9 -0
  814. package/Samples~/Serialization - JSON.meta +9 -0
  815. package/Samples~/Spatial Structures - 2D and 3D/README.md +13 -0
  816. package/Samples~/Spatial Structures - 2D and 3D/README.md.meta +8 -0
  817. package/Samples~/Spatial Structures - 2D and 3D/Scripts/Samples.UnityHelpers.SpatialStructures.asmdef +17 -0
  818. package/Samples~/Spatial Structures - 2D and 3D/Scripts/Samples.UnityHelpers.SpatialStructures.asmdef.meta +8 -0
  819. package/Samples~/Spatial Structures - 2D and 3D/Scripts/SpatialStructuresDemo.cs +62 -0
  820. package/Samples~/Spatial Structures - 2D and 3D/Scripts/SpatialStructuresDemo.cs.meta +12 -0
  821. package/Samples~/Spatial Structures - 2D and 3D/Scripts.meta +9 -0
  822. package/Samples~/Spatial Structures - 2D and 3D.meta +9 -0
  823. package/Samples~/UGUI - EnhancedImage/README.md +12 -0
  824. package/Samples~/UGUI - EnhancedImage/README.md.meta +8 -0
  825. package/Samples~/UGUI - EnhancedImage/Scripts/EnhancedImageDemo.cs +36 -0
  826. package/Samples~/UGUI - EnhancedImage/Scripts/EnhancedImageDemo.cs.meta +12 -0
  827. package/Samples~/UGUI - EnhancedImage/Scripts/Samples.UnityHelpers.UGUI.EnhancedImage.asmdef +17 -0
  828. package/Samples~/UGUI - EnhancedImage/Scripts/Samples.UnityHelpers.UGUI.EnhancedImage.asmdef.meta +8 -0
  829. package/Samples~/UGUI - EnhancedImage/Scripts.meta +9 -0
  830. package/Samples~/UGUI - EnhancedImage.meta +9 -0
  831. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/README.md +12 -0
  832. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/README.md.meta +8 -0
  833. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts/Editor/MultiFileSelectorSampleWindow.cs +45 -0
  834. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts/Editor/MultiFileSelectorSampleWindow.cs.meta +12 -0
  835. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts/Editor/Samples.UnityHelpers.UIToolkit.Editor.asmdef +19 -0
  836. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts/Editor/Samples.UnityHelpers.UIToolkit.Editor.asmdef.meta +8 -0
  837. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts/Editor.meta +9 -0
  838. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts.meta +9 -0
  839. package/Samples~/UI Toolkit - MultiFile Selector (Editor).meta +9 -0
  840. package/Shaders/Materials/BackgroundMask-Material.mat +59 -59
  841. package/Shaders/Materials/BackgroundMask-Material.mat.meta +8 -8
  842. package/Shaders/Materials.meta +8 -8
  843. package/Shaders/ShaderGraph/BackgroundMask.shadergraph +1653 -1653
  844. package/Shaders/ShaderGraph/BackgroundMask.shadergraph.meta +10 -10
  845. package/Shaders/ShaderGraph/DebugDisplayValue.shadersubgraph +835 -835
  846. package/Shaders/ShaderGraph/DebugDisplayValue.shadersubgraph.meta +10 -10
  847. package/Shaders/ShaderGraph.meta +8 -8
  848. package/Shaders/Support/EnhancedImageSupport.shader +64 -0
  849. package/Shaders/Support/EnhancedImageSupport.shader.meta +9 -0
  850. package/Shaders/Support.meta +8 -0
  851. package/Shaders.meta +8 -8
  852. package/Styles/Elements/Progress/ArcedProgressBar.cs +345 -345
  853. package/Styles/Elements/Progress/ArcedProgressBar.cs.meta +2 -2
  854. package/Styles/Elements/Progress/CircularProgressBar.cs +307 -307
  855. package/Styles/Elements/Progress/CircularProgressBar.cs.meta +2 -2
  856. package/Styles/Elements/Progress/GlitchProgressBar.cs +416 -416
  857. package/Styles/Elements/Progress/GlitchProgressBar.cs.meta +2 -2
  858. package/Styles/Elements/Progress/LiquidProgressBar.cs +632 -632
  859. package/Styles/Elements/Progress/LiquidProgressBar.cs.meta +2 -2
  860. package/Styles/Elements/Progress/MarchingAntsProgressBar.cs +722 -722
  861. package/Styles/Elements/Progress/MarchingAntsProgressBar.cs.meta +2 -2
  862. package/Styles/Elements/Progress/RegularProgressBar.cs +405 -405
  863. package/Styles/Elements/Progress/RegularProgressBar.cs.meta +2 -2
  864. package/Styles/Elements/Progress/WigglyProgressBar.cs +837 -837
  865. package/Styles/Elements/Progress/WigglyProgressBar.cs.meta +2 -2
  866. package/Styles/Elements/Progress.meta +2 -2
  867. package/Styles/Elements.meta +2 -2
  868. package/Styles/USS/ArcedProgressBar.uss +18 -18
  869. package/Styles/USS/ArcedProgressBar.uss.meta +2 -2
  870. package/Styles/USS/CirclularProgressBar.uss +17 -17
  871. package/Styles/USS/CirclularProgressBar.uss.meta +2 -2
  872. package/Styles/USS/RegularProgressBar.uss +32 -32
  873. package/Styles/USS/RegularProgressBar.uss.meta +2 -2
  874. package/Styles/USS/WigglyProgressBar.uss +16 -16
  875. package/Styles/USS/WigglyProgressBar.uss.meta +2 -2
  876. package/Styles/USS.meta +2 -2
  877. package/Styles/WallstopStudios.UnityHelpers.Styles.asmdef +14 -17
  878. package/Styles/WallstopStudios.UnityHelpers.Styles.asmdef.meta +7 -7
  879. package/Styles.meta +2 -2
  880. package/THIRD_PARTY_NOTICES.md +74 -0
  881. package/THIRD_PARTY_NOTICES.md.meta +7 -0
  882. package/Tests/Editor/Attributes/AnimationEventHelpersTests.cs +155 -0
  883. package/Tests/Editor/Attributes/AnimationEventHelpersTests.cs.meta +11 -0
  884. package/Tests/Editor/Attributes.meta +8 -0
  885. package/Tests/Editor/Core/Attributes/RelationalComponentAssignerTests.cs +118 -0
  886. package/Tests/Editor/Core/Attributes/RelationalComponentAssignerTests.cs.meta +11 -0
  887. package/Tests/Editor/Core/Attributes.meta +8 -0
  888. package/Tests/Editor/Core.meta +8 -0
  889. package/Tests/Editor/Extensions/SerializedPropertyExtensionsTests.cs +194 -0
  890. package/Tests/Editor/Extensions/SerializedPropertyExtensionsTests.cs.meta +3 -0
  891. package/Tests/Editor/Extensions.meta +3 -0
  892. package/Tests/Editor/Helper/DummyScriptableObject.cs +6 -0
  893. package/Tests/Editor/Helper/DummyScriptableObject.cs.meta +3 -0
  894. package/Tests/Editor/Helper/HelpersTests.cs +101 -0
  895. package/Tests/Editor/Helper/HelpersTests.cs.meta +3 -0
  896. package/Tests/Editor/Helper/ObjectHelpersEditorTests.cs +63 -0
  897. package/Tests/Editor/Helper/ObjectHelpersEditorTests.cs.meta +11 -0
  898. package/Tests/Editor/Helper/PromptScope.cs +28 -0
  899. package/Tests/Editor/Helper/PromptScope.cs.meta +11 -0
  900. package/Tests/Editor/Helper/ReflectionHelpersEditorTests.cs +105 -0
  901. package/Tests/Editor/Helper/ReflectionHelpersEditorTests.cs.meta +11 -0
  902. package/Tests/Editor/Helper/SpriteHelpersTests.cs +334 -0
  903. package/Tests/Editor/Helper/SpriteHelpersTests.cs.meta +3 -0
  904. package/Tests/Editor/Helper/SpriteSettingsApplierAdditionalTests.cs +183 -0
  905. package/Tests/Editor/Helper/SpriteSettingsApplierAdditionalTests.cs.meta +11 -0
  906. package/Tests/Editor/Helper/SpriteSettingsApplierTests.cs +161 -0
  907. package/Tests/Editor/Helper/SpriteSettingsApplierTests.cs.meta +11 -0
  908. package/Tests/Editor/Helper.meta +3 -0
  909. package/Tests/Editor/Integrations/VContainer/VContainerIntegrationCompilationTests.cs +40 -0
  910. package/Tests/Editor/Integrations/VContainer/VContainerIntegrationCompilationTests.cs.meta +11 -0
  911. package/Tests/Editor/Integrations/VContainer/VContainerRelationalEntryPointTests.cs +77 -0
  912. package/Tests/Editor/Integrations/VContainer/VContainerRelationalEntryPointTests.cs.meta +11 -0
  913. package/Tests/Editor/Integrations/VContainer/WallstopStudios.UnityHelpers.Tests.Editor.VContainer.asmdef +36 -0
  914. package/Tests/Editor/Integrations/VContainer/WallstopStudios.UnityHelpers.Tests.Editor.VContainer.asmdef.meta +7 -0
  915. package/Tests/Editor/Integrations/VContainer.meta +8 -0
  916. package/Tests/Editor/Integrations/Zenject/WallstopStudios.UnityHelpers.Tests.Editor.Zenject.asmdef +36 -0
  917. package/Tests/Editor/Integrations/Zenject/WallstopStudios.UnityHelpers.Tests.Editor.Zenject.asmdef.meta +7 -0
  918. package/Tests/Editor/Integrations/Zenject/ZenjectIntegrationCompilationTests.cs +40 -0
  919. package/Tests/Editor/Integrations/Zenject/ZenjectIntegrationCompilationTests.cs.meta +11 -0
  920. package/Tests/Editor/Integrations/Zenject/ZenjectRelationalInitializerTests.cs +76 -0
  921. package/Tests/Editor/Integrations/Zenject/ZenjectRelationalInitializerTests.cs.meta +11 -0
  922. package/Tests/Editor/Integrations/Zenject.meta +8 -0
  923. package/Tests/Editor/Integrations.meta +8 -0
  924. package/Tests/Editor/MultiFileSelectorElementTests.cs +265 -0
  925. package/Tests/Editor/MultiFileSelectorElementTests.cs.meta +11 -0
  926. package/Tests/Editor/MultiFileSelectorPersistenceManagerTests.cs +100 -0
  927. package/Tests/Editor/MultiFileSelectorPersistenceManagerTests.cs.meta +11 -0
  928. package/Tests/Editor/Sprites/AnimationCopierWindowTests.cs +199 -0
  929. package/Tests/Editor/Sprites/AnimationCopierWindowTests.cs.meta +11 -0
  930. package/Tests/Editor/Sprites/ScriptableSpriteAtlasEditorTests.cs +108 -0
  931. package/Tests/Editor/Sprites/ScriptableSpriteAtlasEditorTests.cs.meta +11 -0
  932. package/Tests/Editor/Sprites/SpriteCropperAdditionalTests.cs +323 -0
  933. package/Tests/Editor/Sprites/SpriteCropperAdditionalTests.cs.meta +11 -0
  934. package/Tests/Editor/Sprites/SpriteCropperTests.cs +162 -0
  935. package/Tests/Editor/Sprites/SpriteCropperTests.cs.meta +11 -0
  936. package/Tests/Editor/Sprites/SpritePivotAdjusterAdditionalTests.cs +227 -0
  937. package/Tests/Editor/Sprites/SpritePivotAdjusterAdditionalTests.cs.meta +11 -0
  938. package/Tests/Editor/Sprites/SpritePivotAdjusterTests.cs +113 -0
  939. package/Tests/Editor/Sprites/SpritePivotAdjusterTests.cs.meta +11 -0
  940. package/Tests/Editor/Sprites/TexturePlatformNameHelperTests.cs +28 -0
  941. package/Tests/Editor/Sprites/TexturePlatformNameHelperTests.cs.meta +11 -0
  942. package/Tests/Editor/Sprites/TextureResizerWizardTests.cs +248 -0
  943. package/Tests/Editor/Sprites/TextureResizerWizardTests.cs.meta +11 -0
  944. package/Tests/Editor/Sprites/TextureSettingsApplierAPITests.cs +180 -0
  945. package/Tests/Editor/Sprites/TextureSettingsApplierAPITests.cs.meta +11 -0
  946. package/Tests/Editor/Sprites/TextureSettingsApplierWizardAdditionalTests.cs +295 -0
  947. package/Tests/Editor/Sprites/TextureSettingsApplierWizardAdditionalTests.cs.meta +11 -0
  948. package/Tests/Editor/Sprites/TextureSettingsApplierWizardTests.cs +134 -0
  949. package/Tests/Editor/Sprites/TextureSettingsApplierWizardTests.cs.meta +11 -0
  950. package/Tests/Editor/Sprites.meta +8 -0
  951. package/Tests/Editor/TestComponents/PrewarmTesterComponent.cs +10 -0
  952. package/Tests/Editor/TestComponents/PrewarmTesterComponent.cs.meta +11 -0
  953. package/Tests/Editor/TestComponents.meta +8 -0
  954. package/Tests/Editor/Tools/ImageBlurToolTests.cs +135 -0
  955. package/Tests/Editor/Tools/ImageBlurToolTests.cs.meta +11 -0
  956. package/Tests/Editor/Tools.meta +8 -0
  957. package/Tests/Editor/Utils/CommonTestBase.cs +208 -0
  958. package/Tests/Editor/Utils/CommonTestBase.cs.meta +11 -0
  959. package/Tests/Editor/Utils/ScriptableObjectSingletonCreatorEditorTests.cs +306 -0
  960. package/Tests/Editor/Utils/ScriptableObjectSingletonCreatorEditorTests.cs.meta +9 -0
  961. package/Tests/Editor/Utils/ScriptableObjectSingletonCreatorTests.cs +183 -0
  962. package/Tests/Editor/Utils/ScriptableObjectSingletonCreatorTests.cs.meta +11 -0
  963. package/Tests/Editor/Utils/ScriptableObjectSingletonTests.cs +466 -0
  964. package/Tests/Editor/Utils/ScriptableObjectSingletonTests.cs.meta +11 -0
  965. package/Tests/Editor/Utils.meta +3 -0
  966. package/Tests/Editor/WallstopStudios.UnityHelpers.Tests.Editor.asmdef +19 -0
  967. package/Tests/Editor/WallstopStudios.UnityHelpers.Tests.Editor.asmdef.meta +7 -0
  968. package/Tests/Editor/Windows/FitTextureSizeWindowTests.cs +781 -0
  969. package/Tests/Editor/Windows/FitTextureSizeWindowTests.cs.meta +11 -0
  970. package/Tests/Editor/Windows/PrefabCheckerFolderAdditionTests.cs +96 -0
  971. package/Tests/Editor/Windows/PrefabCheckerFolderAdditionTests.cs.meta +11 -0
  972. package/Tests/Editor/Windows/PrefabCheckerTests.cs +81 -0
  973. package/Tests/Editor/Windows/PrefabCheckerTests.cs.meta +11 -0
  974. package/Tests/Editor/Windows.meta +8 -0
  975. package/Tests/Editor.meta +8 -0
  976. package/Tests/Runtime/AssemblyInfo.cs +4 -0
  977. package/Tests/Runtime/AssemblyInfo.cs.meta +3 -0
  978. package/Tests/Runtime/Attributes/ChildComponentTests.cs +766 -81
  979. package/Tests/Runtime/Attributes/ChildComponentTests.cs.meta +2 -2
  980. package/Tests/Runtime/Attributes/Components/ExpectChildSpriteRenderers.cs +28 -28
  981. package/Tests/Runtime/Attributes/Components/ExpectChildSpriteRenderers.cs.meta +2 -2
  982. package/Tests/Runtime/Attributes/Components/ExpectParentSpriteRenderers.cs +28 -28
  983. package/Tests/Runtime/Attributes/Components/ExpectParentSpriteRenderers.cs.meta +2 -2
  984. package/Tests/Runtime/{Components → Attributes/Components}/RelationalComponentTesterComplex.cs +34 -34
  985. package/Tests/Runtime/{Components → Attributes/Components}/RelationalComponentTesterComplex.cs.meta +2 -2
  986. package/Tests/Runtime/Attributes/Components/RelationalComponentsTesterSimple.cs +37 -0
  987. package/Tests/Runtime/{Components → Attributes/Components}/RelationalComponentsTesterSimple.cs.meta +2 -2
  988. package/Tests/Runtime/Attributes/Components.meta +2 -2
  989. package/Tests/Runtime/Attributes/MiscRuntimeAttributeTests.cs +75 -0
  990. package/Tests/Runtime/Attributes/MiscRuntimeAttributeTests.cs.meta +11 -0
  991. package/Tests/Runtime/Attributes/NotNullAttributeTests.cs +26 -0
  992. package/Tests/Runtime/Attributes/NotNullAttributeTests.cs.meta +3 -0
  993. package/Tests/Runtime/Attributes/ParentComponentTests.cs +565 -68
  994. package/Tests/Runtime/Attributes/ParentComponentTests.cs.meta +2 -2
  995. package/Tests/Runtime/Attributes/RelationalComponentAdvancedTests.cs +614 -0
  996. package/Tests/Runtime/Attributes/RelationalComponentAdvancedTests.cs.meta +11 -0
  997. package/Tests/Runtime/Attributes/RelationalComponentBackwardCompatibilityTests.cs +478 -0
  998. package/Tests/Runtime/Attributes/RelationalComponentBackwardCompatibilityTests.cs.meta +11 -0
  999. package/Tests/Runtime/Attributes/RelationalComponentExtensionsTests.cs +56 -0
  1000. package/Tests/Runtime/Attributes/RelationalComponentExtensionsTests.cs.meta +11 -0
  1001. package/Tests/Runtime/Attributes/RelationalComponentHashSetTests.cs +226 -0
  1002. package/Tests/Runtime/Attributes/RelationalComponentHashSetTests.cs.meta +11 -0
  1003. package/Tests/Runtime/Attributes/RelationalComponentInitializerTests.cs +109 -0
  1004. package/Tests/Runtime/Attributes/RelationalComponentInitializerTests.cs.meta +11 -0
  1005. package/Tests/Runtime/Attributes/RelationalComponentTagAndNameFilterEdgeTests.cs +234 -0
  1006. package/Tests/Runtime/Attributes/RelationalComponentTagAndNameFilterEdgeTests.cs.meta +11 -0
  1007. package/Tests/Runtime/Attributes/SiblingComponentTests.cs +721 -0
  1008. package/Tests/Runtime/Attributes/SiblingComponentTests.cs.meta +11 -0
  1009. package/Tests/Runtime/Attributes/ValidateAssignmentAttributeTests.cs +96 -0
  1010. package/Tests/Runtime/Attributes/ValidateAssignmentAttributeTests.cs.meta +11 -0
  1011. package/Tests/Runtime/Attributes.meta +2 -2
  1012. package/Tests/Runtime/Core/Random/RandomComparerTests.cs +166 -0
  1013. package/Tests/Runtime/Core/Random/RandomComparerTests.cs.meta +11 -0
  1014. package/Tests/Runtime/Core/Random.meta +8 -0
  1015. package/Tests/Runtime/Core/Threading/SingleThreadedThreadPoolTests.cs +56 -56
  1016. package/Tests/Runtime/Core/Threading/SingleThreadedThreadPoolTests.cs.meta +2 -2
  1017. package/Tests/Runtime/Core/Threading.meta +2 -2
  1018. package/Tests/Runtime/Core.meta +2 -2
  1019. package/Tests/Runtime/DataStructures/BalancedKDTree2DTests.cs +562 -0
  1020. package/Tests/Runtime/DataStructures/{BalancedKDTreeTests.cs.meta → BalancedKDTree2DTests.cs.meta} +11 -11
  1021. package/Tests/Runtime/DataStructures/BalancedKDTree3DTests.cs +10 -0
  1022. package/Tests/Runtime/DataStructures/BalancedKDTree3DTests.cs.meta +11 -0
  1023. package/Tests/Runtime/DataStructures/BitSetTests.cs +1400 -0
  1024. package/Tests/Runtime/DataStructures/BitSetTests.cs.meta +3 -0
  1025. package/Tests/Runtime/DataStructures/BoundingBox3DTests.cs +1215 -0
  1026. package/Tests/Runtime/DataStructures/BoundingBox3DTests.cs.meta +11 -0
  1027. package/Tests/Runtime/DataStructures/CircleTests.cs +965 -0
  1028. package/Tests/Runtime/DataStructures/CircleTests.cs.meta +11 -0
  1029. package/Tests/Runtime/DataStructures/CyclicBufferTests.cs +2083 -324
  1030. package/Tests/Runtime/DataStructures/CyclicBufferTests.cs.meta +2 -2
  1031. package/Tests/Runtime/DataStructures/DequeTests.cs +790 -0
  1032. package/Tests/Runtime/DataStructures/DequeTests.cs.meta +3 -0
  1033. package/Tests/Runtime/DataStructures/DisjointSetTests.cs +1114 -0
  1034. package/Tests/Runtime/DataStructures/DisjointSetTests.cs.meta +3 -0
  1035. package/Tests/Runtime/DataStructures/FastOneOfTests.cs +966 -0
  1036. package/Tests/Runtime/DataStructures/FastOneOfTests.cs.meta +11 -0
  1037. package/Tests/Runtime/DataStructures/FastVector2IntTests.cs +286 -0
  1038. package/Tests/Runtime/DataStructures/FastVector2IntTests.cs.meta +11 -0
  1039. package/Tests/Runtime/DataStructures/FastVector3IntTests.cs +414 -0
  1040. package/Tests/Runtime/DataStructures/FastVector3IntTests.cs.meta +11 -0
  1041. package/Tests/Runtime/DataStructures/HeapTests.cs +1953 -0
  1042. package/Tests/Runtime/DataStructures/HeapTests.cs.meta +11 -0
  1043. package/Tests/Runtime/DataStructures/ImmutableBitSetTests.cs +833 -0
  1044. package/Tests/Runtime/DataStructures/ImmutableBitSetTests.cs.meta +3 -0
  1045. package/Tests/Runtime/DataStructures/KDTree3DTestsBase.cs +297 -0
  1046. package/Tests/Runtime/DataStructures/KDTree3DTestsBase.cs.meta +11 -0
  1047. package/Tests/Runtime/DataStructures/OctTree3DTests.cs +351 -0
  1048. package/Tests/Runtime/DataStructures/OctTree3DTests.cs.meta +11 -0
  1049. package/Tests/Runtime/DataStructures/PriorityQueueTests.cs +71 -0
  1050. package/Tests/Runtime/DataStructures/PriorityQueueTests.cs.meta +3 -0
  1051. package/Tests/Runtime/DataStructures/ProtobufSerializationTests.cs +475 -0
  1052. package/Tests/Runtime/DataStructures/ProtobufSerializationTests.cs.meta +11 -0
  1053. package/Tests/Runtime/DataStructures/QuadTree2DTests.cs +660 -0
  1054. package/Tests/Runtime/DataStructures/QuadTree2DTests.cs.meta +11 -0
  1055. package/Tests/Runtime/DataStructures/RTree2DTests.cs +823 -0
  1056. package/Tests/Runtime/DataStructures/RTree2DTests.cs.meta +3 -0
  1057. package/Tests/Runtime/DataStructures/RTree3DTests.cs +270 -0
  1058. package/Tests/Runtime/DataStructures/RTree3DTests.cs.meta +11 -0
  1059. package/Tests/Runtime/DataStructures/SparseSetTests.cs +1146 -0
  1060. package/Tests/Runtime/DataStructures/SparseSetTests.cs.meta +3 -0
  1061. package/Tests/Runtime/DataStructures/SpatialHashTests.cs +992 -0
  1062. package/Tests/Runtime/DataStructures/SpatialHashTests.cs.meta +11 -0
  1063. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsConsistencyTests.cs +351 -0
  1064. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsConsistencyTests.cs.meta +11 -0
  1065. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsEdgeTests.cs +127 -0
  1066. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsEdgeTests.cs.meta +11 -0
  1067. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsFuzzTests.cs +218 -0
  1068. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsFuzzTests.cs.meta +11 -0
  1069. package/Tests/Runtime/DataStructures/SpatialTree2DTests.cs +396 -0
  1070. package/Tests/Runtime/DataStructures/SpatialTree2DTests.cs.meta +11 -0
  1071. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsConsistencyTests.cs +281 -0
  1072. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsConsistencyTests.cs.meta +11 -0
  1073. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsEdgeTests.cs +127 -0
  1074. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsEdgeTests.cs.meta +11 -0
  1075. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsFuzzTests.cs +170 -0
  1076. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsFuzzTests.cs.meta +11 -0
  1077. package/Tests/Runtime/DataStructures/SpatialTree3DTests.cs +474 -0
  1078. package/Tests/Runtime/DataStructures/SpatialTree3DTests.cs.meta +11 -0
  1079. package/Tests/Runtime/DataStructures/SphereTests.cs +806 -0
  1080. package/Tests/Runtime/DataStructures/SphereTests.cs.meta +3 -0
  1081. package/Tests/Runtime/DataStructures/StringWrapperTests.cs +333 -0
  1082. package/Tests/Runtime/DataStructures/StringWrapperTests.cs.meta +11 -0
  1083. package/Tests/Runtime/DataStructures/TimedCacheTests.cs +669 -0
  1084. package/Tests/Runtime/DataStructures/TimedCacheTests.cs.meta +11 -0
  1085. package/Tests/Runtime/DataStructures/TrieTests.cs +3385 -0
  1086. package/Tests/Runtime/DataStructures/TrieTests.cs.meta +11 -0
  1087. package/Tests/Runtime/DataStructures/UnbalancedKDTree2DTests.cs +565 -0
  1088. package/Tests/Runtime/DataStructures/{UnbalancedKDTreeTests.cs.meta → UnbalancedKDTree2DTests.cs.meta} +11 -11
  1089. package/Tests/Runtime/DataStructures/UnbalancedKDTree3DTests.cs +10 -0
  1090. package/Tests/Runtime/DataStructures/UnbalancedKDTree3DTests.cs.meta +11 -0
  1091. package/Tests/Runtime/DataStructures.meta +8 -8
  1092. package/Tests/Runtime/Extensions/AnimatorExtensionsTests.cs +28 -0
  1093. package/Tests/Runtime/Extensions/AnimatorExtensionsTests.cs.meta +11 -0
  1094. package/Tests/Runtime/Extensions/AsyncOperationExtensionsTests.cs +667 -0
  1095. package/Tests/Runtime/Extensions/AsyncOperationExtensionsTests.cs.meta +11 -0
  1096. package/Tests/Runtime/Extensions/CircleExtensionsTests.cs +230 -0
  1097. package/Tests/Runtime/Extensions/CircleExtensionsTests.cs.meta +11 -0
  1098. package/Tests/Runtime/Extensions/ColorExtensionsTests.cs +55 -0
  1099. package/Tests/Runtime/Extensions/ColorExtensionsTests.cs.meta +11 -0
  1100. package/Tests/Runtime/Extensions/DictionaryExtensionTests.cs +724 -438
  1101. package/Tests/Runtime/Extensions/DictionaryExtensionTests.cs.meta +2 -2
  1102. package/Tests/Runtime/Extensions/DirectionExtensionsComprehensiveTests.cs +403 -0
  1103. package/Tests/Runtime/Extensions/DirectionExtensionsComprehensiveTests.cs.meta +11 -0
  1104. package/Tests/Runtime/Extensions/DirectionExtensionsTests.cs +69 -0
  1105. package/Tests/Runtime/Extensions/DirectionExtensionsTests.cs.meta +11 -0
  1106. package/Tests/Runtime/Extensions/EnumExtensionTests.cs +809 -153
  1107. package/Tests/Runtime/Extensions/EnumExtensionTests.cs.meta +2 -2
  1108. package/Tests/Runtime/Extensions/IEnumerableExtensionsTests.cs +191 -0
  1109. package/Tests/Runtime/Extensions/IEnumerableExtensionsTests.cs.meta +11 -0
  1110. package/Tests/Runtime/Extensions/IListExtensionTests.cs +955 -169
  1111. package/Tests/Runtime/Extensions/IListExtensionTests.cs.meta +2 -2
  1112. package/Tests/Runtime/Extensions/IReadonlyListExtensionTests.cs +266 -58
  1113. package/Tests/Runtime/Extensions/IReadonlyListExtensionTests.cs.meta +2 -2
  1114. package/Tests/Runtime/Extensions/LoggingExtensionTests.cs +721 -718
  1115. package/Tests/Runtime/Extensions/LoggingExtensionTests.cs.meta +2 -2
  1116. package/Tests/Runtime/Extensions/ProtoEqualityExtensionsTests.cs +565 -0
  1117. package/Tests/Runtime/Extensions/ProtoEqualityExtensionsTests.cs.meta +3 -0
  1118. package/Tests/Runtime/Extensions/ProtoEqualityPolymorphismTests.cs +100 -0
  1119. package/Tests/Runtime/Extensions/ProtoEqualityPolymorphismTests.cs.meta +11 -0
  1120. package/Tests/Runtime/Extensions/RandomExtensionTests.cs +719 -27
  1121. package/Tests/Runtime/Extensions/RandomExtensionTests.cs.meta +2 -2
  1122. package/Tests/Runtime/Extensions/StringExtensionTests.cs +2592 -31
  1123. package/Tests/Runtime/Extensions/StringExtensionTests.cs.meta +2 -2
  1124. package/Tests/Runtime/Extensions/UnityExtensionsBasicTests.cs +166 -0
  1125. package/Tests/Runtime/Extensions/UnityExtensionsBasicTests.cs.meta +11 -0
  1126. package/Tests/Runtime/Extensions/UnityExtensionsComprehensiveTests.cs +1446 -0
  1127. package/Tests/Runtime/Extensions/UnityExtensionsComprehensiveTests.cs.meta +11 -0
  1128. package/Tests/Runtime/Extensions/UnityExtensionsMathTests.cs +1779 -0
  1129. package/Tests/Runtime/Extensions/UnityExtensionsMathTests.cs.meta +11 -0
  1130. package/Tests/Runtime/Extensions/UnityExtensionsVector2HullTests.cs +292 -0
  1131. package/Tests/Runtime/Extensions/UnityExtensionsVector2HullTests.cs.meta +11 -0
  1132. package/Tests/Runtime/Extensions/UnityLogTagFormatterEdgeTests.cs +260 -0
  1133. package/Tests/Runtime/Extensions/UnityLogTagFormatterEdgeTests.cs.meta +11 -0
  1134. package/Tests/Runtime/Extensions.meta +2 -2
  1135. package/Tests/Runtime/Helper/ArrayConverterTests.cs +19 -19
  1136. package/Tests/Runtime/Helper/ArrayConverterTests.cs.meta +2 -2
  1137. package/Tests/Runtime/Helper/AssignUtilitiesTests.cs +38 -0
  1138. package/Tests/Runtime/Helper/AssignUtilitiesTests.cs.meta +11 -0
  1139. package/Tests/Runtime/Helper/DirectoryHelperTests.cs +347 -0
  1140. package/Tests/Runtime/Helper/DirectoryHelperTests.cs.meta +11 -0
  1141. package/Tests/Runtime/Helper/EnumerablesTests.cs +45 -0
  1142. package/Tests/Runtime/Helper/EnumerablesTests.cs.meta +11 -0
  1143. package/Tests/Runtime/Helper/FileHelperTests.cs +481 -0
  1144. package/Tests/Runtime/Helper/FileHelperTests.cs.meta +11 -0
  1145. package/Tests/Runtime/Helper/FormattingHelpersTests.cs +353 -0
  1146. package/Tests/Runtime/Helper/FormattingHelpersTests.cs.meta +11 -0
  1147. package/Tests/Runtime/Helper/FuncBasedComparerTests.cs +27 -0
  1148. package/Tests/Runtime/Helper/FuncBasedComparerTests.cs.meta +11 -0
  1149. package/Tests/Runtime/Helper/GeometryTests.cs +517 -0
  1150. package/Tests/Runtime/Helper/GeometryTests.cs.meta +3 -0
  1151. package/Tests/Runtime/Helper/HelpersTests.cs +749 -0
  1152. package/Tests/Runtime/Helper/HelpersTests.cs.meta +11 -0
  1153. package/Tests/Runtime/Helper/IterationHelpersTests.cs +173 -0
  1154. package/Tests/Runtime/Helper/IterationHelpersTests.cs.meta +11 -0
  1155. package/Tests/Runtime/Helper/LineHelperTests.cs +662 -0
  1156. package/Tests/Runtime/Helper/LineHelperTests.cs.meta +11 -0
  1157. package/Tests/Runtime/Helper/ObjectHelperTests.cs +444 -432
  1158. package/Tests/Runtime/Helper/ObjectHelperTests.cs.meta +2 -2
  1159. package/Tests/Runtime/Helper/ObjectsTests.cs +363 -0
  1160. package/Tests/Runtime/Helper/ObjectsTests.cs.meta +3 -0
  1161. package/Tests/Runtime/Helper/PathHelperTests.cs +183 -0
  1162. package/Tests/Runtime/Helper/PathHelperTests.cs.meta +11 -0
  1163. package/Tests/Runtime/Helper/ReflectionHelperTests.cs +2199 -1493
  1164. package/Tests/Runtime/Helper/ReflectionHelperTests.cs.meta +2 -2
  1165. package/Tests/Runtime/Helper/ReflectionHelpersMemberLookupTests.cs +192 -0
  1166. package/Tests/Runtime/Helper/ReflectionHelpersMemberLookupTests.cs.meta +11 -0
  1167. package/Tests/Runtime/Helper/ReflectionHelpersTypeScanningTests.cs +58 -0
  1168. package/Tests/Runtime/Helper/ReflectionHelpersTypeScanningTests.cs.meta +11 -0
  1169. package/Tests/Runtime/Helper/SceneHelperTests.cs +77 -94
  1170. package/Tests/Runtime/Helper/SceneHelperTests.cs.meta +2 -2
  1171. package/Tests/Runtime/Helper/UnityMainThreadDispatcherTests.cs +45 -0
  1172. package/Tests/Runtime/Helper/UnityMainThreadDispatcherTests.cs.meta +11 -0
  1173. package/Tests/Runtime/Helper/WallMathTests.cs +1884 -233
  1174. package/Tests/Runtime/Helper/WallMathTests.cs.meta +2 -2
  1175. package/Tests/Runtime/Helper.meta +2 -2
  1176. package/Tests/Runtime/Integrations/VContainer/RelationalComponentsVContainerTests.cs +560 -0
  1177. package/Tests/Runtime/Integrations/VContainer/RelationalComponentsVContainerTests.cs.meta +11 -0
  1178. package/Tests/Runtime/Integrations/VContainer/WallstopStudios.UnityHelpers.Tests.Runtime.VContainer.asmdef +38 -0
  1179. package/Tests/Runtime/Integrations/VContainer/WallstopStudios.UnityHelpers.Tests.Runtime.VContainer.asmdef.meta +7 -0
  1180. package/Tests/Runtime/Integrations/VContainer.meta +8 -0
  1181. package/Tests/Runtime/Integrations/Zenject/RelationalComponentsZenjectTests.cs +591 -0
  1182. package/Tests/Runtime/Integrations/Zenject/RelationalComponentsZenjectTests.cs.meta +11 -0
  1183. package/Tests/Runtime/Integrations/Zenject/WallstopStudios.UnityHelpers.Tests.Runtime.Zenject.asmdef +38 -0
  1184. package/Tests/Runtime/Integrations/Zenject/WallstopStudios.UnityHelpers.Tests.Runtime.Zenject.asmdef.meta +7 -0
  1185. package/Tests/Runtime/Integrations/Zenject.meta +8 -0
  1186. package/Tests/Runtime/Integrations.meta +8 -0
  1187. package/Tests/Runtime/Math/Line2DTests.cs +594 -0
  1188. package/Tests/Runtime/Math/Line2DTests.cs.meta +11 -0
  1189. package/Tests/Runtime/Math/Line3DTests.cs +655 -0
  1190. package/Tests/Runtime/Math/Line3DTests.cs.meta +11 -0
  1191. package/Tests/Runtime/Math/LineTests.cs +480 -0
  1192. package/Tests/Runtime/Math/LineTests.cs.meta +11 -0
  1193. package/Tests/Runtime/Math/ParabolaTests.cs +477 -0
  1194. package/Tests/Runtime/Math/ParabolaTests.cs.meta +11 -0
  1195. package/Tests/Runtime/Math/PointPolygonCheckTests.cs +939 -0
  1196. package/Tests/Runtime/Math/PointPolygonCheckTests.cs.meta +11 -0
  1197. package/Tests/Runtime/Math/RangeTests.cs +197 -0
  1198. package/Tests/Runtime/Math/RangeTests.cs.meta +11 -0
  1199. package/Tests/Runtime/Math.meta +8 -0
  1200. package/Tests/Runtime/Performance/BenchmarkReadmeUpdater.cs +81 -0
  1201. package/Tests/Runtime/Performance/BenchmarkReadmeUpdater.cs.meta +11 -0
  1202. package/Tests/Runtime/Performance/JsonSerializationPerformanceTests.cs +421 -0
  1203. package/Tests/Runtime/Performance/JsonSerializationPerformanceTests.cs.meta +3 -0
  1204. package/Tests/Runtime/Performance/ListExtensionPerformanceTests.cs +76 -76
  1205. package/Tests/Runtime/Performance/ListExtensionPerformanceTests.cs.meta +2 -2
  1206. package/Tests/Runtime/Performance/ProtoEqualsPerformanceTests.cs +161 -0
  1207. package/Tests/Runtime/Performance/ProtoEqualsPerformanceTests.cs.meta +11 -0
  1208. package/Tests/Runtime/Performance/ProtoSerializationPerformanceTests.cs +207 -0
  1209. package/Tests/Runtime/Performance/ProtoSerializationPerformanceTests.cs.meta +3 -0
  1210. package/Tests/Runtime/Performance/RandomPerformanceTests.cs +195 -181
  1211. package/Tests/Runtime/Performance/RandomPerformanceTests.cs.meta +11 -11
  1212. package/Tests/Runtime/Performance/RelationComponentPerformanceTests.cs +60 -61
  1213. package/Tests/Runtime/Performance/RelationComponentPerformanceTests.cs.meta +2 -2
  1214. package/Tests/Runtime/Performance/SpatialTree2DPerformanceTests.cs +692 -0
  1215. package/Tests/Runtime/Performance/SpatialTree2DPerformanceTests.cs.meta +11 -0
  1216. package/Tests/Runtime/Performance/SpatialTree3DPerformanceTests.cs +650 -0
  1217. package/Tests/Runtime/Performance/SpatialTree3DPerformanceTests.cs.meta +11 -0
  1218. package/Tests/Runtime/Performance.meta +8 -8
  1219. package/Tests/Runtime/Random/DotNetRandomTests.cs +9 -9
  1220. package/Tests/Runtime/Random/DotNetRandomTests.cs.meta +2 -2
  1221. package/Tests/Runtime/Random/IllusionFlowTests.cs +12 -12
  1222. package/Tests/Runtime/Random/IllusionFlowTests.cs.meta +2 -2
  1223. package/Tests/Runtime/Random/LinearCongruentialGeneratorTests.cs +12 -12
  1224. package/Tests/Runtime/Random/LinearCongruentialGeneratorTests.cs.meta +2 -2
  1225. package/Tests/Runtime/Random/PcgRandomTests.cs +9 -9
  1226. package/Tests/Runtime/Random/PcgRandomTests.cs.meta +11 -11
  1227. package/Tests/Runtime/Random/RandomProtoSerializationTests.cs +494 -0
  1228. package/Tests/Runtime/Random/RandomProtoSerializationTests.cs.meta +3 -0
  1229. package/Tests/Runtime/Random/RandomStateSerializationTests.cs +304 -0
  1230. package/Tests/Runtime/Random/RandomStateSerializationTests.cs.meta +4 -0
  1231. package/Tests/Runtime/Random/RandomTestBase.cs +836 -787
  1232. package/Tests/Runtime/Random/RandomTestBase.cs.meta +11 -11
  1233. package/Tests/Runtime/Random/RomuDuoRandomTests.cs +9 -9
  1234. package/Tests/Runtime/Random/RomuDuoRandomTests.cs.meta +2 -2
  1235. package/Tests/Runtime/Random/SplitMix64RandomTests.cs +9 -9
  1236. package/Tests/Runtime/Random/SplitMix64RandomTests.cs.meta +2 -2
  1237. package/Tests/Runtime/Random/SquirrelRandomTests.cs +14 -14
  1238. package/Tests/Runtime/Random/SquirrelRandomTests.cs.meta +11 -11
  1239. package/Tests/Runtime/Random/SystemRandomTests.cs +10 -10
  1240. package/Tests/Runtime/Random/SystemRandomTests.cs.meta +11 -11
  1241. package/Tests/Runtime/Random/UnityRandomTests.cs +9 -9
  1242. package/Tests/Runtime/Random/UnityRandomTests.cs.meta +11 -11
  1243. package/Tests/Runtime/Random/WyRandomTests.cs +9 -9
  1244. package/Tests/Runtime/Random/WyRandomTests.cs.meta +2 -2
  1245. package/Tests/Runtime/Random/XorShiftRandomTests.cs +9 -9
  1246. package/Tests/Runtime/Random/XorShiftRandomTests.cs.meta +11 -11
  1247. package/Tests/Runtime/Random/XoroShiroRandomTests.cs +9 -9
  1248. package/Tests/Runtime/Random/XoroShiroRandomTests.cs.meta +2 -2
  1249. package/Tests/Runtime/Random.meta +8 -8
  1250. package/Tests/Runtime/RuntimeTestTimeouts.cs +3 -0
  1251. package/Tests/Runtime/RuntimeTestTimeouts.cs.meta +11 -0
  1252. package/Tests/Runtime/Scenes/Test1.unity +723 -723
  1253. package/Tests/Runtime/Scenes/Test1.unity.meta +7 -7
  1254. package/Tests/Runtime/Scenes/Test2.unity +723 -723
  1255. package/Tests/Runtime/Scenes/Test2.unity.meta +7 -7
  1256. package/Tests/Runtime/Scenes.meta +2 -2
  1257. package/Tests/Runtime/Serialization/AdaptersJsonTests.cs +67 -0
  1258. package/Tests/Runtime/Serialization/AdaptersJsonTests.cs.meta +11 -0
  1259. package/Tests/Runtime/Serialization/BitSetJsonTests.cs +50 -0
  1260. package/Tests/Runtime/Serialization/BitSetJsonTests.cs.meta +11 -0
  1261. package/Tests/Runtime/Serialization/CyclicBufferJsonTests.cs +67 -0
  1262. package/Tests/Runtime/Serialization/CyclicBufferJsonTests.cs.meta +11 -0
  1263. package/Tests/Runtime/Serialization/DequeJsonTests.cs +70 -0
  1264. package/Tests/Runtime/Serialization/DequeJsonTests.cs.meta +11 -0
  1265. package/Tests/Runtime/Serialization/ImmutableBitSetJsonTests.cs +25 -0
  1266. package/Tests/Runtime/Serialization/ImmutableBitSetJsonTests.cs.meta +11 -0
  1267. package/Tests/Runtime/Serialization/JsonConverterTests.cs +1157 -0
  1268. package/Tests/Runtime/Serialization/JsonConverterTests.cs.meta +11 -0
  1269. package/Tests/Runtime/Serialization/JsonRoundtripComprehensiveTests.cs +239 -0
  1270. package/Tests/Runtime/Serialization/JsonRoundtripComprehensiveTests.cs.meta +11 -0
  1271. package/Tests/Runtime/Serialization/JsonSerializationCorrectnessTests.cs +458 -0
  1272. package/Tests/Runtime/Serialization/JsonSerializationCorrectnessTests.cs.meta +3 -0
  1273. package/Tests/Runtime/Serialization/JsonSerializationTest.cs +156 -156
  1274. package/Tests/Runtime/Serialization/JsonSerializationTest.cs.meta +2 -2
  1275. package/Tests/Runtime/Serialization/MathJsonTests.cs +79 -0
  1276. package/Tests/Runtime/Serialization/MathJsonTests.cs.meta +11 -0
  1277. package/Tests/Runtime/Serialization/ProtoInterfaceResolutionEdgeTests.cs +76 -0
  1278. package/Tests/Runtime/Serialization/ProtoInterfaceResolutionEdgeTests.cs.meta +11 -0
  1279. package/Tests/Runtime/Serialization/ProtoRootRegistrationTests.cs +80 -0
  1280. package/Tests/Runtime/Serialization/ProtoRootRegistrationTests.cs.meta +11 -0
  1281. package/Tests/Runtime/Serialization/ProtoRoundtripComprehensiveTests.cs +257 -0
  1282. package/Tests/Runtime/Serialization/ProtoRoundtripComprehensiveTests.cs.meta +11 -0
  1283. package/Tests/Runtime/Serialization/ProtoSerializationCorrectnessTests.cs +471 -0
  1284. package/Tests/Runtime/Serialization/ProtoSerializationCorrectnessTests.cs.meta +3 -0
  1285. package/Tests/Runtime/Serialization/ProtoSerializationTests.cs +169 -0
  1286. package/Tests/Runtime/Serialization/ProtoSerializationTests.cs.meta +11 -0
  1287. package/Tests/Runtime/Serialization/ProtoSerializeBehaviorTests.cs +62 -0
  1288. package/Tests/Runtime/Serialization/ProtoSerializeBehaviorTests.cs.meta +11 -0
  1289. package/Tests/Runtime/Serialization/SerializerAdditionalTests.cs +895 -0
  1290. package/Tests/Runtime/Serialization/SerializerAdditionalTests.cs.meta +3 -0
  1291. package/Tests/Runtime/Serialization/TypeConverterTests.cs +34 -0
  1292. package/Tests/Runtime/Serialization/TypeConverterTests.cs.meta +11 -0
  1293. package/Tests/Runtime/Serialization.meta +2 -2
  1294. package/Tests/Runtime/Tags/AttributeComponentTests.cs +174 -0
  1295. package/Tests/Runtime/Tags/AttributeComponentTests.cs.meta +3 -0
  1296. package/Tests/Runtime/Tags/AttributeDataTests.cs +312 -0
  1297. package/Tests/Runtime/Tags/AttributeDataTests.cs.meta +11 -0
  1298. package/Tests/Runtime/Tags/AttributeUtilitiesTests.cs +405 -0
  1299. package/Tests/Runtime/Tags/AttributeUtilitiesTests.cs.meta +3 -0
  1300. package/Tests/Runtime/Tags/CosmeticAndCollisionTests.cs +147 -0
  1301. package/Tests/Runtime/Tags/CosmeticAndCollisionTests.cs.meta +11 -0
  1302. package/Tests/Runtime/Tags/CosmeticEffectDataTests.cs +60 -0
  1303. package/Tests/Runtime/Tags/CosmeticEffectDataTests.cs.meta +3 -0
  1304. package/Tests/Runtime/Tags/EffectHandleTests.cs +61 -0
  1305. package/Tests/Runtime/Tags/EffectHandleTests.cs.meta +3 -0
  1306. package/Tests/Runtime/Tags/EffectHandlerTests.cs +270 -0
  1307. package/Tests/Runtime/Tags/EffectHandlerTests.cs.meta +3 -0
  1308. package/Tests/Runtime/Tags/Helpers/RecordingCosmeticComponent.cs +39 -0
  1309. package/Tests/Runtime/Tags/Helpers/RecordingCosmeticComponent.cs.meta +3 -0
  1310. package/Tests/Runtime/Tags/Helpers/TagTestBase.cs +49 -0
  1311. package/Tests/Runtime/Tags/Helpers/TagTestBase.cs.meta +3 -0
  1312. package/Tests/Runtime/Tags/Helpers/TestAttributesComponent.cs +28 -0
  1313. package/Tests/Runtime/Tags/Helpers/TestAttributesComponent.cs.meta +3 -0
  1314. package/Tests/Runtime/Tags/Helpers.meta +3 -0
  1315. package/Tests/Runtime/Tags/TagHandlerTests.cs +108 -0
  1316. package/Tests/Runtime/Tags/TagHandlerTests.cs.meta +3 -0
  1317. package/Tests/Runtime/Tags.meta +8 -0
  1318. package/Tests/Runtime/TestUtils/CommonTestBase.cs +213 -0
  1319. package/Tests/Runtime/TestUtils/CommonTestBase.cs.meta +11 -0
  1320. package/Tests/Runtime/TestUtils/GCAssert.cs +55 -0
  1321. package/Tests/Runtime/TestUtils/GCAssert.cs.meta +11 -0
  1322. package/Tests/Runtime/TestUtils/SpatialAssert.cs +33 -0
  1323. package/Tests/Runtime/TestUtils/SpatialAssert.cs.meta +11 -0
  1324. package/Tests/Runtime/TestUtils/SpatialDiagnostics.cs +195 -0
  1325. package/Tests/Runtime/TestUtils/SpatialDiagnostics.cs.meta +11 -0
  1326. package/Tests/Runtime/TestUtils.meta +8 -0
  1327. package/Tests/Runtime/Utils/AnimationEventEqualityComparerTests.cs +144 -0
  1328. package/Tests/Runtime/Utils/AnimationEventEqualityComparerTests.cs.meta +11 -0
  1329. package/Tests/Runtime/Utils/Ascii85Tests.cs +56 -0
  1330. package/Tests/Runtime/Utils/Ascii85Tests.cs.meta +11 -0
  1331. package/Tests/Runtime/Utils/BuffersTests.cs +1148 -741
  1332. package/Tests/Runtime/Utils/BuffersTests.cs.meta +2 -2
  1333. package/Tests/Runtime/Utils/BuffersWaitInstructionTests.cs +31 -0
  1334. package/Tests/Runtime/Utils/BuffersWaitInstructionTests.cs.meta +11 -0
  1335. package/Tests/Runtime/Utils/CenterPointOffsetTests.cs +67 -0
  1336. package/Tests/Runtime/Utils/CenterPointOffsetTests.cs.meta +11 -0
  1337. package/Tests/Runtime/Utils/ChildSpawnerTests.cs +490 -0
  1338. package/Tests/Runtime/Utils/ChildSpawnerTests.cs.meta +11 -0
  1339. package/Tests/Runtime/Utils/CircleLineRendererTests.cs +80 -0
  1340. package/Tests/Runtime/Utils/CircleLineRendererTests.cs.meta +11 -0
  1341. package/Tests/Runtime/Utils/CollisionProxyTests.cs +442 -0
  1342. package/Tests/Runtime/Utils/CollisionProxyTests.cs.meta +11 -0
  1343. package/Tests/Runtime/Utils/CoroutineHandlerTests.cs +353 -0
  1344. package/Tests/Runtime/Utils/CoroutineHandlerTests.cs.meta +11 -0
  1345. package/Tests/Runtime/Utils/DeferredDisposalResultTests.cs +44 -0
  1346. package/Tests/Runtime/Utils/DeferredDisposalResultTests.cs.meta +11 -0
  1347. package/Tests/Runtime/Utils/LZMAComprehensiveTests.cs +249 -0
  1348. package/Tests/Runtime/Utils/LZMAComprehensiveTests.cs.meta +11 -0
  1349. package/Tests/Runtime/Utils/LZMATests.cs +31 -0
  1350. package/Tests/Runtime/Utils/LZMATests.cs.meta +11 -0
  1351. package/Tests/Runtime/Utils/MatchColliderToSpriteAdditionalTests.cs +86 -0
  1352. package/Tests/Runtime/Utils/MatchColliderToSpriteAdditionalTests.cs.meta +11 -0
  1353. package/Tests/Runtime/Utils/MatchColliderToSpriteTests.cs +503 -0
  1354. package/Tests/Runtime/Utils/MatchColliderToSpriteTests.cs.meta +11 -0
  1355. package/Tests/Runtime/Utils/MatchTransformEdgeTests.cs +34 -0
  1356. package/Tests/Runtime/Utils/MatchTransformEdgeTests.cs.meta +11 -0
  1357. package/Tests/Runtime/Utils/MatchTransformTests.cs +495 -0
  1358. package/Tests/Runtime/Utils/MatchTransformTests.cs.meta +11 -0
  1359. package/Tests/Runtime/Utils/OscillatorTests.cs +540 -0
  1360. package/Tests/Runtime/Utils/OscillatorTests.cs.meta +11 -0
  1361. package/Tests/Runtime/Utils/PolygonCollider2DOptimizerTests.cs +52 -0
  1362. package/Tests/Runtime/Utils/PolygonCollider2DOptimizerTests.cs.meta +11 -0
  1363. package/Tests/Runtime/Utils/RuntimeSingletonTests.cs +766 -0
  1364. package/Tests/Runtime/Utils/RuntimeSingletonTests.cs.meta +11 -0
  1365. package/Tests/Runtime/Utils/SerializedStringComparerEdgeTests.cs +47 -0
  1366. package/Tests/Runtime/Utils/SerializedStringComparerEdgeTests.cs.meta +11 -0
  1367. package/Tests/Runtime/Utils/SerializedStringComparerTests.cs +361 -0
  1368. package/Tests/Runtime/Utils/SerializedStringComparerTests.cs.meta +11 -0
  1369. package/Tests/Runtime/Utils/SpriteRendererMetadataTests.cs +383 -398
  1370. package/Tests/Runtime/Utils/SpriteRendererMetadataTests.cs.meta +2 -2
  1371. package/Tests/Runtime/Utils/SpriteRendererSyncTests.cs +134 -0
  1372. package/Tests/Runtime/Utils/SpriteRendererSyncTests.cs.meta +11 -0
  1373. package/Tests/Runtime/Utils/StartTrackerTests.cs +24 -0
  1374. package/Tests/Runtime/Utils/StartTrackerTests.cs.meta +11 -0
  1375. package/Tests/Runtime/Utils/TextureScaleEdgeTests.cs +114 -0
  1376. package/Tests/Runtime/Utils/TextureScaleEdgeTests.cs.meta +11 -0
  1377. package/Tests/Runtime/Utils/TextureScaleTests.cs +298 -0
  1378. package/Tests/Runtime/Utils/TextureScaleTests.cs.meta +3 -0
  1379. package/Tests/Runtime/Utils/TypeNameSorterAdditionalTests.cs +36 -0
  1380. package/Tests/Runtime/Utils/TypeNameSorterAdditionalTests.cs.meta +11 -0
  1381. package/Tests/Runtime/Utils/TypeNameSorterTests.cs +34 -0
  1382. package/Tests/Runtime/Utils/TypeNameSorterTests.cs.meta +11 -0
  1383. package/Tests/Runtime/Utils/UnityObjectNameComparerEdgeTests.cs +63 -0
  1384. package/Tests/Runtime/Utils/UnityObjectNameComparerEdgeTests.cs.meta +11 -0
  1385. package/Tests/Runtime/Utils/UnityObjectNameComparerTests.cs +59 -0
  1386. package/Tests/Runtime/Utils/UnityObjectNameComparerTests.cs.meta +11 -0
  1387. package/Tests/Runtime/Utils.meta +2 -2
  1388. package/Tests/Runtime/Visuals/AnimatedSpriteLayerTests.cs +266 -0
  1389. package/Tests/Runtime/Visuals/AnimatedSpriteLayerTests.cs.meta +11 -0
  1390. package/Tests/Runtime/Visuals/EnhancedImageTests.cs +184 -0
  1391. package/Tests/Runtime/Visuals/EnhancedImageTests.cs.meta +11 -0
  1392. package/Tests/Runtime/Visuals/LayeredImageTests.cs +422 -0
  1393. package/Tests/Runtime/Visuals/LayeredImageTests.cs.meta +11 -0
  1394. package/Tests/Runtime/Visuals/VisualsTestHelpers.cs +132 -0
  1395. package/Tests/Runtime/Visuals/VisualsTestHelpers.cs.meta +11 -0
  1396. package/Tests/Runtime/Visuals.meta +3 -0
  1397. package/Tests/Runtime/WallstopStudios.UnityHelpers.Tests.Runtime.asmdef +24 -23
  1398. package/Tests/Runtime/WallstopStudios.UnityHelpers.Tests.Runtime.asmdef.meta +7 -7
  1399. package/Tests/Runtime.meta +8 -8
  1400. package/Tests.meta +8 -8
  1401. package/URP/VolumeProfiles/Post Processing Bloom Profile(URP).asset +63 -63
  1402. package/URP/VolumeProfiles/Post Processing Bloom Profile(URP).asset.meta +8 -8
  1403. package/URP/VolumeProfiles.meta +8 -8
  1404. package/URP.meta +8 -8
  1405. package/node_modules.meta +8 -0
  1406. package/package.json +95 -38
  1407. package/package.json.meta +7 -7
  1408. package/scripts/check-eol.ps1 +52 -0
  1409. package/scripts/check-eol.ps1.meta +7 -0
  1410. package/scripts/clean-nul.ps1 +29 -0
  1411. package/scripts/clean-nul.ps1.meta +7 -0
  1412. package/scripts/lint-doc-links.ps1 +80 -0
  1413. package/scripts/lint-doc-links.ps1.meta +7 -0
  1414. package/scripts/normalize-eol.ps1 +71 -0
  1415. package/scripts/normalize-eol.ps1.meta +7 -0
  1416. package/scripts.meta +8 -0
  1417. package/Editor/Sprites/ProjectAnimationSettings.cs +0 -50
  1418. package/Editor/Sprites/ProjectAnimationSettings.cs.meta +0 -3
  1419. package/Editor/Sprites/TextureSettingsApplier.cs +0 -178
  1420. package/Editor/Sprites/TextureSettingsApplier.cs.meta +0 -3
  1421. package/Runtime/Core/Attributes/ParentComponent.cs +0 -189
  1422. package/Runtime/Core/DataStructure/KDTree.cs +0 -434
  1423. package/Runtime/Core/DataStructure/QuadTree.cs +0 -431
  1424. package/Runtime/Core/DataStructure/RTree.cs +0 -356
  1425. package/Runtime/Core/Extension/HashSetExtensions.cs +0 -12
  1426. package/Runtime/Core/Extension/HashSetExtensions.cs.meta +0 -11
  1427. package/Runtime/Core/Math/Line.cs +0 -55
  1428. package/Runtime/Core/Math/Line.cs.meta +0 -11
  1429. package/Runtime/Core/Math/XXHash.cs +0 -310
  1430. package/Runtime/Core/Math/XXHash.cs.meta +0 -11
  1431. package/Tests/Runtime/Components/RelationalComponentsTesterSimple.cs +0 -40
  1432. package/Tests/Runtime/Components.meta +0 -3
  1433. package/Tests/Runtime/DataStructures/BalancedKDTreeTests.cs +0 -14
  1434. package/Tests/Runtime/DataStructures/QuadTreeTests.cs +0 -14
  1435. package/Tests/Runtime/DataStructures/QuadTreeTests.cs.meta +0 -11
  1436. package/Tests/Runtime/DataStructures/SpatialTreeTests.cs +0 -130
  1437. package/Tests/Runtime/DataStructures/SpatialTreeTests.cs.meta +0 -11
  1438. package/Tests/Runtime/DataStructures/UnbalancedKDTreeTests.cs +0 -14
  1439. package/Tests/Runtime/Helper/FormattingHelperTests.cs +0 -129
  1440. package/Tests/Runtime/Helper/FormattingHelperTests.cs.meta +0 -3
  1441. package/Tests/Runtime/Performance/KDTreePerformanceTests.cs +0 -14
  1442. package/Tests/Runtime/Performance/KDTreePerformanceTests.cs.meta +0 -11
  1443. package/Tests/Runtime/Performance/QuadTreePerformanceTests.cs +0 -14
  1444. package/Tests/Runtime/Performance/QuadTreePerformanceTests.cs.meta +0 -11
  1445. package/Tests/Runtime/Performance/SpatialTreePerformanceTest.cs +0 -158
  1446. package/Tests/Runtime/Performance/SpatialTreePerformanceTest.cs.meta +0 -11
  1447. package/Tests/Runtime/Performance/UnbalancedKDTreeTests.cs +0 -14
  1448. package/Tests/Runtime/Performance/UnbalancedKDTreeTests.cs.meta +0 -11
  1449. package/Third Party Notices.md +0 -1
@@ -1,324 +1,2083 @@
1
- namespace WallstopStudios.UnityHelpers.Tests.DataStructures
2
- {
3
- using System;
4
- using System.Collections.Generic;
5
- using System.Linq;
6
- using NUnit.Framework;
7
- using WallstopStudios.UnityHelpers.Core.DataStructure;
8
- using WallstopStudios.UnityHelpers.Core.Random;
9
-
10
- public sealed class CyclicBufferTests
11
- {
12
- private const int NumTries = 100;
13
- private const int CapacityMultiplier = 3;
14
-
15
- [Test]
16
- public void InvalidCapacity()
17
- {
18
- Assert.Throws<ArgumentException>(() => new CyclicBuffer<int>(-1));
19
- Assert.Throws<ArgumentException>(() => new CyclicBuffer<int>(int.MinValue));
20
- for (int i = 0; i < NumTries; i++)
21
- {
22
- Assert.Throws<ArgumentException>(() =>
23
- new CyclicBuffer<int>(PRNG.Instance.Next(int.MinValue, -1))
24
- );
25
- }
26
- }
27
-
28
- [Test]
29
- public void CapacityInitializedOk()
30
- {
31
- for (int i = 0; i < NumTries; i++)
32
- {
33
- int capacity = PRNG.Instance.Next(1, int.MaxValue);
34
- CyclicBuffer<int> buffer = new(capacity);
35
- Assert.AreEqual(capacity, buffer.Capacity);
36
- }
37
- }
38
-
39
- [Test]
40
- public void CountInitializedOk()
41
- {
42
- for (int i = 0; i < NumTries; i++)
43
- {
44
- int capacity = PRNG.Instance.Next(1, int.MaxValue);
45
- CyclicBuffer<int> buffer = new(capacity);
46
- Assert.AreEqual(0, buffer.Count);
47
- }
48
- }
49
-
50
- [Test]
51
- public void ZeroCapacityOk()
52
- {
53
- CyclicBuffer<int> buffer = new(0);
54
- CollectionAssert.AreEquivalent(Array.Empty<int>(), buffer);
55
- for (int i = 0; i < NumTries; ++i)
56
- {
57
- buffer.Add(PRNG.Instance.Next());
58
- CollectionAssert.AreEquivalent(Array.Empty<int>(), buffer);
59
- }
60
- }
61
-
62
- [Test]
63
- public void IntMaxCapacityOk()
64
- {
65
- CyclicBuffer<int> buffer = new(int.MaxValue);
66
- CollectionAssert.AreEquivalent(Array.Empty<int>(), buffer);
67
- const int tries = 50;
68
- List<int> expected = new(tries);
69
- for (int i = 0; i < tries; ++i)
70
- {
71
- int value = PRNG.Instance.Next();
72
- buffer.Add(value);
73
- expected.Add(value);
74
- if (!expected.SequenceEqual(buffer))
75
- {
76
- Assert.Fail(
77
- $"Failure at iteration {i}, capacity={buffer.Capacity}, "
78
- + $"capacityMultiplier={CapacityMultiplier}\n"
79
- + $"Expected: [{string.Join(",", expected)}], Actual: [{string.Join(",", buffer)}]"
80
- );
81
- }
82
- }
83
- }
84
-
85
- [Test]
86
- public void OneCapacityOk()
87
- {
88
- CyclicBuffer<int> buffer = new(1);
89
- CollectionAssert.AreEquivalent(Array.Empty<int>(), buffer);
90
- int[] expected = new int[1];
91
- for (int i = 0; i < NumTries; ++i)
92
- {
93
- int value = PRNG.Instance.Next();
94
- buffer.Add(value);
95
- expected[0] = value;
96
- CollectionAssert.AreEquivalent(expected, buffer);
97
- }
98
- }
99
-
100
- [Test]
101
- public void InitialElementsVariableSize()
102
- {
103
- for (int i = 0; i < NumTries; ++i)
104
- {
105
- int capacity = PRNG.Instance.Next(100, 1_000);
106
- int[] elements = Enumerable
107
- .Range(0, (int)(capacity * PRNG.Instance.NextFloat(0.5f, 1.5f)))
108
- .Select(_ => PRNG.Instance.Next())
109
- .ToArray();
110
- CyclicBuffer<int> buffer = new(capacity, elements);
111
- if (capacity < elements.Length)
112
- {
113
- Assert.IsTrue(elements.Skip(elements.Length - capacity).SequenceEqual(buffer));
114
- }
115
- else
116
- {
117
- Assert.IsTrue(elements.SequenceEqual(buffer));
118
- }
119
- }
120
- }
121
-
122
- [Test]
123
- public void InitialElementsSizeSameAsCapacity()
124
- {
125
- for (int i = 0; i < NumTries; ++i)
126
- {
127
- int capacity = PRNG.Instance.Next(100, 1_000);
128
- int[] elements = Enumerable
129
- .Range(0, capacity)
130
- .Select(_ => PRNG.Instance.Next())
131
- .ToArray();
132
- CyclicBuffer<int> buffer = new(capacity, elements);
133
- Assert.IsTrue(elements.SequenceEqual(buffer));
134
- }
135
- }
136
-
137
- [Test]
138
- public void InitialElementsEmptyInput()
139
- {
140
- for (int i = 0; i < NumTries; ++i)
141
- {
142
- int capacity = PRNG.Instance.Next(100, 1_000);
143
- CyclicBuffer<int> buffer = new(capacity, Array.Empty<int>());
144
- Assert.IsTrue(Array.Empty<int>().SequenceEqual(buffer));
145
- }
146
- }
147
-
148
- [Test]
149
- public void NormalAndWrappingBehavior()
150
- {
151
- LinkedList<int> expected = new();
152
- for (int i = 0; i < NumTries; ++i)
153
- {
154
- int capacity = PRNG.Instance.Next(100, 1_000);
155
- CyclicBuffer<int> buffer = new(capacity);
156
- CollectionAssert.AreEquivalent(Array.Empty<int>(), buffer);
157
- expected.Clear();
158
- for (int j = 0; j < capacity * CapacityMultiplier; ++j)
159
- {
160
- int newValue = PRNG.Instance.Next();
161
- expected.AddLast(newValue);
162
- while (capacity < expected.Count)
163
- {
164
- expected.RemoveFirst();
165
- }
166
- buffer.Add(newValue);
167
- Assert.AreEqual(expected.Count, buffer.Count);
168
- if (!expected.SequenceEqual(buffer))
169
- {
170
- Assert.Fail(
171
- $"Failure at iteration {i}, j={j}, capacity={buffer.Capacity}, "
172
- + $"capacityMultiplier={CapacityMultiplier}\n"
173
- + $"Expected: [{string.Join(",", expected)}], Actual: [{string.Join(",", buffer)}]"
174
- );
175
- }
176
- }
177
-
178
- foreach (int item in expected)
179
- {
180
- Assert.IsTrue(buffer.Contains(item));
181
- }
182
-
183
- for (int j = 0; j < NumTries; ++j)
184
- {
185
- Assert.IsFalse(buffer.Contains(PRNG.Instance.Next(int.MinValue, -1)));
186
- }
187
- }
188
- }
189
-
190
- [Test]
191
- public void ClearOk()
192
- {
193
- HashSet<int> seen = new();
194
- for (int i = 0; i < NumTries; ++i)
195
- {
196
- int capacity = PRNG.Instance.Next(100, 1_000);
197
- CyclicBuffer<int> buffer = new(capacity);
198
- float fillPercent = PRNG.Instance.NextFloat(0.5f, 1.5f);
199
- seen.Clear();
200
- for (int j = 0; j < capacity * fillPercent; ++j)
201
- {
202
- int value = PRNG.Instance.Next();
203
- seen.Add(value);
204
- buffer.Add(value);
205
- }
206
-
207
- Assert.AreNotEqual(0, buffer.Count);
208
- Assert.IsFalse(Array.Empty<int>().SequenceEqual(buffer));
209
- buffer.Clear();
210
-
211
- Assert.AreEqual(0, buffer.Count);
212
- Assert.AreEqual(capacity, buffer.Capacity);
213
- Assert.IsTrue(Array.Empty<int>().SequenceEqual(buffer));
214
-
215
- // Make sure our data is actually cleaned up, none of our input data should be "Contained"
216
- foreach (int value in seen)
217
- {
218
- Assert.IsFalse(buffer.Contains(value));
219
- }
220
- }
221
- }
222
-
223
- [Test]
224
- public void ResizeFullOk()
225
- {
226
- for (int i = 0; i < NumTries; ++i)
227
- {
228
- int capacity = PRNG.Instance.Next(100, 1_000);
229
- CyclicBuffer<int> buffer = new(capacity);
230
- float fillPercent = PRNG.Instance.NextFloat(1f, 2f);
231
- float capacityPercent = PRNG.Instance.NextFloat(0.3f, 0.9f);
232
- for (int j = 0; j < capacity * fillPercent; ++j)
233
- {
234
- int value = PRNG.Instance.Next();
235
- buffer.Add(value);
236
- }
237
-
238
- int[] values = buffer.ToArray();
239
-
240
- int newCapacity = Math.Max(0, (int)(capacity * capacityPercent));
241
- buffer.Resize(newCapacity);
242
- int[] newValues = buffer.ToArray();
243
- Assert.AreEqual(newCapacity, buffer.Capacity);
244
- Assert.AreEqual(newCapacity, newValues.Length);
245
- Assert.That(values.Take(newCapacity), Is.EqualTo(newValues));
246
-
247
- buffer.Add(1);
248
- buffer.Add(2);
249
- int[] afterAddition = buffer.ToArray();
250
- Assert.That(afterAddition, Is.EqualTo(newValues.Skip(2).Concat(new[] { 1, 2 })));
251
-
252
- newCapacity = 0;
253
- buffer.Resize(newCapacity);
254
- newValues = buffer.ToArray();
255
- Assert.AreEqual(newCapacity, buffer.Capacity);
256
- Assert.AreEqual(newCapacity, newValues.Length);
257
- }
258
- }
259
-
260
- [Test]
261
- public void ResizePartialOk()
262
- {
263
- for (int i = 0; i < NumTries; ++i)
264
- {
265
- int capacity = PRNG.Instance.Next(100, 1_000);
266
- CyclicBuffer<int> buffer = new(capacity);
267
- float fillPercent = PRNG.Instance.NextFloat(0.3f, 0.9f);
268
- float capacityPercent = PRNG.Instance.NextFloat(0.3f, 0.9f);
269
- int filled = (int)(capacity * fillPercent);
270
- for (int j = 0; j < filled; ++j)
271
- {
272
- int value = PRNG.Instance.Next();
273
- buffer.Add(value);
274
- }
275
-
276
- int[] values = buffer.ToArray();
277
-
278
- int newCapacity = Math.Max(0, (int)(capacity * capacityPercent));
279
- buffer.Resize(newCapacity);
280
- int[] newValues = buffer.ToArray();
281
- Assert.AreEqual(newCapacity, buffer.Capacity);
282
- Assert.AreEqual(Math.Min(filled, newCapacity), newValues.Length);
283
- Assert.That(values.Take(newCapacity), Is.EqualTo(newValues));
284
-
285
- buffer.Add(1);
286
- buffer.Add(2);
287
- int[] afterAddition = buffer.ToArray();
288
- if (newCapacity <= filled)
289
- {
290
- Assert.That(
291
- afterAddition,
292
- Is.EqualTo(newValues.Skip(2).Concat(new[] { 1, 2 })),
293
- $"Resize failed for iteration {i}, fillPercent {fillPercent:0.00}, capacityPercent: {capacityPercent:0.00}. "
294
- + $"Capacity: {capacity}, newCapacity: {newCapacity}, filled: {filled}."
295
- );
296
- }
297
- else if (newCapacity == filled + 1)
298
- {
299
- Assert.That(
300
- afterAddition,
301
- Is.EqualTo(newValues.Skip(1).Concat(new[] { 1, 2 })),
302
- $"Resize failed for iteration {i}, fillPercent {fillPercent:0.00}, capacityPercent: {capacityPercent:0.00}. "
303
- + $"Capacity: {capacity}, newCapacity: {newCapacity}, filled: {filled}."
304
- );
305
- }
306
- else
307
- {
308
- Assert.That(
309
- afterAddition,
310
- Is.EqualTo(newValues.Concat(new[] { 1, 2 })),
311
- $"Resize failed for iteration {i}, fillPercent {fillPercent:0.00}, capacityPercent: {capacityPercent:0.00}. "
312
- + $"Capacity: {capacity}, newCapacity: {newCapacity}, filled: {filled}."
313
- );
314
- }
315
-
316
- newCapacity = 0;
317
- buffer.Resize(newCapacity);
318
- newValues = buffer.ToArray();
319
- Assert.AreEqual(newCapacity, buffer.Capacity);
320
- Assert.AreEqual(newCapacity, newValues.Length);
321
- }
322
- }
323
- }
324
- }
1
+ namespace WallstopStudios.UnityHelpers.Tests.DataStructures
2
+ {
3
+ using System;
4
+ using System.Collections.Generic;
5
+ using System.Linq;
6
+ using NUnit.Framework;
7
+ using WallstopStudios.UnityHelpers.Core.DataStructure;
8
+ using WallstopStudios.UnityHelpers.Core.Random;
9
+
10
+ public sealed class CyclicBufferTests
11
+ {
12
+ private const int NumTries = 100;
13
+ private const int CapacityMultiplier = 3;
14
+
15
+ [Test]
16
+ public void InvalidCapacity()
17
+ {
18
+ Assert.Throws<ArgumentException>(() => new CyclicBuffer<int>(-1));
19
+ Assert.Throws<ArgumentException>(() => new CyclicBuffer<int>(int.MinValue));
20
+ for (int i = 0; i < NumTries; i++)
21
+ {
22
+ Assert.Throws<ArgumentException>(() =>
23
+ new CyclicBuffer<int>(PRNG.Instance.Next(int.MinValue, -1))
24
+ );
25
+ }
26
+ }
27
+
28
+ [Test]
29
+ public void CapacityInitializedOk()
30
+ {
31
+ for (int i = 0; i < NumTries; i++)
32
+ {
33
+ int capacity = PRNG.Instance.Next(1, int.MaxValue);
34
+ CyclicBuffer<int> buffer = new(capacity);
35
+ Assert.AreEqual(capacity, buffer.Capacity);
36
+ }
37
+ }
38
+
39
+ [Test]
40
+ public void CountInitializedOk()
41
+ {
42
+ for (int i = 0; i < NumTries; i++)
43
+ {
44
+ int capacity = PRNG.Instance.Next(1, int.MaxValue);
45
+ CyclicBuffer<int> buffer = new(capacity);
46
+ Assert.AreEqual(0, buffer.Count);
47
+ }
48
+ }
49
+
50
+ [Test]
51
+ public void ZeroCapacityOk()
52
+ {
53
+ CyclicBuffer<int> buffer = new(0);
54
+ CollectionAssert.AreEquivalent(Array.Empty<int>(), buffer);
55
+ for (int i = 0; i < NumTries; ++i)
56
+ {
57
+ buffer.Add(PRNG.Instance.Next());
58
+ CollectionAssert.AreEquivalent(Array.Empty<int>(), buffer);
59
+ }
60
+ }
61
+
62
+ [Test]
63
+ public void IntMaxCapacityOk()
64
+ {
65
+ CyclicBuffer<int> buffer = new(int.MaxValue);
66
+ CollectionAssert.AreEquivalent(Array.Empty<int>(), buffer);
67
+ const int tries = 50;
68
+ List<int> expected = new(tries);
69
+ for (int i = 0; i < tries; ++i)
70
+ {
71
+ int value = PRNG.Instance.Next();
72
+ buffer.Add(value);
73
+ expected.Add(value);
74
+ if (!expected.SequenceEqual(buffer))
75
+ {
76
+ Assert.Fail(
77
+ $"Failure at iteration {i}, capacity={buffer.Capacity}, "
78
+ + $"capacityMultiplier={CapacityMultiplier}\n"
79
+ + $"Expected: [{string.Join(",", expected)}], Actual: [{string.Join(",", buffer)}]"
80
+ );
81
+ }
82
+ }
83
+ }
84
+
85
+ [Test]
86
+ public void OneCapacityOk()
87
+ {
88
+ CyclicBuffer<int> buffer = new(1);
89
+ CollectionAssert.AreEquivalent(Array.Empty<int>(), buffer);
90
+ int[] expected = new int[1];
91
+ for (int i = 0; i < NumTries; ++i)
92
+ {
93
+ int value = PRNG.Instance.Next();
94
+ buffer.Add(value);
95
+ expected[0] = value;
96
+ CollectionAssert.AreEquivalent(expected, buffer);
97
+ }
98
+ }
99
+
100
+ [Test]
101
+ public void InitialElementsVariableSize()
102
+ {
103
+ for (int i = 0; i < NumTries; ++i)
104
+ {
105
+ int capacity = PRNG.Instance.Next(100, 1_000);
106
+ int[] elements = Enumerable
107
+ .Range(0, (int)(capacity * PRNG.Instance.NextFloat(0.5f, 1.5f)))
108
+ .Select(_ => PRNG.Instance.Next())
109
+ .ToArray();
110
+ CyclicBuffer<int> buffer = new(capacity, elements);
111
+ if (capacity < elements.Length)
112
+ {
113
+ Assert.IsTrue(elements.Skip(elements.Length - capacity).SequenceEqual(buffer));
114
+ }
115
+ else
116
+ {
117
+ Assert.IsTrue(elements.SequenceEqual(buffer));
118
+ }
119
+ }
120
+ }
121
+
122
+ [Test]
123
+ public void InitialElementsSizeSameAsCapacity()
124
+ {
125
+ for (int i = 0; i < NumTries; ++i)
126
+ {
127
+ int capacity = PRNG.Instance.Next(100, 1_000);
128
+ int[] elements = Enumerable
129
+ .Range(0, capacity)
130
+ .Select(_ => PRNG.Instance.Next())
131
+ .ToArray();
132
+ CyclicBuffer<int> buffer = new(capacity, elements);
133
+ Assert.IsTrue(elements.SequenceEqual(buffer));
134
+ }
135
+ }
136
+
137
+ [Test]
138
+ public void InitialElementsEmptyInput()
139
+ {
140
+ for (int i = 0; i < NumTries; ++i)
141
+ {
142
+ int capacity = PRNG.Instance.Next(100, 1_000);
143
+ CyclicBuffer<int> buffer = new(capacity, Array.Empty<int>());
144
+ Assert.IsTrue(Array.Empty<int>().SequenceEqual(buffer));
145
+ }
146
+ }
147
+
148
+ [Test]
149
+ public void NormalAndWrappingBehavior()
150
+ {
151
+ LinkedList<int> expected = new();
152
+ for (int i = 0; i < NumTries; ++i)
153
+ {
154
+ int capacity = PRNG.Instance.Next(100, 1_000);
155
+ CyclicBuffer<int> buffer = new(capacity);
156
+ CollectionAssert.AreEquivalent(Array.Empty<int>(), buffer);
157
+ expected.Clear();
158
+ for (int j = 0; j < capacity * CapacityMultiplier; ++j)
159
+ {
160
+ int newValue = PRNG.Instance.Next();
161
+ expected.AddLast(newValue);
162
+ while (capacity < expected.Count)
163
+ {
164
+ expected.RemoveFirst();
165
+ }
166
+ buffer.Add(newValue);
167
+ Assert.AreEqual(expected.Count, buffer.Count);
168
+ if (!expected.SequenceEqual(buffer))
169
+ {
170
+ Assert.Fail(
171
+ $"Failure at iteration {i}, j={j}, capacity={buffer.Capacity}, "
172
+ + $"capacityMultiplier={CapacityMultiplier}\n"
173
+ + $"Expected: [{string.Join(",", expected)}], Actual: [{string.Join(",", buffer)}]"
174
+ );
175
+ }
176
+ }
177
+
178
+ foreach (int item in expected)
179
+ {
180
+ Assert.IsTrue(buffer.Contains(item));
181
+ }
182
+
183
+ for (int j = 0; j < NumTries; ++j)
184
+ {
185
+ Assert.IsFalse(buffer.Contains(PRNG.Instance.Next(int.MinValue, -1)));
186
+ }
187
+ }
188
+ }
189
+
190
+ [Test]
191
+ public void ClearOk()
192
+ {
193
+ HashSet<int> seen = new();
194
+ for (int i = 0; i < NumTries; ++i)
195
+ {
196
+ int capacity = PRNG.Instance.Next(100, 1_000);
197
+ CyclicBuffer<int> buffer = new(capacity);
198
+ float fillPercent = PRNG.Instance.NextFloat(0.5f, 1.5f);
199
+ seen.Clear();
200
+ for (int j = 0; j < capacity * fillPercent; ++j)
201
+ {
202
+ int value = PRNG.Instance.Next();
203
+ seen.Add(value);
204
+ buffer.Add(value);
205
+ }
206
+
207
+ Assert.AreNotEqual(0, buffer.Count);
208
+ Assert.IsFalse(Array.Empty<int>().SequenceEqual(buffer));
209
+ buffer.Clear();
210
+
211
+ Assert.AreEqual(0, buffer.Count);
212
+ Assert.AreEqual(capacity, buffer.Capacity);
213
+ Assert.IsTrue(Array.Empty<int>().SequenceEqual(buffer));
214
+
215
+ // Make sure our data is actually cleaned up, none of our input data should be "Contained"
216
+ foreach (int value in seen)
217
+ {
218
+ Assert.IsFalse(buffer.Contains(value));
219
+ }
220
+ }
221
+ }
222
+
223
+ [Test]
224
+ public void ResizeFullOk()
225
+ {
226
+ for (int i = 0; i < NumTries; ++i)
227
+ {
228
+ int capacity = PRNG.Instance.Next(100, 1_000);
229
+ CyclicBuffer<int> buffer = new(capacity);
230
+ float fillPercent = PRNG.Instance.NextFloat(1f, 2f);
231
+ float capacityPercent = PRNG.Instance.NextFloat(0.3f, 0.9f);
232
+ for (int j = 0; j < capacity * fillPercent; ++j)
233
+ {
234
+ int value = PRNG.Instance.Next();
235
+ buffer.Add(value);
236
+ }
237
+
238
+ int[] values = buffer.ToArray();
239
+
240
+ int newCapacity = Math.Max(0, (int)(capacity * capacityPercent));
241
+ buffer.Resize(newCapacity);
242
+ int[] newValues = buffer.ToArray();
243
+ Assert.AreEqual(newCapacity, buffer.Capacity);
244
+ Assert.AreEqual(newCapacity, newValues.Length);
245
+ // After shrinking, keep the most recent entries
246
+ Assert.That(values.Skip(values.Length - newCapacity), Is.EqualTo(newValues));
247
+
248
+ buffer.Add(1);
249
+ buffer.Add(2);
250
+ int[] afterAddition = buffer.ToArray();
251
+ Assert.That(afterAddition, Is.EqualTo(newValues.Skip(2).Concat(new[] { 1, 2 })));
252
+
253
+ newCapacity = 0;
254
+ buffer.Resize(newCapacity);
255
+ newValues = buffer.ToArray();
256
+ Assert.AreEqual(newCapacity, buffer.Capacity);
257
+ Assert.AreEqual(newCapacity, newValues.Length);
258
+ }
259
+ }
260
+
261
+ [Test]
262
+ public void ResizePartialOk()
263
+ {
264
+ for (int i = 0; i < NumTries; ++i)
265
+ {
266
+ int capacity = PRNG.Instance.Next(100, 1_000);
267
+ CyclicBuffer<int> buffer = new(capacity);
268
+ float fillPercent = PRNG.Instance.NextFloat(0.3f, 0.9f);
269
+ float capacityPercent = PRNG.Instance.NextFloat(0.3f, 0.9f);
270
+ int filled = (int)(capacity * fillPercent);
271
+ for (int j = 0; j < filled; ++j)
272
+ {
273
+ int value = PRNG.Instance.Next();
274
+ buffer.Add(value);
275
+ }
276
+
277
+ int[] values = buffer.ToArray();
278
+
279
+ int newCapacity = Math.Max(0, (int)(capacity * capacityPercent));
280
+ buffer.Resize(newCapacity);
281
+ int[] newValues = buffer.ToArray();
282
+ Assert.AreEqual(newCapacity, buffer.Capacity);
283
+ Assert.AreEqual(Math.Min(filled, newCapacity), newValues.Length);
284
+ // After shrinking, keep the most recent entries from the prior contents
285
+ Assert.That(
286
+ values.Skip(Math.Max(0, values.Length - newCapacity)),
287
+ Is.EqualTo(newValues)
288
+ );
289
+
290
+ buffer.Add(1);
291
+ buffer.Add(2);
292
+ int[] afterAddition = buffer.ToArray();
293
+ if (newCapacity <= filled)
294
+ {
295
+ Assert.That(
296
+ afterAddition,
297
+ Is.EqualTo(newValues.Skip(2).Concat(new[] { 1, 2 })),
298
+ $"Resize failed for iteration {i}, fillPercent {fillPercent:0.00}, capacityPercent: {capacityPercent:0.00}. "
299
+ + $"Capacity: {capacity}, newCapacity: {newCapacity}, filled: {filled}."
300
+ );
301
+ }
302
+ else if (newCapacity == filled + 1)
303
+ {
304
+ Assert.That(
305
+ afterAddition,
306
+ Is.EqualTo(newValues.Skip(1).Concat(new[] { 1, 2 })),
307
+ $"Resize failed for iteration {i}, fillPercent {fillPercent:0.00}, capacityPercent: {capacityPercent:0.00}. "
308
+ + $"Capacity: {capacity}, newCapacity: {newCapacity}, filled: {filled}."
309
+ );
310
+ }
311
+ else
312
+ {
313
+ Assert.That(
314
+ afterAddition,
315
+ Is.EqualTo(newValues.Concat(new[] { 1, 2 })),
316
+ $"Resize failed for iteration {i}, fillPercent {fillPercent:0.00}, capacityPercent: {capacityPercent:0.00}. "
317
+ + $"Capacity: {capacity}, newCapacity: {newCapacity}, filled: {filled}."
318
+ );
319
+ }
320
+
321
+ newCapacity = 0;
322
+ buffer.Resize(newCapacity);
323
+ newValues = buffer.ToArray();
324
+ Assert.AreEqual(newCapacity, buffer.Capacity);
325
+ Assert.AreEqual(newCapacity, newValues.Length);
326
+ }
327
+ }
328
+
329
+ [Test]
330
+ public void ResizeInvalidCapacity()
331
+ {
332
+ CyclicBuffer<int> buffer = new(10) { 1, 2 };
333
+
334
+ Assert.Throws<ArgumentException>(() => buffer.Resize(-1));
335
+ Assert.Throws<ArgumentException>(() => buffer.Resize(int.MinValue));
336
+
337
+ // Verify buffer state is unchanged after exception
338
+ Assert.AreEqual(10, buffer.Capacity);
339
+ Assert.AreEqual(2, buffer.Count);
340
+ }
341
+
342
+ [Test]
343
+ public void ResizeToSameCapacity()
344
+ {
345
+ CyclicBuffer<int> buffer = new(10) { 1, 2, 3 };
346
+
347
+ buffer.Resize(10);
348
+
349
+ Assert.AreEqual(10, buffer.Capacity);
350
+ Assert.AreEqual(3, buffer.Count);
351
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 1, 2, 3 }));
352
+ }
353
+
354
+ [Test]
355
+ public void ResizeUpwardsPreservesData()
356
+ {
357
+ CyclicBuffer<int> buffer = new(5);
358
+ for (int i = 1; i <= 10; i++)
359
+ {
360
+ buffer.Add(i);
361
+ }
362
+
363
+ int[] beforeResize = buffer.ToArray();
364
+ Assert.That(beforeResize, Is.EqualTo(new[] { 6, 7, 8, 9, 10 }));
365
+
366
+ buffer.Resize(10);
367
+
368
+ Assert.AreEqual(10, buffer.Capacity);
369
+ Assert.AreEqual(5, buffer.Count);
370
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 6, 7, 8, 9, 10 }));
371
+
372
+ buffer.Add(11);
373
+ buffer.Add(12);
374
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 6, 7, 8, 9, 10, 11, 12 }));
375
+ }
376
+
377
+ [Test]
378
+ public void IndexerGet()
379
+ {
380
+ CyclicBuffer<int> buffer = new(5) { 1, 2, 3 };
381
+
382
+ Assert.AreEqual(1, buffer[0]);
383
+ Assert.AreEqual(2, buffer[1]);
384
+ Assert.AreEqual(3, buffer[2]);
385
+
386
+ // After wraparound
387
+ buffer.Add(4);
388
+ buffer.Add(5);
389
+ buffer.Add(6); // Should overwrite 1
390
+
391
+ Assert.AreEqual(2, buffer[0]);
392
+ Assert.AreEqual(3, buffer[1]);
393
+ Assert.AreEqual(4, buffer[2]);
394
+ Assert.AreEqual(5, buffer[3]);
395
+ Assert.AreEqual(6, buffer[4]);
396
+ }
397
+
398
+ [Test]
399
+ public void IndexerSet()
400
+ {
401
+ CyclicBuffer<int> buffer = new(5) { 1, 2, 3 };
402
+
403
+ buffer[0] = 10;
404
+ buffer[1] = 20;
405
+ buffer[2] = 30;
406
+
407
+ Assert.AreEqual(10, buffer[0]);
408
+ Assert.AreEqual(20, buffer[1]);
409
+ Assert.AreEqual(30, buffer[2]);
410
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 10, 20, 30 }));
411
+
412
+ // After wraparound
413
+ buffer.Add(4);
414
+ buffer.Add(5);
415
+ buffer.Add(6);
416
+
417
+ buffer[0] = 100;
418
+ buffer[4] = 200;
419
+
420
+ Assert.AreEqual(100, buffer[0]);
421
+ Assert.AreEqual(200, buffer[4]);
422
+ }
423
+
424
+ [Test]
425
+ public void IndexerGetOutOfBounds()
426
+ {
427
+ CyclicBuffer<int> buffer = new(5) { 1, 2 };
428
+
429
+ Assert.Throws<IndexOutOfRangeException>(() =>
430
+ {
431
+ _ = buffer[-1];
432
+ });
433
+ Assert.Throws<IndexOutOfRangeException>(() =>
434
+ {
435
+ _ = buffer[2];
436
+ });
437
+ Assert.Throws<IndexOutOfRangeException>(() =>
438
+ {
439
+ _ = buffer[5];
440
+ });
441
+ Assert.Throws<IndexOutOfRangeException>(() =>
442
+ {
443
+ _ = buffer[int.MaxValue];
444
+ });
445
+ Assert.Throws<IndexOutOfRangeException>(() =>
446
+ {
447
+ _ = buffer[int.MinValue];
448
+ });
449
+ }
450
+
451
+ [Test]
452
+ public void IndexerSetOutOfBounds()
453
+ {
454
+ CyclicBuffer<int> buffer = new(5) { 1, 2 };
455
+
456
+ Assert.Throws<IndexOutOfRangeException>(() => buffer[-1] = 10);
457
+ Assert.Throws<IndexOutOfRangeException>(() => buffer[2] = 10);
458
+ Assert.Throws<IndexOutOfRangeException>(() => buffer[5] = 10);
459
+ Assert.Throws<IndexOutOfRangeException>(() => buffer[int.MaxValue] = 10);
460
+ Assert.Throws<IndexOutOfRangeException>(() => buffer[int.MinValue] = 10);
461
+ }
462
+
463
+ [Test]
464
+ public void IndexerOnEmptyBuffer()
465
+ {
466
+ CyclicBuffer<int> buffer = new(5);
467
+
468
+ Assert.Throws<IndexOutOfRangeException>(() =>
469
+ {
470
+ _ = buffer[0];
471
+ });
472
+ Assert.Throws<IndexOutOfRangeException>(() => buffer[0] = 10);
473
+ }
474
+
475
+ [Test]
476
+ public void RemoveElement()
477
+ {
478
+ CyclicBuffer<int> buffer = new(5) { 1, 2, 3 };
479
+
480
+ bool removed = buffer.Remove(2);
481
+
482
+ Assert.IsTrue(removed);
483
+ Assert.AreEqual(2, buffer.Count);
484
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 1, 3 }));
485
+ Assert.IsFalse(buffer.Contains(2));
486
+ }
487
+
488
+ [Test]
489
+ public void RemoveFirstElement()
490
+ {
491
+ CyclicBuffer<int> buffer = new(5) { 1, 2, 3 };
492
+
493
+ bool removed = buffer.Remove(1);
494
+
495
+ Assert.IsTrue(removed);
496
+ Assert.AreEqual(2, buffer.Count);
497
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 2, 3 }));
498
+ }
499
+
500
+ [Test]
501
+ public void RemoveLastElement()
502
+ {
503
+ CyclicBuffer<int> buffer = new(5) { 1, 2, 3 };
504
+
505
+ bool removed = buffer.Remove(3);
506
+
507
+ Assert.IsTrue(removed);
508
+ Assert.AreEqual(2, buffer.Count);
509
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 1, 2 }));
510
+ }
511
+
512
+ [Test]
513
+ public void RemoveNonExistentElement()
514
+ {
515
+ CyclicBuffer<int> buffer = new(5) { 1, 2, 3 };
516
+
517
+ bool removed = buffer.Remove(10);
518
+
519
+ Assert.IsFalse(removed);
520
+ Assert.AreEqual(3, buffer.Count);
521
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 1, 2, 3 }));
522
+ }
523
+
524
+ [Test]
525
+ public void RemoveFromEmptyBuffer()
526
+ {
527
+ CyclicBuffer<int> buffer = new(5);
528
+
529
+ bool removed = buffer.Remove(1);
530
+
531
+ Assert.IsFalse(removed);
532
+ Assert.AreEqual(0, buffer.Count);
533
+ }
534
+
535
+ [Test]
536
+ public void RemoveOnlyElement()
537
+ {
538
+ CyclicBuffer<int> buffer = new(5) { 1 };
539
+
540
+ bool removed = buffer.Remove(1);
541
+
542
+ Assert.IsTrue(removed);
543
+ Assert.AreEqual(0, buffer.Count);
544
+ Assert.That(buffer.ToArray(), Is.EqualTo(Array.Empty<int>()));
545
+ }
546
+
547
+ [Test]
548
+ public void RemoveWithCustomComparer()
549
+ {
550
+ CyclicBuffer<string> buffer = new(5) { "Hello", "World", "HELLO" };
551
+
552
+ bool removed = buffer.Remove("hello", StringComparer.OrdinalIgnoreCase);
553
+
554
+ Assert.IsTrue(removed);
555
+ Assert.AreEqual(2, buffer.Count);
556
+ // Should remove first match ("Hello")
557
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { "World", "HELLO" }));
558
+ }
559
+
560
+ [Test]
561
+ public void RemoveWithNullComparer()
562
+ {
563
+ CyclicBuffer<int> buffer = new(5) { 1, 2, 3 };
564
+
565
+ bool removed = buffer.Remove(2, null);
566
+
567
+ Assert.IsTrue(removed);
568
+ Assert.AreEqual(2, buffer.Count);
569
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 1, 3 }));
570
+ }
571
+
572
+ [Test]
573
+ public void RemoveNullValue()
574
+ {
575
+ CyclicBuffer<string> buffer = new(5) { "A", null, "B" };
576
+
577
+ bool removed = buffer.Remove(null);
578
+
579
+ Assert.IsTrue(removed);
580
+ Assert.AreEqual(2, buffer.Count);
581
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { "A", "B" }));
582
+ }
583
+
584
+ [Test]
585
+ public void RemoveAtEmptyBufferThrows()
586
+ {
587
+ CyclicBuffer<int> buffer = new(5);
588
+
589
+ Assert.Throws<IndexOutOfRangeException>(() => buffer.RemoveAt(0));
590
+ Assert.Throws<IndexOutOfRangeException>(() => buffer.RemoveAt(-1));
591
+ }
592
+
593
+ [Test]
594
+ public void RemoveAtOutOfRangeIndices()
595
+ {
596
+ CyclicBuffer<int> buffer = new(4) { 1, 2, 3 };
597
+
598
+ Assert.Throws<IndexOutOfRangeException>(() => buffer.RemoveAt(-1));
599
+ Assert.Throws<IndexOutOfRangeException>(() => buffer.RemoveAt(3));
600
+ Assert.Throws<IndexOutOfRangeException>(() => buffer.RemoveAt(int.MaxValue));
601
+ }
602
+
603
+ [Test]
604
+ public void RemoveAtSingleElementClearsBuffer()
605
+ {
606
+ CyclicBuffer<int> buffer = new(5) { 42 };
607
+
608
+ buffer.RemoveAt(0);
609
+
610
+ Assert.AreEqual(0, buffer.Count);
611
+ Assert.That(buffer.ToArray(), Is.EqualTo(Array.Empty<int>()));
612
+ Assert.Throws<IndexOutOfRangeException>(() => buffer.RemoveAt(0));
613
+ }
614
+
615
+ [Test]
616
+ public void RemoveAtRemovesFrontElement()
617
+ {
618
+ CyclicBuffer<int> buffer = new(5) { 1, 2, 3, 4 };
619
+
620
+ buffer.RemoveAt(0);
621
+
622
+ Assert.AreEqual(3, buffer.Count);
623
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 2, 3, 4 }));
624
+ }
625
+
626
+ [Test]
627
+ public void RemoveAtRemovesBackElement()
628
+ {
629
+ CyclicBuffer<int> buffer = new(5) { 1, 2, 3, 4 };
630
+
631
+ buffer.RemoveAt(buffer.Count - 1);
632
+
633
+ Assert.AreEqual(3, buffer.Count);
634
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 1, 2, 3 }));
635
+ }
636
+
637
+ [Test]
638
+ public void RemoveAtRemovesMiddleElement()
639
+ {
640
+ CyclicBuffer<int> buffer = new(5) { 1, 2, 3, 4, 5 };
641
+
642
+ buffer.RemoveAt(2);
643
+
644
+ Assert.AreEqual(4, buffer.Count);
645
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 1, 2, 4, 5 }));
646
+ }
647
+
648
+ [Test]
649
+ public void RemoveAtWrappedBufferLeftShiftPreservesOrder()
650
+ {
651
+ CyclicBuffer<int> buffer = new(5);
652
+ for (int i = 1; i <= 8; ++i)
653
+ {
654
+ buffer.Add(i);
655
+ }
656
+
657
+ buffer.RemoveAt(2);
658
+
659
+ Assert.AreEqual(4, buffer.Count);
660
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 4, 5, 7, 8 }));
661
+
662
+ buffer.Add(9);
663
+
664
+ Assert.AreEqual(5, buffer.Count);
665
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 4, 5, 7, 8, 9 }));
666
+ }
667
+
668
+ [Test]
669
+ public void RemoveAtWrappedBufferRightShiftPreservesOrder()
670
+ {
671
+ CyclicBuffer<int> buffer = new(5);
672
+ for (int i = 1; i <= 6; ++i)
673
+ {
674
+ buffer.Add(i);
675
+ }
676
+
677
+ buffer.RemoveAt(3);
678
+
679
+ Assert.AreEqual(4, buffer.Count);
680
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 2, 3, 4, 6 }));
681
+
682
+ buffer.Add(7);
683
+
684
+ Assert.AreEqual(5, buffer.Count);
685
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 2, 3, 4, 6, 7 }));
686
+ }
687
+
688
+ [Test]
689
+ public void RemoveAtRandomizedOperationsMatchList()
690
+ {
691
+ const int capacity = 8;
692
+ CyclicBuffer<int> buffer = new(capacity);
693
+ List<int> expected = new(capacity);
694
+
695
+ for (int i = 0; i < 256; ++i)
696
+ {
697
+ bool shouldRemove =
698
+ expected.Count > 0 && (expected.Count == capacity || PRNG.Instance.NextBool());
699
+
700
+ if (shouldRemove)
701
+ {
702
+ int index = PRNG.Instance.Next(0, expected.Count);
703
+ buffer.RemoveAt(index);
704
+ expected.RemoveAt(index);
705
+ }
706
+ else
707
+ {
708
+ int value = PRNG.Instance.Next();
709
+ buffer.Add(value);
710
+ if (capacity > 0)
711
+ {
712
+ if (expected.Count == capacity)
713
+ {
714
+ expected.RemoveAt(0);
715
+ }
716
+ expected.Add(value);
717
+ }
718
+ }
719
+
720
+ Assert.AreEqual(expected.Count, buffer.Count);
721
+ Assert.That(buffer.ToArray(), Is.EqualTo(expected));
722
+ }
723
+ }
724
+
725
+ [Test]
726
+ public void RemoveAllMatchingElements()
727
+ {
728
+ CyclicBuffer<int> buffer = new(10) { 1, 2, 3, 2, 4, 2 };
729
+
730
+ int removed = buffer.RemoveAll(x => x == 2);
731
+
732
+ Assert.AreEqual(3, removed);
733
+ Assert.AreEqual(3, buffer.Count);
734
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 1, 3, 4 }));
735
+ }
736
+
737
+ [Test]
738
+ public void RemoveAllNoMatches()
739
+ {
740
+ CyclicBuffer<int> buffer = new(5) { 1, 2, 3 };
741
+
742
+ int removed = buffer.RemoveAll(x => x == 10);
743
+
744
+ Assert.AreEqual(0, removed);
745
+ Assert.AreEqual(3, buffer.Count);
746
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 1, 2, 3 }));
747
+ }
748
+
749
+ [Test]
750
+ public void RemoveAllFromEmptyBuffer()
751
+ {
752
+ CyclicBuffer<int> buffer = new(5);
753
+
754
+ int removed = buffer.RemoveAll(x => x > 0);
755
+
756
+ Assert.AreEqual(0, removed);
757
+ Assert.AreEqual(0, buffer.Count);
758
+ }
759
+
760
+ [Test]
761
+ public void RemoveAllElements()
762
+ {
763
+ CyclicBuffer<int> buffer = new(5) { 1, 2, 3 };
764
+
765
+ int removed = buffer.RemoveAll(x => true);
766
+
767
+ Assert.AreEqual(3, removed);
768
+ Assert.AreEqual(0, buffer.Count);
769
+ Assert.That(buffer.ToArray(), Is.EqualTo(Array.Empty<int>()));
770
+ }
771
+
772
+ [Test]
773
+ public void RemoveAllWithComplexPredicate()
774
+ {
775
+ CyclicBuffer<int> buffer = new(10);
776
+ for (int i = 1; i <= 10; i++)
777
+ {
778
+ buffer.Add(i);
779
+ }
780
+
781
+ int removed = buffer.RemoveAll(x => x % 2 == 0 || x > 8);
782
+
783
+ Assert.AreEqual(6, removed); // 2, 4, 6, 8, 9, 10
784
+ Assert.AreEqual(4, buffer.Count);
785
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 1, 3, 5, 7 }));
786
+ }
787
+
788
+ [Test]
789
+ public void RemoveAllFirstElement()
790
+ {
791
+ CyclicBuffer<int> buffer = new(5) { 1, 2, 3, 4 };
792
+
793
+ int removed = buffer.RemoveAll(x => x == 1);
794
+
795
+ Assert.AreEqual(1, removed);
796
+ Assert.AreEqual(3, buffer.Count);
797
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 2, 3, 4 }));
798
+ }
799
+
800
+ [Test]
801
+ public void RemoveAllLastElement()
802
+ {
803
+ CyclicBuffer<int> buffer = new(5) { 1, 2, 3, 4 };
804
+
805
+ int removed = buffer.RemoveAll(x => x == 4);
806
+
807
+ Assert.AreEqual(1, removed);
808
+ Assert.AreEqual(3, buffer.Count);
809
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 1, 2, 3 }));
810
+ }
811
+
812
+ [Test]
813
+ public void RemoveAllMiddleElements()
814
+ {
815
+ CyclicBuffer<int> buffer = new(5) { 1, 2, 3, 4, 5 };
816
+
817
+ int removed = buffer.RemoveAll(x => x >= 2 && x <= 4);
818
+
819
+ Assert.AreEqual(3, removed);
820
+ Assert.AreEqual(2, buffer.Count);
821
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 1, 5 }));
822
+ }
823
+
824
+ [Test]
825
+ public void RemoveAllOnlyElement()
826
+ {
827
+ CyclicBuffer<int> buffer = new(5) { 42 };
828
+
829
+ int removed = buffer.RemoveAll(x => x == 42);
830
+
831
+ Assert.AreEqual(1, removed);
832
+ Assert.AreEqual(0, buffer.Count);
833
+ Assert.That(buffer.ToArray(), Is.EqualTo(Array.Empty<int>()));
834
+ }
835
+
836
+ [Test]
837
+ public void RemoveAllNullPredicate()
838
+ {
839
+ CyclicBuffer<int> buffer = new(5) { 1, 2 };
840
+
841
+ Assert.Throws<ArgumentNullException>(() => buffer.RemoveAll(null));
842
+ }
843
+
844
+ [Test]
845
+ public void RemoveAllWithNullValues()
846
+ {
847
+ CyclicBuffer<string> buffer = new(5) { "A", null, "B", null, "C" };
848
+
849
+ int removed = buffer.RemoveAll(x => x == null);
850
+
851
+ Assert.AreEqual(2, removed);
852
+ Assert.AreEqual(3, buffer.Count);
853
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { "A", "B", "C" }));
854
+ }
855
+
856
+ [Test]
857
+ public void RemoveAllKeepingNullValues()
858
+ {
859
+ CyclicBuffer<string> buffer = new(5) { "A", null, "B", null, "C" };
860
+
861
+ int removed = buffer.RemoveAll(x => x != null);
862
+
863
+ Assert.AreEqual(3, removed);
864
+ Assert.AreEqual(2, buffer.Count);
865
+ Assert.That(buffer.ToArray(), Is.EqualTo(new string[] { null, null }));
866
+ }
867
+
868
+ [Test]
869
+ public void RemoveAllAlternatingPattern()
870
+ {
871
+ CyclicBuffer<int> buffer = new(10) { 1, 2, 3, 4, 5, 6 };
872
+
873
+ int removed = buffer.RemoveAll(x => x % 2 == 0);
874
+
875
+ Assert.AreEqual(3, removed);
876
+ Assert.AreEqual(3, buffer.Count);
877
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 1, 3, 5 }));
878
+ }
879
+
880
+ [Test]
881
+ public void RemoveAllPredicateNeverTrue()
882
+ {
883
+ CyclicBuffer<int> buffer = new(5) { 1, 2, 3 };
884
+
885
+ int removed = buffer.RemoveAll(x => x > 100);
886
+
887
+ Assert.AreEqual(0, removed);
888
+ Assert.AreEqual(3, buffer.Count);
889
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 1, 2, 3 }));
890
+ }
891
+
892
+ [Test]
893
+ public void RemoveAllPredicateAlwaysTrue()
894
+ {
895
+ CyclicBuffer<int> buffer = new(5) { 1, 2, 3, 4 };
896
+
897
+ int removed = buffer.RemoveAll(x => true);
898
+
899
+ Assert.AreEqual(4, removed);
900
+ Assert.AreEqual(0, buffer.Count);
901
+ Assert.That(buffer.ToArray(), Is.EqualTo(Array.Empty<int>()));
902
+ }
903
+
904
+ [Test]
905
+ public void RemoveAllPredicateAlwaysFalse()
906
+ {
907
+ CyclicBuffer<int> buffer = new(5) { 1, 2, 3 };
908
+
909
+ int removed = buffer.RemoveAll(x => false);
910
+
911
+ Assert.AreEqual(0, removed);
912
+ Assert.AreEqual(3, buffer.Count);
913
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 1, 2, 3 }));
914
+ }
915
+
916
+ [Test]
917
+ public void RemoveAllFromSingleElementBuffer()
918
+ {
919
+ CyclicBuffer<int> buffer = new(1) { 5 };
920
+
921
+ int removed = buffer.RemoveAll(x => x == 5);
922
+
923
+ Assert.AreEqual(1, removed);
924
+ Assert.AreEqual(0, buffer.Count);
925
+ Assert.That(buffer.ToArray(), Is.EqualTo(Array.Empty<int>()));
926
+ }
927
+
928
+ [Test]
929
+ public void RemoveAllFromSingleElementBufferNoMatch()
930
+ {
931
+ CyclicBuffer<int> buffer = new(1) { 5 };
932
+
933
+ int removed = buffer.RemoveAll(x => x == 10);
934
+
935
+ Assert.AreEqual(0, removed);
936
+ Assert.AreEqual(1, buffer.Count);
937
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 5 }));
938
+ }
939
+
940
+ [Test]
941
+ public void RemoveAllFromFullBuffer()
942
+ {
943
+ CyclicBuffer<int> buffer = new(5) { 1, 2, 3, 4, 5 };
944
+
945
+ int removed = buffer.RemoveAll(x => x > 2);
946
+
947
+ Assert.AreEqual(3, removed);
948
+ Assert.AreEqual(2, buffer.Count);
949
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 1, 2 }));
950
+ }
951
+
952
+ [Test]
953
+ public void RemoveAllEntireFullBuffer()
954
+ {
955
+ CyclicBuffer<int> buffer = new(5) { 1, 2, 3, 4, 5 };
956
+
957
+ int removed = buffer.RemoveAll(x => x > 0);
958
+
959
+ Assert.AreEqual(5, removed);
960
+ Assert.AreEqual(0, buffer.Count);
961
+ Assert.That(buffer.ToArray(), Is.EqualTo(Array.Empty<int>()));
962
+ }
963
+
964
+ [Test]
965
+ public void RemoveAllWithWrappedBufferRemoveFirst()
966
+ {
967
+ CyclicBuffer<int> buffer = new(5) { 1, 2, 3, 4, 5, 6 };
968
+
969
+ // Buffer now: [2, 3, 4, 5, 6]
970
+ int removed = buffer.RemoveAll(x => x == 2);
971
+
972
+ Assert.AreEqual(1, removed);
973
+ Assert.AreEqual(4, buffer.Count);
974
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 3, 4, 5, 6 }));
975
+ }
976
+
977
+ [Test]
978
+ public void RemoveAllWithWrappedBufferRemoveLast()
979
+ {
980
+ CyclicBuffer<int> buffer = new(5) { 1, 2, 3, 4, 5, 6 };
981
+
982
+ // Buffer now: [2, 3, 4, 5, 6]
983
+ int removed = buffer.RemoveAll(x => x == 6);
984
+
985
+ Assert.AreEqual(1, removed);
986
+ Assert.AreEqual(4, buffer.Count);
987
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 2, 3, 4, 5 }));
988
+ }
989
+
990
+ [Test]
991
+ public void RemoveAllWithWrappedBufferRemoveMiddle()
992
+ {
993
+ CyclicBuffer<int> buffer = new(5) { 1, 2, 3, 4, 5, 6, 7 };
994
+
995
+ // Buffer now: [3, 4, 5, 6, 7]
996
+ int removed = buffer.RemoveAll(x => x == 5);
997
+
998
+ Assert.AreEqual(1, removed);
999
+ Assert.AreEqual(4, buffer.Count);
1000
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 3, 4, 6, 7 }));
1001
+ }
1002
+
1003
+ [Test]
1004
+ public void RemoveAllWithWrappedBufferMultipleElements()
1005
+ {
1006
+ CyclicBuffer<int> buffer = new(5) { 1, 2, 3, 4, 5, 6, 7, 8 };
1007
+
1008
+ // Buffer now: [4, 5, 6, 7, 8]
1009
+ int removed = buffer.RemoveAll(x => x == 4 || x == 6 || x == 8);
1010
+
1011
+ Assert.AreEqual(3, removed);
1012
+ Assert.AreEqual(2, buffer.Count);
1013
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 5, 7 }));
1014
+ }
1015
+
1016
+ [Test]
1017
+ public void RemoveAllWithDuplicates()
1018
+ {
1019
+ CyclicBuffer<int> buffer = new(10) { 1, 2, 2, 3, 2, 4 };
1020
+
1021
+ int removed = buffer.RemoveAll(x => x == 2);
1022
+
1023
+ Assert.AreEqual(3, removed);
1024
+ Assert.AreEqual(3, buffer.Count);
1025
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 1, 3, 4 }));
1026
+ }
1027
+
1028
+ [Test]
1029
+ public void RemoveAllWithDuplicatesWrapped()
1030
+ {
1031
+ CyclicBuffer<int> buffer = new(5) { 1, 2, 2, 3, 2, 4, 2 };
1032
+
1033
+ // Buffer now: [2, 3, 2, 4, 2]
1034
+ int removed = buffer.RemoveAll(x => x == 2);
1035
+
1036
+ Assert.AreEqual(3, removed);
1037
+ Assert.AreEqual(2, buffer.Count);
1038
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 3, 4 }));
1039
+ }
1040
+
1041
+ [Test]
1042
+ public void RemoveAllThenAdd()
1043
+ {
1044
+ CyclicBuffer<int> buffer = new(5) { 1, 2, 3, 4 };
1045
+
1046
+ int removed = buffer.RemoveAll(x => x % 2 == 0);
1047
+ Assert.AreEqual(2, removed);
1048
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 1, 3 }));
1049
+
1050
+ buffer.Add(5);
1051
+ buffer.Add(6);
1052
+ buffer.Add(7);
1053
+
1054
+ Assert.AreEqual(5, buffer.Count);
1055
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 1, 3, 5, 6, 7 }));
1056
+ }
1057
+
1058
+ [Test]
1059
+ public void RemoveAllMultipleTimes()
1060
+ {
1061
+ CyclicBuffer<int> buffer = new(10) { 1, 2, 3, 4, 5, 6 };
1062
+
1063
+ int removed1 = buffer.RemoveAll(x => x % 2 == 0);
1064
+ Assert.AreEqual(3, removed1);
1065
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 1, 3, 5 }));
1066
+
1067
+ int removed2 = buffer.RemoveAll(x => x > 3);
1068
+ Assert.AreEqual(1, removed2);
1069
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 1, 3 }));
1070
+
1071
+ int removed3 = buffer.RemoveAll(x => x == 1);
1072
+ Assert.AreEqual(1, removed3);
1073
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 3 }));
1074
+ }
1075
+
1076
+ [Test]
1077
+ public void RemoveAllWithZeroCapacityBuffer()
1078
+ {
1079
+ CyclicBuffer<int> buffer = new(0);
1080
+
1081
+ int removed = buffer.RemoveAll(x => true);
1082
+
1083
+ Assert.AreEqual(0, removed);
1084
+ Assert.AreEqual(0, buffer.Count);
1085
+ }
1086
+
1087
+ [Test]
1088
+ public void RemoveAllPreservesOrderOfRemainingElements()
1089
+ {
1090
+ CyclicBuffer<int> buffer = new(10) { 10, 20, 30, 40, 50, 60, 70 };
1091
+
1092
+ int removed = buffer.RemoveAll(x => x == 20 || x == 40 || x == 60);
1093
+
1094
+ Assert.AreEqual(3, removed);
1095
+ Assert.AreEqual(4, buffer.Count);
1096
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 10, 30, 50, 70 }));
1097
+ }
1098
+
1099
+ [Test]
1100
+ public void RemoveAllWithComplexObjectsPredicate()
1101
+ {
1102
+ CyclicBuffer<string> buffer = new(10)
1103
+ {
1104
+ "apple",
1105
+ "banana",
1106
+ "apricot",
1107
+ "cherry",
1108
+ "avocado",
1109
+ };
1110
+
1111
+ int removed = buffer.RemoveAll(x => x.StartsWith("a"));
1112
+
1113
+ Assert.AreEqual(3, removed);
1114
+ Assert.AreEqual(2, buffer.Count);
1115
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { "banana", "cherry" }));
1116
+ }
1117
+
1118
+ [Test]
1119
+ public void RemoveAllAfterMultipleWraparounds()
1120
+ {
1121
+ CyclicBuffer<int> buffer = new(3) { 1, 2, 3, 4, 5, 6, 7, 8 };
1122
+
1123
+ // Buffer now: [6, 7, 8]
1124
+ int removed = buffer.RemoveAll(x => x == 7);
1125
+
1126
+ Assert.AreEqual(1, removed);
1127
+ Assert.AreEqual(2, buffer.Count);
1128
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 6, 8 }));
1129
+ }
1130
+
1131
+ [Test]
1132
+ public void RemoveAllLeavingSingleElement()
1133
+ {
1134
+ CyclicBuffer<int> buffer = new(5) { 1, 2, 3, 4, 5 };
1135
+
1136
+ int removed = buffer.RemoveAll(x => x != 3);
1137
+
1138
+ Assert.AreEqual(4, removed);
1139
+ Assert.AreEqual(1, buffer.Count);
1140
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 3 }));
1141
+ }
1142
+
1143
+ [Test]
1144
+ public void RemoveAllWithCapacityOne()
1145
+ {
1146
+ CyclicBuffer<int> buffer = new(1) { 42 };
1147
+
1148
+ int removed = buffer.RemoveAll(x => x == 42);
1149
+
1150
+ Assert.AreEqual(1, removed);
1151
+ Assert.AreEqual(0, buffer.Count);
1152
+ Assert.That(buffer.ToArray(), Is.EqualTo(Array.Empty<int>()));
1153
+ }
1154
+
1155
+ [Test]
1156
+ public void RemoveAllWithCapacityOneNoMatch()
1157
+ {
1158
+ CyclicBuffer<int> buffer = new(1) { 42 };
1159
+
1160
+ int removed = buffer.RemoveAll(x => x != 42);
1161
+
1162
+ Assert.AreEqual(0, removed);
1163
+ Assert.AreEqual(1, buffer.Count);
1164
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 42 }));
1165
+ }
1166
+
1167
+ [Test]
1168
+ public void RemoveAllPartialBufferBeginning()
1169
+ {
1170
+ CyclicBuffer<int> buffer = new(10) { 1, 2, 3 };
1171
+
1172
+ int removed = buffer.RemoveAll(x => x <= 2);
1173
+
1174
+ Assert.AreEqual(2, removed);
1175
+ Assert.AreEqual(1, buffer.Count);
1176
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 3 }));
1177
+ }
1178
+
1179
+ [Test]
1180
+ public void RemoveAllPartialBufferEnd()
1181
+ {
1182
+ CyclicBuffer<int> buffer = new(10) { 1, 2, 3 };
1183
+
1184
+ int removed = buffer.RemoveAll(x => x >= 2);
1185
+
1186
+ Assert.AreEqual(2, removed);
1187
+ Assert.AreEqual(1, buffer.Count);
1188
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 1 }));
1189
+ }
1190
+
1191
+ [Test]
1192
+ public void RemoveAllConsecutiveElements()
1193
+ {
1194
+ CyclicBuffer<int> buffer = new(10) { 1, 2, 3, 4, 5, 6, 7 };
1195
+
1196
+ int removed = buffer.RemoveAll(x => x >= 3 && x <= 5);
1197
+
1198
+ Assert.AreEqual(3, removed);
1199
+ Assert.AreEqual(4, buffer.Count);
1200
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 1, 2, 6, 7 }));
1201
+ }
1202
+
1203
+ [Test]
1204
+ public void RemoveAllNonConsecutiveElements()
1205
+ {
1206
+ CyclicBuffer<int> buffer = new(10) { 1, 2, 3, 4, 5, 6, 7 };
1207
+
1208
+ int removed = buffer.RemoveAll(x => x == 1 || x == 4 || x == 7);
1209
+
1210
+ Assert.AreEqual(3, removed);
1211
+ Assert.AreEqual(4, buffer.Count);
1212
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 2, 3, 5, 6 }));
1213
+ }
1214
+
1215
+ [Test]
1216
+ public void EnumerationEmpty()
1217
+ {
1218
+ CyclicBuffer<int> buffer = new(5);
1219
+
1220
+ int count = 0;
1221
+ foreach (int item in buffer)
1222
+ {
1223
+ count++;
1224
+ }
1225
+
1226
+ Assert.AreEqual(0, count);
1227
+ }
1228
+
1229
+ [Test]
1230
+ public void EnumerationNormal()
1231
+ {
1232
+ CyclicBuffer<int> buffer = new(5) { 1, 2, 3 };
1233
+
1234
+ List<int> items = new();
1235
+ foreach (int item in buffer)
1236
+ {
1237
+ items.Add(item);
1238
+ }
1239
+
1240
+ Assert.That(items, Is.EqualTo(new[] { 1, 2, 3 }));
1241
+ }
1242
+
1243
+ [Test]
1244
+ public void EnumerationAfterWraparound()
1245
+ {
1246
+ CyclicBuffer<int> buffer = new(3) { 1, 2, 3, 4, 5 };
1247
+
1248
+ List<int> items = new();
1249
+ foreach (int item in buffer)
1250
+ {
1251
+ items.Add(item);
1252
+ }
1253
+
1254
+ Assert.That(items, Is.EqualTo(new[] { 3, 4, 5 }));
1255
+ }
1256
+
1257
+ [Test]
1258
+ public void EnumerationMultipleTimes()
1259
+ {
1260
+ CyclicBuffer<int> buffer = new(3) { 1, 2 };
1261
+
1262
+ for (int i = 0; i < 3; i++)
1263
+ {
1264
+ List<int> items = new();
1265
+ foreach (int item in buffer)
1266
+ {
1267
+ items.Add(item);
1268
+ }
1269
+ Assert.That(items, Is.EqualTo(new[] { 1, 2 }));
1270
+ }
1271
+ }
1272
+
1273
+ [Test]
1274
+ public void EnumeratorReset()
1275
+ {
1276
+ CyclicBuffer<int> buffer = new(5) { 1, 2, 3 };
1277
+
1278
+ using CyclicBuffer<int>.CyclicBufferEnumerator enumerator = buffer.GetEnumerator();
1279
+
1280
+ // First enumeration
1281
+ List<int> firstPass = new();
1282
+ while (enumerator.MoveNext())
1283
+ {
1284
+ firstPass.Add(enumerator.Current);
1285
+ }
1286
+
1287
+ // Reset and enumerate again
1288
+ enumerator.Reset();
1289
+ List<int> secondPass = new();
1290
+ while (enumerator.MoveNext())
1291
+ {
1292
+ secondPass.Add(enumerator.Current);
1293
+ }
1294
+
1295
+ Assert.That(firstPass, Is.EqualTo(new[] { 1, 2, 3 }));
1296
+ Assert.That(secondPass, Is.EqualTo(new[] { 1, 2, 3 }));
1297
+ }
1298
+
1299
+ [Test]
1300
+ public void ContainsNullValue()
1301
+ {
1302
+ CyclicBuffer<string> buffer = new(5) { "A", null, "B" };
1303
+
1304
+ Assert.IsTrue(buffer.Contains(null));
1305
+ Assert.IsTrue(buffer.Contains("A"));
1306
+ Assert.IsTrue(buffer.Contains("B"));
1307
+ Assert.IsFalse(buffer.Contains("C"));
1308
+ }
1309
+
1310
+ [Test]
1311
+ public void ContainsEmptyBuffer()
1312
+ {
1313
+ CyclicBuffer<int> buffer = new(5);
1314
+
1315
+ Assert.IsFalse(buffer.Contains(1));
1316
+ Assert.IsFalse(buffer.Contains(0));
1317
+ }
1318
+
1319
+ [Test]
1320
+ public void ContainsAfterClear()
1321
+ {
1322
+ CyclicBuffer<int> buffer = new(5) { 1, 2, 3 };
1323
+
1324
+ Assert.IsTrue(buffer.Contains(2));
1325
+
1326
+ buffer.Clear();
1327
+
1328
+ Assert.IsFalse(buffer.Contains(1));
1329
+ Assert.IsFalse(buffer.Contains(2));
1330
+ Assert.IsFalse(buffer.Contains(3));
1331
+ }
1332
+
1333
+ [Test]
1334
+ public void AddAfterRemove()
1335
+ {
1336
+ CyclicBuffer<int> buffer = new(5) { 1, 2, 3 };
1337
+
1338
+ buffer.Remove(2);
1339
+ Assert.AreEqual(2, buffer.Count);
1340
+
1341
+ buffer.Add(4);
1342
+ Assert.AreEqual(3, buffer.Count);
1343
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 1, 3, 4 }));
1344
+
1345
+ buffer.Add(5);
1346
+ buffer.Add(6);
1347
+ Assert.AreEqual(5, buffer.Count);
1348
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 1, 3, 4, 5, 6 }));
1349
+ }
1350
+
1351
+ [Test]
1352
+ public void AddAfterRemoveAll()
1353
+ {
1354
+ CyclicBuffer<int> buffer = new(5) { 1, 2, 3, 4 };
1355
+
1356
+ buffer.RemoveAll(x => x % 2 == 0);
1357
+ Assert.AreEqual(2, buffer.Count);
1358
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 1, 3 }));
1359
+
1360
+ buffer.Add(5);
1361
+ buffer.Add(6);
1362
+ buffer.Add(7);
1363
+ Assert.AreEqual(5, buffer.Count);
1364
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 1, 3, 5, 6, 7 }));
1365
+ }
1366
+
1367
+ [Test]
1368
+ public void InitialContentsNull()
1369
+ {
1370
+ CyclicBuffer<int> buffer = new(5, null);
1371
+
1372
+ Assert.AreEqual(5, buffer.Capacity);
1373
+ Assert.AreEqual(0, buffer.Count);
1374
+ Assert.That(buffer.ToArray(), Is.EqualTo(Array.Empty<int>()));
1375
+ }
1376
+
1377
+ [Test]
1378
+ public void InitialContentsWithNullElements()
1379
+ {
1380
+ List<string> initial = new() { "A", null, "B", null, "C" };
1381
+ CyclicBuffer<string> buffer = new(10, initial);
1382
+
1383
+ Assert.AreEqual(5, buffer.Count);
1384
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { "A", null, "B", null, "C" }));
1385
+ Assert.IsTrue(buffer.Contains(null));
1386
+ }
1387
+
1388
+ [Test]
1389
+ public void ResizePreservesOrder()
1390
+ {
1391
+ CyclicBuffer<int> buffer = new(5);
1392
+ for (int i = 1; i <= 8; i++)
1393
+ {
1394
+ buffer.Add(i);
1395
+ }
1396
+
1397
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 4, 5, 6, 7, 8 }));
1398
+
1399
+ buffer.Resize(3);
1400
+ // Shrink should retain most recent elements
1401
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 6, 7, 8 }));
1402
+
1403
+ buffer.Resize(7);
1404
+ Assert.AreEqual(3, buffer.Count);
1405
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 6, 7, 8 }));
1406
+
1407
+ buffer.Add(9);
1408
+ buffer.Add(10);
1409
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 6, 7, 8, 9, 10 }));
1410
+ }
1411
+
1412
+ [Test]
1413
+ public void StressTestMixedOperations()
1414
+ {
1415
+ CyclicBuffer<int> buffer = new(20);
1416
+ List<int> expected = new();
1417
+
1418
+ for (int i = 0; i < 100; i++)
1419
+ {
1420
+ int operation = PRNG.Instance.Next(0, 5);
1421
+
1422
+ switch (operation)
1423
+ {
1424
+ case 0: // Add
1425
+ int value = PRNG.Instance.Next(0, 100);
1426
+ buffer.Add(value);
1427
+ expected.Add(value);
1428
+ while (expected.Count > buffer.Capacity)
1429
+ {
1430
+ expected.RemoveAt(0);
1431
+ }
1432
+ break;
1433
+
1434
+ case 1: // Remove
1435
+ if (expected.Count > 0)
1436
+ {
1437
+ int toRemove = expected[PRNG.Instance.Next(0, expected.Count)];
1438
+ bool removedExpected = expected.Remove(toRemove);
1439
+ bool removedActual = buffer.Remove(toRemove);
1440
+ Assert.AreEqual(removedExpected, removedActual);
1441
+ }
1442
+ break;
1443
+
1444
+ case 2: // Clear
1445
+ buffer.Clear();
1446
+ expected.Clear();
1447
+ break;
1448
+
1449
+ case 3: // RemoveAll even
1450
+ int expectedRemoved = expected.RemoveAll(x => x % 2 == 0);
1451
+ int actualRemoved = buffer.RemoveAll(x => x % 2 == 0);
1452
+ Assert.AreEqual(expectedRemoved, actualRemoved);
1453
+ break;
1454
+
1455
+ case 4: // Indexer set
1456
+ if (expected.Count > 0)
1457
+ {
1458
+ int idx = PRNG.Instance.Next(0, expected.Count);
1459
+ int newValue = PRNG.Instance.Next(0, 100);
1460
+ expected[idx] = newValue;
1461
+ buffer[idx] = newValue;
1462
+ }
1463
+ break;
1464
+ }
1465
+
1466
+ Assert.AreEqual(expected.Count, buffer.Count);
1467
+ Assert.That(
1468
+ buffer.ToArray(),
1469
+ Is.EqualTo(expected.ToArray()),
1470
+ $"Failed at iteration {i}, operation {operation}"
1471
+ );
1472
+ }
1473
+ }
1474
+
1475
+ [Test]
1476
+ public void ZeroCapacityOperations()
1477
+ {
1478
+ CyclicBuffer<int> buffer = new(0);
1479
+
1480
+ Assert.AreEqual(0, buffer.Count);
1481
+ Assert.AreEqual(0, buffer.Capacity);
1482
+
1483
+ buffer.Add(1);
1484
+ Assert.AreEqual(0, buffer.Count);
1485
+
1486
+ buffer.Clear();
1487
+ Assert.AreEqual(0, buffer.Count);
1488
+
1489
+ Assert.IsFalse(buffer.Remove(1));
1490
+ Assert.AreEqual(0, buffer.RemoveAll(x => true));
1491
+ Assert.IsFalse(buffer.Contains(1));
1492
+
1493
+ Assert.Throws<IndexOutOfRangeException>(() =>
1494
+ {
1495
+ int x = buffer[0];
1496
+ });
1497
+ Assert.Throws<IndexOutOfRangeException>(() => buffer[0] = 1);
1498
+
1499
+ int count = 0;
1500
+ foreach (int item in buffer)
1501
+ {
1502
+ count++;
1503
+ }
1504
+ Assert.AreEqual(0, count);
1505
+ }
1506
+
1507
+ [Test]
1508
+ public void FullBufferOperations()
1509
+ {
1510
+ CyclicBuffer<int> buffer = new(3) { 1, 2, 3 };
1511
+
1512
+ Assert.AreEqual(3, buffer.Count);
1513
+ Assert.AreEqual(3, buffer.Capacity);
1514
+
1515
+ // Add more should wrap
1516
+ buffer.Add(4);
1517
+ Assert.AreEqual(3, buffer.Count);
1518
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 2, 3, 4 }));
1519
+
1520
+ // All indexer positions should be accessible
1521
+ for (int i = 0; i < buffer.Count; i++)
1522
+ {
1523
+ Assert.DoesNotThrow(() =>
1524
+ {
1525
+ int x = buffer[i];
1526
+ });
1527
+ Assert.DoesNotThrow(() => buffer[i] = buffer[i] + 10);
1528
+ }
1529
+
1530
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 12, 13, 14 }));
1531
+ }
1532
+
1533
+ [Test]
1534
+ public void RemoveAfterWraparound()
1535
+ {
1536
+ CyclicBuffer<int> buffer = new(5)
1537
+ {
1538
+ // Fill buffer
1539
+ 1,
1540
+ 2,
1541
+ 3,
1542
+ 4,
1543
+ 5,
1544
+ // Cause wraparound
1545
+ 6,
1546
+ 7,
1547
+ };
1548
+
1549
+ // Buffer should now contain: [3, 4, 5, 6, 7]
1550
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 3, 4, 5, 6, 7 }));
1551
+ bool removed = buffer.Remove(5);
1552
+
1553
+ Assert.IsTrue(removed);
1554
+ Assert.AreEqual(4, buffer.Count);
1555
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 3, 4, 6, 7 }));
1556
+
1557
+ buffer.Add(8);
1558
+ Assert.AreEqual(5, buffer.Count);
1559
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 3, 4, 6, 7, 8 }));
1560
+ }
1561
+
1562
+ [Test]
1563
+ public void RemoveAllAfterWraparound()
1564
+ {
1565
+ CyclicBuffer<int> buffer = new(5)
1566
+ {
1567
+ // Fill buffer
1568
+ 1,
1569
+ 2,
1570
+ 3,
1571
+ 4,
1572
+ 5,
1573
+ // Cause wraparound
1574
+ 6,
1575
+ 7,
1576
+ 8,
1577
+ };
1578
+
1579
+ // Buffer should now contain: [4, 5, 6, 7, 8]
1580
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 4, 5, 6, 7, 8 }));
1581
+
1582
+ // Remove all even numbers
1583
+ int removed = buffer.RemoveAll(x => x % 2 == 0);
1584
+
1585
+ Assert.AreEqual(3, removed);
1586
+ Assert.AreEqual(2, buffer.Count);
1587
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 5, 7 }));
1588
+
1589
+ // Add new elements after removeAll
1590
+ buffer.Add(9);
1591
+ buffer.Add(10);
1592
+ Assert.AreEqual(4, buffer.Count);
1593
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 5, 7, 9, 10 }));
1594
+ }
1595
+
1596
+ [Test]
1597
+ public void MultipleOperationsSequence()
1598
+ {
1599
+ CyclicBuffer<int> buffer = new(5)
1600
+ {
1601
+ // Initial adds
1602
+ 1,
1603
+ 2,
1604
+ 3,
1605
+ };
1606
+
1607
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 1, 2, 3 }));
1608
+
1609
+ // Wrap around
1610
+ buffer.Add(4);
1611
+ buffer.Add(5);
1612
+ buffer.Add(6);
1613
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 2, 3, 4, 5, 6 }));
1614
+
1615
+ // Remove from wrapped buffer
1616
+ buffer.Remove(4);
1617
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 2, 3, 5, 6 }));
1618
+
1619
+ // Add after remove
1620
+ buffer.Add(7);
1621
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 2, 3, 5, 6, 7 }));
1622
+
1623
+ // Another wrap
1624
+ buffer.Add(8);
1625
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 3, 5, 6, 7, 8 }));
1626
+
1627
+ // RemoveAll after multiple wraps
1628
+ int removed = buffer.RemoveAll(x => x > 6);
1629
+ Assert.AreEqual(2, removed);
1630
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 3, 5, 6 }));
1631
+
1632
+ // Final add
1633
+ buffer.Add(9);
1634
+ buffer.Add(10);
1635
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 3, 5, 6, 9, 10 }));
1636
+ }
1637
+
1638
+ [Test]
1639
+ public void TryPopFrontExhaustionResetsState()
1640
+ {
1641
+ CyclicBuffer<int> buffer = new(4) { 1, 2, 3, 4 };
1642
+
1643
+ Assert.That(buffer.Count, Is.EqualTo(4));
1644
+
1645
+ Assert.IsTrue(buffer.TryPopFront(out int first));
1646
+ Assert.AreEqual(1, first);
1647
+
1648
+ Assert.IsTrue(buffer.TryPopFront(out int second));
1649
+ Assert.AreEqual(2, second);
1650
+
1651
+ Assert.IsTrue(buffer.TryPopFront(out int third));
1652
+ Assert.AreEqual(3, third);
1653
+
1654
+ Assert.IsTrue(buffer.TryPopFront(out int fourth));
1655
+ Assert.AreEqual(4, fourth);
1656
+
1657
+ Assert.AreEqual(0, buffer.Count);
1658
+ Assert.IsFalse(buffer.TryPopFront(out int emptyFront));
1659
+ Assert.AreEqual(default(int), emptyFront);
1660
+
1661
+ buffer.Add(99);
1662
+ Assert.That(buffer.Count, Is.EqualTo(1));
1663
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 99 }));
1664
+ Assert.AreEqual(99, buffer[0]);
1665
+ }
1666
+
1667
+ [Test]
1668
+ public void TryPopBackExhaustionResetsState()
1669
+ {
1670
+ CyclicBuffer<int> buffer = new(4) { 1, 2, 3, 4 };
1671
+
1672
+ Assert.That(buffer.Count, Is.EqualTo(4));
1673
+
1674
+ Assert.IsTrue(buffer.TryPopBack(out int first));
1675
+ Assert.AreEqual(4, first);
1676
+
1677
+ Assert.IsTrue(buffer.TryPopBack(out int second));
1678
+ Assert.AreEqual(3, second);
1679
+
1680
+ Assert.IsTrue(buffer.TryPopBack(out int third));
1681
+ Assert.AreEqual(2, third);
1682
+
1683
+ Assert.IsTrue(buffer.TryPopBack(out int fourth));
1684
+ Assert.AreEqual(1, fourth);
1685
+
1686
+ Assert.AreEqual(0, buffer.Count);
1687
+ Assert.IsFalse(buffer.TryPopBack(out int emptyBack));
1688
+ Assert.AreEqual(default(int), emptyBack);
1689
+
1690
+ buffer.Add(42);
1691
+ Assert.That(buffer.Count, Is.EqualTo(1));
1692
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 42 }));
1693
+ Assert.AreEqual(42, buffer[0]);
1694
+ }
1695
+
1696
+ [Test]
1697
+ public void TryPopFrontMaintainsOrderAcrossWraps()
1698
+ {
1699
+ CyclicBuffer<int> buffer = new(3) { 0, 1, 2, 3, 4 };
1700
+
1701
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 2, 3, 4 }));
1702
+
1703
+ Assert.IsTrue(buffer.TryPopFront(out int firstFront));
1704
+ Assert.AreEqual(2, firstFront);
1705
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 3, 4 }));
1706
+
1707
+ buffer.Add(5);
1708
+ buffer.Add(6);
1709
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 4, 5, 6 }));
1710
+
1711
+ Assert.IsTrue(buffer.TryPopFront(out int secondFront));
1712
+ Assert.AreEqual(4, secondFront);
1713
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 5, 6 }));
1714
+
1715
+ buffer.Add(7);
1716
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 5, 6, 7 }));
1717
+
1718
+ Assert.IsTrue(buffer.TryPopFront(out int thirdFront));
1719
+ Assert.AreEqual(5, thirdFront);
1720
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 6, 7 }));
1721
+ }
1722
+
1723
+ [Test]
1724
+ public void TryPopBackMaintainsTailAcrossWraps()
1725
+ {
1726
+ CyclicBuffer<int> buffer = new(4) { 10, 11, 12, 13, 14, 15 };
1727
+
1728
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 12, 13, 14, 15 }));
1729
+
1730
+ Assert.IsTrue(buffer.TryPopBack(out int firstBack));
1731
+ Assert.AreEqual(15, firstBack);
1732
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 12, 13, 14 }));
1733
+
1734
+ buffer.Add(16);
1735
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 12, 13, 14, 16 }));
1736
+
1737
+ Assert.IsTrue(buffer.TryPopBack(out int secondBack));
1738
+ Assert.AreEqual(16, secondBack);
1739
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 12, 13, 14 }));
1740
+
1741
+ buffer.Add(17);
1742
+ buffer.Add(18);
1743
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 13, 14, 17, 18 }));
1744
+
1745
+ Assert.IsTrue(buffer.TryPopBack(out int thirdBack));
1746
+ Assert.AreEqual(18, thirdBack);
1747
+ Assert.That(buffer.ToArray(), Is.EqualTo(new[] { 13, 14, 17 }));
1748
+ }
1749
+
1750
+ [Test]
1751
+ public void TryPopOperationsStayInSyncWithReferenceList()
1752
+ {
1753
+ for (int trial = 0; trial < NumTries; trial++)
1754
+ {
1755
+ int capacity = PRNG.Instance.Next(0, 10);
1756
+ CyclicBuffer<int> buffer = new(capacity);
1757
+ List<int> expected = new(capacity > 0 ? capacity : 1);
1758
+
1759
+ int operations = PRNG.Instance.Next(30, 90);
1760
+ for (int step = 0; step < operations; step++)
1761
+ {
1762
+ int action = PRNG.Instance.Next(0, 3);
1763
+ switch (action)
1764
+ {
1765
+ case 0:
1766
+ {
1767
+ int value = PRNG.Instance.Next();
1768
+ buffer.Add(value);
1769
+ if (capacity > 0)
1770
+ {
1771
+ if (expected.Count == capacity)
1772
+ {
1773
+ expected.RemoveAt(0);
1774
+ }
1775
+
1776
+ expected.Add(value);
1777
+ }
1778
+
1779
+ break;
1780
+ }
1781
+ case 1:
1782
+ {
1783
+ bool bufferPopped = buffer.TryPopFront(out int poppedFront);
1784
+ bool expectedPopped = expected.Count > 0;
1785
+
1786
+ Assert.AreEqual(expectedPopped, bufferPopped);
1787
+ if (expectedPopped)
1788
+ {
1789
+ Assert.AreEqual(expected[0], poppedFront);
1790
+ expected.RemoveAt(0);
1791
+ }
1792
+ else
1793
+ {
1794
+ Assert.AreEqual(default(int), poppedFront);
1795
+ }
1796
+
1797
+ break;
1798
+ }
1799
+ default:
1800
+ {
1801
+ bool bufferPopped = buffer.TryPopBack(out int poppedBack);
1802
+ bool expectedPopped = expected.Count > 0;
1803
+
1804
+ Assert.AreEqual(expectedPopped, bufferPopped);
1805
+ if (expectedPopped)
1806
+ {
1807
+ int lastIndex = expected.Count - 1;
1808
+ Assert.AreEqual(expected[lastIndex], poppedBack);
1809
+ expected.RemoveAt(lastIndex);
1810
+ }
1811
+ else
1812
+ {
1813
+ Assert.AreEqual(default(int), poppedBack);
1814
+ }
1815
+
1816
+ break;
1817
+ }
1818
+ }
1819
+
1820
+ Assert.That(buffer.Count, Is.EqualTo(expected.Count));
1821
+ Assert.That(buffer.ToArray(), Is.EqualTo(expected.ToArray()));
1822
+ }
1823
+ }
1824
+ }
1825
+
1826
+ [Test]
1827
+ public void TryPopFrontRemovesFromFront()
1828
+ {
1829
+ CyclicBuffer<int> buffer = new(5) { 1, 2, 3 };
1830
+
1831
+ bool success = buffer.TryPopFront(out int result);
1832
+
1833
+ Assert.IsTrue(success);
1834
+ Assert.AreEqual(1, result);
1835
+ Assert.AreEqual(2, buffer.Count);
1836
+ Assert.AreEqual(2, buffer[0]);
1837
+ }
1838
+
1839
+ [Test]
1840
+ public void TryPopFrontReturnsFalseWhenEmpty()
1841
+ {
1842
+ CyclicBuffer<int> buffer = new(5);
1843
+
1844
+ bool success = buffer.TryPopFront(out int result);
1845
+
1846
+ Assert.IsFalse(success);
1847
+ Assert.AreEqual(0, result);
1848
+ }
1849
+
1850
+ [Test]
1851
+ public void TryPopBackRemovesFromBack()
1852
+ {
1853
+ CyclicBuffer<int> buffer = new(5) { 1, 2, 3 };
1854
+
1855
+ bool success = buffer.TryPopBack(out int result);
1856
+
1857
+ Assert.IsTrue(success);
1858
+ Assert.AreEqual(3, result);
1859
+ Assert.AreEqual(2, buffer.Count);
1860
+ Assert.AreEqual(2, buffer[1]);
1861
+ }
1862
+
1863
+ [Test]
1864
+ public void TryPopBackReturnsFalseWhenEmpty()
1865
+ {
1866
+ CyclicBuffer<int> buffer = new(5);
1867
+
1868
+ bool success = buffer.TryPopBack(out int result);
1869
+
1870
+ Assert.IsFalse(success);
1871
+ Assert.AreEqual(0, result);
1872
+ }
1873
+
1874
+ [Test]
1875
+ public void TryPopFrontMultipleTimes()
1876
+ {
1877
+ CyclicBuffer<int> buffer = new(10);
1878
+ for (int i = 0; i < 5; i++)
1879
+ {
1880
+ buffer.Add(i);
1881
+ }
1882
+
1883
+ Assert.IsTrue(buffer.TryPopFront(out int first));
1884
+ Assert.AreEqual(0, first);
1885
+
1886
+ Assert.IsTrue(buffer.TryPopFront(out int second));
1887
+ Assert.AreEqual(1, second);
1888
+
1889
+ Assert.AreEqual(3, buffer.Count);
1890
+ }
1891
+
1892
+ [Test]
1893
+ public void TryPopBackMultipleTimes()
1894
+ {
1895
+ CyclicBuffer<int> buffer = new(10);
1896
+ for (int i = 0; i < 5; i++)
1897
+ {
1898
+ buffer.Add(i);
1899
+ }
1900
+
1901
+ Assert.IsTrue(buffer.TryPopBack(out int first));
1902
+ Assert.AreEqual(4, first);
1903
+
1904
+ Assert.IsTrue(buffer.TryPopBack(out int second));
1905
+ Assert.AreEqual(3, second);
1906
+
1907
+ Assert.AreEqual(3, buffer.Count);
1908
+ }
1909
+
1910
+ [Test]
1911
+ public void TryPopFrontAndBackMixed()
1912
+ {
1913
+ CyclicBuffer<int> buffer = new(10) { 1, 2, 3, 4 };
1914
+
1915
+ Assert.IsTrue(buffer.TryPopFront(out int front1));
1916
+ Assert.AreEqual(1, front1);
1917
+
1918
+ Assert.IsTrue(buffer.TryPopBack(out int back1));
1919
+ Assert.AreEqual(4, back1);
1920
+
1921
+ Assert.AreEqual(2, buffer.Count);
1922
+ Assert.AreEqual(2, buffer[0]);
1923
+ Assert.AreEqual(3, buffer[1]);
1924
+ }
1925
+
1926
+ [Test]
1927
+ public void TryPopUntilEmpty()
1928
+ {
1929
+ CyclicBuffer<int> buffer = new(5) { 1, 2 };
1930
+
1931
+ Assert.IsTrue(buffer.TryPopFront(out _));
1932
+ Assert.IsTrue(buffer.TryPopFront(out _));
1933
+ Assert.IsFalse(buffer.TryPopFront(out _));
1934
+ Assert.AreEqual(0, buffer.Count);
1935
+ }
1936
+
1937
+ [Test]
1938
+ public void TryPopWithWrappedBuffer()
1939
+ {
1940
+ CyclicBuffer<int> buffer = new(3)
1941
+ {
1942
+ 1,
1943
+ 2,
1944
+ 3,
1945
+ 4, // Wraps, removes 1
1946
+ 5, // Wraps, removes 2
1947
+ };
1948
+
1949
+ Assert.IsTrue(buffer.TryPopFront(out int front));
1950
+ Assert.AreEqual(3, front);
1951
+
1952
+ Assert.IsTrue(buffer.TryPopBack(out int back));
1953
+ Assert.AreEqual(5, back);
1954
+
1955
+ Assert.AreEqual(1, buffer.Count);
1956
+ }
1957
+
1958
+ [Test]
1959
+ public void AddAndOverwritePreservesChronology()
1960
+ {
1961
+ CyclicBuffer<int> buf = new(3) { 0, 1, 2 };
1962
+
1963
+ Assert.AreEqual(
1964
+ 3,
1965
+ buf.Count,
1966
+ "Count should reflect number of elements added up to capacity."
1967
+ );
1968
+ Assert.AreEqual(0, buf[0], "Oldest element should be at index 0 before wrap.");
1969
+ Assert.AreEqual(1, buf[1], "Next element should be index 1.");
1970
+ Assert.AreEqual(2, buf[2], "Newest element should be index 2 before wrap.");
1971
+
1972
+ // Overwrite oldest
1973
+ buf.Add(3);
1974
+ Assert.AreEqual(3, buf.Count, "Count should not grow beyond capacity.");
1975
+ Assert.AreEqual(1, buf[0], "After overwrite, oldest is dropped.");
1976
+ Assert.AreEqual(2, buf[1], "Element order should advance by one.");
1977
+ Assert.AreEqual(3, buf[2], "Newest written value should be last.");
1978
+
1979
+ // Remove middle element
1980
+ bool removed = buf.Remove(2);
1981
+ Assert.IsTrue(removed, "Remove should return true when element existed.");
1982
+ Assert.AreEqual(2, buf.Count, "Count should decrease after remove.");
1983
+ Assert.AreEqual(1, buf[0], "Remaining first element should be unchanged.");
1984
+ Assert.AreEqual(3, buf[1], "Remaining second element should be next in order.");
1985
+ }
1986
+
1987
+ [Test]
1988
+ public void ResizeTruncatesOrExtends()
1989
+ {
1990
+ CyclicBuffer<int> buf = new(5);
1991
+ for (int i = 0; i < 5; ++i)
1992
+ {
1993
+ buf.Add(i);
1994
+ }
1995
+ Assert.AreEqual(5, buf.Count, "Filled buffer should have full count.");
1996
+
1997
+ // Shrink: oldest entries should be truncated
1998
+ buf.Resize(3);
1999
+ Assert.AreEqual(3, buf.Count, "Count should reflect new capacity after shrink.");
2000
+ Assert.AreEqual(2, buf[0], "Shrink should retain most recent entries and drop oldest.");
2001
+ Assert.AreEqual(3, buf[1], "Remaining order should be preserved (middle).");
2002
+ Assert.AreEqual(4, buf[2], "Remaining order should be preserved (newest).");
2003
+
2004
+ // Grow: capacity increases, order stays
2005
+ buf.Resize(6);
2006
+ Assert.AreEqual(3, buf.Count, "Growing capacity should not change current count.");
2007
+ Assert.AreEqual(2, buf[0], "Growing capacity should not alter order (first).");
2008
+ Assert.AreEqual(3, buf[1], "Growing capacity should not alter order (second).");
2009
+ Assert.AreEqual(4, buf[2], "Growing capacity should not alter order (third).");
2010
+ }
2011
+
2012
+ [Test]
2013
+ public void ResizeShrinkKeepsMostRecentFromPartialFill()
2014
+ {
2015
+ CyclicBuffer<int> buf = new(10);
2016
+ for (int i = 0; i < 6; ++i)
2017
+ {
2018
+ buf.Add(i);
2019
+ }
2020
+
2021
+ // Logical contents: [0,1,2,3,4,5]
2022
+ buf.Resize(4);
2023
+ Assert.AreEqual(4, buf.Count);
2024
+ Assert.That(buf.ToArray(), Is.EqualTo(new[] { 2, 3, 4, 5 }));
2025
+ }
2026
+
2027
+ [Test]
2028
+ public void ResizeShrinkAfterWrapKeepsMostRecent()
2029
+ {
2030
+ CyclicBuffer<int> buf = new(5);
2031
+ for (int i = 1; i <= 7; ++i)
2032
+ {
2033
+ buf.Add(i);
2034
+ }
2035
+ // Buffer: [3,4,5,6,7]
2036
+ buf.Resize(2);
2037
+ Assert.That(buf.ToArray(), Is.EqualTo(new[] { 6, 7 }));
2038
+ }
2039
+
2040
+ [Test]
2041
+ public void ResizeToZeroClearsAndSubsequentAddsWork()
2042
+ {
2043
+ CyclicBuffer<int> buf = new(4) { 1, 2, 3 };
2044
+ buf.Resize(0);
2045
+ Assert.AreEqual(0, buf.Capacity);
2046
+ Assert.AreEqual(0, buf.Count);
2047
+ Assert.That(buf.ToArray(), Is.EqualTo(Array.Empty<int>()));
2048
+
2049
+ buf.Add(42);
2050
+ Assert.AreEqual(0, buf.Count); // capacity is zero, ignores adds
2051
+ }
2052
+
2053
+ [Test]
2054
+ public void ResizeAfterRemoveAllMaintainsMostRecent()
2055
+ {
2056
+ CyclicBuffer<int> buf = new(6) { 0, 1, 2, 3, 4, 5 };
2057
+ int removed = buf.RemoveAll(x => x % 2 == 0); // keep [1,3,5]
2058
+ Assert.AreEqual(3, removed);
2059
+ Assert.That(buf.ToArray(), Is.EqualTo(new[] { 1, 3, 5 }));
2060
+
2061
+ buf.Resize(2);
2062
+ Assert.That(buf.ToArray(), Is.EqualTo(new[] { 3, 5 }));
2063
+ }
2064
+
2065
+ [Test]
2066
+ public void SequentialResizeShrinkAndGrowPreservesOrder()
2067
+ {
2068
+ CyclicBuffer<int> buf = new(5) { 10, 11, 12, 13, 14 };
2069
+ buf.Resize(4);
2070
+ Assert.That(buf.ToArray(), Is.EqualTo(new[] { 11, 12, 13, 14 }));
2071
+
2072
+ buf.Resize(2);
2073
+ Assert.That(buf.ToArray(), Is.EqualTo(new[] { 13, 14 }));
2074
+
2075
+ buf.Resize(6);
2076
+ Assert.That(buf.ToArray(), Is.EqualTo(new[] { 13, 14 }));
2077
+
2078
+ buf.Add(15);
2079
+ buf.Add(16);
2080
+ Assert.That(buf.ToArray(), Is.EqualTo(new[] { 13, 14, 15, 16 }));
2081
+ }
2082
+ }
2083
+ }