com.wallstop-studios.unity-helpers 2.0.0-rc81.7 → 2.0.0

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 (1500) 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 +75 -0
  7. package/.githooks/pre-push +50 -0
  8. package/.github/dependabot.yml +32 -10
  9. package/.github/scripts/check-markdown-links.ps1 +77 -0
  10. package/.github/scripts/check_markdown_links.py +89 -0
  11. package/.github/scripts/check_markdown_url_encoding.py +74 -0
  12. package/.github/scripts/validate_markdown_links.py +194 -0
  13. package/.github/workflows/csharpier-autofix.yml +152 -0
  14. package/.github/workflows/format-on-demand.yml +305 -0
  15. package/.github/workflows/lint-doc-links.yml +30 -0
  16. package/.github/workflows/markdown-json.yml +45 -0
  17. package/.github/workflows/npm-publish.yml +75 -75
  18. package/.github/workflows/prettier-autofix.yml +195 -0
  19. package/.github/workflows/update-dotnet-tools.yml +80 -0
  20. package/.github/workflows/yaml-format-lint.yml +41 -0
  21. package/.lychee.toml +26 -0
  22. package/.markdownlint.json +21 -0
  23. package/.markdownlint.jsonc +21 -0
  24. package/.markdownlintignore +8 -0
  25. package/.pre-commit-config.yaml +47 -22
  26. package/.prettierignore +22 -0
  27. package/.prettierrc.json +20 -0
  28. package/.yamllint.yaml +31 -0
  29. package/AGENTS.md +56 -0
  30. package/{Third Party Notices.md.meta → AGENTS.md.meta} +7 -7
  31. package/CHANGELOG.md +11 -0
  32. package/CHANGELOG.md.meta +7 -7
  33. package/CONTRIBUTING.md +49 -0
  34. package/CONTRIBUTING.md.meta +7 -0
  35. package/DATA_STRUCTURES.md +324 -0
  36. package/DATA_STRUCTURES.md.meta +7 -0
  37. package/Docs/Images/attribute_resolution.svg +40 -0
  38. package/Docs/Images/attribute_resolution.svg.meta +7 -0
  39. package/Docs/Images/bitset.svg +47 -0
  40. package/Docs/Images/bitset.svg.meta +7 -0
  41. package/Docs/Images/concave_hull.svg +30 -0
  42. package/Docs/Images/concave_hull.svg.meta +7 -0
  43. package/Docs/Images/convex_hull.svg +29 -0
  44. package/Docs/Images/convex_hull.svg.meta +7 -0
  45. package/Docs/Images/cyclic_buffer.svg +37 -0
  46. package/Docs/Images/cyclic_buffer.svg.meta +7 -0
  47. package/Docs/Images/data_distribution_decision.svg +88 -0
  48. package/Docs/Images/data_distribution_decision.svg.meta +7 -0
  49. package/Docs/Images/deque.svg +64 -0
  50. package/Docs/Images/deque.svg.meta +7 -0
  51. package/Docs/Images/deque_queue.svg +107 -0
  52. package/Docs/Images/deque_queue.svg.meta +7 -0
  53. package/Docs/Images/disjoint_set.svg +47 -0
  54. package/Docs/Images/disjoint_set.svg.meta +7 -0
  55. package/Docs/Images/effects_pipeline.svg +59 -0
  56. package/Docs/Images/effects_pipeline.svg.meta +7 -0
  57. package/Docs/Images/geometry_edge_cases.svg +61 -0
  58. package/Docs/Images/geometry_edge_cases.svg.meta +7 -0
  59. package/Docs/Images/heap.svg +56 -0
  60. package/Docs/Images/heap.svg.meta +7 -0
  61. package/Docs/Images/kdtree_2d.svg +38 -0
  62. package/Docs/Images/kdtree_2d.svg.meta +7 -0
  63. package/Docs/Images/kdtree_3d.svg +83 -0
  64. package/Docs/Images/kdtree_3d.svg.meta +7 -0
  65. package/Docs/Images/octree_3d.svg +79 -0
  66. package/Docs/Images/octree_3d.svg.meta +7 -0
  67. package/Docs/Images/polyline_simplify.svg +18 -0
  68. package/Docs/Images/polyline_simplify.svg.meta +7 -0
  69. package/Docs/Images/quadtree_2d.svg +37 -0
  70. package/Docs/Images/quadtree_2d.svg.meta +7 -0
  71. package/Docs/Images/query_boundaries.svg +38 -0
  72. package/Docs/Images/query_boundaries.svg.meta +7 -0
  73. package/Docs/Images/random_generators.svg +105 -0
  74. package/Docs/Images/random_generators.svg.meta +7 -0
  75. package/Docs/Images/reflection_scan.svg +33 -0
  76. package/Docs/Images/reflection_scan.svg.meta +7 -0
  77. package/Docs/Images/relational_wiring.svg +75 -0
  78. package/Docs/Images/relational_wiring.svg.meta +7 -0
  79. package/Docs/Images/rtree_2d.svg +27 -0
  80. package/Docs/Images/rtree_2d.svg.meta +7 -0
  81. package/Docs/Images/rtree_3d.svg +79 -0
  82. package/Docs/Images/rtree_3d.svg.meta +7 -0
  83. package/Docs/Images/serialization_flow.svg +50 -0
  84. package/Docs/Images/serialization_flow.svg.meta +7 -0
  85. package/Docs/Images/singletons_lifecycle.svg +54 -0
  86. package/Docs/Images/singletons_lifecycle.svg.meta +7 -0
  87. package/Docs/Images/sparse_set.svg +54 -0
  88. package/Docs/Images/sparse_set.svg.meta +7 -0
  89. package/Docs/Images/trie.svg +55 -0
  90. package/Docs/Images/trie.svg.meta +7 -0
  91. package/Docs/Images.meta +8 -0
  92. package/Docs.meta +8 -0
  93. package/EDITOR_TOOLS_GUIDE.md +1980 -0
  94. package/EDITOR_TOOLS_GUIDE.md.meta +7 -0
  95. package/EFFECTS_SYSTEM.md +242 -0
  96. package/EFFECTS_SYSTEM.md.meta +7 -0
  97. package/EFFECTS_SYSTEM_TUTORIAL.md +467 -0
  98. package/EFFECTS_SYSTEM_TUTORIAL.md.meta +7 -0
  99. package/Editor/AnimationEventEditor.cs +1570 -874
  100. package/Editor/AnimationEventEditor.cs.meta +11 -11
  101. package/Editor/AssemblyInfo.cs +4 -0
  102. package/Editor/AssemblyInfo.cs.meta +3 -0
  103. package/Editor/AssetProcessors/SpriteLabelProcessor.cs +138 -111
  104. package/Editor/AssetProcessors/SpriteLabelProcessor.cs.meta +2 -2
  105. package/Editor/AssetProcessors.meta +2 -2
  106. package/Editor/Core/Helper/AnimationEventHelpers.cs +230 -0
  107. package/{Runtime/Core/DataStructure/ISpatialTree.cs.meta → Editor/Core/Helper/AnimationEventHelpers.cs.meta} +11 -11
  108. package/Editor/Core/Helper.meta +8 -0
  109. package/Editor/Core.meta +8 -0
  110. package/Editor/CustomDrawers/IntDropdownDrawer.cs +46 -46
  111. package/Editor/CustomDrawers/IntDropdownDrawer.cs.meta +2 -2
  112. package/Editor/CustomDrawers/StringInListeDrawer.cs +135 -135
  113. package/Editor/CustomDrawers/StringInListeDrawer.cs.meta +2 -2
  114. package/Editor/CustomDrawers/WShowIfPropertyDrawer.cs +105 -105
  115. package/Editor/CustomDrawers/WShowIfPropertyDrawer.cs.meta +2 -2
  116. package/Editor/CustomDrawers.meta +2 -2
  117. package/Editor/CustomEditors/MatchColliderToSpriteEditor.cs +32 -32
  118. package/Editor/CustomEditors/MatchColliderToSpriteEditor.cs.meta +2 -2
  119. package/Editor/CustomEditors/PersistentDirectoryGUI.cs +808 -799
  120. package/Editor/CustomEditors/PersistentDirectoryGUI.cs.meta +2 -2
  121. package/Editor/CustomEditors/PolygonCollider2DOptimizerEditor.cs +38 -40
  122. package/Editor/CustomEditors/PolygonCollider2DOptimizerEditor.cs.meta +2 -2
  123. package/Editor/CustomEditors/SourceFolderEntryDrawer.cs +685 -413
  124. package/Editor/CustomEditors/SourceFolderEntryDrawer.cs.meta +2 -2
  125. package/Editor/CustomEditors/TexturePlatformOverrideEntryDrawer.cs +155 -0
  126. package/{Runtime/Core/DataStructure/KDTree.cs.meta → Editor/CustomEditors/TexturePlatformOverrideEntryDrawer.cs.meta} +11 -11
  127. package/Editor/CustomEditors.meta +2 -2
  128. package/Editor/Extensions/SerializedPropertyExtensions.cs +217 -190
  129. package/Editor/Extensions/SerializedPropertyExtensions.cs.meta +2 -2
  130. package/Editor/Extensions/UnityExtensions.cs +50 -26
  131. package/Editor/Extensions/UnityExtensions.cs.meta +2 -2
  132. package/Editor/Extensions.meta +2 -2
  133. package/Editor/FitTextureSizeWindow.cs +809 -332
  134. package/Editor/FitTextureSizeWindow.cs.meta +2 -2
  135. package/Editor/Persistence/MultiFileSelectorPersistenceManager.cs +62 -0
  136. package/{Runtime/Core/DataStructure/QuadTree.cs.meta → Editor/Persistence/MultiFileSelectorPersistenceManager.cs.meta} +11 -11
  137. package/Editor/Persistence/MultiFileSelectorPersistenceWindow.cs +65 -0
  138. package/Editor/Persistence/MultiFileSelectorPersistenceWindow.cs.meta +11 -0
  139. package/Editor/Persistence.meta +8 -0
  140. package/Editor/PersistentDirectorySettings.cs +581 -248
  141. package/Editor/PersistentDirectorySettings.cs.meta +2 -2
  142. package/Editor/PrefabChecker.cs +1396 -741
  143. package/Editor/PrefabChecker.cs.meta +11 -11
  144. package/Editor/Sprites/AnimationCopier.cs +1594 -789
  145. package/Editor/Sprites/AnimationCopier.cs.meta +2 -2
  146. package/Editor/Sprites/AnimationCreator.cs +1573 -881
  147. package/Editor/Sprites/AnimationCreator.cs.meta +11 -11
  148. package/Editor/Sprites/AnimationViewerWindow.cs +1670 -1522
  149. package/Editor/Sprites/AnimationViewerWindow.cs.meta +2 -2
  150. package/Editor/Sprites/ScriptableSpriteAtlas.cs +251 -178
  151. package/Editor/Sprites/ScriptableSpriteAtlas.cs.meta +2 -2
  152. package/Editor/Sprites/ScriptableSpriteAtlasEditor.cs +1470 -1026
  153. package/Editor/Sprites/ScriptableSpriteAtlasEditor.cs.meta +2 -2
  154. package/Editor/Sprites/SpriteCropper.cs +1013 -523
  155. package/Editor/Sprites/SpriteCropper.cs.meta +2 -2
  156. package/Editor/Sprites/SpritePivotAdjustor.cs +605 -265
  157. package/Editor/Sprites/SpritePivotAdjustor.cs.meta +2 -2
  158. package/Editor/Sprites/SpriteSettingsApplier.cs +942 -918
  159. package/Editor/Sprites/SpriteSettingsApplier.cs.meta +2 -2
  160. package/Editor/Sprites/SpriteSettingsApplierAPI.cs +441 -0
  161. package/Editor/Sprites/SpriteSettingsApplierAPI.cs.meta +11 -0
  162. package/Editor/Sprites/SpriteSettingsProfileCollection.cs +12 -0
  163. package/Editor/Sprites/SpriteSettingsProfileCollection.cs.meta +11 -0
  164. package/Editor/Sprites/SpriteSheetAnimationCreator.cs +1586 -1537
  165. package/Editor/Sprites/SpriteSheetAnimationCreator.cs.meta +2 -2
  166. package/Editor/Sprites/TexturePlatformNameHelper.cs +89 -0
  167. package/Editor/Sprites/TexturePlatformNameHelper.cs.meta +11 -0
  168. package/Editor/Sprites/TextureResizerWizard.cs +456 -175
  169. package/Editor/Sprites/TextureResizerWizard.cs.meta +2 -2
  170. package/Editor/Sprites/TextureSettingsApplierAPI.cs +359 -0
  171. package/Editor/Sprites/TextureSettingsApplierAPI.cs.meta +11 -0
  172. package/Editor/Sprites/TextureSettingsApplierWindow.cs +668 -0
  173. package/Editor/Sprites/TextureSettingsApplierWindow.cs.meta +11 -0
  174. package/Editor/Sprites.meta +2 -2
  175. package/Editor/Styles/AnimationViewer.uss +115 -115
  176. package/Editor/Styles/AnimationViewer.uss.meta +2 -2
  177. package/Editor/Styles/AnimationViewer.uxml +56 -56
  178. package/Editor/Styles/AnimationViewer.uxml.meta +2 -2
  179. package/Editor/Styles/SpriteSheetAnimationCreator.uss +10 -0
  180. package/Editor/Styles/SpriteSheetAnimationCreator.uss.meta +11 -0
  181. package/Editor/Styles.meta +2 -2
  182. package/Editor/Tags/AttributeMetadataCacheEditor.cs +46 -0
  183. package/Editor/Tags/AttributeMetadataCacheEditor.cs.meta +11 -0
  184. package/Editor/Tags/AttributeMetadataCacheGenerator.cs +258 -0
  185. package/Editor/Tags/AttributeMetadataCacheGenerator.cs.meta +11 -0
  186. package/Editor/Tags.meta +8 -0
  187. package/Editor/Tools/ImageBlurTool.cs +522 -409
  188. package/Editor/Tools/ImageBlurTool.cs.meta +2 -2
  189. package/Editor/Tools.meta +2 -2
  190. package/Editor/Utils/DxReadOnlyPropertyDrawer.cs +26 -26
  191. package/Editor/Utils/DxReadOnlyPropertyDrawer.cs.meta +11 -11
  192. package/Editor/Utils/EditorUi.cs +228 -0
  193. package/Editor/Utils/EditorUi.cs.meta +11 -0
  194. package/Editor/Utils/EditorUtilities.cs +22 -22
  195. package/Editor/Utils/EditorUtilities.cs.meta +11 -11
  196. package/Editor/Utils/ScriptableObjectSingletonCreator.cs +633 -52
  197. package/Editor/Utils/ScriptableObjectSingletonCreator.cs.meta +2 -2
  198. package/Editor/Utils.meta +8 -8
  199. package/Editor/Visuals/EnhancedImageEditor.cs +160 -160
  200. package/Editor/Visuals/EnhancedImageEditor.cs.meta +11 -11
  201. package/Editor/Visuals.meta +2 -2
  202. package/Editor/WallstopStudios.UnityHelpers.Editor.asmdef +14 -18
  203. package/Editor/WallstopStudios.UnityHelpers.Editor.asmdef.meta +7 -7
  204. package/Editor.meta +8 -8
  205. package/GETTING_STARTED.md +409 -0
  206. package/GETTING_STARTED.md.meta +7 -0
  207. package/GLOSSARY.md +313 -0
  208. package/GLOSSARY.md.meta +7 -0
  209. package/HULLS.md +45 -0
  210. package/HULLS.md.meta +7 -0
  211. package/INDEX.md +429 -0
  212. package/INDEX.md.meta +7 -0
  213. package/LICENSE +21 -21
  214. package/LICENSE.md +7 -7
  215. package/LICENSE.md.meta +7 -7
  216. package/LICENSE.meta +7 -7
  217. package/MATH_AND_EXTENSIONS.md +316 -0
  218. package/MATH_AND_EXTENSIONS.md.meta +7 -0
  219. package/RANDOM_PERFORMANCE.md +140 -0
  220. package/RANDOM_PERFORMANCE.md.meta +7 -0
  221. package/README.md +1183 -188
  222. package/README.md.meta +7 -7
  223. package/REFLECTION_HELPERS.md +272 -0
  224. package/REFLECTION_HELPERS.md.meta +7 -0
  225. package/RELATIONAL_COMPONENTS.md +552 -0
  226. package/RELATIONAL_COMPONENTS.md.meta +7 -0
  227. package/Runtime/AssemblyInfo.cs +9 -0
  228. package/Runtime/AssemblyInfo.cs.meta +11 -0
  229. package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.dll +0 -0
  230. package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.dll.meta +33 -33
  231. package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.xml +499 -278
  232. package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.xml.meta +7 -7
  233. package/Runtime/Binaries/System.IO.Pipelines.dll +0 -0
  234. package/Runtime/Binaries/System.IO.Pipelines.dll.meta +33 -0
  235. package/Runtime/Binaries/System.IO.Pipelines.xml +702 -0
  236. package/Runtime/Binaries/System.IO.Pipelines.xml.meta +7 -0
  237. package/Runtime/Binaries/System.Text.Encodings.Web.dll +0 -0
  238. package/Runtime/Binaries/System.Text.Encodings.Web.dll.meta +33 -33
  239. package/Runtime/Binaries/System.Text.Encodings.Web.xml +1084 -1079
  240. package/Runtime/Binaries/System.Text.Encodings.Web.xml.meta +7 -7
  241. package/Runtime/Binaries/System.Text.Json.dll +0 -0
  242. package/Runtime/Binaries/System.Text.Json.dll.meta +33 -33
  243. package/Runtime/Binaries/System.Text.Json.xml +10217 -8116
  244. package/Runtime/Binaries/System.Text.Json.xml.meta +7 -7
  245. package/Runtime/Binaries.meta +8 -8
  246. package/Runtime/Core/Attributes/AnimationEventAttribute.cs +10 -138
  247. package/Runtime/Core/Attributes/AnimationEventAttribute.cs.meta +11 -11
  248. package/Runtime/Core/Attributes/BaseRelationalComponentAttribute.cs +841 -0
  249. package/Runtime/Core/Attributes/BaseRelationalComponentAttribute.cs.meta +11 -0
  250. package/Runtime/Core/Attributes/ChildComponentAttribute.cs +284 -226
  251. package/Runtime/Core/Attributes/ChildComponentAttribute.cs.meta +11 -11
  252. package/Runtime/Core/Attributes/DxReadOnlyAttribute.cs +6 -6
  253. package/Runtime/Core/Attributes/DxReadOnlyAttribute.cs.meta +11 -11
  254. package/Runtime/Core/Attributes/EnumDisplayNameAttribute.cs +15 -15
  255. package/Runtime/Core/Attributes/EnumDisplayNameAttribute.cs.meta +2 -2
  256. package/Runtime/Core/Attributes/IRelationalComponentAssigner.cs +36 -0
  257. package/Runtime/Core/Attributes/IRelationalComponentAssigner.cs.meta +11 -0
  258. package/Runtime/Core/Attributes/IntDropdownAttribute.cs +14 -14
  259. package/Runtime/Core/Attributes/IntDropdownAttribute.cs.meta +2 -2
  260. package/Runtime/Core/Attributes/KSerializableAttribute.cs +19 -19
  261. package/Runtime/Core/Attributes/KSerializableAttribute.cs.meta +11 -11
  262. package/Runtime/Core/Attributes/NotNullAttribute.cs +30 -32
  263. package/Runtime/Core/Attributes/NotNullAttribute.cs.meta +11 -11
  264. package/Runtime/Core/Attributes/ParentComponentAttribute.cs +376 -0
  265. package/Runtime/Core/Attributes/{ParentComponent.cs.meta → ParentComponentAttribute.cs.meta} +11 -11
  266. package/Runtime/Core/Attributes/RelationalComponentAssigner.cs +152 -0
  267. package/Runtime/Core/Attributes/RelationalComponentAssigner.cs.meta +11 -0
  268. package/Runtime/Core/Attributes/RelationalComponentExtensions.cs +61 -14
  269. package/Runtime/Core/Attributes/RelationalComponentExtensions.cs.meta +11 -11
  270. package/Runtime/Core/Attributes/RelationalComponentInitializer.cs +331 -0
  271. package/Runtime/Core/Attributes/RelationalComponentInitializer.cs.meta +11 -0
  272. package/Runtime/Core/Attributes/ScriptableSingletonPathAttribute.cs +15 -15
  273. package/Runtime/Core/Attributes/ScriptableSingletonPathAttribute.cs.meta +2 -2
  274. package/Runtime/Core/Attributes/SiblingComponentAttribute.cs +264 -137
  275. package/Runtime/Core/Attributes/SiblingComponentAttribute.cs.meta +11 -11
  276. package/Runtime/Core/Attributes/ValidateAssignmentAttribute.cs +115 -106
  277. package/Runtime/Core/Attributes/ValidateAssignmentAttribute.cs.meta +11 -11
  278. package/Runtime/Core/Attributes/ValueHelpers.cs +10 -0
  279. package/Runtime/Core/Attributes/ValueHelpers.cs.meta +3 -0
  280. package/Runtime/Core/Attributes/WShowIfAttribute.cs +24 -24
  281. package/Runtime/Core/Attributes/WShowIfAttribute.cs.meta +2 -2
  282. package/Runtime/Core/Attributes.meta +8 -8
  283. package/Runtime/Core/DataStructure/Adapters/FastVector2Int.cs +192 -92
  284. package/Runtime/Core/DataStructure/Adapters/FastVector2Int.cs.meta +11 -11
  285. package/Runtime/Core/DataStructure/Adapters/FastVector3Int.cs +268 -185
  286. package/Runtime/Core/DataStructure/Adapters/FastVector3Int.cs.meta +11 -11
  287. package/Runtime/Core/DataStructure/Adapters/KGuid.cs +360 -305
  288. package/Runtime/Core/DataStructure/Adapters/KGuid.cs.meta +11 -11
  289. package/Runtime/Core/DataStructure/Adapters/KVector2.cs +146 -80
  290. package/Runtime/Core/DataStructure/Adapters/KVector2.cs.meta +11 -11
  291. package/Runtime/Core/DataStructure/Adapters.meta +8 -8
  292. package/Runtime/Core/DataStructure/BitSet.cs +626 -0
  293. package/Runtime/Core/DataStructure/BitSet.cs.meta +11 -0
  294. package/Runtime/Core/DataStructure/BoundingBox3D.cs +405 -0
  295. package/Runtime/Core/DataStructure/BoundingBox3D.cs.meta +11 -0
  296. package/Runtime/Core/DataStructure/Circle.cs +203 -50
  297. package/Runtime/Core/DataStructure/Circle.cs.meta +11 -11
  298. package/Runtime/Core/DataStructure/CyclicBuffer.cs +488 -266
  299. package/Runtime/Core/DataStructure/CyclicBuffer.cs.meta +11 -11
  300. package/Runtime/Core/DataStructure/Deque.cs +561 -0
  301. package/Runtime/Core/DataStructure/Deque.cs.meta +11 -0
  302. package/Runtime/Core/DataStructure/DisjointSet.cs +483 -0
  303. package/Runtime/Core/DataStructure/DisjointSet.cs.meta +11 -0
  304. package/Runtime/Core/DataStructure/Heap.cs +514 -0
  305. package/Runtime/Core/DataStructure/Heap.cs.meta +11 -0
  306. package/Runtime/Core/DataStructure/{ISpatialTree.cs → ISpatialTree2D.cs} +25 -21
  307. package/Runtime/Core/DataStructure/ISpatialTree2D.cs.meta +11 -0
  308. package/Runtime/Core/DataStructure/ISpatialTree3D.cs +33 -0
  309. package/Runtime/Core/DataStructure/ISpatialTree3D.cs.meta +11 -0
  310. package/Runtime/Core/DataStructure/ImmutableBitSet.cs +398 -0
  311. package/Runtime/Core/DataStructure/ImmutableBitSet.cs.meta +3 -0
  312. package/Runtime/Core/DataStructure/KDTree2D.cs +852 -0
  313. package/Runtime/Core/DataStructure/KDTree2D.cs.meta +11 -0
  314. package/Runtime/Core/DataStructure/KDTree3D.cs +911 -0
  315. package/Runtime/Core/DataStructure/KDTree3D.cs.meta +11 -0
  316. package/Runtime/Core/DataStructure/OctTree3D.cs +983 -0
  317. package/Runtime/Core/DataStructure/OctTree3D.cs.meta +11 -0
  318. package/Runtime/Core/DataStructure/PriorityQueue.cs +194 -0
  319. package/Runtime/Core/DataStructure/PriorityQueue.cs.meta +11 -0
  320. package/Runtime/Core/DataStructure/QuadTree2D.cs +722 -0
  321. package/Runtime/Core/DataStructure/QuadTree2D.cs.meta +11 -0
  322. package/Runtime/Core/DataStructure/RTree2D.cs +704 -0
  323. package/Runtime/Core/DataStructure/{RTree.cs.meta → RTree2D.cs.meta} +11 -11
  324. package/Runtime/Core/DataStructure/RTree3D.cs +775 -0
  325. package/Runtime/Core/DataStructure/RTree3D.cs.meta +11 -0
  326. package/Runtime/Core/DataStructure/SparseSet.cs +597 -0
  327. package/Runtime/Core/DataStructure/SparseSet.cs.meta +11 -0
  328. package/Runtime/Core/DataStructure/SpatialHash2D.cs +312 -0
  329. package/Runtime/Core/DataStructure/SpatialHash2D.cs.meta +3 -0
  330. package/Runtime/Core/DataStructure/SpatialHash3D.cs +341 -0
  331. package/Runtime/Core/DataStructure/SpatialHash3D.cs.meta +11 -0
  332. package/Runtime/Core/DataStructure/Sphere.cs +264 -0
  333. package/Runtime/Core/DataStructure/Sphere.cs.meta +11 -0
  334. package/Runtime/Core/DataStructure/StringWrapper.cs +115 -91
  335. package/Runtime/Core/DataStructure/StringWrapper.cs.meta +11 -11
  336. package/Runtime/Core/DataStructure/TimedCache.cs +88 -66
  337. package/Runtime/Core/DataStructure/TimedCache.cs.meta +11 -11
  338. package/Runtime/Core/DataStructure/Trie.cs +660 -359
  339. package/Runtime/Core/DataStructure/Trie.cs.meta +2 -2
  340. package/Runtime/Core/DataStructure.meta +8 -8
  341. package/Runtime/Core/Extension/AnimatorExtensions.cs +40 -25
  342. package/Runtime/Core/Extension/AnimatorExtensions.cs.meta +11 -11
  343. package/Runtime/Core/Extension/AsyncOperationExtensions.cs +404 -110
  344. package/Runtime/Core/Extension/AsyncOperationExtensions.cs.meta +2 -2
  345. package/Runtime/Core/Extension/CircleExtensions.cs +125 -25
  346. package/Runtime/Core/Extension/CircleExtensions.cs.meta +11 -11
  347. package/Runtime/Core/Extension/ColorExtensions.cs +983 -644
  348. package/Runtime/Core/Extension/ColorExtensions.cs.meta +11 -11
  349. package/Runtime/Core/Extension/DictionaryExtensions.cs +606 -299
  350. package/Runtime/Core/Extension/DictionaryExtensions.cs.meta +11 -11
  351. package/Runtime/Core/Extension/DirectionExtensions.cs +377 -213
  352. package/Runtime/Core/Extension/DirectionExtensions.cs.meta +11 -11
  353. package/Runtime/Core/Extension/EnumExtensions.cs +535 -137
  354. package/Runtime/Core/Extension/EnumExtensions.cs.meta +2 -2
  355. package/Runtime/Core/Extension/IEnumerableExtensions.cs +341 -124
  356. package/Runtime/Core/Extension/IEnumerableExtensions.cs.meta +11 -11
  357. package/Runtime/Core/Extension/IListExtensions.cs +767 -248
  358. package/Runtime/Core/Extension/IListExtensions.cs.meta +11 -11
  359. package/Runtime/Core/Extension/IReadonlyListExtensions.cs +687 -37
  360. package/Runtime/Core/Extension/IReadonlyListExtensions.cs.meta +2 -2
  361. package/Runtime/Core/Extension/ProtoEqualityExtensions.cs +292 -0
  362. package/Runtime/Core/Extension/ProtoEqualityExtensions.cs.meta +3 -0
  363. package/Runtime/Core/Extension/RandomExtensions.cs +1006 -109
  364. package/Runtime/Core/Extension/RandomExtensions.cs.meta +11 -11
  365. package/Runtime/Core/Extension/StringExtensions.cs +1635 -239
  366. package/Runtime/Core/Extension/StringExtensions.cs.meta +11 -11
  367. package/Runtime/Core/Extension/UnityExtensions.cs +4555 -1689
  368. package/Runtime/Core/Extension/UnityExtensions.cs.meta +11 -11
  369. package/Runtime/Core/Extension/WallstopStudiosLogger.cs +287 -245
  370. package/Runtime/Core/Extension/WallstopStudiosLogger.cs.meta +11 -11
  371. package/Runtime/Core/Extension.meta +8 -8
  372. package/Runtime/Core/Helper/ArrayConverter.cs +73 -39
  373. package/Runtime/Core/Helper/ArrayConverter.cs.meta +2 -2
  374. package/Runtime/Core/Helper/AssignUtilities.cs +33 -14
  375. package/Runtime/Core/Helper/AssignUtilities.cs.meta +11 -11
  376. package/Runtime/Core/Helper/DirectoryHelper.cs +210 -196
  377. package/Runtime/Core/Helper/DirectoryHelper.cs.meta +2 -2
  378. package/Runtime/Core/Helper/Enumerables.cs +51 -17
  379. package/Runtime/Core/Helper/Enumerables.cs.meta +11 -11
  380. package/Runtime/Core/Helper/FileHelper.cs +97 -77
  381. package/Runtime/Core/Helper/FileHelper.cs.meta +2 -2
  382. package/Runtime/Core/Helper/FormattingHelpers.cs +49 -38
  383. package/Runtime/Core/Helper/FormattingHelpers.cs.meta +2 -2
  384. package/Runtime/Core/Helper/FuncBasedComparer.cs +29 -0
  385. package/Runtime/Core/Helper/FuncBasedComparer.cs.meta +3 -0
  386. package/Runtime/Core/Helper/Geometry.cs +65 -43
  387. package/Runtime/Core/Helper/Geometry.cs.meta +11 -11
  388. package/Runtime/Core/Helper/Helpers.cs +1271 -831
  389. package/Runtime/Core/Helper/Helpers.cs.meta +11 -11
  390. package/Runtime/Core/Helper/IterationHelpers.cs +83 -32
  391. package/Runtime/Core/Helper/IterationHelpers.cs.meta +11 -11
  392. package/Runtime/Core/Helper/LifetimeHelpers.cs +20 -13
  393. package/Runtime/Core/Helper/LifetimeHelpers.cs.meta +11 -11
  394. package/Runtime/Core/Helper/LineHelper.cs +259 -194
  395. package/Runtime/Core/Helper/LineHelper.cs.meta +2 -2
  396. package/Runtime/Core/Helper/Logging/UnityLogTagFormatter.cs +549 -539
  397. package/Runtime/Core/Helper/Logging/UnityLogTagFormatter.cs.meta +2 -2
  398. package/Runtime/Core/Helper/Logging.meta +2 -2
  399. package/Runtime/Core/Helper/Objects.cs +477 -769
  400. package/Runtime/Core/Helper/Objects.cs.meta +11 -11
  401. package/Runtime/Core/Helper/Partials/LogHelpers.cs +13 -13
  402. package/Runtime/Core/Helper/Partials/LogHelpers.cs.meta +2 -2
  403. package/Runtime/Core/Helper/Partials/MathHelpers.cs +45 -30
  404. package/Runtime/Core/Helper/Partials/MathHelpers.cs.meta +2 -2
  405. package/Runtime/Core/Helper/Partials/ObjectHelpers.cs +509 -400
  406. package/Runtime/Core/Helper/Partials/ObjectHelpers.cs.meta +2 -2
  407. package/Runtime/Core/Helper/Partials/TransformHelpers.cs +393 -377
  408. package/Runtime/Core/Helper/Partials/TransformHelpers.cs.meta +2 -2
  409. package/Runtime/Core/Helper/Partials.meta +2 -2
  410. package/Runtime/Core/Helper/PathHelper.cs +42 -15
  411. package/Runtime/Core/Helper/PathHelper.cs.meta +2 -2
  412. package/Runtime/Core/Helper/ReflectionHelpers.cs +5298 -1963
  413. package/Runtime/Core/Helper/ReflectionHelpers.cs.meta +2 -2
  414. package/Runtime/Core/Helper/ReverseComparer.cs +33 -0
  415. package/Runtime/Core/Helper/ReverseComparer.cs.meta +3 -0
  416. package/Runtime/Core/Helper/SceneHelper.cs +251 -224
  417. package/Runtime/Core/Helper/SceneHelper.cs.meta +2 -2
  418. package/Runtime/Core/Helper/SpriteHelpers.cs +52 -41
  419. package/Runtime/Core/Helper/SpriteHelpers.cs.meta +11 -11
  420. package/Runtime/Core/Helper/StringInList.cs +61 -35
  421. package/Runtime/Core/Helper/StringInList.cs.meta +11 -11
  422. package/Runtime/Core/Helper/TestAssemblyHelper.cs +134 -0
  423. package/Runtime/Core/Helper/TestAssemblyHelper.cs.meta +11 -0
  424. package/Runtime/Core/Helper/UnityMainThreadDispatcher.cs +144 -82
  425. package/Runtime/Core/Helper/UnityMainThreadDispatcher.cs.meta +2 -2
  426. package/Runtime/Core/Helper/WallMath.cs +672 -166
  427. package/Runtime/Core/Helper/WallMath.cs.meta +11 -11
  428. package/Runtime/Core/Helper.meta +8 -8
  429. package/Runtime/Core/Math/Line2D.cs +263 -0
  430. package/Runtime/Core/Math/Line2D.cs.meta +11 -0
  431. package/Runtime/Core/Math/Line3D.cs +452 -0
  432. package/Runtime/Core/Math/Line3D.cs.meta +11 -0
  433. package/Runtime/Core/Math/Parabola.cs +241 -47
  434. package/Runtime/Core/Math/Parabola.cs.meta +11 -11
  435. package/Runtime/Core/Math/PointPolygonCheck.cs +175 -36
  436. package/Runtime/Core/Math/PointPolygonCheck.cs.meta +11 -11
  437. package/Runtime/Core/Math/Range.cs +157 -92
  438. package/Runtime/Core/Math/Range.cs.meta +11 -11
  439. package/Runtime/Core/Math.meta +8 -8
  440. package/Runtime/Core/Model/Direction.cs +25 -43
  441. package/Runtime/Core/Model/Direction.cs.meta +11 -11
  442. package/Runtime/Core/Model.meta +8 -8
  443. package/Runtime/Core/OneOf/FastOneOf.cs +252 -152
  444. package/Runtime/Core/OneOf/FastOneOf.cs.meta +11 -11
  445. package/Runtime/Core/OneOf/FastOneOf2.cs +198 -0
  446. package/Runtime/Core/OneOf/FastOneOf2.cs.meta +11 -0
  447. package/Runtime/Core/OneOf/FastOneOf4.cs +324 -0
  448. package/Runtime/Core/OneOf/FastOneOf4.cs.meta +11 -0
  449. package/Runtime/Core/OneOf/None.cs +30 -4
  450. package/Runtime/Core/OneOf/None.cs.meta +11 -11
  451. package/Runtime/Core/OneOf.meta +8 -8
  452. package/Runtime/Core/Random/AbstractRandom.cs +1318 -655
  453. package/Runtime/Core/Random/AbstractRandom.cs.meta +11 -11
  454. package/Runtime/Core/Random/DotNetRandom.cs +118 -54
  455. package/Runtime/Core/Random/DotNetRandom.cs.meta +2 -2
  456. package/Runtime/Core/Random/IRandom.cs +203 -161
  457. package/Runtime/Core/Random/IRandom.cs.meta +11 -11
  458. package/Runtime/Core/Random/IllusionFlow.cs +171 -107
  459. package/Runtime/Core/Random/IllusionFlow.cs.meta +2 -2
  460. package/Runtime/Core/Random/LinearCongruentialGenerator.cs +90 -49
  461. package/Runtime/Core/Random/LinearCongruentialGenerator.cs.meta +2 -2
  462. package/Runtime/Core/Random/NativePcgRandom.cs +139 -97
  463. package/Runtime/Core/Random/NativePcgRandom.cs.meta +11 -11
  464. package/Runtime/Core/Random/PRNG.cs +21 -7
  465. package/Runtime/Core/Random/PRNG.cs.meta +2 -2
  466. package/Runtime/Core/Random/PcgRandom.cs +243 -149
  467. package/Runtime/Core/Random/PcgRandom.cs.meta +11 -11
  468. package/Runtime/Core/Random/PerlinNoise.cs +369 -369
  469. package/Runtime/Core/Random/PerlinNoise.cs.meta +2 -2
  470. package/Runtime/Core/Random/RandomComparer.cs +34 -0
  471. package/Runtime/Core/Random/RandomComparer.cs.meta +3 -0
  472. package/Runtime/Core/Random/RandomState.cs +206 -131
  473. package/Runtime/Core/Random/RandomState.cs.meta +11 -11
  474. package/Runtime/Core/Random/RandomUtilities.cs +55 -26
  475. package/Runtime/Core/Random/RandomUtilities.cs.meta +11 -11
  476. package/Runtime/Core/Random/RomuDuo.cs +171 -116
  477. package/Runtime/Core/Random/RomuDuo.cs.meta +2 -2
  478. package/Runtime/Core/Random/SplitMix64.cs +134 -94
  479. package/Runtime/Core/Random/SplitMix64.cs.meta +2 -2
  480. package/Runtime/Core/Random/SquirrelRandom.cs +127 -84
  481. package/Runtime/Core/Random/SquirrelRandom.cs.meta +11 -11
  482. package/Runtime/Core/Random/SystemRandom.cs +203 -162
  483. package/Runtime/Core/Random/SystemRandom.cs.meta +11 -11
  484. package/Runtime/Core/Random/ThreadLocalRandom.cs +25 -12
  485. package/Runtime/Core/Random/ThreadLocalRandom.cs.meta +11 -11
  486. package/Runtime/Core/Random/UnityRandom.cs +109 -57
  487. package/Runtime/Core/Random/UnityRandom.cs.meta +11 -11
  488. package/Runtime/Core/Random/WyRandom.cs +158 -121
  489. package/Runtime/Core/Random/WyRandom.cs.meta +2 -2
  490. package/Runtime/Core/Random/XorShiftRandom.cs +106 -52
  491. package/Runtime/Core/Random/XorShiftRandom.cs.meta +11 -11
  492. package/Runtime/Core/Random/XoroShiroRandom.cs +184 -119
  493. package/Runtime/Core/Random/XoroShiroRandom.cs.meta +2 -2
  494. package/Runtime/Core/Random.meta +8 -8
  495. package/Runtime/Core/Serialization/JsonConverters/AnimationCurveConverter.cs +248 -0
  496. package/Runtime/Core/Serialization/JsonConverters/AnimationCurveConverter.cs.meta +11 -0
  497. package/Runtime/Core/Serialization/JsonConverters/BitSetConverter.cs +119 -0
  498. package/Runtime/Core/Serialization/JsonConverters/BitSetConverter.cs.meta +11 -0
  499. package/Runtime/Core/Serialization/JsonConverters/BoundingSphereConverter.cs +74 -0
  500. package/Runtime/Core/Serialization/JsonConverters/BoundingSphereConverter.cs.meta +11 -0
  501. package/Runtime/Core/Serialization/JsonConverters/BoundsConverter.cs +132 -0
  502. package/Runtime/Core/Serialization/JsonConverters/BoundsConverter.cs.meta +11 -0
  503. package/Runtime/Core/Serialization/JsonConverters/BoundsIntConverter.cs +135 -0
  504. package/Runtime/Core/Serialization/JsonConverters/BoundsIntConverter.cs.meta +11 -0
  505. package/Runtime/Core/Serialization/JsonConverters/Color32Converter.cs +98 -0
  506. package/Runtime/Core/Serialization/JsonConverters/Color32Converter.cs.meta +11 -0
  507. package/Runtime/Core/Serialization/JsonConverters/ColorBlockConverter.cs +123 -0
  508. package/Runtime/Core/Serialization/JsonConverters/ColorBlockConverter.cs.meta +11 -0
  509. package/Runtime/Core/Serialization/JsonConverters/ColorConverter.cs +88 -88
  510. package/Runtime/Core/Serialization/JsonConverters/ColorConverter.cs.meta +2 -2
  511. package/Runtime/Core/Serialization/JsonConverters/CyclicBufferConverterFactory.cs +112 -0
  512. package/Runtime/Core/Serialization/JsonConverters/CyclicBufferConverterFactory.cs.meta +11 -0
  513. package/Runtime/Core/Serialization/JsonConverters/DequeConverterFactory.cs +62 -0
  514. package/Runtime/Core/Serialization/JsonConverters/DequeConverterFactory.cs.meta +11 -0
  515. package/Runtime/Core/Serialization/JsonConverters/FastVector2IntConverter.cs +72 -0
  516. package/Runtime/Core/Serialization/JsonConverters/FastVector2IntConverter.cs.meta +11 -0
  517. package/Runtime/Core/Serialization/JsonConverters/FastVector3IntConverter.cs +80 -0
  518. package/Runtime/Core/Serialization/JsonConverters/FastVector3IntConverter.cs.meta +11 -0
  519. package/Runtime/Core/Serialization/JsonConverters/GameObjectConverter.cs +44 -36
  520. package/Runtime/Core/Serialization/JsonConverters/GameObjectConverter.cs.meta +2 -2
  521. package/Runtime/Core/Serialization/JsonConverters/GradientConverter.cs +245 -0
  522. package/Runtime/Core/Serialization/JsonConverters/GradientConverter.cs.meta +11 -0
  523. package/Runtime/Core/Serialization/JsonConverters/Hash128Converter.cs +92 -0
  524. package/Runtime/Core/Serialization/JsonConverters/Hash128Converter.cs.meta +11 -0
  525. package/Runtime/Core/Serialization/JsonConverters/ImmutableBitSetConverter.cs +119 -0
  526. package/Runtime/Core/Serialization/JsonConverters/ImmutableBitSetConverter.cs.meta +11 -0
  527. package/Runtime/Core/Serialization/JsonConverters/KVector2Converter.cs +72 -0
  528. package/Runtime/Core/Serialization/JsonConverters/KVector2Converter.cs.meta +11 -0
  529. package/Runtime/Core/Serialization/JsonConverters/LayerMaskConverter.cs +95 -0
  530. package/Runtime/Core/Serialization/JsonConverters/LayerMaskConverter.cs.meta +11 -0
  531. package/Runtime/Core/Serialization/JsonConverters/Matrix4x4Converter.cs +237 -218
  532. package/Runtime/Core/Serialization/JsonConverters/Matrix4x4Converter.cs.meta +2 -2
  533. package/Runtime/Core/Serialization/JsonConverters/MinMaxCurveConverter.cs +142 -0
  534. package/Runtime/Core/Serialization/JsonConverters/MinMaxCurveConverter.cs.meta +11 -0
  535. package/Runtime/Core/Serialization/JsonConverters/MinMaxGradientConverter.cs +135 -0
  536. package/Runtime/Core/Serialization/JsonConverters/MinMaxGradientConverter.cs.meta +11 -0
  537. package/Runtime/Core/Serialization/JsonConverters/PlaneConverter.cs +79 -0
  538. package/Runtime/Core/Serialization/JsonConverters/PlaneConverter.cs.meta +11 -0
  539. package/Runtime/Core/Serialization/JsonConverters/PoseConverter.cs +76 -0
  540. package/Runtime/Core/Serialization/JsonConverters/PoseConverter.cs.meta +11 -0
  541. package/Runtime/Core/Serialization/JsonConverters/QuaternionConverter.cs +88 -0
  542. package/Runtime/Core/Serialization/JsonConverters/QuaternionConverter.cs.meta +11 -0
  543. package/Runtime/Core/Serialization/JsonConverters/RangeConverterFactory.cs +106 -0
  544. package/Runtime/Core/Serialization/JsonConverters/RangeConverterFactory.cs.meta +11 -0
  545. package/Runtime/Core/Serialization/JsonConverters/RangeIntConverter.cs +71 -0
  546. package/Runtime/Core/Serialization/JsonConverters/RangeIntConverter.cs.meta +11 -0
  547. package/Runtime/Core/Serialization/JsonConverters/Ray2DConverter.cs +80 -0
  548. package/Runtime/Core/Serialization/JsonConverters/Ray2DConverter.cs.meta +11 -0
  549. package/Runtime/Core/Serialization/JsonConverters/RayConverter.cs +76 -0
  550. package/Runtime/Core/Serialization/JsonConverters/RayConverter.cs.meta +11 -0
  551. package/Runtime/Core/Serialization/JsonConverters/RaycastHitConverter.cs +115 -0
  552. package/Runtime/Core/Serialization/JsonConverters/RaycastHitConverter.cs.meta +11 -0
  553. package/Runtime/Core/Serialization/JsonConverters/RectConverter.cs +84 -0
  554. package/Runtime/Core/Serialization/JsonConverters/RectConverter.cs.meta +11 -0
  555. package/Runtime/Core/Serialization/JsonConverters/RectIntConverter.cs +88 -0
  556. package/Runtime/Core/Serialization/JsonConverters/RectIntConverter.cs.meta +11 -0
  557. package/Runtime/Core/Serialization/JsonConverters/RectOffsetConverter.cs +87 -0
  558. package/Runtime/Core/Serialization/JsonConverters/RectOffsetConverter.cs.meta +11 -0
  559. package/Runtime/Core/Serialization/JsonConverters/RenderTextureDescriptorConverter.cs +264 -0
  560. package/Runtime/Core/Serialization/JsonConverters/RenderTextureDescriptorConverter.cs.meta +11 -0
  561. package/Runtime/Core/Serialization/JsonConverters/ResolutionConverter.cs +158 -0
  562. package/Runtime/Core/Serialization/JsonConverters/ResolutionConverter.cs.meta +11 -0
  563. package/Runtime/Core/Serialization/JsonConverters/SceneConverter.cs +103 -0
  564. package/Runtime/Core/Serialization/JsonConverters/SceneConverter.cs.meta +11 -0
  565. package/Runtime/Core/Serialization/JsonConverters/SphericalHarmonicsL2Converter.cs +121 -0
  566. package/Runtime/Core/Serialization/JsonConverters/SphericalHarmonicsL2Converter.cs.meta +11 -0
  567. package/Runtime/Core/Serialization/JsonConverters/TouchConverter.cs +54 -0
  568. package/Runtime/Core/Serialization/JsonConverters/TouchConverter.cs.meta +11 -0
  569. package/Runtime/Core/Serialization/JsonConverters/TypeConverter.cs +30 -28
  570. package/Runtime/Core/Serialization/JsonConverters/TypeConverter.cs.meta +2 -2
  571. package/Runtime/Core/Serialization/JsonConverters/Vector2Converter.cs +72 -74
  572. package/Runtime/Core/Serialization/JsonConverters/Vector2Converter.cs.meta +11 -11
  573. package/Runtime/Core/Serialization/JsonConverters/Vector2IntConverter.cs +72 -0
  574. package/Runtime/Core/Serialization/JsonConverters/Vector2IntConverter.cs.meta +11 -0
  575. package/Runtime/Core/Serialization/JsonConverters/Vector3Converter.cs +80 -81
  576. package/Runtime/Core/Serialization/JsonConverters/Vector3Converter.cs.meta +11 -11
  577. package/Runtime/Core/Serialization/JsonConverters/Vector3IntConverter.cs +80 -0
  578. package/Runtime/Core/Serialization/JsonConverters/Vector3IntConverter.cs.meta +11 -0
  579. package/Runtime/Core/Serialization/JsonConverters/Vector4Converter.cs +88 -88
  580. package/Runtime/Core/Serialization/JsonConverters/Vector4Converter.cs.meta +2 -2
  581. package/Runtime/Core/Serialization/JsonConverters.meta +8 -8
  582. package/Runtime/Core/Serialization/ProtobufUnitySurrogates.cs +383 -0
  583. package/Runtime/Core/Serialization/ProtobufUnitySurrogates.cs.meta +11 -0
  584. package/Runtime/Core/Serialization/Serializer.cs +2121 -195
  585. package/Runtime/Core/Serialization/Serializer.cs.meta +11 -11
  586. package/Runtime/Core/Serialization.meta +8 -8
  587. package/Runtime/Core/Threading/SingleThreadedThreadPool.cs +228 -228
  588. package/Runtime/Core/Threading/SingleThreadedThreadPool.cs.meta +11 -11
  589. package/Runtime/Core/Threading.meta +8 -8
  590. package/Runtime/Core.meta +8 -8
  591. package/Runtime/Integrations/VContainer/AssemblyInfo.cs +9 -0
  592. package/Runtime/Integrations/VContainer/AssemblyInfo.cs.meta +3 -0
  593. package/Runtime/Integrations/VContainer/ObjectResolverRelationalExtensions.cs +281 -0
  594. package/Runtime/Integrations/VContainer/ObjectResolverRelationalExtensions.cs.meta +11 -0
  595. package/Runtime/Integrations/VContainer/RelationalComponentEntryPoint.cs +189 -0
  596. package/Runtime/Integrations/VContainer/RelationalComponentEntryPoint.cs.meta +11 -0
  597. package/Runtime/Integrations/VContainer/RelationalComponentsBuilderExtensions.cs +90 -0
  598. package/Runtime/Integrations/VContainer/RelationalComponentsBuilderExtensions.cs.meta +11 -0
  599. package/Runtime/Integrations/VContainer/RelationalObjectPools.cs +114 -0
  600. package/Runtime/Integrations/VContainer/RelationalObjectPools.cs.meta +11 -0
  601. package/Runtime/Integrations/VContainer/RelationalSceneAssignmentOptions.cs +95 -0
  602. package/Runtime/Integrations/VContainer/RelationalSceneAssignmentOptions.cs.meta +11 -0
  603. package/Runtime/Integrations/VContainer/RelationalSceneLoadListener.cs +241 -0
  604. package/Runtime/Integrations/VContainer/RelationalSceneLoadListener.cs.meta +11 -0
  605. package/Runtime/Integrations/VContainer/WallstopStudios.UnityHelpers.Integration.VContainer.asmdef +30 -0
  606. package/Runtime/Integrations/VContainer/WallstopStudios.UnityHelpers.Integration.VContainer.asmdef.meta +7 -0
  607. package/Runtime/Integrations/VContainer.meta +8 -0
  608. package/Runtime/Integrations/Zenject/AssemblyInfo.cs +9 -0
  609. package/Runtime/Integrations/Zenject/AssemblyInfo.cs.meta +3 -0
  610. package/Runtime/Integrations/Zenject/DiContainerRelationalExtensions.cs +247 -0
  611. package/Runtime/Integrations/Zenject/DiContainerRelationalExtensions.cs.meta +11 -0
  612. package/Runtime/Integrations/Zenject/RelationalComponentSceneInitializer.cs +182 -0
  613. package/Runtime/Integrations/Zenject/RelationalComponentSceneInitializer.cs.meta +11 -0
  614. package/Runtime/Integrations/Zenject/RelationalComponentsInstaller.cs +94 -0
  615. package/Runtime/Integrations/Zenject/RelationalComponentsInstaller.cs.meta +11 -0
  616. package/Runtime/Integrations/Zenject/RelationalMemoryPools.cs +44 -0
  617. package/Runtime/Integrations/Zenject/RelationalMemoryPools.cs.meta +11 -0
  618. package/Runtime/Integrations/Zenject/RelationalSceneAssignmentOptions.cs +93 -0
  619. package/Runtime/Integrations/Zenject/RelationalSceneAssignmentOptions.cs.meta +11 -0
  620. package/Runtime/Integrations/Zenject/RelationalSceneLoadListener.cs +243 -0
  621. package/Runtime/Integrations/Zenject/RelationalSceneLoadListener.cs.meta +11 -0
  622. package/Runtime/Integrations/Zenject/WallstopStudios.UnityHelpers.Integration.Zenject.asmdef +30 -0
  623. package/Runtime/Integrations/Zenject/WallstopStudios.UnityHelpers.Integration.Zenject.asmdef.meta +7 -0
  624. package/Runtime/Integrations/Zenject.meta +8 -0
  625. package/Runtime/Integrations.meta +8 -0
  626. package/Runtime/Protobuf-Net/System.Collections.Immutable.dll.meta +33 -33
  627. package/Runtime/Protobuf-Net/System.Runtime.CompilerServices.Unsafe.dll.meta +33 -33
  628. package/Runtime/Protobuf-Net/protobuf-net.Core.dll.meta +33 -33
  629. package/Runtime/Protobuf-Net/protobuf-net.dll.meta +33 -33
  630. package/Runtime/Protobuf-Net.meta +8 -8
  631. package/Runtime/Tags/AlwaysIncludeInAttributeMetadataCacheAttribute.cs +11 -0
  632. package/Runtime/Tags/AlwaysIncludeInAttributeMetadataCacheAttribute.cs.meta +11 -0
  633. package/Runtime/Tags/Attribute.cs +399 -205
  634. package/Runtime/Tags/Attribute.cs.meta +2 -2
  635. package/Runtime/Tags/AttributeEffect.cs +372 -281
  636. package/Runtime/Tags/AttributeEffect.cs.meta +2 -2
  637. package/Runtime/Tags/AttributeMetadataCache.cs +500 -0
  638. package/Runtime/Tags/AttributeMetadataCache.cs.meta +11 -0
  639. package/Runtime/Tags/AttributeMetadataFilters.cs +108 -0
  640. package/Runtime/Tags/AttributeMetadataFilters.cs.meta +11 -0
  641. package/Runtime/Tags/AttributeModification.cs +132 -48
  642. package/Runtime/Tags/AttributeModification.cs.meta +2 -2
  643. package/Runtime/Tags/AttributeUtilities.cs +376 -209
  644. package/Runtime/Tags/AttributeUtilities.cs.meta +2 -2
  645. package/Runtime/Tags/AttributesComponent.cs +237 -163
  646. package/Runtime/Tags/AttributesComponent.cs.meta +2 -2
  647. package/Runtime/Tags/CollisionSenses.cs +117 -91
  648. package/Runtime/Tags/CollisionSenses.cs.meta +2 -2
  649. package/Runtime/Tags/CosmeticEffectComponent.cs +112 -50
  650. package/Runtime/Tags/CosmeticEffectComponent.cs.meta +2 -2
  651. package/Runtime/Tags/CosmeticEffectData.cs +109 -63
  652. package/Runtime/Tags/CosmeticEffectData.cs.meta +2 -2
  653. package/Runtime/Tags/EffectHandle.cs +150 -65
  654. package/Runtime/Tags/EffectHandle.cs.meta +2 -2
  655. package/Runtime/Tags/EffectHandler.cs +470 -393
  656. package/Runtime/Tags/EffectHandler.cs.meta +2 -2
  657. package/Runtime/Tags/ModificationAction.cs +60 -9
  658. package/Runtime/Tags/ModificationAction.cs.meta +2 -2
  659. package/Runtime/Tags/ModifierDurationType.cs +71 -13
  660. package/Runtime/Tags/ModifierDurationType.cs.meta +2 -2
  661. package/Runtime/Tags/TagHandler.cs +373 -158
  662. package/Runtime/Tags/TagHandler.cs.meta +2 -2
  663. package/Runtime/Tags.meta +2 -2
  664. package/Runtime/Utils/AnimationEventEqualityComparer.cs +198 -161
  665. package/Runtime/Utils/AnimationEventEqualityComparer.cs.meta +11 -11
  666. package/Runtime/Utils/AnimatorEnumStateMachine.cs +110 -88
  667. package/Runtime/Utils/AnimatorEnumStateMachine.cs.meta +11 -11
  668. package/Runtime/Utils/Ascii85.cs +132 -115
  669. package/Runtime/Utils/Ascii85.cs.meta +2 -2
  670. package/Runtime/Utils/Buffers.cs +1151 -550
  671. package/Runtime/Utils/Buffers.cs.meta +11 -11
  672. package/Runtime/Utils/CenterPointOffset.cs +35 -30
  673. package/Runtime/Utils/CenterPointOffset.cs.meta +2 -2
  674. package/Runtime/Utils/ChildSpawner.cs +250 -157
  675. package/Runtime/Utils/ChildSpawner.cs.meta +2 -2
  676. package/Runtime/Utils/CircleLineRenderer.cs +142 -142
  677. package/Runtime/Utils/CircleLineRenderer.cs.meta +11 -11
  678. package/Runtime/Utils/CollisionProxy.cs +48 -48
  679. package/Runtime/Utils/CollisionProxy.cs.meta +2 -2
  680. package/Runtime/Utils/CoroutineHandler.cs +4 -4
  681. package/Runtime/Utils/CoroutineHandler.cs.meta +2 -2
  682. package/Runtime/Utils/DeferredDisposalResult.cs +20 -23
  683. package/Runtime/Utils/DeferredDisposalResult.cs.meta +2 -2
  684. package/Runtime/Utils/LZMA.cs +276 -53
  685. package/Runtime/Utils/LZMA.cs.meta +2 -2
  686. package/Runtime/Utils/MatchColliderToSprite.cs +104 -104
  687. package/Runtime/Utils/MatchColliderToSprite.cs.meta +2 -2
  688. package/Runtime/Utils/MatchTransform.cs +99 -82
  689. package/Runtime/Utils/MatchTransform.cs.meta +2 -2
  690. package/Runtime/Utils/Oscillator.cs +27 -27
  691. package/Runtime/Utils/Oscillator.cs.meta +11 -11
  692. package/Runtime/Utils/PolygonCollider2DOptimizer.cs +104 -83
  693. package/Runtime/Utils/PolygonCollider2DOptimizer.cs.meta +2 -2
  694. package/Runtime/Utils/RuntimeSingleton.cs +139 -89
  695. package/Runtime/Utils/RuntimeSingleton.cs.meta +11 -11
  696. package/Runtime/Utils/ScriptableObjectSingleton.cs +225 -85
  697. package/Runtime/Utils/ScriptableObjectSingleton.cs.meta +2 -2
  698. package/Runtime/Utils/SerializedStringComparer.cs +107 -107
  699. package/Runtime/Utils/SerializedStringComparer.cs.meta +2 -2
  700. package/Runtime/Utils/SetTextureImportData.cs +71 -69
  701. package/Runtime/Utils/SetTextureImportData.cs.meta +11 -11
  702. package/Runtime/Utils/SevenZip/Common/CRC.cs +70 -70
  703. package/Runtime/Utils/SevenZip/Common/CRC.cs.meta +11 -11
  704. package/Runtime/Utils/SevenZip/Common/InBuffer.cs +84 -84
  705. package/Runtime/Utils/SevenZip/Common/InBuffer.cs.meta +11 -11
  706. package/Runtime/Utils/SevenZip/Common/OutBuffer.cs +70 -70
  707. package/Runtime/Utils/SevenZip/Common/OutBuffer.cs.meta +11 -11
  708. package/Runtime/Utils/SevenZip/Common.meta +2 -2
  709. package/Runtime/Utils/SevenZip/Compress/LZ/IMatchFinder.cs +28 -28
  710. package/Runtime/Utils/SevenZip/Compress/LZ/IMatchFinder.cs.meta +11 -11
  711. package/Runtime/Utils/SevenZip/Compress/LZ/LzBinTree.cs +454 -454
  712. package/Runtime/Utils/SevenZip/Compress/LZ/LzBinTree.cs.meta +11 -11
  713. package/Runtime/Utils/SevenZip/Compress/LZ/LzInWindow.cs +179 -179
  714. package/Runtime/Utils/SevenZip/Compress/LZ/LzInWindow.cs.meta +11 -11
  715. package/Runtime/Utils/SevenZip/Compress/LZ/LzOutWindow.cs +137 -137
  716. package/Runtime/Utils/SevenZip/Compress/LZ/LzOutWindow.cs.meta +11 -11
  717. package/Runtime/Utils/SevenZip/Compress/LZ.meta +8 -8
  718. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaBase.cs +110 -110
  719. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaBase.cs.meta +11 -11
  720. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaDecoder.cs +525 -527
  721. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaDecoder.cs.meta +11 -11
  722. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaEncoder.cs +1891 -1904
  723. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaEncoder.cs.meta +11 -11
  724. package/Runtime/Utils/SevenZip/Compress/LZMA.meta +8 -8
  725. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoder.cs +242 -242
  726. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoder.cs.meta +11 -11
  727. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoderBit.cs +146 -149
  728. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoderBit.cs.meta +11 -11
  729. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoderBitTree.cs +177 -177
  730. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoderBitTree.cs.meta +11 -11
  731. package/Runtime/Utils/SevenZip/Compress/RangeCoder.meta +8 -8
  732. package/Runtime/Utils/SevenZip/Compress.meta +8 -8
  733. package/Runtime/Utils/SevenZip/ICoder.cs +177 -177
  734. package/Runtime/Utils/SevenZip/ICoder.cs.meta +11 -11
  735. package/Runtime/Utils/SevenZip.meta +2 -2
  736. package/Runtime/Utils/SpriteRendererMetadata.cs +346 -370
  737. package/Runtime/Utils/SpriteRendererMetadata.cs.meta +2 -2
  738. package/Runtime/Utils/SpriteRendererSyncer.cs +100 -100
  739. package/Runtime/Utils/SpriteRendererSyncer.cs.meta +2 -2
  740. package/Runtime/Utils/StartTracker.cs +15 -15
  741. package/Runtime/Utils/StartTracker.cs.meta +2 -2
  742. package/Runtime/Utils/TextureScale.cs +364 -179
  743. package/Runtime/Utils/TextureScale.cs.meta +2 -2
  744. package/Runtime/Utils/TypeNameSorter.cs +17 -17
  745. package/Runtime/Utils/TypeNameSorter.cs.meta +2 -2
  746. package/Runtime/Utils/UnityObjectNameComparer.cs +89 -89
  747. package/Runtime/Utils/UnityObjectNameComparer.cs.meta +2 -2
  748. package/Runtime/Utils.meta +8 -8
  749. package/Runtime/Visuals/AnimatedSpriteLayer.cs +217 -130
  750. package/Runtime/Visuals/AnimatedSpriteLayer.cs.meta +2 -2
  751. package/Runtime/Visuals/UGUI/EnhancedImage.cs +224 -85
  752. package/Runtime/Visuals/UGUI/EnhancedImage.cs.meta +2 -2
  753. package/Runtime/Visuals/UGUI.meta +2 -2
  754. package/Runtime/Visuals/UIToolkit/LayeredImage.cs +784 -484
  755. package/Runtime/Visuals/UIToolkit/LayeredImage.cs.meta +2 -2
  756. package/Runtime/Visuals/UIToolkit/MultiFileSelectorElement.cs +945 -322
  757. package/Runtime/Visuals/UIToolkit/MultiFileSelectorElement.cs.meta +2 -2
  758. package/Runtime/Visuals/UIToolkit.meta +2 -2
  759. package/Runtime/Visuals.meta +2 -2
  760. package/Runtime/WallstopStudios.UnityHelpers.asmdef +22 -14
  761. package/Runtime/WallstopStudios.UnityHelpers.asmdef.meta +7 -7
  762. package/Runtime.meta +8 -8
  763. package/SERIALIZATION.md +663 -0
  764. package/SERIALIZATION.md.meta +7 -0
  765. package/SINGLETONS.md +427 -0
  766. package/SINGLETONS.md.meta +7 -0
  767. package/SPATIAL_TREES_2D_GUIDE.md +261 -0
  768. package/SPATIAL_TREES_2D_GUIDE.md.meta +7 -0
  769. package/SPATIAL_TREES_3D_GUIDE.md +214 -0
  770. package/SPATIAL_TREES_3D_GUIDE.md.meta +7 -0
  771. package/SPATIAL_TREE_2D_PERFORMANCE.md +241 -0
  772. package/SPATIAL_TREE_2D_PERFORMANCE.md.meta +7 -0
  773. package/SPATIAL_TREE_3D_PERFORMANCE.md +243 -0
  774. package/SPATIAL_TREE_3D_PERFORMANCE.md.meta +7 -0
  775. package/SPATIAL_TREE_SEMANTICS.md +106 -0
  776. package/SPATIAL_TREE_SEMANTICS.md.meta +7 -0
  777. package/Samples~/DI - VContainer/Prefabs/RelationalConsumer.prefab +77 -0
  778. package/Samples~/DI - VContainer/Prefabs/RelationalConsumer.prefab.meta +8 -0
  779. package/Samples~/DI - VContainer/Prefabs/Spawner.prefab +47 -0
  780. package/Samples~/DI - VContainer/Prefabs/Spawner.prefab.meta +8 -0
  781. package/Samples~/DI - VContainer/Prefabs.meta +9 -0
  782. package/Samples~/DI - VContainer/README.md +515 -0
  783. package/Samples~/DI - VContainer/README.md.meta +8 -0
  784. package/Samples~/DI - VContainer/Scenes/VContainer_Sample.unity +120 -0
  785. package/Samples~/DI - VContainer/Scenes/VContainer_Sample.unity.meta +8 -0
  786. package/Samples~/DI - VContainer/Scenes.meta +9 -0
  787. package/Samples~/DI - VContainer/Scripts/GameLifetimeScope.cs +42 -0
  788. package/Samples~/DI - VContainer/Scripts/GameLifetimeScope.cs.meta +12 -0
  789. package/Samples~/DI - VContainer/Scripts/RelationalConsumer.cs +24 -0
  790. package/Samples~/DI - VContainer/Scripts/RelationalConsumer.cs.meta +12 -0
  791. package/Samples~/DI - VContainer/Scripts/Samples.UnityHelpers.DI.VContainer.asmdef +37 -0
  792. package/Samples~/DI - VContainer/Scripts/Samples.UnityHelpers.DI.VContainer.asmdef.meta +8 -0
  793. package/Samples~/DI - VContainer/Scripts/Spawner.cs +130 -0
  794. package/Samples~/DI - VContainer/Scripts/Spawner.cs.meta +12 -0
  795. package/Samples~/DI - VContainer/Scripts.meta +9 -0
  796. package/Samples~/DI - VContainer.meta +9 -0
  797. package/Samples~/DI - Zenject/Prefabs/RelationalConsumer.prefab +77 -0
  798. package/Samples~/DI - Zenject/Prefabs/RelationalConsumer.prefab.meta +8 -0
  799. package/Samples~/DI - Zenject/Prefabs/SpawnerZenject.prefab +47 -0
  800. package/Samples~/DI - Zenject/Prefabs/SpawnerZenject.prefab.meta +8 -0
  801. package/Samples~/DI - Zenject/Prefabs.meta +9 -0
  802. package/Samples~/DI - Zenject/README.md +553 -0
  803. package/Samples~/DI - Zenject/README.md.meta +7 -0
  804. package/Samples~/DI - Zenject/Scenes/Zenject_Sample.unity +164 -0
  805. package/Samples~/DI - Zenject/Scenes/Zenject_Sample.unity.meta +8 -0
  806. package/Samples~/DI - Zenject/Scenes.meta +9 -0
  807. package/Samples~/DI - Zenject/Scripts/RelationalConsumer.cs +22 -0
  808. package/Samples~/DI - Zenject/Scripts/RelationalConsumer.cs.meta +12 -0
  809. package/Samples~/DI - Zenject/Scripts/RelationalConsumerPool.cs +37 -0
  810. package/Samples~/DI - Zenject/Scripts/RelationalConsumerPool.cs.meta +12 -0
  811. package/Samples~/DI - Zenject/Scripts/Samples.UnityHelpers.DI.Zenject.asmdef +36 -0
  812. package/Samples~/DI - Zenject/Scripts/Samples.UnityHelpers.DI.Zenject.asmdef.meta +8 -0
  813. package/Samples~/DI - Zenject/Scripts/SceneContextPlaceholder.cs +47 -0
  814. package/Samples~/DI - Zenject/Scripts/SceneContextPlaceholder.cs.meta +12 -0
  815. package/Samples~/DI - Zenject/Scripts/SpawnerZenject.cs +91 -0
  816. package/Samples~/DI - Zenject/Scripts/SpawnerZenject.cs.meta +12 -0
  817. package/Samples~/DI - Zenject/Scripts.meta +9 -0
  818. package/Samples~/DI - Zenject.meta +9 -0
  819. package/Samples~/Random - PRNG/README.md +13 -0
  820. package/Samples~/Random - PRNG/README.md.meta +8 -0
  821. package/Samples~/Random - PRNG/Scripts/RandomPrngDemo.cs +28 -0
  822. package/Samples~/Random - PRNG/Scripts/RandomPrngDemo.cs.meta +12 -0
  823. package/Samples~/Random - PRNG/Scripts/Samples.UnityHelpers.Random.Prng.asmdef +17 -0
  824. package/Samples~/Random - PRNG/Scripts/Samples.UnityHelpers.Random.Prng.asmdef.meta +8 -0
  825. package/Samples~/Random - PRNG/Scripts.meta +9 -0
  826. package/Samples~/Random - PRNG.meta +9 -0
  827. package/Samples~/Relational Components - Basic/README.md +21 -0
  828. package/Samples~/Relational Components - Basic/README.md.meta +8 -0
  829. package/Samples~/Relational Components - Basic/Scripts/RelationalBasicConsumer.cs +37 -0
  830. package/Samples~/Relational Components - Basic/Scripts/RelationalBasicConsumer.cs.meta +12 -0
  831. package/Samples~/Relational Components - Basic/Scripts/Samples.UnityHelpers.Relational.Basic.asmdef +17 -0
  832. package/Samples~/Relational Components - Basic/Scripts/Samples.UnityHelpers.Relational.Basic.asmdef.meta +8 -0
  833. package/Samples~/Relational Components - Basic/Scripts.meta +9 -0
  834. package/Samples~/Relational Components - Basic.meta +9 -0
  835. package/Samples~/Serialization - JSON/README.md +14 -0
  836. package/Samples~/Serialization - JSON/README.md.meta +8 -0
  837. package/Samples~/Serialization - JSON/Scripts/JsonSerializationDemo.cs +50 -0
  838. package/Samples~/Serialization - JSON/Scripts/JsonSerializationDemo.cs.meta +12 -0
  839. package/Samples~/Serialization - JSON/Scripts/Samples.UnityHelpers.Serialization.Json.asmdef +17 -0
  840. package/Samples~/Serialization - JSON/Scripts/Samples.UnityHelpers.Serialization.Json.asmdef.meta +8 -0
  841. package/Samples~/Serialization - JSON/Scripts.meta +9 -0
  842. package/Samples~/Serialization - JSON.meta +9 -0
  843. package/Samples~/Spatial Structures - 2D and 3D/README.md +14 -0
  844. package/Samples~/Spatial Structures - 2D and 3D/README.md.meta +8 -0
  845. package/Samples~/Spatial Structures - 2D and 3D/Scripts/Samples.UnityHelpers.SpatialStructures.asmdef +17 -0
  846. package/Samples~/Spatial Structures - 2D and 3D/Scripts/Samples.UnityHelpers.SpatialStructures.asmdef.meta +8 -0
  847. package/Samples~/Spatial Structures - 2D and 3D/Scripts/SpatialStructuresDemo.cs +62 -0
  848. package/Samples~/Spatial Structures - 2D and 3D/Scripts/SpatialStructuresDemo.cs.meta +12 -0
  849. package/Samples~/Spatial Structures - 2D and 3D/Scripts.meta +9 -0
  850. package/Samples~/Spatial Structures - 2D and 3D.meta +9 -0
  851. package/Samples~/UGUI - EnhancedImage/README.md +13 -0
  852. package/Samples~/UGUI - EnhancedImage/README.md.meta +8 -0
  853. package/Samples~/UGUI - EnhancedImage/Scripts/EnhancedImageDemo.cs +36 -0
  854. package/Samples~/UGUI - EnhancedImage/Scripts/EnhancedImageDemo.cs.meta +12 -0
  855. package/Samples~/UGUI - EnhancedImage/Scripts/Samples.UnityHelpers.UGUI.EnhancedImage.asmdef +17 -0
  856. package/Samples~/UGUI - EnhancedImage/Scripts/Samples.UnityHelpers.UGUI.EnhancedImage.asmdef.meta +8 -0
  857. package/Samples~/UGUI - EnhancedImage/Scripts.meta +9 -0
  858. package/Samples~/UGUI - EnhancedImage.meta +9 -0
  859. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/README.md +13 -0
  860. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/README.md.meta +8 -0
  861. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts/Editor/MultiFileSelectorSampleWindow.cs +45 -0
  862. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts/Editor/MultiFileSelectorSampleWindow.cs.meta +12 -0
  863. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts/Editor/Samples.UnityHelpers.UIToolkit.Editor.asmdef +19 -0
  864. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts/Editor/Samples.UnityHelpers.UIToolkit.Editor.asmdef.meta +8 -0
  865. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts/Editor.meta +9 -0
  866. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts.meta +9 -0
  867. package/Samples~/UI Toolkit - MultiFile Selector (Editor).meta +9 -0
  868. package/Shaders/Materials/BackgroundMask-Material.mat +59 -59
  869. package/Shaders/Materials/BackgroundMask-Material.mat.meta +8 -8
  870. package/Shaders/Materials.meta +8 -8
  871. package/Shaders/ShaderGraph/BackgroundMask.shadergraph +1653 -1653
  872. package/Shaders/ShaderGraph/BackgroundMask.shadergraph.meta +10 -10
  873. package/Shaders/ShaderGraph/DebugDisplayValue.shadersubgraph +835 -835
  874. package/Shaders/ShaderGraph/DebugDisplayValue.shadersubgraph.meta +10 -10
  875. package/Shaders/ShaderGraph.meta +8 -8
  876. package/Shaders/Support/EnhancedImageSupport.shader +64 -0
  877. package/Shaders/Support/EnhancedImageSupport.shader.meta +9 -0
  878. package/Shaders/Support.meta +8 -0
  879. package/Shaders.meta +8 -8
  880. package/Styles/Elements/Progress/ArcedProgressBar.cs +345 -345
  881. package/Styles/Elements/Progress/ArcedProgressBar.cs.meta +2 -2
  882. package/Styles/Elements/Progress/CircularProgressBar.cs +307 -307
  883. package/Styles/Elements/Progress/CircularProgressBar.cs.meta +2 -2
  884. package/Styles/Elements/Progress/GlitchProgressBar.cs +416 -416
  885. package/Styles/Elements/Progress/GlitchProgressBar.cs.meta +2 -2
  886. package/Styles/Elements/Progress/LiquidProgressBar.cs +632 -632
  887. package/Styles/Elements/Progress/LiquidProgressBar.cs.meta +2 -2
  888. package/Styles/Elements/Progress/MarchingAntsProgressBar.cs +722 -722
  889. package/Styles/Elements/Progress/MarchingAntsProgressBar.cs.meta +2 -2
  890. package/Styles/Elements/Progress/RegularProgressBar.cs +405 -405
  891. package/Styles/Elements/Progress/RegularProgressBar.cs.meta +2 -2
  892. package/Styles/Elements/Progress/WigglyProgressBar.cs +837 -837
  893. package/Styles/Elements/Progress/WigglyProgressBar.cs.meta +2 -2
  894. package/Styles/Elements/Progress.meta +2 -2
  895. package/Styles/Elements.meta +2 -2
  896. package/Styles/USS/ArcedProgressBar.uss +18 -18
  897. package/Styles/USS/ArcedProgressBar.uss.meta +2 -2
  898. package/Styles/USS/CirclularProgressBar.uss +17 -17
  899. package/Styles/USS/CirclularProgressBar.uss.meta +2 -2
  900. package/Styles/USS/RegularProgressBar.uss +32 -32
  901. package/Styles/USS/RegularProgressBar.uss.meta +2 -2
  902. package/Styles/USS/WigglyProgressBar.uss +16 -16
  903. package/Styles/USS/WigglyProgressBar.uss.meta +2 -2
  904. package/Styles/USS.meta +2 -2
  905. package/Styles/WallstopStudios.UnityHelpers.Styles.asmdef +14 -17
  906. package/Styles/WallstopStudios.UnityHelpers.Styles.asmdef.meta +7 -7
  907. package/Styles.meta +2 -2
  908. package/THIRD_PARTY_NOTICES.md +74 -0
  909. package/THIRD_PARTY_NOTICES.md.meta +7 -0
  910. package/Tests/Editor/Attributes/AnimationEventHelpersTests.cs +171 -0
  911. package/Tests/Editor/Attributes/AnimationEventHelpersTests.cs.meta +11 -0
  912. package/Tests/Editor/Attributes.meta +8 -0
  913. package/Tests/Editor/Core/Attributes/RelationalComponentAssignerTests.cs +118 -0
  914. package/Tests/Editor/Core/Attributes/RelationalComponentAssignerTests.cs.meta +11 -0
  915. package/Tests/Editor/Core/Attributes.meta +8 -0
  916. package/Tests/Editor/Core.meta +8 -0
  917. package/Tests/Editor/Extensions/SerializedPropertyExtensionsTests.cs +194 -0
  918. package/Tests/Editor/Extensions/SerializedPropertyExtensionsTests.cs.meta +3 -0
  919. package/Tests/Editor/Extensions.meta +3 -0
  920. package/Tests/Editor/Helper/DummyScriptableObject.cs +6 -0
  921. package/Tests/Editor/Helper/DummyScriptableObject.cs.meta +3 -0
  922. package/Tests/Editor/Helper/HelpersTests.cs +101 -0
  923. package/Tests/Editor/Helper/HelpersTests.cs.meta +3 -0
  924. package/Tests/Editor/Helper/ObjectHelpersEditorTests.cs +63 -0
  925. package/Tests/Editor/Helper/ObjectHelpersEditorTests.cs.meta +11 -0
  926. package/Tests/Editor/Helper/PromptScope.cs +28 -0
  927. package/Tests/Editor/Helper/PromptScope.cs.meta +11 -0
  928. package/Tests/Editor/Helper/ReflectionHelpersEditorTests.cs +105 -0
  929. package/Tests/Editor/Helper/ReflectionHelpersEditorTests.cs.meta +11 -0
  930. package/Tests/Editor/Helper/SpriteHelpersTests.cs +334 -0
  931. package/Tests/Editor/Helper/SpriteHelpersTests.cs.meta +3 -0
  932. package/Tests/Editor/Helper/SpriteSettingsApplierAdditionalTests.cs +183 -0
  933. package/Tests/Editor/Helper/SpriteSettingsApplierAdditionalTests.cs.meta +11 -0
  934. package/Tests/Editor/Helper/SpriteSettingsApplierTests.cs +161 -0
  935. package/Tests/Editor/Helper/SpriteSettingsApplierTests.cs.meta +11 -0
  936. package/Tests/Editor/Helper.meta +3 -0
  937. package/Tests/Editor/Integrations/VContainer/VContainerIntegrationCompilationTests.cs +40 -0
  938. package/Tests/Editor/Integrations/VContainer/VContainerIntegrationCompilationTests.cs.meta +11 -0
  939. package/Tests/Editor/Integrations/VContainer/VContainerRelationalEntryPointTests.cs +81 -0
  940. package/Tests/Editor/Integrations/VContainer/VContainerRelationalEntryPointTests.cs.meta +11 -0
  941. package/Tests/Editor/Integrations/VContainer/VContainerRelationalHelpersTests.cs +170 -0
  942. package/Tests/Editor/Integrations/VContainer/VContainerRelationalHelpersTests.cs.meta +11 -0
  943. package/Tests/Editor/Integrations/VContainer/WallstopStudios.UnityHelpers.Tests.Editor.VContainer.asmdef +37 -0
  944. package/Tests/Editor/Integrations/VContainer/WallstopStudios.UnityHelpers.Tests.Editor.VContainer.asmdef.meta +7 -0
  945. package/Tests/Editor/Integrations/VContainer.meta +8 -0
  946. package/Tests/Editor/Integrations/Zenject/WallstopStudios.UnityHelpers.Tests.Editor.Zenject.asmdef +37 -0
  947. package/Tests/Editor/Integrations/Zenject/WallstopStudios.UnityHelpers.Tests.Editor.Zenject.asmdef.meta +7 -0
  948. package/Tests/Editor/Integrations/Zenject/ZenjectIntegrationCompilationTests.cs +40 -0
  949. package/Tests/Editor/Integrations/Zenject/ZenjectIntegrationCompilationTests.cs.meta +11 -0
  950. package/Tests/Editor/Integrations/Zenject/ZenjectRelationalHelpersTests.cs +131 -0
  951. package/Tests/Editor/Integrations/Zenject/ZenjectRelationalHelpersTests.cs.meta +11 -0
  952. package/Tests/Editor/Integrations/Zenject/ZenjectRelationalInitializerTests.cs +80 -0
  953. package/Tests/Editor/Integrations/Zenject/ZenjectRelationalInitializerTests.cs.meta +11 -0
  954. package/Tests/Editor/Integrations/Zenject.meta +8 -0
  955. package/Tests/Editor/Integrations.meta +8 -0
  956. package/Tests/Editor/MultiFileSelectorElementTests.cs +265 -0
  957. package/Tests/Editor/MultiFileSelectorElementTests.cs.meta +11 -0
  958. package/Tests/Editor/MultiFileSelectorPersistenceManagerTests.cs +100 -0
  959. package/Tests/Editor/MultiFileSelectorPersistenceManagerTests.cs.meta +11 -0
  960. package/Tests/Editor/PersistentDirectorySettingsTests.cs +59 -0
  961. package/Tests/Editor/PersistentDirectorySettingsTests.cs.meta +11 -0
  962. package/Tests/Editor/PrefabCheckerReportTests.cs +32 -0
  963. package/Tests/Editor/PrefabCheckerReportTests.cs.meta +11 -0
  964. package/Tests/Editor/Sprites/AnimationCopierFilterTests.cs +64 -0
  965. package/Tests/Editor/Sprites/AnimationCopierFilterTests.cs.meta +11 -0
  966. package/Tests/Editor/Sprites/AnimationCopierWindowTests.cs +199 -0
  967. package/Tests/Editor/Sprites/AnimationCopierWindowTests.cs.meta +11 -0
  968. package/Tests/Editor/Sprites/AnimationViewerWindowTests.cs +38 -0
  969. package/Tests/Editor/Sprites/AnimationViewerWindowTests.cs.meta +11 -0
  970. package/Tests/Editor/Sprites/ScriptableSpriteAtlasEditorTests.cs +108 -0
  971. package/Tests/Editor/Sprites/ScriptableSpriteAtlasEditorTests.cs.meta +11 -0
  972. package/Tests/Editor/Sprites/SpriteCropperAdditionalTests.cs +323 -0
  973. package/Tests/Editor/Sprites/SpriteCropperAdditionalTests.cs.meta +11 -0
  974. package/Tests/Editor/Sprites/SpriteCropperTests.cs +162 -0
  975. package/Tests/Editor/Sprites/SpriteCropperTests.cs.meta +11 -0
  976. package/Tests/Editor/Sprites/SpritePivotAdjusterAdditionalTests.cs +227 -0
  977. package/Tests/Editor/Sprites/SpritePivotAdjusterAdditionalTests.cs.meta +11 -0
  978. package/Tests/Editor/Sprites/SpritePivotAdjusterTests.cs +113 -0
  979. package/Tests/Editor/Sprites/SpritePivotAdjusterTests.cs.meta +11 -0
  980. package/Tests/Editor/Sprites/TexturePlatformNameHelperTests.cs +46 -0
  981. package/Tests/Editor/Sprites/TexturePlatformNameHelperTests.cs.meta +11 -0
  982. package/Tests/Editor/Sprites/TextureResizerWizardTests.cs +248 -0
  983. package/Tests/Editor/Sprites/TextureResizerWizardTests.cs.meta +11 -0
  984. package/Tests/Editor/Sprites/TextureSettingsApplierAPITests.cs +180 -0
  985. package/Tests/Editor/Sprites/TextureSettingsApplierAPITests.cs.meta +11 -0
  986. package/Tests/Editor/Sprites/TextureSettingsApplierWizardAdditionalTests.cs +295 -0
  987. package/Tests/Editor/Sprites/TextureSettingsApplierWizardAdditionalTests.cs.meta +11 -0
  988. package/Tests/Editor/Sprites/TextureSettingsApplierWizardTests.cs +134 -0
  989. package/Tests/Editor/Sprites/TextureSettingsApplierWizardTests.cs.meta +11 -0
  990. package/Tests/Editor/Sprites.meta +8 -0
  991. package/Tests/Editor/TestComponents/PrewarmTesterComponent.cs +10 -0
  992. package/Tests/Editor/TestComponents/PrewarmTesterComponent.cs.meta +11 -0
  993. package/Tests/Editor/TestComponents.meta +8 -0
  994. package/Tests/Editor/Tools/ImageBlurToolTests.cs +47 -0
  995. package/Tests/Editor/Tools/ImageBlurToolTests.cs.meta +11 -0
  996. package/Tests/Editor/Tools.meta +8 -0
  997. package/Tests/Editor/Utils/CommonTestBase.cs +250 -0
  998. package/Tests/Editor/Utils/CommonTestBase.cs.meta +11 -0
  999. package/Tests/Editor/Utils/ScriptableObjectSingletonCreatorEditorTests.cs +306 -0
  1000. package/Tests/Editor/Utils/ScriptableObjectSingletonCreatorEditorTests.cs.meta +9 -0
  1001. package/Tests/Editor/Utils/ScriptableObjectSingletonCreatorTests.cs +183 -0
  1002. package/Tests/Editor/Utils/ScriptableObjectSingletonCreatorTests.cs.meta +11 -0
  1003. package/Tests/Editor/Utils/ScriptableObjectSingletonTests.cs +466 -0
  1004. package/Tests/Editor/Utils/ScriptableObjectSingletonTests.cs.meta +11 -0
  1005. package/Tests/Editor/Utils.meta +3 -0
  1006. package/Tests/Editor/WallstopStudios.UnityHelpers.Tests.Editor.asmdef +19 -0
  1007. package/Tests/Editor/WallstopStudios.UnityHelpers.Tests.Editor.asmdef.meta +7 -0
  1008. package/Tests/Editor/Windows/FitTextureSizeWindowTests.cs +773 -0
  1009. package/Tests/Editor/Windows/FitTextureSizeWindowTests.cs.meta +11 -0
  1010. package/Tests/Editor/Windows/PrefabCheckerFolderAdditionTests.cs +96 -0
  1011. package/Tests/Editor/Windows/PrefabCheckerFolderAdditionTests.cs.meta +11 -0
  1012. package/Tests/Editor/Windows/PrefabCheckerTests.cs +81 -0
  1013. package/Tests/Editor/Windows/PrefabCheckerTests.cs.meta +11 -0
  1014. package/Tests/Editor/Windows.meta +8 -0
  1015. package/Tests/Editor.meta +8 -0
  1016. package/Tests/Runtime/AssemblyInfo.cs +4 -0
  1017. package/Tests/Runtime/AssemblyInfo.cs.meta +3 -0
  1018. package/Tests/Runtime/Attributes/ChildComponentTests.cs +766 -81
  1019. package/Tests/Runtime/Attributes/ChildComponentTests.cs.meta +2 -2
  1020. package/Tests/Runtime/Attributes/Components/ExpectChildSpriteRenderers.cs +28 -28
  1021. package/Tests/Runtime/Attributes/Components/ExpectChildSpriteRenderers.cs.meta +2 -2
  1022. package/Tests/Runtime/Attributes/Components/ExpectParentSpriteRenderers.cs +28 -28
  1023. package/Tests/Runtime/Attributes/Components/ExpectParentSpriteRenderers.cs.meta +2 -2
  1024. package/Tests/Runtime/{Components → Attributes/Components}/RelationalComponentTesterComplex.cs +34 -34
  1025. package/Tests/Runtime/{Components → Attributes/Components}/RelationalComponentTesterComplex.cs.meta +2 -2
  1026. package/Tests/Runtime/Attributes/Components/RelationalComponentsTesterSimple.cs +37 -0
  1027. package/Tests/Runtime/{Components → Attributes/Components}/RelationalComponentsTesterSimple.cs.meta +2 -2
  1028. package/Tests/Runtime/Attributes/Components.meta +2 -2
  1029. package/Tests/Runtime/Attributes/MiscRuntimeAttributeTests.cs +75 -0
  1030. package/Tests/Runtime/Attributes/MiscRuntimeAttributeTests.cs.meta +11 -0
  1031. package/Tests/Runtime/Attributes/NotNullAttributeTests.cs +26 -0
  1032. package/Tests/Runtime/Attributes/NotNullAttributeTests.cs.meta +3 -0
  1033. package/Tests/Runtime/Attributes/ParentComponentTests.cs +565 -68
  1034. package/Tests/Runtime/Attributes/ParentComponentTests.cs.meta +2 -2
  1035. package/Tests/Runtime/Attributes/RelationalComponentAdvancedTests.cs +614 -0
  1036. package/Tests/Runtime/Attributes/RelationalComponentAdvancedTests.cs.meta +11 -0
  1037. package/Tests/Runtime/Attributes/RelationalComponentBackwardCompatibilityTests.cs +478 -0
  1038. package/Tests/Runtime/Attributes/RelationalComponentBackwardCompatibilityTests.cs.meta +11 -0
  1039. package/Tests/Runtime/Attributes/RelationalComponentExtensionsTests.cs +56 -0
  1040. package/Tests/Runtime/Attributes/RelationalComponentExtensionsTests.cs.meta +11 -0
  1041. package/Tests/Runtime/Attributes/RelationalComponentHashSetTests.cs +226 -0
  1042. package/Tests/Runtime/Attributes/RelationalComponentHashSetTests.cs.meta +11 -0
  1043. package/Tests/Runtime/Attributes/RelationalComponentInitializerTests.cs +98 -0
  1044. package/Tests/Runtime/Attributes/RelationalComponentInitializerTests.cs.meta +11 -0
  1045. package/Tests/Runtime/Attributes/RelationalComponentTagAndNameFilterEdgeTests.cs +234 -0
  1046. package/Tests/Runtime/Attributes/RelationalComponentTagAndNameFilterEdgeTests.cs.meta +11 -0
  1047. package/Tests/Runtime/Attributes/SiblingComponentTests.cs +721 -0
  1048. package/Tests/Runtime/Attributes/SiblingComponentTests.cs.meta +11 -0
  1049. package/Tests/Runtime/Attributes/ValidateAssignmentAttributeTests.cs +96 -0
  1050. package/Tests/Runtime/Attributes/ValidateAssignmentAttributeTests.cs.meta +11 -0
  1051. package/Tests/Runtime/Attributes.meta +2 -2
  1052. package/Tests/Runtime/Core/Random/RandomComparerTests.cs +166 -0
  1053. package/Tests/Runtime/Core/Random/RandomComparerTests.cs.meta +11 -0
  1054. package/Tests/Runtime/Core/Random.meta +8 -0
  1055. package/Tests/Runtime/Core/Threading/SingleThreadedThreadPoolTests.cs +56 -56
  1056. package/Tests/Runtime/Core/Threading/SingleThreadedThreadPoolTests.cs.meta +2 -2
  1057. package/Tests/Runtime/Core/Threading.meta +2 -2
  1058. package/Tests/Runtime/Core.meta +2 -2
  1059. package/Tests/Runtime/DataStructures/BalancedKDTree2DTests.cs +562 -0
  1060. package/Tests/Runtime/DataStructures/{BalancedKDTreeTests.cs.meta → BalancedKDTree2DTests.cs.meta} +11 -11
  1061. package/Tests/Runtime/DataStructures/BalancedKDTree3DTests.cs +10 -0
  1062. package/Tests/Runtime/DataStructures/BalancedKDTree3DTests.cs.meta +11 -0
  1063. package/Tests/Runtime/DataStructures/BitSetTests.cs +1400 -0
  1064. package/Tests/Runtime/DataStructures/BitSetTests.cs.meta +3 -0
  1065. package/Tests/Runtime/DataStructures/BoundingBox3DTests.cs +1215 -0
  1066. package/Tests/Runtime/DataStructures/BoundingBox3DTests.cs.meta +11 -0
  1067. package/Tests/Runtime/DataStructures/CircleTests.cs +965 -0
  1068. package/Tests/Runtime/DataStructures/CircleTests.cs.meta +11 -0
  1069. package/Tests/Runtime/DataStructures/CyclicBufferTests.cs +2083 -324
  1070. package/Tests/Runtime/DataStructures/CyclicBufferTests.cs.meta +2 -2
  1071. package/Tests/Runtime/DataStructures/DequeTests.cs +790 -0
  1072. package/Tests/Runtime/DataStructures/DequeTests.cs.meta +3 -0
  1073. package/Tests/Runtime/DataStructures/DisjointSetTests.cs +1114 -0
  1074. package/Tests/Runtime/DataStructures/DisjointSetTests.cs.meta +3 -0
  1075. package/Tests/Runtime/DataStructures/FastOneOfTests.cs +966 -0
  1076. package/Tests/Runtime/DataStructures/FastOneOfTests.cs.meta +11 -0
  1077. package/Tests/Runtime/DataStructures/FastVector2IntTests.cs +286 -0
  1078. package/Tests/Runtime/DataStructures/FastVector2IntTests.cs.meta +11 -0
  1079. package/Tests/Runtime/DataStructures/FastVector3IntTests.cs +414 -0
  1080. package/Tests/Runtime/DataStructures/FastVector3IntTests.cs.meta +11 -0
  1081. package/Tests/Runtime/DataStructures/HeapTests.cs +1953 -0
  1082. package/Tests/Runtime/DataStructures/HeapTests.cs.meta +11 -0
  1083. package/Tests/Runtime/DataStructures/ImmutableBitSetTests.cs +833 -0
  1084. package/Tests/Runtime/DataStructures/ImmutableBitSetTests.cs.meta +3 -0
  1085. package/Tests/Runtime/DataStructures/KDTree3DTestsBase.cs +297 -0
  1086. package/Tests/Runtime/DataStructures/KDTree3DTestsBase.cs.meta +11 -0
  1087. package/Tests/Runtime/DataStructures/OctTree3DTests.cs +351 -0
  1088. package/Tests/Runtime/DataStructures/OctTree3DTests.cs.meta +11 -0
  1089. package/Tests/Runtime/DataStructures/PriorityQueueTests.cs +71 -0
  1090. package/Tests/Runtime/DataStructures/PriorityQueueTests.cs.meta +3 -0
  1091. package/Tests/Runtime/DataStructures/ProtobufSerializationTests.cs +475 -0
  1092. package/Tests/Runtime/DataStructures/ProtobufSerializationTests.cs.meta +11 -0
  1093. package/Tests/Runtime/DataStructures/QuadTree2DTests.cs +660 -0
  1094. package/Tests/Runtime/DataStructures/QuadTree2DTests.cs.meta +11 -0
  1095. package/Tests/Runtime/DataStructures/RTree2DTests.cs +823 -0
  1096. package/Tests/Runtime/DataStructures/RTree2DTests.cs.meta +3 -0
  1097. package/Tests/Runtime/DataStructures/RTree3DTests.cs +270 -0
  1098. package/Tests/Runtime/DataStructures/RTree3DTests.cs.meta +11 -0
  1099. package/Tests/Runtime/DataStructures/SparseSetTests.cs +1146 -0
  1100. package/Tests/Runtime/DataStructures/SparseSetTests.cs.meta +3 -0
  1101. package/Tests/Runtime/DataStructures/SpatialHashTests.cs +992 -0
  1102. package/Tests/Runtime/DataStructures/SpatialHashTests.cs.meta +11 -0
  1103. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsConsistencyTests.cs +351 -0
  1104. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsConsistencyTests.cs.meta +11 -0
  1105. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsEdgeTests.cs +127 -0
  1106. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsEdgeTests.cs.meta +11 -0
  1107. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsFuzzTests.cs +218 -0
  1108. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsFuzzTests.cs.meta +11 -0
  1109. package/Tests/Runtime/DataStructures/SpatialTree2DTests.cs +396 -0
  1110. package/Tests/Runtime/DataStructures/SpatialTree2DTests.cs.meta +11 -0
  1111. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsConsistencyTests.cs +281 -0
  1112. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsConsistencyTests.cs.meta +11 -0
  1113. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsEdgeTests.cs +127 -0
  1114. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsEdgeTests.cs.meta +11 -0
  1115. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsFuzzTests.cs +170 -0
  1116. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsFuzzTests.cs.meta +11 -0
  1117. package/Tests/Runtime/DataStructures/SpatialTree3DTests.cs +474 -0
  1118. package/Tests/Runtime/DataStructures/SpatialTree3DTests.cs.meta +11 -0
  1119. package/Tests/Runtime/DataStructures/SphereTests.cs +806 -0
  1120. package/Tests/Runtime/DataStructures/SphereTests.cs.meta +3 -0
  1121. package/Tests/Runtime/DataStructures/StringWrapperTests.cs +333 -0
  1122. package/Tests/Runtime/DataStructures/StringWrapperTests.cs.meta +11 -0
  1123. package/Tests/Runtime/DataStructures/TimedCacheTests.cs +669 -0
  1124. package/Tests/Runtime/DataStructures/TimedCacheTests.cs.meta +11 -0
  1125. package/Tests/Runtime/DataStructures/TrieTests.cs +3385 -0
  1126. package/Tests/Runtime/DataStructures/TrieTests.cs.meta +11 -0
  1127. package/Tests/Runtime/DataStructures/UnbalancedKDTree2DTests.cs +565 -0
  1128. package/Tests/Runtime/DataStructures/{UnbalancedKDTreeTests.cs.meta → UnbalancedKDTree2DTests.cs.meta} +11 -11
  1129. package/Tests/Runtime/DataStructures/UnbalancedKDTree3DTests.cs +10 -0
  1130. package/Tests/Runtime/DataStructures/UnbalancedKDTree3DTests.cs.meta +11 -0
  1131. package/Tests/Runtime/DataStructures.meta +8 -8
  1132. package/Tests/Runtime/Extensions/AnimatorExtensionsTests.cs +28 -0
  1133. package/Tests/Runtime/Extensions/AnimatorExtensionsTests.cs.meta +11 -0
  1134. package/Tests/Runtime/Extensions/AsyncOperationExtensionsTests.cs +667 -0
  1135. package/Tests/Runtime/Extensions/AsyncOperationExtensionsTests.cs.meta +11 -0
  1136. package/Tests/Runtime/Extensions/CircleExtensionsTests.cs +230 -0
  1137. package/Tests/Runtime/Extensions/CircleExtensionsTests.cs.meta +11 -0
  1138. package/Tests/Runtime/Extensions/ColorExtensionsTests.cs +55 -0
  1139. package/Tests/Runtime/Extensions/ColorExtensionsTests.cs.meta +11 -0
  1140. package/Tests/Runtime/Extensions/DictionaryExtensionTests.cs +724 -438
  1141. package/Tests/Runtime/Extensions/DictionaryExtensionTests.cs.meta +2 -2
  1142. package/Tests/Runtime/Extensions/DirectionExtensionsComprehensiveTests.cs +403 -0
  1143. package/Tests/Runtime/Extensions/DirectionExtensionsComprehensiveTests.cs.meta +11 -0
  1144. package/Tests/Runtime/Extensions/DirectionExtensionsTests.cs +69 -0
  1145. package/Tests/Runtime/Extensions/DirectionExtensionsTests.cs.meta +11 -0
  1146. package/Tests/Runtime/Extensions/EnumExtensionTests.cs +809 -153
  1147. package/Tests/Runtime/Extensions/EnumExtensionTests.cs.meta +2 -2
  1148. package/Tests/Runtime/Extensions/IEnumerableExtensionsTests.cs +191 -0
  1149. package/Tests/Runtime/Extensions/IEnumerableExtensionsTests.cs.meta +11 -0
  1150. package/Tests/Runtime/Extensions/IListExtensionTests.cs +955 -169
  1151. package/Tests/Runtime/Extensions/IListExtensionTests.cs.meta +2 -2
  1152. package/Tests/Runtime/Extensions/IReadonlyListExtensionTests.cs +266 -58
  1153. package/Tests/Runtime/Extensions/IReadonlyListExtensionTests.cs.meta +2 -2
  1154. package/Tests/Runtime/Extensions/LoggingExtensionTests.cs +721 -718
  1155. package/Tests/Runtime/Extensions/LoggingExtensionTests.cs.meta +2 -2
  1156. package/Tests/Runtime/Extensions/ProtoEqualityExtensionsTests.cs +565 -0
  1157. package/Tests/Runtime/Extensions/ProtoEqualityExtensionsTests.cs.meta +3 -0
  1158. package/Tests/Runtime/Extensions/ProtoEqualityPolymorphismTests.cs +100 -0
  1159. package/Tests/Runtime/Extensions/ProtoEqualityPolymorphismTests.cs.meta +11 -0
  1160. package/Tests/Runtime/Extensions/RandomExtensionTests.cs +719 -27
  1161. package/Tests/Runtime/Extensions/RandomExtensionTests.cs.meta +2 -2
  1162. package/Tests/Runtime/Extensions/StringExtensionTests.cs +2592 -31
  1163. package/Tests/Runtime/Extensions/StringExtensionTests.cs.meta +2 -2
  1164. package/Tests/Runtime/Extensions/UnityExtensionsBasicTests.cs +166 -0
  1165. package/Tests/Runtime/Extensions/UnityExtensionsBasicTests.cs.meta +11 -0
  1166. package/Tests/Runtime/Extensions/UnityExtensionsComprehensiveTests.cs +1446 -0
  1167. package/Tests/Runtime/Extensions/UnityExtensionsComprehensiveTests.cs.meta +11 -0
  1168. package/Tests/Runtime/Extensions/UnityExtensionsMathTests.cs +1779 -0
  1169. package/Tests/Runtime/Extensions/UnityExtensionsMathTests.cs.meta +11 -0
  1170. package/Tests/Runtime/Extensions/UnityExtensionsVector2HullTests.cs +292 -0
  1171. package/Tests/Runtime/Extensions/UnityExtensionsVector2HullTests.cs.meta +11 -0
  1172. package/Tests/Runtime/Extensions/UnityLogTagFormatterEdgeTests.cs +260 -0
  1173. package/Tests/Runtime/Extensions/UnityLogTagFormatterEdgeTests.cs.meta +11 -0
  1174. package/Tests/Runtime/Extensions.meta +2 -2
  1175. package/Tests/Runtime/Helper/ArrayConverterTests.cs +19 -19
  1176. package/Tests/Runtime/Helper/ArrayConverterTests.cs.meta +2 -2
  1177. package/Tests/Runtime/Helper/AssignUtilitiesTests.cs +38 -0
  1178. package/Tests/Runtime/Helper/AssignUtilitiesTests.cs.meta +11 -0
  1179. package/Tests/Runtime/Helper/DirectoryHelperTests.cs +347 -0
  1180. package/Tests/Runtime/Helper/DirectoryHelperTests.cs.meta +11 -0
  1181. package/Tests/Runtime/Helper/EnumerablesTests.cs +45 -0
  1182. package/Tests/Runtime/Helper/EnumerablesTests.cs.meta +11 -0
  1183. package/Tests/Runtime/Helper/FileHelperTests.cs +481 -0
  1184. package/Tests/Runtime/Helper/FileHelperTests.cs.meta +11 -0
  1185. package/Tests/Runtime/Helper/FormattingHelpersTests.cs +353 -0
  1186. package/Tests/Runtime/Helper/FormattingHelpersTests.cs.meta +11 -0
  1187. package/Tests/Runtime/Helper/FuncBasedComparerTests.cs +27 -0
  1188. package/Tests/Runtime/Helper/FuncBasedComparerTests.cs.meta +11 -0
  1189. package/Tests/Runtime/Helper/GeometryTests.cs +517 -0
  1190. package/Tests/Runtime/Helper/GeometryTests.cs.meta +3 -0
  1191. package/Tests/Runtime/Helper/HelpersTests.cs +749 -0
  1192. package/Tests/Runtime/Helper/HelpersTests.cs.meta +11 -0
  1193. package/Tests/Runtime/Helper/IterationHelpersTests.cs +173 -0
  1194. package/Tests/Runtime/Helper/IterationHelpersTests.cs.meta +11 -0
  1195. package/Tests/Runtime/Helper/LineHelperTests.cs +662 -0
  1196. package/Tests/Runtime/Helper/LineHelperTests.cs.meta +11 -0
  1197. package/Tests/Runtime/Helper/ObjectHelperTests.cs +444 -432
  1198. package/Tests/Runtime/Helper/ObjectHelperTests.cs.meta +2 -2
  1199. package/Tests/Runtime/Helper/ObjectsTests.cs +363 -0
  1200. package/Tests/Runtime/Helper/ObjectsTests.cs.meta +3 -0
  1201. package/Tests/Runtime/Helper/PathHelperTests.cs +183 -0
  1202. package/Tests/Runtime/Helper/PathHelperTests.cs.meta +11 -0
  1203. package/Tests/Runtime/Helper/ReflectionHelperTests.cs +2199 -1493
  1204. package/Tests/Runtime/Helper/ReflectionHelperTests.cs.meta +2 -2
  1205. package/Tests/Runtime/Helper/ReflectionHelpersMemberLookupTests.cs +192 -0
  1206. package/Tests/Runtime/Helper/ReflectionHelpersMemberLookupTests.cs.meta +11 -0
  1207. package/Tests/Runtime/Helper/ReflectionHelpersTypeScanningTests.cs +58 -0
  1208. package/Tests/Runtime/Helper/ReflectionHelpersTypeScanningTests.cs.meta +11 -0
  1209. package/Tests/Runtime/Helper/SceneHelperTests.cs +77 -94
  1210. package/Tests/Runtime/Helper/SceneHelperTests.cs.meta +2 -2
  1211. package/Tests/Runtime/Helper/UnityMainThreadDispatcherTests.cs +45 -0
  1212. package/Tests/Runtime/Helper/UnityMainThreadDispatcherTests.cs.meta +11 -0
  1213. package/Tests/Runtime/Helper/WallMathTests.cs +1884 -233
  1214. package/Tests/Runtime/Helper/WallMathTests.cs.meta +2 -2
  1215. package/Tests/Runtime/Helper.meta +2 -2
  1216. package/Tests/Runtime/Integrations/VContainer/RelationalComponentsVContainerTests.cs +601 -0
  1217. package/Tests/Runtime/Integrations/VContainer/RelationalComponentsVContainerTests.cs.meta +11 -0
  1218. package/Tests/Runtime/Integrations/VContainer/RelationalObjectPoolsVContainerTests.cs +86 -0
  1219. package/Tests/Runtime/Integrations/VContainer/RelationalObjectPoolsVContainerTests.cs.meta +11 -0
  1220. package/Tests/Runtime/Integrations/VContainer/WallstopStudios.UnityHelpers.Tests.Runtime.VContainer.asmdef +38 -0
  1221. package/Tests/Runtime/Integrations/VContainer/WallstopStudios.UnityHelpers.Tests.Runtime.VContainer.asmdef.meta +7 -0
  1222. package/Tests/Runtime/Integrations/VContainer.meta +8 -0
  1223. package/Tests/Runtime/Integrations/Zenject/RelationalComponentsZenjectTests.cs +619 -0
  1224. package/Tests/Runtime/Integrations/Zenject/RelationalComponentsZenjectTests.cs.meta +11 -0
  1225. package/Tests/Runtime/Integrations/Zenject/WallstopStudios.UnityHelpers.Tests.Runtime.Zenject.asmdef +38 -0
  1226. package/Tests/Runtime/Integrations/Zenject/WallstopStudios.UnityHelpers.Tests.Runtime.Zenject.asmdef.meta +7 -0
  1227. package/Tests/Runtime/Integrations/Zenject.meta +8 -0
  1228. package/Tests/Runtime/Integrations.meta +8 -0
  1229. package/Tests/Runtime/Math/Line2DTests.cs +594 -0
  1230. package/Tests/Runtime/Math/Line2DTests.cs.meta +11 -0
  1231. package/Tests/Runtime/Math/Line3DTests.cs +655 -0
  1232. package/Tests/Runtime/Math/Line3DTests.cs.meta +11 -0
  1233. package/Tests/Runtime/Math/LineTests.cs +480 -0
  1234. package/Tests/Runtime/Math/LineTests.cs.meta +11 -0
  1235. package/Tests/Runtime/Math/ParabolaTests.cs +477 -0
  1236. package/Tests/Runtime/Math/ParabolaTests.cs.meta +11 -0
  1237. package/Tests/Runtime/Math/PointPolygonCheckTests.cs +939 -0
  1238. package/Tests/Runtime/Math/PointPolygonCheckTests.cs.meta +11 -0
  1239. package/Tests/Runtime/Math/RangeTests.cs +197 -0
  1240. package/Tests/Runtime/Math/RangeTests.cs.meta +11 -0
  1241. package/Tests/Runtime/Math.meta +8 -0
  1242. package/Tests/Runtime/Performance/BenchmarkReadmeUpdater.cs +81 -0
  1243. package/Tests/Runtime/Performance/BenchmarkReadmeUpdater.cs.meta +11 -0
  1244. package/Tests/Runtime/Performance/JsonSerializationPerformanceTests.cs +421 -0
  1245. package/Tests/Runtime/Performance/JsonSerializationPerformanceTests.cs.meta +3 -0
  1246. package/Tests/Runtime/Performance/ListExtensionPerformanceTests.cs +76 -76
  1247. package/Tests/Runtime/Performance/ListExtensionPerformanceTests.cs.meta +2 -2
  1248. package/Tests/Runtime/Performance/ProtoEqualsPerformanceTests.cs +161 -0
  1249. package/Tests/Runtime/Performance/ProtoEqualsPerformanceTests.cs.meta +11 -0
  1250. package/Tests/Runtime/Performance/ProtoSerializationPerformanceTests.cs +207 -0
  1251. package/Tests/Runtime/Performance/ProtoSerializationPerformanceTests.cs.meta +3 -0
  1252. package/Tests/Runtime/Performance/RandomPerformanceTests.cs +195 -181
  1253. package/Tests/Runtime/Performance/RandomPerformanceTests.cs.meta +11 -11
  1254. package/Tests/Runtime/Performance/RelationComponentPerformanceTests.cs +60 -61
  1255. package/Tests/Runtime/Performance/RelationComponentPerformanceTests.cs.meta +2 -2
  1256. package/Tests/Runtime/Performance/SpatialTree2DPerformanceTests.cs +697 -0
  1257. package/Tests/Runtime/Performance/SpatialTree2DPerformanceTests.cs.meta +11 -0
  1258. package/Tests/Runtime/Performance/SpatialTree3DPerformanceTests.cs +653 -0
  1259. package/Tests/Runtime/Performance/SpatialTree3DPerformanceTests.cs.meta +11 -0
  1260. package/Tests/Runtime/Performance.meta +8 -8
  1261. package/Tests/Runtime/Random/DotNetRandomTests.cs +9 -9
  1262. package/Tests/Runtime/Random/DotNetRandomTests.cs.meta +2 -2
  1263. package/Tests/Runtime/Random/IllusionFlowTests.cs +12 -12
  1264. package/Tests/Runtime/Random/IllusionFlowTests.cs.meta +2 -2
  1265. package/Tests/Runtime/Random/LinearCongruentialGeneratorTests.cs +12 -12
  1266. package/Tests/Runtime/Random/LinearCongruentialGeneratorTests.cs.meta +2 -2
  1267. package/Tests/Runtime/Random/PcgRandomTests.cs +9 -9
  1268. package/Tests/Runtime/Random/PcgRandomTests.cs.meta +11 -11
  1269. package/Tests/Runtime/Random/RandomProtoSerializationTests.cs +494 -0
  1270. package/Tests/Runtime/Random/RandomProtoSerializationTests.cs.meta +3 -0
  1271. package/Tests/Runtime/Random/RandomStateSerializationTests.cs +304 -0
  1272. package/Tests/Runtime/Random/RandomStateSerializationTests.cs.meta +4 -0
  1273. package/Tests/Runtime/Random/RandomTestBase.cs +836 -787
  1274. package/Tests/Runtime/Random/RandomTestBase.cs.meta +11 -11
  1275. package/Tests/Runtime/Random/RomuDuoRandomTests.cs +9 -9
  1276. package/Tests/Runtime/Random/RomuDuoRandomTests.cs.meta +2 -2
  1277. package/Tests/Runtime/Random/SplitMix64RandomTests.cs +9 -9
  1278. package/Tests/Runtime/Random/SplitMix64RandomTests.cs.meta +2 -2
  1279. package/Tests/Runtime/Random/SquirrelRandomTests.cs +14 -14
  1280. package/Tests/Runtime/Random/SquirrelRandomTests.cs.meta +11 -11
  1281. package/Tests/Runtime/Random/SystemRandomTests.cs +10 -10
  1282. package/Tests/Runtime/Random/SystemRandomTests.cs.meta +11 -11
  1283. package/Tests/Runtime/Random/UnityRandomTests.cs +9 -9
  1284. package/Tests/Runtime/Random/UnityRandomTests.cs.meta +11 -11
  1285. package/Tests/Runtime/Random/WyRandomTests.cs +9 -9
  1286. package/Tests/Runtime/Random/WyRandomTests.cs.meta +2 -2
  1287. package/Tests/Runtime/Random/XorShiftRandomTests.cs +9 -9
  1288. package/Tests/Runtime/Random/XorShiftRandomTests.cs.meta +11 -11
  1289. package/Tests/Runtime/Random/XoroShiroRandomTests.cs +9 -9
  1290. package/Tests/Runtime/Random/XoroShiroRandomTests.cs.meta +2 -2
  1291. package/Tests/Runtime/Random.meta +8 -8
  1292. package/Tests/Runtime/RuntimeTestTimeouts.cs +3 -0
  1293. package/Tests/Runtime/RuntimeTestTimeouts.cs.meta +11 -0
  1294. package/Tests/Runtime/Scenes/Test1.unity +723 -723
  1295. package/Tests/Runtime/Scenes/Test1.unity.meta +7 -7
  1296. package/Tests/Runtime/Scenes/Test2.unity +723 -723
  1297. package/Tests/Runtime/Scenes/Test2.unity.meta +7 -7
  1298. package/Tests/Runtime/Scenes.meta +2 -2
  1299. package/Tests/Runtime/Serialization/AdaptersJsonTests.cs +67 -0
  1300. package/Tests/Runtime/Serialization/AdaptersJsonTests.cs.meta +11 -0
  1301. package/Tests/Runtime/Serialization/BitSetJsonTests.cs +50 -0
  1302. package/Tests/Runtime/Serialization/BitSetJsonTests.cs.meta +11 -0
  1303. package/Tests/Runtime/Serialization/CyclicBufferJsonTests.cs +67 -0
  1304. package/Tests/Runtime/Serialization/CyclicBufferJsonTests.cs.meta +11 -0
  1305. package/Tests/Runtime/Serialization/DequeJsonTests.cs +70 -0
  1306. package/Tests/Runtime/Serialization/DequeJsonTests.cs.meta +11 -0
  1307. package/Tests/Runtime/Serialization/ImmutableBitSetJsonTests.cs +25 -0
  1308. package/Tests/Runtime/Serialization/ImmutableBitSetJsonTests.cs.meta +11 -0
  1309. package/Tests/Runtime/Serialization/JsonConverterAdditionalTests.cs +30 -0
  1310. package/Tests/Runtime/Serialization/JsonConverterAdditionalTests.cs.meta +11 -0
  1311. package/Tests/Runtime/Serialization/JsonConverterTests.cs +1153 -0
  1312. package/Tests/Runtime/Serialization/JsonConverterTests.cs.meta +11 -0
  1313. package/Tests/Runtime/Serialization/JsonRoundtripComprehensiveTests.cs +239 -0
  1314. package/Tests/Runtime/Serialization/JsonRoundtripComprehensiveTests.cs.meta +11 -0
  1315. package/Tests/Runtime/Serialization/JsonSerializationCorrectnessTests.cs +458 -0
  1316. package/Tests/Runtime/Serialization/JsonSerializationCorrectnessTests.cs.meta +3 -0
  1317. package/Tests/Runtime/Serialization/JsonSerializationTest.cs +167 -156
  1318. package/Tests/Runtime/Serialization/JsonSerializationTest.cs.meta +2 -2
  1319. package/Tests/Runtime/Serialization/MathJsonTests.cs +79 -0
  1320. package/Tests/Runtime/Serialization/MathJsonTests.cs.meta +11 -0
  1321. package/Tests/Runtime/Serialization/ProtoInterfaceResolutionEdgeTests.cs +76 -0
  1322. package/Tests/Runtime/Serialization/ProtoInterfaceResolutionEdgeTests.cs.meta +11 -0
  1323. package/Tests/Runtime/Serialization/ProtoRootRegistrationTests.cs +80 -0
  1324. package/Tests/Runtime/Serialization/ProtoRootRegistrationTests.cs.meta +11 -0
  1325. package/Tests/Runtime/Serialization/ProtoRoundtripComprehensiveTests.cs +257 -0
  1326. package/Tests/Runtime/Serialization/ProtoRoundtripComprehensiveTests.cs.meta +11 -0
  1327. package/Tests/Runtime/Serialization/ProtoSerializationCorrectnessTests.cs +471 -0
  1328. package/Tests/Runtime/Serialization/ProtoSerializationCorrectnessTests.cs.meta +3 -0
  1329. package/Tests/Runtime/Serialization/ProtoSerializationTests.cs +169 -0
  1330. package/Tests/Runtime/Serialization/ProtoSerializationTests.cs.meta +11 -0
  1331. package/Tests/Runtime/Serialization/ProtoSerializeBehaviorTests.cs +62 -0
  1332. package/Tests/Runtime/Serialization/ProtoSerializeBehaviorTests.cs.meta +11 -0
  1333. package/Tests/Runtime/Serialization/SerializerAdditionalTests.cs +907 -0
  1334. package/Tests/Runtime/Serialization/SerializerAdditionalTests.cs.meta +3 -0
  1335. package/Tests/Runtime/Serialization/SerializerFileIoTests.cs +105 -0
  1336. package/Tests/Runtime/Serialization/SerializerFileIoTests.cs.meta +11 -0
  1337. package/Tests/Runtime/Serialization/TypeConverterTests.cs +34 -0
  1338. package/Tests/Runtime/Serialization/TypeConverterTests.cs.meta +11 -0
  1339. package/Tests/Runtime/Serialization/UnityEngineObjectJsonTests.cs +247 -0
  1340. package/Tests/Runtime/Serialization/UnityEngineObjectJsonTests.cs.meta +11 -0
  1341. package/Tests/Runtime/Serialization.meta +2 -2
  1342. package/Tests/Runtime/Tags/AttributeComponentTests.cs +174 -0
  1343. package/Tests/Runtime/Tags/AttributeComponentTests.cs.meta +3 -0
  1344. package/Tests/Runtime/Tags/AttributeDataTests.cs +312 -0
  1345. package/Tests/Runtime/Tags/AttributeDataTests.cs.meta +11 -0
  1346. package/Tests/Runtime/Tags/AttributeUtilitiesTests.cs +405 -0
  1347. package/Tests/Runtime/Tags/AttributeUtilitiesTests.cs.meta +3 -0
  1348. package/Tests/Runtime/Tags/CosmeticAndCollisionTests.cs +147 -0
  1349. package/Tests/Runtime/Tags/CosmeticAndCollisionTests.cs.meta +11 -0
  1350. package/Tests/Runtime/Tags/CosmeticEffectDataTests.cs +60 -0
  1351. package/Tests/Runtime/Tags/CosmeticEffectDataTests.cs.meta +3 -0
  1352. package/Tests/Runtime/Tags/EffectHandleTests.cs +61 -0
  1353. package/Tests/Runtime/Tags/EffectHandleTests.cs.meta +3 -0
  1354. package/Tests/Runtime/Tags/EffectHandlerTests.cs +270 -0
  1355. package/Tests/Runtime/Tags/EffectHandlerTests.cs.meta +3 -0
  1356. package/Tests/Runtime/Tags/Helpers/RecordingCosmeticComponent.cs +39 -0
  1357. package/Tests/Runtime/Tags/Helpers/RecordingCosmeticComponent.cs.meta +3 -0
  1358. package/Tests/Runtime/Tags/Helpers/TagTestBase.cs +49 -0
  1359. package/Tests/Runtime/Tags/Helpers/TagTestBase.cs.meta +3 -0
  1360. package/Tests/Runtime/Tags/Helpers/TestAttributesComponent.cs +28 -0
  1361. package/Tests/Runtime/Tags/Helpers/TestAttributesComponent.cs.meta +3 -0
  1362. package/Tests/Runtime/Tags/Helpers.meta +3 -0
  1363. package/Tests/Runtime/Tags/TagHandlerTests.cs +108 -0
  1364. package/Tests/Runtime/Tags/TagHandlerTests.cs.meta +3 -0
  1365. package/Tests/Runtime/Tags.meta +8 -0
  1366. package/Tests/Runtime/TestUtils/CommonTestBase.cs +301 -0
  1367. package/Tests/Runtime/TestUtils/CommonTestBase.cs.meta +11 -0
  1368. package/Tests/Runtime/TestUtils/GCAssert.cs +55 -0
  1369. package/Tests/Runtime/TestUtils/GCAssert.cs.meta +11 -0
  1370. package/Tests/Runtime/TestUtils/SpatialAssert.cs +33 -0
  1371. package/Tests/Runtime/TestUtils/SpatialAssert.cs.meta +11 -0
  1372. package/Tests/Runtime/TestUtils/SpatialDiagnostics.cs +195 -0
  1373. package/Tests/Runtime/TestUtils/SpatialDiagnostics.cs.meta +11 -0
  1374. package/Tests/Runtime/TestUtils.meta +8 -0
  1375. package/Tests/Runtime/Utils/AnimationEventEqualityComparerTests.cs +144 -0
  1376. package/Tests/Runtime/Utils/AnimationEventEqualityComparerTests.cs.meta +11 -0
  1377. package/Tests/Runtime/Utils/Ascii85Tests.cs +56 -0
  1378. package/Tests/Runtime/Utils/Ascii85Tests.cs.meta +11 -0
  1379. package/Tests/Runtime/Utils/BuffersTests.cs +1148 -741
  1380. package/Tests/Runtime/Utils/BuffersTests.cs.meta +2 -2
  1381. package/Tests/Runtime/Utils/BuffersWaitInstructionTests.cs +31 -0
  1382. package/Tests/Runtime/Utils/BuffersWaitInstructionTests.cs.meta +11 -0
  1383. package/Tests/Runtime/Utils/CenterPointOffsetTests.cs +67 -0
  1384. package/Tests/Runtime/Utils/CenterPointOffsetTests.cs.meta +11 -0
  1385. package/Tests/Runtime/Utils/ChildSpawnerTests.cs +490 -0
  1386. package/Tests/Runtime/Utils/ChildSpawnerTests.cs.meta +11 -0
  1387. package/Tests/Runtime/Utils/CircleLineRendererTests.cs +80 -0
  1388. package/Tests/Runtime/Utils/CircleLineRendererTests.cs.meta +11 -0
  1389. package/Tests/Runtime/Utils/CollisionProxyTests.cs +442 -0
  1390. package/Tests/Runtime/Utils/CollisionProxyTests.cs.meta +11 -0
  1391. package/Tests/Runtime/Utils/CoroutineHandlerTests.cs +353 -0
  1392. package/Tests/Runtime/Utils/CoroutineHandlerTests.cs.meta +11 -0
  1393. package/Tests/Runtime/Utils/DeferredDisposalResultTests.cs +44 -0
  1394. package/Tests/Runtime/Utils/DeferredDisposalResultTests.cs.meta +11 -0
  1395. package/Tests/Runtime/Utils/LZMAComprehensiveTests.cs +249 -0
  1396. package/Tests/Runtime/Utils/LZMAComprehensiveTests.cs.meta +11 -0
  1397. package/Tests/Runtime/Utils/LZMATests.cs +31 -0
  1398. package/Tests/Runtime/Utils/LZMATests.cs.meta +11 -0
  1399. package/Tests/Runtime/Utils/MatchColliderToSpriteAdditionalTests.cs +86 -0
  1400. package/Tests/Runtime/Utils/MatchColliderToSpriteAdditionalTests.cs.meta +11 -0
  1401. package/Tests/Runtime/Utils/MatchColliderToSpriteTests.cs +503 -0
  1402. package/Tests/Runtime/Utils/MatchColliderToSpriteTests.cs.meta +11 -0
  1403. package/Tests/Runtime/Utils/MatchTransformEdgeTests.cs +34 -0
  1404. package/Tests/Runtime/Utils/MatchTransformEdgeTests.cs.meta +11 -0
  1405. package/Tests/Runtime/Utils/MatchTransformTests.cs +495 -0
  1406. package/Tests/Runtime/Utils/MatchTransformTests.cs.meta +11 -0
  1407. package/Tests/Runtime/Utils/OscillatorTests.cs +540 -0
  1408. package/Tests/Runtime/Utils/OscillatorTests.cs.meta +11 -0
  1409. package/Tests/Runtime/Utils/PolygonCollider2DOptimizerTests.cs +52 -0
  1410. package/Tests/Runtime/Utils/PolygonCollider2DOptimizerTests.cs.meta +11 -0
  1411. package/Tests/Runtime/Utils/RuntimeSingletonTests.cs +766 -0
  1412. package/Tests/Runtime/Utils/RuntimeSingletonTests.cs.meta +11 -0
  1413. package/Tests/Runtime/Utils/SerializedStringComparerEdgeTests.cs +47 -0
  1414. package/Tests/Runtime/Utils/SerializedStringComparerEdgeTests.cs.meta +11 -0
  1415. package/Tests/Runtime/Utils/SerializedStringComparerTests.cs +361 -0
  1416. package/Tests/Runtime/Utils/SerializedStringComparerTests.cs.meta +11 -0
  1417. package/Tests/Runtime/Utils/SpriteRendererMetadataTests.cs +383 -398
  1418. package/Tests/Runtime/Utils/SpriteRendererMetadataTests.cs.meta +2 -2
  1419. package/Tests/Runtime/Utils/SpriteRendererSyncTests.cs +134 -0
  1420. package/Tests/Runtime/Utils/SpriteRendererSyncTests.cs.meta +11 -0
  1421. package/Tests/Runtime/Utils/StartTrackerTests.cs +24 -0
  1422. package/Tests/Runtime/Utils/StartTrackerTests.cs.meta +11 -0
  1423. package/Tests/Runtime/Utils/TextureScaleEdgeTests.cs +114 -0
  1424. package/Tests/Runtime/Utils/TextureScaleEdgeTests.cs.meta +11 -0
  1425. package/Tests/Runtime/Utils/TextureScaleTests.cs +298 -0
  1426. package/Tests/Runtime/Utils/TextureScaleTests.cs.meta +3 -0
  1427. package/Tests/Runtime/Utils/TypeNameSorterAdditionalTests.cs +36 -0
  1428. package/Tests/Runtime/Utils/TypeNameSorterAdditionalTests.cs.meta +11 -0
  1429. package/Tests/Runtime/Utils/TypeNameSorterTests.cs +34 -0
  1430. package/Tests/Runtime/Utils/TypeNameSorterTests.cs.meta +11 -0
  1431. package/Tests/Runtime/Utils/UnityObjectNameComparerEdgeTests.cs +63 -0
  1432. package/Tests/Runtime/Utils/UnityObjectNameComparerEdgeTests.cs.meta +11 -0
  1433. package/Tests/Runtime/Utils/UnityObjectNameComparerTests.cs +59 -0
  1434. package/Tests/Runtime/Utils/UnityObjectNameComparerTests.cs.meta +11 -0
  1435. package/Tests/Runtime/Utils.meta +2 -2
  1436. package/Tests/Runtime/Visuals/AnimatedSpriteLayerTests.cs +266 -0
  1437. package/Tests/Runtime/Visuals/AnimatedSpriteLayerTests.cs.meta +11 -0
  1438. package/Tests/Runtime/Visuals/EnhancedImageTests.cs +153 -0
  1439. package/Tests/Runtime/Visuals/EnhancedImageTests.cs.meta +11 -0
  1440. package/Tests/Runtime/Visuals/LayeredImageTests.cs +422 -0
  1441. package/Tests/Runtime/Visuals/LayeredImageTests.cs.meta +11 -0
  1442. package/Tests/Runtime/Visuals/VisualsTestHelpers.cs +125 -0
  1443. package/Tests/Runtime/Visuals/VisualsTestHelpers.cs.meta +11 -0
  1444. package/Tests/Runtime/Visuals.meta +3 -0
  1445. package/Tests/Runtime/WallstopStudios.UnityHelpers.Tests.Runtime.asmdef +24 -23
  1446. package/Tests/Runtime/WallstopStudios.UnityHelpers.Tests.Runtime.asmdef.meta +7 -7
  1447. package/Tests/Runtime.meta +8 -8
  1448. package/Tests.meta +8 -8
  1449. package/URP/VolumeProfiles/Post Processing Bloom Profile(URP).asset +63 -63
  1450. package/URP/VolumeProfiles/Post Processing Bloom Profile(URP).asset.meta +8 -8
  1451. package/URP/VolumeProfiles.meta +8 -8
  1452. package/URP.meta +8 -8
  1453. package/node_modules.meta +8 -0
  1454. package/package-lock.json.meta +7 -0
  1455. package/package.json +99 -38
  1456. package/package.json.meta +7 -7
  1457. package/scripts/check-eol.ps1 +51 -0
  1458. package/scripts/check-eol.ps1.meta +7 -0
  1459. package/scripts/clean-nul.ps1 +29 -0
  1460. package/scripts/clean-nul.ps1.meta +7 -0
  1461. package/scripts/lint-doc-links.ps1 +80 -0
  1462. package/scripts/lint-doc-links.ps1.meta +7 -0
  1463. package/scripts/lint-tests.ps1 +156 -0
  1464. package/scripts/lint-tests.ps1.meta +7 -0
  1465. package/scripts/normalize-eol.ps1 +68 -0
  1466. package/scripts/normalize-eol.ps1.meta +7 -0
  1467. package/scripts.meta +8 -0
  1468. package/Editor/Sprites/ProjectAnimationSettings.cs +0 -50
  1469. package/Editor/Sprites/ProjectAnimationSettings.cs.meta +0 -3
  1470. package/Editor/Sprites/TextureSettingsApplier.cs +0 -178
  1471. package/Editor/Sprites/TextureSettingsApplier.cs.meta +0 -3
  1472. package/Runtime/Core/Attributes/ParentComponent.cs +0 -189
  1473. package/Runtime/Core/DataStructure/KDTree.cs +0 -434
  1474. package/Runtime/Core/DataStructure/QuadTree.cs +0 -431
  1475. package/Runtime/Core/DataStructure/RTree.cs +0 -356
  1476. package/Runtime/Core/Extension/HashSetExtensions.cs +0 -12
  1477. package/Runtime/Core/Extension/HashSetExtensions.cs.meta +0 -11
  1478. package/Runtime/Core/Math/Line.cs +0 -55
  1479. package/Runtime/Core/Math/Line.cs.meta +0 -11
  1480. package/Runtime/Core/Math/XXHash.cs +0 -310
  1481. package/Runtime/Core/Math/XXHash.cs.meta +0 -11
  1482. package/Tests/Runtime/Components/RelationalComponentsTesterSimple.cs +0 -40
  1483. package/Tests/Runtime/Components.meta +0 -3
  1484. package/Tests/Runtime/DataStructures/BalancedKDTreeTests.cs +0 -14
  1485. package/Tests/Runtime/DataStructures/QuadTreeTests.cs +0 -14
  1486. package/Tests/Runtime/DataStructures/QuadTreeTests.cs.meta +0 -11
  1487. package/Tests/Runtime/DataStructures/SpatialTreeTests.cs +0 -130
  1488. package/Tests/Runtime/DataStructures/SpatialTreeTests.cs.meta +0 -11
  1489. package/Tests/Runtime/DataStructures/UnbalancedKDTreeTests.cs +0 -14
  1490. package/Tests/Runtime/Helper/FormattingHelperTests.cs +0 -129
  1491. package/Tests/Runtime/Helper/FormattingHelperTests.cs.meta +0 -3
  1492. package/Tests/Runtime/Performance/KDTreePerformanceTests.cs +0 -14
  1493. package/Tests/Runtime/Performance/KDTreePerformanceTests.cs.meta +0 -11
  1494. package/Tests/Runtime/Performance/QuadTreePerformanceTests.cs +0 -14
  1495. package/Tests/Runtime/Performance/QuadTreePerformanceTests.cs.meta +0 -11
  1496. package/Tests/Runtime/Performance/SpatialTreePerformanceTest.cs +0 -158
  1497. package/Tests/Runtime/Performance/SpatialTreePerformanceTest.cs.meta +0 -11
  1498. package/Tests/Runtime/Performance/UnbalancedKDTreeTests.cs +0 -14
  1499. package/Tests/Runtime/Performance/UnbalancedKDTreeTests.cs.meta +0 -11
  1500. package/Third Party Notices.md +0 -1
@@ -1,31 +1,2592 @@
1
- namespace WallstopStudios.UnityHelpers.Tests.Extensions
2
- {
3
- using NUnit.Framework;
4
- using WallstopStudios.UnityHelpers.Core.Extension;
5
-
6
- public sealed class StringExtensionTests
7
- {
8
- [Test]
9
- public void ToPascalCaseNominal()
10
- {
11
- Assert.AreEqual("PascalCase", "PascalCase".ToPascalCase());
12
- Assert.AreEqual("PascalCase", "pascalCase".ToPascalCase());
13
- Assert.AreEqual("PascalCase", "_pascalCase".ToPascalCase());
14
- Assert.AreEqual("PascalCase", "_PascalCase".ToPascalCase());
15
- Assert.AreEqual("PascalCase", "pascal case".ToPascalCase());
16
- Assert.AreEqual("PascalCase", " __Pascal____ ___Case__ ".ToPascalCase());
17
- }
18
-
19
- [Test]
20
- public void ToPascalCaseCustomSeparator()
21
- {
22
- const string separator = ".";
23
- Assert.AreEqual("Pascal.Case", "PascalCase".ToPascalCase(separator));
24
- Assert.AreEqual("Pascal.Case", "pascalCase".ToPascalCase(separator));
25
- Assert.AreEqual("Pascal.Case", "_pascalCase".ToPascalCase(separator));
26
- Assert.AreEqual("Pascal.Case", "_PascalCase".ToPascalCase(separator));
27
- Assert.AreEqual("Pascal.Case", "pascal case".ToPascalCase(separator));
28
- Assert.AreEqual("Pascal.Case", " __Pascal____ ___Case__ ".ToPascalCase(separator));
29
- }
30
- }
31
- }
1
+ namespace WallstopStudios.UnityHelpers.Tests.Extensions
2
+ {
3
+ using System;
4
+ using System.Collections.Generic;
5
+ using System.Linq;
6
+ using NUnit.Framework;
7
+ using WallstopStudios.UnityHelpers.Core.Extension;
8
+
9
+ public sealed class StringExtensionTests
10
+ {
11
+ [Test]
12
+ public void ToPascalCaseNominal()
13
+ {
14
+ Assert.AreEqual("PascalCase", "PascalCase".ToPascalCase());
15
+ Assert.AreEqual("PascalCase", "pascalCase".ToPascalCase());
16
+ Assert.AreEqual("PascalCase", "_pascalCase".ToPascalCase());
17
+ Assert.AreEqual("PascalCase", "_PascalCase".ToPascalCase());
18
+ Assert.AreEqual("PascalCase", "pascal case".ToPascalCase());
19
+ Assert.AreEqual("PascalCase", " __Pascal____ ___Case__ ".ToPascalCase());
20
+ }
21
+
22
+ [Test]
23
+ public void ToPascalCaseCustomSeparator()
24
+ {
25
+ const string separator = ".";
26
+ Assert.AreEqual("Pascal.Case", "PascalCase".ToPascalCase(separator));
27
+ Assert.AreEqual("Pascal.Case", "pascalCase".ToPascalCase(separator));
28
+ Assert.AreEqual("Pascal.Case", "_pascalCase".ToPascalCase(separator));
29
+ Assert.AreEqual("Pascal.Case", "_PascalCase".ToPascalCase(separator));
30
+ Assert.AreEqual("Pascal.Case", "pascal case".ToPascalCase(separator));
31
+ Assert.AreEqual("Pascal.Case", " __Pascal____ ___Case__ ".ToPascalCase(separator));
32
+ }
33
+
34
+ [Test]
35
+ public void ToPascalCaseEdgeCases()
36
+ {
37
+ Assert.AreEqual(string.Empty, string.Empty.ToPascalCase());
38
+ Assert.AreEqual(string.Empty, ((string)null).ToPascalCase());
39
+ Assert.AreEqual("A", "a".ToPascalCase());
40
+ Assert.AreEqual("A", "A".ToPascalCase());
41
+ Assert.AreEqual(string.Empty, "___".ToPascalCase());
42
+ Assert.AreEqual("Abc", "ABC".ToPascalCase());
43
+ }
44
+
45
+ [Test]
46
+ public void CenterNullOrShorterString()
47
+ {
48
+ Assert.AreEqual(null, ((string)null).Center(10));
49
+ Assert.AreEqual("test", "test".Center(4));
50
+ Assert.AreEqual("test", "test".Center(3));
51
+ Assert.AreEqual("test", "test".Center(0));
52
+ Assert.AreEqual("test", "test".Center(-1));
53
+ }
54
+
55
+ [Test]
56
+ public void CenterPadsCorrectly()
57
+ {
58
+ Assert.AreEqual(" test ", "test".Center(8));
59
+ Assert.AreEqual(" test ", "test".Center(7));
60
+ Assert.AreEqual(" test ", "test".Center(9));
61
+ Assert.AreEqual(" a ", "a".Center(11));
62
+ Assert.AreEqual(string.Empty, string.Empty.Center(0));
63
+ }
64
+
65
+ [Test]
66
+ public void GetBytesHandlesNullAndEmpty()
67
+ {
68
+ byte[] nullResult = ((string)null).GetBytes();
69
+ Assert.IsNotNull(nullResult);
70
+ Assert.AreEqual(0, nullResult.Length);
71
+
72
+ byte[] emptyResult = string.Empty.GetBytes();
73
+ Assert.IsNotNull(emptyResult);
74
+ Assert.AreEqual(0, emptyResult.Length);
75
+ }
76
+
77
+ [Test]
78
+ public void GetBytesConvertsString()
79
+ {
80
+ byte[] result = "test".GetBytes();
81
+ Assert.IsNotNull(result);
82
+ Assert.Greater(result.Length, 0);
83
+
84
+ // Verify round-trip
85
+ string converted = result.GetString();
86
+ Assert.AreEqual("test", converted);
87
+ }
88
+
89
+ [Test]
90
+ public void GetStringConvertsBytes()
91
+ {
92
+ byte[] bytes = { 116, 101, 115, 116 }; // "test" in ASCII
93
+ string result = bytes.GetString();
94
+ Assert.IsNotNull(result);
95
+ Assert.AreEqual("test", result);
96
+ }
97
+
98
+ [Test]
99
+ public void GetBytesAndGetStringRoundTrip()
100
+ {
101
+ string original = "Hello, World! 123 @#$";
102
+ byte[] bytes = original.GetBytes();
103
+ string result = bytes.GetString();
104
+ Assert.AreEqual(original, result);
105
+ }
106
+
107
+ [Test]
108
+ public void ToJsonSerializesValue()
109
+ {
110
+ int intValue = 42;
111
+ string json = intValue.ToJson();
112
+ Assert.IsNotNull(json);
113
+ Assert.IsTrue(json.Contains("42"));
114
+
115
+ string stringValue = "test";
116
+ string stringJson = stringValue.ToJson();
117
+ Assert.IsNotNull(stringJson);
118
+ Assert.IsTrue(stringJson.Contains("test"));
119
+ }
120
+
121
+ [Test]
122
+ public void LevenshteinDistanceIdenticalStrings()
123
+ {
124
+ Assert.AreEqual(0, "test".LevenshteinDistance("test"));
125
+ Assert.AreEqual(0, "".LevenshteinDistance(""));
126
+ Assert.AreEqual(0, "hello world".LevenshteinDistance("hello world"));
127
+ Assert.AreEqual(0, "A".LevenshteinDistance("A"));
128
+ }
129
+
130
+ [Test]
131
+ public void LevenshteinDistanceEmptyStrings()
132
+ {
133
+ Assert.AreEqual(4, "test".LevenshteinDistance(""));
134
+ Assert.AreEqual(5, "".LevenshteinDistance("hello"));
135
+ Assert.AreEqual(0, "".LevenshteinDistance(""));
136
+ }
137
+
138
+ [Test]
139
+ public void LevenshteinDistanceNullStrings()
140
+ {
141
+ Assert.AreEqual(4, "test".LevenshteinDistance(null));
142
+ Assert.AreEqual(5, ((string)null).LevenshteinDistance("hello"));
143
+ Assert.AreEqual(0, ((string)null).LevenshteinDistance(null));
144
+ }
145
+
146
+ [Test]
147
+ public void LevenshteinDistanceSingleCharacterDifference()
148
+ {
149
+ Assert.AreEqual(1, "test".LevenshteinDistance("text"));
150
+ Assert.AreEqual(1, "cat".LevenshteinDistance("bat"));
151
+ Assert.AreEqual(1, "hello".LevenshteinDistance("hallo"));
152
+ }
153
+
154
+ [Test]
155
+ public void LevenshteinDistanceInsertions()
156
+ {
157
+ Assert.AreEqual(1, "cat".LevenshteinDistance("cats"));
158
+ Assert.AreEqual(2, "cat".LevenshteinDistance("catch"));
159
+ Assert.AreEqual(3, "foo".LevenshteinDistance("foobar"));
160
+ }
161
+
162
+ [Test]
163
+ public void LevenshteinDistanceDeletions()
164
+ {
165
+ Assert.AreEqual(1, "cats".LevenshteinDistance("cat"));
166
+ Assert.AreEqual(2, "catch".LevenshteinDistance("cat"));
167
+ Assert.AreEqual(3, "foobar".LevenshteinDistance("foo"));
168
+ }
169
+
170
+ [Test]
171
+ public void LevenshteinDistanceCompletelyDifferent()
172
+ {
173
+ Assert.AreEqual(3, "abc".LevenshteinDistance("xyz"));
174
+ Assert.AreEqual(4, "hello".LevenshteinDistance("world"));
175
+ }
176
+
177
+ [Test]
178
+ public void LevenshteinDistanceClassicExamples()
179
+ {
180
+ Assert.AreEqual(3, "kitten".LevenshteinDistance("sitting"));
181
+ Assert.AreEqual(3, "saturday".LevenshteinDistance("sunday"));
182
+ Assert.AreEqual(2, "book".LevenshteinDistance("back"));
183
+ }
184
+
185
+ [Test]
186
+ public void LevenshteinDistanceCaseSensitive()
187
+ {
188
+ Assert.AreEqual(1, "Test".LevenshteinDistance("test"));
189
+ Assert.AreEqual(4, "TEST".LevenshteinDistance("test"));
190
+ }
191
+
192
+ [Test]
193
+ public void NeedsLowerInvariantConversionReturnsFalseForNullOrWhitespace()
194
+ {
195
+ Assert.IsFalse(((string)null).NeedsLowerInvariantConversion());
196
+ Assert.IsFalse(string.Empty.NeedsLowerInvariantConversion());
197
+ Assert.IsFalse(" ".NeedsLowerInvariantConversion());
198
+ Assert.IsFalse("\t\n\r".NeedsLowerInvariantConversion());
199
+ }
200
+
201
+ [Test]
202
+ public void NeedsLowerInvariantConversionReturnsTrueForUpperCase()
203
+ {
204
+ Assert.IsTrue("Test".NeedsLowerInvariantConversion());
205
+ Assert.IsTrue("TEST".NeedsLowerInvariantConversion());
206
+ Assert.IsTrue("Hello World".NeedsLowerInvariantConversion());
207
+ Assert.IsTrue("A".NeedsLowerInvariantConversion());
208
+ }
209
+
210
+ [Test]
211
+ public void NeedsLowerInvariantConversionReturnsFalseForLowerCase()
212
+ {
213
+ Assert.IsFalse("test".NeedsLowerInvariantConversion());
214
+ Assert.IsFalse("hello world".NeedsLowerInvariantConversion());
215
+ Assert.IsFalse("a".NeedsLowerInvariantConversion());
216
+ Assert.IsFalse("lowercase123".NeedsLowerInvariantConversion());
217
+ }
218
+
219
+ [Test]
220
+ public void NeedsLowerInvariantConversionHandlesMixedCase()
221
+ {
222
+ Assert.IsTrue("helloWorld".NeedsLowerInvariantConversion());
223
+ Assert.IsTrue("test123Test".NeedsLowerInvariantConversion());
224
+ Assert.IsFalse("hello123".NeedsLowerInvariantConversion());
225
+ }
226
+
227
+ [Test]
228
+ public void NeedsTrimReturnsFalseForNullOrEmpty()
229
+ {
230
+ Assert.IsFalse(((string)null).NeedsTrim());
231
+ Assert.IsFalse(string.Empty.NeedsTrim());
232
+ }
233
+
234
+ [Test]
235
+ public void NeedsTrimReturnsTrueForLeadingWhitespace()
236
+ {
237
+ Assert.IsTrue(" test".NeedsTrim());
238
+ Assert.IsTrue(" test".NeedsTrim());
239
+ Assert.IsTrue("\ttest".NeedsTrim());
240
+ Assert.IsTrue("\ntest".NeedsTrim());
241
+ }
242
+
243
+ [Test]
244
+ public void NeedsTrimReturnsTrueForTrailingWhitespace()
245
+ {
246
+ Assert.IsTrue("test ".NeedsTrim());
247
+ Assert.IsTrue("test ".NeedsTrim());
248
+ Assert.IsTrue("test\t".NeedsTrim());
249
+ Assert.IsTrue("test\n".NeedsTrim());
250
+ }
251
+
252
+ [Test]
253
+ public void NeedsTrimReturnsTrueForBothEndsWhitespace()
254
+ {
255
+ Assert.IsTrue(" test ".NeedsTrim());
256
+ Assert.IsTrue(" test ".NeedsTrim());
257
+ Assert.IsTrue("\ttest\n".NeedsTrim());
258
+ }
259
+
260
+ [Test]
261
+ public void NeedsTrimReturnsFalseForNoWhitespace()
262
+ {
263
+ Assert.IsFalse("test".NeedsTrim());
264
+ Assert.IsFalse("hello world".NeedsTrim());
265
+ Assert.IsFalse("a".NeedsTrim());
266
+ Assert.IsFalse("no trim needed".NeedsTrim());
267
+ }
268
+
269
+ [Test]
270
+ public void NeedsTrimHandlesMiddleWhitespace()
271
+ {
272
+ Assert.IsFalse("hello world".NeedsTrim());
273
+ Assert.IsFalse("test\tvalue".NeedsTrim());
274
+ }
275
+
276
+ [Test]
277
+ public void TruncateHandlesNullAndEmpty()
278
+ {
279
+ Assert.AreEqual(null, ((string)null).Truncate(5));
280
+ Assert.AreEqual(string.Empty, string.Empty.Truncate(5));
281
+ }
282
+
283
+ [Test]
284
+ public void TruncateHandlesNegativeLength()
285
+ {
286
+ Assert.AreEqual("test", "test".Truncate(-1));
287
+ }
288
+
289
+ [Test]
290
+ public void TruncateDoesNotTruncateShortStrings()
291
+ {
292
+ Assert.AreEqual("test", "test".Truncate(10));
293
+ Assert.AreEqual("test", "test".Truncate(4));
294
+ }
295
+
296
+ [Test]
297
+ public void TruncateWithDefaultEllipsis()
298
+ {
299
+ Assert.AreEqual("hel...", "hello world".Truncate(6));
300
+ Assert.AreEqual("...", "hello".Truncate(3));
301
+ Assert.AreEqual("hello w...", "hello world".Truncate(10));
302
+ }
303
+
304
+ [Test]
305
+ public void TruncateWithCustomEllipsis()
306
+ {
307
+ Assert.AreEqual("hel--", "hello world".Truncate(5, "--"));
308
+ Assert.AreEqual("hello world", "hello world".Truncate(12, " [more]"));
309
+ }
310
+
311
+ [Test]
312
+ public void TruncateWithEmptyEllipsis()
313
+ {
314
+ Assert.AreEqual("hello", "hello world".Truncate(5, ""));
315
+ Assert.AreEqual("hel", "hello".Truncate(3, ""));
316
+ }
317
+
318
+ [Test]
319
+ public void TruncateWithEllipsisLongerThanMaxLength()
320
+ {
321
+ Assert.AreEqual("...", "hello".Truncate(3, "..."));
322
+ Assert.AreEqual("...", "hello".Truncate(2, "..."));
323
+ }
324
+
325
+ [Test]
326
+ public void ToCamelCaseFromPascalCase()
327
+ {
328
+ Assert.AreEqual("pascalCase", "PascalCase".ToCamelCase());
329
+ Assert.AreEqual("helloWorld", "HelloWorld".ToCamelCase());
330
+ Assert.AreEqual("a", "A".ToCamelCase());
331
+ }
332
+
333
+ [Test]
334
+ public void ToCamelCaseFromSnakeCase()
335
+ {
336
+ Assert.AreEqual("snakeCase", "snake_case".ToCamelCase());
337
+ Assert.AreEqual("helloWorldTest", "hello_world_test".ToCamelCase());
338
+ }
339
+
340
+ [Test]
341
+ public void ToCamelCaseEdgeCases()
342
+ {
343
+ Assert.AreEqual(string.Empty, ((string)null).ToCamelCase());
344
+ Assert.AreEqual(string.Empty, string.Empty.ToCamelCase());
345
+ Assert.AreEqual(string.Empty, "___".ToCamelCase());
346
+ Assert.AreEqual("abc", "ABC".ToCamelCase());
347
+ }
348
+
349
+ [Test]
350
+ public void ToCamelCaseFromKebabCase()
351
+ {
352
+ Assert.AreEqual("kebabCase", "kebab-case".ToCamelCase());
353
+ Assert.AreEqual("helloWorldTest", "hello-world-test".ToCamelCase());
354
+ Assert.AreEqual("myVariable", "my-variable".ToCamelCase());
355
+ }
356
+
357
+ [Test]
358
+ public void ToCamelCaseFromSpaces()
359
+ {
360
+ Assert.AreEqual("helloWorld", "hello world".ToCamelCase());
361
+ Assert.AreEqual("testCase", "test case".ToCamelCase());
362
+ Assert.AreEqual("multipleWords", "multiple words".ToCamelCase());
363
+ }
364
+
365
+ [Test]
366
+ public void ToCamelCaseMultipleConsecutiveUppercase()
367
+ {
368
+ Assert.AreEqual("xmlHttpRequest", "XMLHttpRequest".ToCamelCase());
369
+ Assert.AreEqual("htmlParser", "HTMLParser".ToCamelCase());
370
+ Assert.AreEqual("ioError", "IOError".ToCamelCase());
371
+ Assert.AreEqual("ioException", "IOException".ToCamelCase());
372
+ }
373
+
374
+ [Test]
375
+ public void ToCamelCaseWithNumbers()
376
+ {
377
+ Assert.AreEqual("test123", "test123".ToCamelCase());
378
+ Assert.AreEqual("test123Test", "test_123_test".ToCamelCase());
379
+ Assert.AreEqual("version2", "version2".ToCamelCase());
380
+ Assert.AreEqual("version2Beta", "version_2_beta".ToCamelCase());
381
+ Assert.AreEqual("my3DModel", "my_3D_model".ToCamelCase());
382
+ }
383
+
384
+ [Test]
385
+ public void ToCamelCaseSingleCharacter()
386
+ {
387
+ Assert.AreEqual("a", "a".ToCamelCase());
388
+ Assert.AreEqual("a", "A".ToCamelCase());
389
+ Assert.AreEqual("x", "x".ToCamelCase());
390
+ Assert.AreEqual("z", "Z".ToCamelCase());
391
+ }
392
+
393
+ [Test]
394
+ public void ToCamelCaseSingleWord()
395
+ {
396
+ Assert.AreEqual("test", "test".ToCamelCase());
397
+ Assert.AreEqual("test", "TEST".ToCamelCase());
398
+ Assert.AreEqual("test", "Test".ToCamelCase());
399
+ Assert.AreEqual("hello", "hello".ToCamelCase());
400
+ Assert.AreEqual("hello", "HELLO".ToCamelCase());
401
+ }
402
+
403
+ [Test]
404
+ public void ToCamelCaseOnlySeparators()
405
+ {
406
+ Assert.AreEqual(string.Empty, "___".ToCamelCase());
407
+ Assert.AreEqual(string.Empty, "---".ToCamelCase());
408
+ Assert.AreEqual(string.Empty, " ".ToCamelCase());
409
+ Assert.AreEqual(string.Empty, "_-_ ".ToCamelCase());
410
+ Assert.AreEqual(string.Empty, "...".ToCamelCase());
411
+ }
412
+
413
+ [Test]
414
+ public void ToCamelCaseLeadingAndTrailingSeparators()
415
+ {
416
+ Assert.AreEqual("testCase", "_test_case".ToCamelCase());
417
+ Assert.AreEqual("testCase", "test_case_".ToCamelCase());
418
+ Assert.AreEqual("testCase", "_test_case_".ToCamelCase());
419
+ Assert.AreEqual("testCase", "-test-case-".ToCamelCase());
420
+ Assert.AreEqual("testCase", "__test__case__".ToCamelCase());
421
+ Assert.AreEqual("testCase", " test case ".ToCamelCase());
422
+ }
423
+
424
+ [Test]
425
+ public void ToCamelCaseMultipleSeparators()
426
+ {
427
+ Assert.AreEqual("testCase", "test__case".ToCamelCase());
428
+ Assert.AreEqual("testCase", "test--case".ToCamelCase());
429
+ Assert.AreEqual("testCase", "test__--__case".ToCamelCase());
430
+ Assert.AreEqual("testCase", "test case".ToCamelCase());
431
+ }
432
+
433
+ [Test]
434
+ public void ToCamelCaseMixedSeparators()
435
+ {
436
+ Assert.AreEqual("thisIsATest", "this_is-a_test".ToCamelCase());
437
+ Assert.AreEqual("helloWorldTest", "hello-world_test".ToCamelCase());
438
+ Assert.AreEqual("mixedCaseTest", "mixed_Case-Test".ToCamelCase());
439
+ Assert.AreEqual("testCase", "test.case".ToCamelCase());
440
+ }
441
+
442
+ [Test]
443
+ public void ToCamelCaseAllSeparators()
444
+ {
445
+ Assert.AreEqual("testCase", "test_case".ToCamelCase());
446
+ Assert.AreEqual("testCase", "test-case".ToCamelCase());
447
+ Assert.AreEqual("testCase", "test case".ToCamelCase());
448
+ Assert.AreEqual("testCase", "test.case".ToCamelCase());
449
+ Assert.AreEqual("testCase", "test\tcase".ToCamelCase());
450
+ Assert.AreEqual("testCase", "test\ncase".ToCamelCase());
451
+ Assert.AreEqual("testCase", "test\rcase".ToCamelCase());
452
+ Assert.AreEqual("testCase", "test\"Case".ToCamelCase());
453
+ }
454
+
455
+ [Test]
456
+ public void ToCamelCaseUppercaseWords()
457
+ {
458
+ Assert.AreEqual("thisIsATest", "THIS-IS-A-TEST".ToCamelCase());
459
+ Assert.AreEqual("helloWorld", "HELLO_WORLD".ToCamelCase());
460
+ Assert.AreEqual("abc", "ABC".ToCamelCase());
461
+ }
462
+
463
+ [Test]
464
+ public void ToCamelCaseMixedCamelAndSnake()
465
+ {
466
+ Assert.AreEqual("helloWorldTest", "helloWorld_test".ToCamelCase());
467
+ Assert.AreEqual("testCaseExample", "testCase_example".ToCamelCase());
468
+ Assert.AreEqual("myTestValue", "myTest_value".ToCamelCase());
469
+ }
470
+
471
+ [Test]
472
+ public void ToCamelCaseWithNumbersAndSeparators()
473
+ {
474
+ Assert.AreEqual("test123Case456", "test_123_case_456".ToCamelCase());
475
+ Assert.AreEqual("version2Update", "version-2-update".ToCamelCase());
476
+ Assert.AreEqual("test1Test2", "test1_test2".ToCamelCase());
477
+ Assert.AreEqual("api2Endpoint", "api_2_endpoint".ToCamelCase());
478
+ }
479
+
480
+ [Test]
481
+ public void ToCamelCaseSpecialCharacterSeparators()
482
+ {
483
+ Assert.AreEqual("testCase", "test'Case".ToCamelCase());
484
+ Assert.AreEqual("helloWorld", "hello\"World".ToCamelCase());
485
+ Assert.AreEqual("mixedTest", "mixed.'Test".ToCamelCase());
486
+ }
487
+
488
+ [Test]
489
+ public void ToCamelCaseComplexStrings()
490
+ {
491
+ Assert.AreEqual("thisIsAComplexTest", "this_is_a_complex_test".ToCamelCase());
492
+ Assert.AreEqual("thisIsAComplexTest", "THIS_IS_A_COMPLEX_TEST".ToCamelCase());
493
+ Assert.AreEqual("thisIsAComplexTest", "this-is-a-complex-test".ToCamelCase());
494
+ Assert.AreEqual("thisIsAComplexTest", "ThisIsAComplexTest".ToCamelCase());
495
+ }
496
+
497
+ [Test]
498
+ public void ToCamelCaseAlreadyCamelCase()
499
+ {
500
+ Assert.AreEqual("camelCase", "camelCase".ToCamelCase());
501
+ Assert.AreEqual("alreadyCamelCase", "alreadyCamelCase".ToCamelCase());
502
+ Assert.AreEqual("myVariableName", "myVariableName".ToCamelCase());
503
+ }
504
+
505
+ [Test]
506
+ public void ToCamelCaseNumbersAtBoundaries()
507
+ {
508
+ Assert.AreEqual("test123", "Test123".ToCamelCase());
509
+ Assert.AreEqual("123test", "123test".ToCamelCase());
510
+ Assert.AreEqual("123Test", "123Test".ToCamelCase());
511
+ Assert.AreEqual("test123Test", "test123Test".ToCamelCase());
512
+ }
513
+
514
+ [Test]
515
+ public void ToCamelCaseConsecutiveNumbers()
516
+ {
517
+ Assert.AreEqual("test123456", "test123456".ToCamelCase());
518
+ Assert.AreEqual("test123456End", "test123456End".ToCamelCase());
519
+ Assert.AreEqual("abc123def456", "abc123def456".ToCamelCase());
520
+ }
521
+
522
+ [Test]
523
+ public void ToCamelCaseMixedNumbersAndUppercase()
524
+ {
525
+ Assert.AreEqual("user123Name", "user123Name".ToCamelCase());
526
+ Assert.AreEqual("test456Value", "Test456Value".ToCamelCase());
527
+ Assert.AreEqual("model3D", "model3D".ToCamelCase());
528
+ Assert.AreEqual("http2Client", "http2Client".ToCamelCase());
529
+ }
530
+
531
+ [Test]
532
+ public void ToCamelCaseIdempotent()
533
+ {
534
+ // Applying ToCamelCase twice should give the same result
535
+ Assert.AreEqual("testValue", "testValue".ToCamelCase());
536
+ Assert.AreEqual("helloWorld", "helloWorld".ToCamelCase());
537
+
538
+ // Verify idempotence
539
+ string test1 = "TestValue123";
540
+ string camel1 = test1.ToCamelCase();
541
+ string camel2 = camel1.ToCamelCase();
542
+ Assert.AreEqual(camel1, camel2);
543
+
544
+ string test2 = "hello_world_test";
545
+ string camel3 = test2.ToCamelCase();
546
+ string camel4 = camel3.ToCamelCase();
547
+ Assert.AreEqual(camel3, camel4);
548
+ }
549
+
550
+ [Test]
551
+ public void ToCamelCasePerformanceEdgeCases()
552
+ {
553
+ // Very long strings
554
+ string longString = "a".Repeat(100);
555
+ Assert.AreEqual(longString, longString.ToCamelCase());
556
+
557
+ string longPascal = "Test" + "Value".Repeat(50);
558
+ string result = longPascal.ToCamelCase();
559
+ Assert.IsTrue(char.IsLower(result[0]));
560
+
561
+ // Many separators
562
+ string manySeparators = "test_value_test_value_test_value_test_value";
563
+ string camelResult = manySeparators.ToCamelCase();
564
+ Assert.IsTrue(char.IsLower(camelResult[0]));
565
+ Assert.IsFalse(camelResult.Contains("_"));
566
+ }
567
+
568
+ [Test]
569
+ public void ToCamelCaseUnicodeCharacters()
570
+ {
571
+ // Test with non-ASCII characters
572
+ Assert.AreEqual("tëstCäse", "tëst_cäse".ToCamelCase());
573
+ Assert.AreEqual("hëlloWörld", "hëllo_wörld".ToCamelCase());
574
+ }
575
+
576
+ [Test]
577
+ public void ToCamelCaseWhitespaceVariations()
578
+ {
579
+ Assert.AreEqual("testCase", "test\tcase".ToCamelCase());
580
+ Assert.AreEqual("testCase", "test\ncase".ToCamelCase());
581
+ Assert.AreEqual("testCase", "test\rcase".ToCamelCase());
582
+ Assert.AreEqual("testCase", "test\r\ncase".ToCamelCase());
583
+ }
584
+
585
+ [Test]
586
+ public void ToCamelCaseNumbersOnly()
587
+ {
588
+ Assert.AreEqual("123", "123".ToCamelCase());
589
+ Assert.AreEqual("456789", "456789".ToCamelCase());
590
+ Assert.AreEqual("0", "0".ToCamelCase());
591
+ }
592
+
593
+ [Test]
594
+ public void ToCamelCaseMixedCasingPatterns()
595
+ {
596
+ Assert.AreEqual("tEstCase", "TEstCase".ToCamelCase());
597
+ Assert.AreEqual("hElLoWoRlD", "HElLO_WoRlD".ToCamelCase());
598
+ }
599
+
600
+ [Test]
601
+ public void ToCamelCaseAcronymsAndAbbreviations()
602
+ {
603
+ Assert.AreEqual("httpRequest", "HTTPRequest".ToCamelCase());
604
+ Assert.AreEqual("xmlParser", "XMLParser".ToCamelCase());
605
+ Assert.AreEqual("ioStream", "IOStream".ToCamelCase());
606
+ Assert.AreEqual("urlPath", "URLPath".ToCamelCase());
607
+ Assert.AreEqual("apiKey", "APIKey".ToCamelCase());
608
+ }
609
+
610
+ [Test]
611
+ public void ToCamelCaseQuotesAndApostrophes()
612
+ {
613
+ Assert.AreEqual("dontStop", "don't_stop".ToCamelCase());
614
+ Assert.AreEqual("itsWorking", "it's_working".ToCamelCase());
615
+ Assert.AreEqual("helloWorld", "hello\"World".ToCamelCase());
616
+ }
617
+
618
+ [Test]
619
+ public void ToCamelCaseDotsAndPeriods()
620
+ {
621
+ Assert.AreEqual("fileName", "file.name".ToCamelCase());
622
+ Assert.AreEqual("testCaseValue", "test.case.value".ToCamelCase());
623
+ Assert.AreEqual("myTestFile", "my.test.file".ToCamelCase());
624
+ }
625
+
626
+ [Test]
627
+ public void ToCamelCaseConversionFromAllFormats()
628
+ {
629
+ string expected = "myVariableName";
630
+ Assert.AreEqual(expected, "MyVariableName".ToCamelCase()); // PascalCase
631
+ Assert.AreEqual(expected, "my_variable_name".ToCamelCase()); // snake_case
632
+ Assert.AreEqual(expected, "my-variable-name".ToCamelCase()); // kebab-case
633
+ Assert.AreEqual(expected, "my variable name".ToCamelCase()); // space separated
634
+ Assert.AreEqual(expected, "MY_VARIABLE_NAME".ToCamelCase()); // SCREAMING_SNAKE_CASE
635
+ }
636
+
637
+ [Test]
638
+ public void ToCamelCaseExtremeEdgeCases()
639
+ {
640
+ // Only uppercase
641
+ Assert.AreEqual("aaaa", "AAAA".ToCamelCase());
642
+
643
+ // Only lowercase (should remain lowercase)
644
+ Assert.AreEqual("aaaa", "aaaa".ToCamelCase());
645
+
646
+ // Alternating case
647
+ Assert.AreEqual("aBaBaB", "aBaBaB".ToCamelCase());
648
+
649
+ // Mixed with all separator types
650
+ Assert.AreEqual("testValueExample", "test_value-example".ToCamelCase());
651
+ Assert.AreEqual("myTestCaseHere", "my test-case_here".ToCamelCase());
652
+ }
653
+
654
+ [Test]
655
+ public void ToCamelCaseVeryLongStrings()
656
+ {
657
+ // Test with very long input to ensure performance
658
+ string longInput = string.Join("_", Enumerable.Range(0, 100).Select(i => "word" + i));
659
+ string result = longInput.ToCamelCase();
660
+ Assert.IsTrue(char.IsLower(result[0]));
661
+ Assert.IsFalse(result.Contains("_"));
662
+ Assert.IsTrue(result.Length > 0);
663
+
664
+ // Verify it starts correctly
665
+ Assert.IsTrue(result.StartsWith("word0"));
666
+ }
667
+
668
+ [Test]
669
+ public void ToCamelCaseRepeatedConversions()
670
+ {
671
+ // Ensure repeated conversions are stable (idempotent)
672
+ string[] testCases =
673
+ {
674
+ "hello_world",
675
+ "HelloWorld",
676
+ "HELLO_WORLD",
677
+ "helloWorld",
678
+ "hello-world",
679
+ "hello world",
680
+ };
681
+
682
+ foreach (string testCase in testCases)
683
+ {
684
+ string first = testCase.ToCamelCase();
685
+ string second = first.ToCamelCase();
686
+ string third = second.ToCamelCase();
687
+
688
+ Assert.AreEqual(first, second, $"Failed for {testCase}: first != second");
689
+ Assert.AreEqual(second, third, $"Failed for {testCase}: second != third");
690
+ Assert.IsTrue(
691
+ char.IsLower(first[0]) || char.IsDigit(first[0]) || !char.IsLetter(first[0]),
692
+ $"First character should be lowercase or non-letter for {testCase}"
693
+ );
694
+ }
695
+ }
696
+
697
+ [Test]
698
+ public void ToCamelCaseWithManyConsecutiveCapitals()
699
+ {
700
+ Assert.AreEqual("abcdefg", "ABCDEFG".ToCamelCase());
701
+ Assert.AreEqual("xmlHttpsApiRequest", "XmlHttpsAPIRequest".ToCamelCase());
702
+ Assert.AreEqual("ioExceptionError", "IOExceptionError".ToCamelCase());
703
+ }
704
+
705
+ [Test]
706
+ public void ToCamelCaseWithNumbersBetweenWords()
707
+ {
708
+ Assert.AreEqual("word1Word2Word3", "word1_word2_word3".ToCamelCase());
709
+ Assert.AreEqual("word1Word2Word3", "Word1_Word2_Word3".ToCamelCase());
710
+ Assert.AreEqual("test123Middle456End", "test_123_middle_456_end".ToCamelCase());
711
+ }
712
+
713
+ [Test]
714
+ public void ToCamelCaseSingleLetterWords()
715
+ {
716
+ Assert.AreEqual("aBC", "a_b_c".ToCamelCase());
717
+ Assert.AreEqual("aBC", "A_B_C".ToCamelCase());
718
+ Assert.AreEqual("aBCDEF", "a_b_c_d_e_f".ToCamelCase());
719
+ }
720
+
721
+ [Test]
722
+ public void ToCamelCaseWithTrailingNumbers()
723
+ {
724
+ Assert.AreEqual("test1", "test1".ToCamelCase());
725
+ Assert.AreEqual("test123", "Test123".ToCamelCase());
726
+ Assert.AreEqual("myValue2", "my_value2".ToCamelCase());
727
+ Assert.AreEqual("myValue42", "MyValue42".ToCamelCase());
728
+ }
729
+
730
+ [Test]
731
+ public void ToCamelCaseWithLeadingNumbers()
732
+ {
733
+ Assert.AreEqual("1test", "1test".ToCamelCase());
734
+ Assert.AreEqual("123Test", "123Test".ToCamelCase());
735
+ Assert.AreEqual("2FastAnd2Furious", "2_fast_and_2_furious".ToCamelCase());
736
+ }
737
+
738
+ [Test]
739
+ public void ToCamelCaseRoundTripWithOtherFormats()
740
+ {
741
+ string original = "myVariableName";
742
+
743
+ // Convert to various formats and back
744
+ string snake = original.ToSnakeCase();
745
+ string camelFromSnake = snake.ToCamelCase();
746
+ Assert.AreEqual(original, camelFromSnake);
747
+
748
+ string kebab = original.ToKebabCase();
749
+ string camelFromKebab = kebab.ToCamelCase();
750
+ Assert.AreEqual(original, camelFromKebab);
751
+
752
+ string pascal = original.ToPascalCase();
753
+ string camelFromPascal = pascal.ToCamelCase();
754
+ Assert.AreEqual(original, camelFromPascal);
755
+ }
756
+
757
+ [Test]
758
+ public void ToCamelCaseEmptyPascalCaseResult()
759
+ {
760
+ // When ToPascalCase returns empty, ToCamelCase should too
761
+ Assert.AreEqual(string.Empty, "___".ToCamelCase());
762
+ Assert.AreEqual(string.Empty, "---".ToCamelCase());
763
+ Assert.AreEqual(string.Empty, " ".ToCamelCase());
764
+ }
765
+
766
+ [Test]
767
+ public void ToCamelCasePreservesNumbersAndSpecialPatterns()
768
+ {
769
+ Assert.AreEqual("version2Point0", "version2Point0".ToCamelCase());
770
+ Assert.AreEqual("version2Point0", "Version2Point0".ToCamelCase());
771
+ Assert.AreEqual("iPhone11", "iPhone11".ToCamelCase());
772
+ Assert.AreEqual("iOs14", "iOS14".ToCamelCase());
773
+ }
774
+
775
+ [Test]
776
+ public void ToCamelCaseStressTest()
777
+ {
778
+ // Multiple conversions with different patterns
779
+ string[] patterns =
780
+ {
781
+ "simple",
782
+ "Simple",
783
+ "SIMPLE",
784
+ "simple_case",
785
+ "SimpleCase",
786
+ "SIMPLE_CASE",
787
+ "simple-case",
788
+ "simple case",
789
+ "simpleCase",
790
+ "a",
791
+ "A",
792
+ "aB",
793
+ "AB",
794
+ "a1",
795
+ "A1",
796
+ "1a",
797
+ "1A",
798
+ "XMLHttpRequest",
799
+ "xml_http_request",
800
+ "xml-http-request",
801
+ };
802
+
803
+ foreach (string pattern in patterns)
804
+ {
805
+ string result = pattern.ToCamelCase();
806
+ // Basic invariants
807
+ Assert.IsNotNull(result, $"Result should not be null for: {pattern}");
808
+
809
+ if (result.Length > 0)
810
+ {
811
+ // First character should be lowercase or a non-letter
812
+ Assert.IsTrue(
813
+ char.IsLower(result[0]) || !char.IsLetter(result[0]),
814
+ $"First char should be lowercase or non-letter for {pattern}, got: {result}"
815
+ );
816
+ }
817
+
818
+ // Should not contain separators
819
+ Assert.IsFalse(
820
+ result.Contains("_"),
821
+ $"Should not contain underscore: {pattern} -> {result}"
822
+ );
823
+ Assert.IsFalse(
824
+ result.Contains("-"),
825
+ $"Should not contain dash: {pattern} -> {result}"
826
+ );
827
+ Assert.IsFalse(
828
+ result.Contains(" "),
829
+ $"Should not contain space: {pattern} -> {result}"
830
+ );
831
+
832
+ // Idempotent
833
+ string second = result.ToCamelCase();
834
+ Assert.AreEqual(result, second, $"Should be idempotent for: {pattern}");
835
+ }
836
+ }
837
+
838
+ [Test]
839
+ public void ToSnakeCaseFromPascalCase()
840
+ {
841
+ Assert.AreEqual("pascal_case", "PascalCase".ToSnakeCase());
842
+ Assert.AreEqual("hello_world", "HelloWorld".ToSnakeCase());
843
+ }
844
+
845
+ [Test]
846
+ public void ToSnakeCaseFromCamelCase()
847
+ {
848
+ Assert.AreEqual("camel_case", "camelCase".ToSnakeCase());
849
+ Assert.AreEqual("hello_world_test", "helloWorldTest".ToSnakeCase());
850
+ }
851
+
852
+ [Test]
853
+ public void ToSnakeCaseHandlesConsecutiveUppercase()
854
+ {
855
+ Assert.AreEqual("html_parser", "HTMLParser".ToSnakeCase());
856
+ Assert.AreEqual("xml_http_request", "XMLHttpRequest".ToSnakeCase());
857
+ Assert.AreEqual("io_exception", "IOException".ToSnakeCase());
858
+ }
859
+
860
+ [Test]
861
+ public void ToSnakeCaseEdgeCases()
862
+ {
863
+ Assert.AreEqual(string.Empty, ((string)null).ToSnakeCase());
864
+ Assert.AreEqual(string.Empty, string.Empty.ToSnakeCase());
865
+ Assert.AreEqual("a", "A".ToSnakeCase());
866
+ Assert.AreEqual("abc", "abc".ToSnakeCase());
867
+ Assert.AreEqual(string.Empty, "___".ToSnakeCase());
868
+ }
869
+
870
+ [Test]
871
+ public void ToSnakeCaseHandlesSeparators()
872
+ {
873
+ Assert.AreEqual("hello_world", "hello world".ToSnakeCase());
874
+ Assert.AreEqual("hello_world", "hello__world".ToSnakeCase());
875
+ Assert.AreEqual("hello_world", "hello world".ToSnakeCase());
876
+ }
877
+
878
+ [Test]
879
+ public void ToSnakeCaseStripsQuotesAndApostrophes()
880
+ {
881
+ Assert.AreEqual("test_case", "test'Case".ToSnakeCase());
882
+ Assert.AreEqual("hello_world", "hello\"World".ToSnakeCase());
883
+ Assert.AreEqual("dont_stop", "don't_stop".ToSnakeCase());
884
+ Assert.AreEqual("its_working", "it's_working".ToSnakeCase());
885
+ Assert.AreEqual("mixed_test", "mixed.'Test".ToSnakeCase());
886
+ }
887
+
888
+ [Test]
889
+ public void ToKebabCaseFromPascalCase()
890
+ {
891
+ Assert.AreEqual("pascal-case", "PascalCase".ToKebabCase());
892
+ Assert.AreEqual("hello-world", "HelloWorld".ToKebabCase());
893
+ Assert.AreEqual("a", "A".ToKebabCase());
894
+ }
895
+
896
+ [Test]
897
+ public void ToKebabCaseFromCamelCase()
898
+ {
899
+ Assert.AreEqual("camel-case", "camelCase".ToKebabCase());
900
+ Assert.AreEqual("hello-world-test", "helloWorldTest".ToKebabCase());
901
+ }
902
+
903
+ [Test]
904
+ public void ToKebabCaseFromSnakeCase()
905
+ {
906
+ Assert.AreEqual("snake-case", "snake_case".ToKebabCase());
907
+ Assert.AreEqual("hello-world-test", "hello_world_test".ToKebabCase());
908
+ }
909
+
910
+ [Test]
911
+ public void ToKebabCaseEdgeCases()
912
+ {
913
+ Assert.AreEqual(string.Empty, ((string)null).ToKebabCase());
914
+ Assert.AreEqual(string.Empty, string.Empty.ToKebabCase());
915
+ Assert.AreEqual("html-parser", "HTMLParser".ToKebabCase());
916
+ Assert.AreEqual(string.Empty, "___".ToKebabCase());
917
+ Assert.AreEqual(string.Empty, "---".ToKebabCase());
918
+ Assert.AreEqual("abc", "ABC".ToKebabCase());
919
+ }
920
+
921
+ [Test]
922
+ public void ToKebabCaseHandlesConsecutiveUppercase()
923
+ {
924
+ Assert.AreEqual("html-parser", "HTMLParser".ToKebabCase());
925
+ Assert.AreEqual("xml-http-request", "XMLHttpRequest".ToKebabCase());
926
+ Assert.AreEqual("io-exception", "IOException".ToKebabCase());
927
+ }
928
+
929
+ [Test]
930
+ public void ToKebabCaseHandlesSeparators()
931
+ {
932
+ Assert.AreEqual("hello-world", "hello world".ToKebabCase());
933
+ Assert.AreEqual("hello-world", "hello__world".ToKebabCase());
934
+ Assert.AreEqual("hello-world", "hello world".ToKebabCase());
935
+ }
936
+
937
+ [Test]
938
+ public void ToKebabCaseFromSpaces()
939
+ {
940
+ Assert.AreEqual("hello-world", "hello world".ToKebabCase());
941
+ Assert.AreEqual("test-case", "test case".ToKebabCase());
942
+ Assert.AreEqual("multiple-words", "multiple words".ToKebabCase());
943
+ }
944
+
945
+ [Test]
946
+ public void ToKebabCaseMultipleConsecutiveUppercase()
947
+ {
948
+ Assert.AreEqual("xml-http-request", "XMLHttpRequest".ToKebabCase());
949
+ Assert.AreEqual("html-parser", "HTMLParser".ToKebabCase());
950
+ Assert.AreEqual("io-error", "IOError".ToKebabCase());
951
+ Assert.AreEqual("io-exception", "IOException".ToKebabCase());
952
+ }
953
+
954
+ [Test]
955
+ public void ToKebabCaseSingleCharacter()
956
+ {
957
+ Assert.AreEqual("a", "a".ToKebabCase());
958
+ Assert.AreEqual("a", "A".ToKebabCase());
959
+ Assert.AreEqual("x", "x".ToKebabCase());
960
+ Assert.AreEqual("z", "Z".ToKebabCase());
961
+ }
962
+
963
+ [Test]
964
+ public void ToKebabCaseSingleWord()
965
+ {
966
+ Assert.AreEqual("test", "test".ToKebabCase());
967
+ Assert.AreEqual("test", "TEST".ToKebabCase());
968
+ Assert.AreEqual("test", "Test".ToKebabCase());
969
+ Assert.AreEqual("hello", "hello".ToKebabCase());
970
+ Assert.AreEqual("hello", "HELLO".ToKebabCase());
971
+ }
972
+
973
+ [Test]
974
+ public void ToKebabCaseOnlySeparators()
975
+ {
976
+ Assert.AreEqual(string.Empty, "___".ToKebabCase());
977
+ Assert.AreEqual(string.Empty, "---".ToKebabCase());
978
+ Assert.AreEqual(string.Empty, " ".ToKebabCase());
979
+ Assert.AreEqual(string.Empty, "_-_ ".ToKebabCase());
980
+ Assert.AreEqual(string.Empty, "...".ToKebabCase());
981
+ }
982
+
983
+ [Test]
984
+ public void ToKebabCaseLeadingAndTrailingSeparators()
985
+ {
986
+ Assert.AreEqual("test-case", "_test_case".ToKebabCase());
987
+ Assert.AreEqual("test-case", "test_case_".ToKebabCase());
988
+ Assert.AreEqual("test-case", "_test_case_".ToKebabCase());
989
+ Assert.AreEqual("test-case", "-test-case-".ToKebabCase());
990
+ Assert.AreEqual("test-case", "__test__case__".ToKebabCase());
991
+ Assert.AreEqual("test-case", " test case ".ToKebabCase());
992
+ }
993
+
994
+ [Test]
995
+ public void ToKebabCaseMultipleSeparators()
996
+ {
997
+ Assert.AreEqual("test-case", "test__case".ToKebabCase());
998
+ Assert.AreEqual("test-case", "test--case".ToKebabCase());
999
+ Assert.AreEqual("test-case", "test__--__case".ToKebabCase());
1000
+ Assert.AreEqual("test-case", "test case".ToKebabCase());
1001
+ }
1002
+
1003
+ [Test]
1004
+ public void ToKebabCaseMixedSeparators()
1005
+ {
1006
+ Assert.AreEqual("this-is-a-test", "this_is-a_test".ToKebabCase());
1007
+ Assert.AreEqual("hello-world-test", "hello-world_test".ToKebabCase());
1008
+ Assert.AreEqual("mixed-case-test", "mixed_Case-Test".ToKebabCase());
1009
+ Assert.AreEqual("test-case", "test.case".ToKebabCase());
1010
+ }
1011
+
1012
+ [Test]
1013
+ public void ToKebabCaseAllSeparators()
1014
+ {
1015
+ Assert.AreEqual("test-case", "test_case".ToKebabCase());
1016
+ Assert.AreEqual("test-case", "test-case".ToKebabCase());
1017
+ Assert.AreEqual("test-case", "test case".ToKebabCase());
1018
+ Assert.AreEqual("test-case", "test.case".ToKebabCase());
1019
+ Assert.AreEqual("test-case", "test\tcase".ToKebabCase());
1020
+ Assert.AreEqual("test-case", "test\ncase".ToKebabCase());
1021
+ Assert.AreEqual("test-case", "test\rcase".ToKebabCase());
1022
+ Assert.AreEqual("test-case", "test\"Case".ToKebabCase());
1023
+ }
1024
+
1025
+ [Test]
1026
+ public void ToKebabCaseUppercaseWords()
1027
+ {
1028
+ Assert.AreEqual("this-is-a-test", "THIS-IS-A-TEST".ToKebabCase());
1029
+ Assert.AreEqual("hello-world", "HELLO_WORLD".ToKebabCase());
1030
+ Assert.AreEqual("abc", "ABC".ToKebabCase());
1031
+ }
1032
+
1033
+ [Test]
1034
+ public void ToKebabCaseMixedCamelAndSnake()
1035
+ {
1036
+ Assert.AreEqual("hello-world-test", "helloWorld_test".ToKebabCase());
1037
+ Assert.AreEqual("test-case-example", "testCase_example".ToKebabCase());
1038
+ Assert.AreEqual("my-test-value", "myTest_value".ToKebabCase());
1039
+ }
1040
+
1041
+ [Test]
1042
+ public void ToKebabCaseWithNumbersAndSeparators()
1043
+ {
1044
+ Assert.AreEqual("test-123-case-456", "test_123_case_456".ToKebabCase());
1045
+ Assert.AreEqual("version-2-update", "version-2-update".ToKebabCase());
1046
+ Assert.AreEqual("test1-test2", "test1_test2".ToKebabCase());
1047
+ Assert.AreEqual("api-2-endpoint", "api_2_endpoint".ToKebabCase());
1048
+ }
1049
+
1050
+ [Test]
1051
+ public void ToKebabCaseSpecialCharacterSeparators()
1052
+ {
1053
+ Assert.AreEqual("test-case", "test'Case".ToKebabCase());
1054
+ Assert.AreEqual("hello-world", "hello\"World".ToKebabCase());
1055
+ Assert.AreEqual("mixed-test", "mixed.'Test".ToKebabCase());
1056
+ }
1057
+
1058
+ [Test]
1059
+ public void ToKebabCaseComplexStrings()
1060
+ {
1061
+ Assert.AreEqual("this-is-a-complex-test", "this_is_a_complex_test".ToKebabCase());
1062
+ Assert.AreEqual("this-is-a-complex-test", "THIS_IS_A_COMPLEX_TEST".ToKebabCase());
1063
+ Assert.AreEqual("this-is-a-complex-test", "this-is-a-complex-test".ToKebabCase());
1064
+ Assert.AreEqual("this-is-a-complex-test", "ThisIsAComplexTest".ToKebabCase());
1065
+ }
1066
+
1067
+ [Test]
1068
+ public void ToKebabCaseAlreadyKebabCase()
1069
+ {
1070
+ Assert.AreEqual("kebab-case", "kebab-case".ToKebabCase());
1071
+ Assert.AreEqual("already-kebab-case", "already-kebab-case".ToKebabCase());
1072
+ Assert.AreEqual("my-variable-name", "my-variable-name".ToKebabCase());
1073
+ }
1074
+
1075
+ [Test]
1076
+ public void ToKebabCaseNumbersAtBoundaries()
1077
+ {
1078
+ Assert.AreEqual("test-123", "Test123".ToKebabCase());
1079
+ Assert.AreEqual("123test", "123test".ToKebabCase());
1080
+ Assert.AreEqual("123-test", "123Test".ToKebabCase());
1081
+ Assert.AreEqual("test-123-test", "test123Test".ToKebabCase());
1082
+ }
1083
+
1084
+ [Test]
1085
+ public void ToKebabCaseConsecutiveNumbers()
1086
+ {
1087
+ Assert.AreEqual("test123456", "test123456".ToKebabCase());
1088
+ Assert.AreEqual("test-123456-end", "test123456End".ToKebabCase());
1089
+ Assert.AreEqual("abc123def456", "abc123def456".ToKebabCase());
1090
+ }
1091
+
1092
+ [Test]
1093
+ public void ToKebabCaseMixedNumbersAndUppercase()
1094
+ {
1095
+ Assert.AreEqual("user123name", "user123name".ToKebabCase());
1096
+ Assert.AreEqual("test-456-value", "Test456Value".ToKebabCase());
1097
+ Assert.AreEqual("model3d", "model3d".ToKebabCase());
1098
+ Assert.AreEqual("http2client", "http2client".ToKebabCase());
1099
+ }
1100
+
1101
+ [Test]
1102
+ public void ToKebabCaseIdempotent()
1103
+ {
1104
+ // Applying ToKebabCase twice should give the same result
1105
+ Assert.AreEqual("test-value", "test-value".ToKebabCase());
1106
+ Assert.AreEqual("hello-world", "hello-world".ToKebabCase());
1107
+
1108
+ // Verify idempotence
1109
+ string test1 = "TestValue123";
1110
+ string kebab1 = test1.ToKebabCase();
1111
+ string kebab2 = kebab1.ToKebabCase();
1112
+ Assert.AreEqual(kebab1, kebab2);
1113
+
1114
+ string test2 = "hello_world_test";
1115
+ string kebab3 = test2.ToKebabCase();
1116
+ string kebab4 = kebab3.ToKebabCase();
1117
+ Assert.AreEqual(kebab3, kebab4);
1118
+ }
1119
+
1120
+ [Test]
1121
+ public void ToKebabCasePerformanceEdgeCases()
1122
+ {
1123
+ // Very long strings
1124
+ string longString = "a".Repeat(100);
1125
+ Assert.AreEqual(longString, longString.ToKebabCase());
1126
+
1127
+ string longPascal = "Test" + "Value".Repeat(50);
1128
+ string result = longPascal.ToKebabCase();
1129
+ Assert.IsTrue(result.Contains("-"));
1130
+ Assert.IsFalse(result.Contains("--")); // No double dashes
1131
+
1132
+ // Many separators
1133
+ string manySeparators = "test_value_test_value_test_value_test_value";
1134
+ string kebabResult = manySeparators.ToKebabCase();
1135
+ Assert.IsTrue(kebabResult.Contains("-"));
1136
+ Assert.IsFalse(kebabResult.Contains("_"));
1137
+ }
1138
+
1139
+ [Test]
1140
+ public void ToKebabCaseUnicodeCharacters()
1141
+ {
1142
+ // Test with non-ASCII characters
1143
+ Assert.AreEqual("tëst-cäse", "tëst_cäse".ToKebabCase());
1144
+ Assert.AreEqual("hëllo-wörld", "hëllo_wörld".ToKebabCase());
1145
+ }
1146
+
1147
+ [Test]
1148
+ public void ToKebabCaseWhitespaceVariations()
1149
+ {
1150
+ Assert.AreEqual("test-case", "test\tcase".ToKebabCase());
1151
+ Assert.AreEqual("test-case", "test\ncase".ToKebabCase());
1152
+ Assert.AreEqual("test-case", "test\rcase".ToKebabCase());
1153
+ Assert.AreEqual("test-case", "test\r\ncase".ToKebabCase());
1154
+ }
1155
+
1156
+ [Test]
1157
+ public void ToKebabCaseNumbersOnly()
1158
+ {
1159
+ Assert.AreEqual("123", "123".ToKebabCase());
1160
+ Assert.AreEqual("456789", "456789".ToKebabCase());
1161
+ Assert.AreEqual("0", "0".ToKebabCase());
1162
+ }
1163
+
1164
+ [Test]
1165
+ public void ToKebabCaseMixedCasingPatterns()
1166
+ {
1167
+ Assert.AreEqual("t-est-case", "TEstCase".ToKebabCase());
1168
+ Assert.AreEqual("h-el-lo-wo-rl-d", "HElLO_WoRlD".ToKebabCase());
1169
+ }
1170
+
1171
+ [Test]
1172
+ public void ToKebabCaseAcronymsAndAbbreviations()
1173
+ {
1174
+ Assert.AreEqual("http-request", "HTTPRequest".ToKebabCase());
1175
+ Assert.AreEqual("xml-parser", "XMLParser".ToKebabCase());
1176
+ Assert.AreEqual("io-stream", "IOStream".ToKebabCase());
1177
+ Assert.AreEqual("url-path", "URLPath".ToKebabCase());
1178
+ Assert.AreEqual("api-key", "APIKey".ToKebabCase());
1179
+ }
1180
+
1181
+ [Test]
1182
+ public void ToKebabCaseQuotesAndApostrophes()
1183
+ {
1184
+ Assert.AreEqual("dont-stop", "don't_stop".ToKebabCase());
1185
+ Assert.AreEqual("its-working", "it's_working".ToKebabCase());
1186
+ Assert.AreEqual("hello-world", "hello\"World".ToKebabCase());
1187
+ }
1188
+
1189
+ [Test]
1190
+ public void ToKebabCaseDotsAndPeriods()
1191
+ {
1192
+ Assert.AreEqual("file-name", "file.name".ToKebabCase());
1193
+ Assert.AreEqual("test-case-value", "test.case.value".ToKebabCase());
1194
+ Assert.AreEqual("my-test-file", "my.test.file".ToKebabCase());
1195
+ }
1196
+
1197
+ [Test]
1198
+ public void ToKebabCaseConversionFromAllFormats()
1199
+ {
1200
+ string expected = "my-variable-name";
1201
+ Assert.AreEqual(expected, "MyVariableName".ToKebabCase()); // PascalCase
1202
+ Assert.AreEqual(expected, "my_variable_name".ToKebabCase()); // snake_case
1203
+ Assert.AreEqual(expected, "my-variable-name".ToKebabCase()); // kebab-case
1204
+ Assert.AreEqual(expected, "my variable name".ToKebabCase()); // space separated
1205
+ Assert.AreEqual(expected, "MY_VARIABLE_NAME".ToKebabCase()); // SCREAMING_SNAKE_CASE
1206
+ Assert.AreEqual(expected, "myVariableName".ToKebabCase()); // camelCase
1207
+ }
1208
+
1209
+ [Test]
1210
+ public void ToKebabCaseExtremeEdgeCases()
1211
+ {
1212
+ // Only uppercase
1213
+ Assert.AreEqual("aaaa", "AAAA".ToKebabCase());
1214
+
1215
+ // Only lowercase (should remain lowercase)
1216
+ Assert.AreEqual("aaaa", "aaaa".ToKebabCase());
1217
+
1218
+ // Alternating case
1219
+ Assert.AreEqual("a-ba-ba-b", "aBaBaB".ToKebabCase());
1220
+
1221
+ // Mixed with all separator types
1222
+ Assert.AreEqual("test-value-example", "test_value-example".ToKebabCase());
1223
+ Assert.AreEqual("my-test-case-here", "my test-case_here".ToKebabCase());
1224
+ }
1225
+
1226
+ [Test]
1227
+ public void ToKebabCaseVeryLongStrings()
1228
+ {
1229
+ // Test with very long input to ensure performance
1230
+ string longInput = string.Join("_", Enumerable.Range(0, 100).Select(i => "word" + i));
1231
+ string result = longInput.ToKebabCase();
1232
+ Assert.IsFalse(result.Contains("_"));
1233
+ Assert.IsTrue(result.Contains("-"));
1234
+ Assert.IsTrue(result.Length > 0);
1235
+
1236
+ // Verify it starts correctly
1237
+ Assert.IsTrue(result.StartsWith("word0"));
1238
+ }
1239
+
1240
+ [Test]
1241
+ public void ToKebabCaseRepeatedConversions()
1242
+ {
1243
+ // Ensure repeated conversions are stable (idempotent)
1244
+ string[] testCases =
1245
+ {
1246
+ "hello_world",
1247
+ "HelloWorld",
1248
+ "HELLO_WORLD",
1249
+ "helloWorld",
1250
+ "hello-world",
1251
+ "hello world",
1252
+ };
1253
+
1254
+ foreach (string testCase in testCases)
1255
+ {
1256
+ string first = testCase.ToKebabCase();
1257
+ string second = first.ToKebabCase();
1258
+ string third = second.ToKebabCase();
1259
+
1260
+ Assert.AreEqual(first, second, $"Failed for {testCase}: first != second");
1261
+ Assert.AreEqual(second, third, $"Failed for {testCase}: second != third");
1262
+ Assert.IsTrue(
1263
+ char.IsLower(first[0]) || char.IsDigit(first[0]) || !char.IsLetter(first[0]),
1264
+ $"First character should be lowercase or non-letter for {testCase}"
1265
+ );
1266
+ }
1267
+ }
1268
+
1269
+ [Test]
1270
+ public void ToKebabCaseWithManyConsecutiveCapitals()
1271
+ {
1272
+ Assert.AreEqual("abcdefg", "ABCDEFG".ToKebabCase());
1273
+ Assert.AreEqual("xml-https-api-request", "XmlHttpsAPIRequest".ToKebabCase());
1274
+ Assert.AreEqual("io-exception-error", "IOExceptionError".ToKebabCase());
1275
+ }
1276
+
1277
+ [Test]
1278
+ public void ToKebabCaseWithNumbersBetweenWords()
1279
+ {
1280
+ // Underscores are converted to dashes, but digits within words are preserved
1281
+ Assert.AreEqual("word1-word2-word3", "word1_word2_word3".ToKebabCase());
1282
+ Assert.AreEqual("word-1-word-2-word-3", "Word1_Word2_Word3".ToKebabCase());
1283
+ Assert.AreEqual("test-123-middle-456-end", "test_123_middle_456_end".ToKebabCase());
1284
+ }
1285
+
1286
+ [Test]
1287
+ public void ToKebabCaseSingleLetterWords()
1288
+ {
1289
+ Assert.AreEqual("a-b-c", "a_b_c".ToKebabCase());
1290
+ Assert.AreEqual("a-b-c", "A_B_C".ToKebabCase());
1291
+ Assert.AreEqual("a-b-c-d-e-f", "a_b_c_d_e_f".ToKebabCase());
1292
+ }
1293
+
1294
+ [Test]
1295
+ public void ToKebabCaseWithTrailingNumbers()
1296
+ {
1297
+ Assert.AreEqual("test1", "test1".ToKebabCase());
1298
+ Assert.AreEqual("test-123", "Test123".ToKebabCase());
1299
+ Assert.AreEqual("my-value2", "my_value2".ToKebabCase());
1300
+ Assert.AreEqual("my-value-42", "MyValue42".ToKebabCase());
1301
+ }
1302
+
1303
+ [Test]
1304
+ public void ToKebabCaseWithLeadingNumbers()
1305
+ {
1306
+ Assert.AreEqual("1test", "1test".ToKebabCase());
1307
+ Assert.AreEqual("123-test", "123Test".ToKebabCase());
1308
+ Assert.AreEqual("2-fast-and-2-furious", "2_fast_and_2_furious".ToKebabCase());
1309
+ }
1310
+
1311
+ [Test]
1312
+ public void ToKebabCaseRoundTripWithOtherFormats()
1313
+ {
1314
+ string original = "my-variable-name";
1315
+
1316
+ // Convert to various formats and back
1317
+ string snake = original.Replace('-', '_');
1318
+ string kebabFromSnake = snake.ToKebabCase();
1319
+ Assert.AreEqual(original, kebabFromSnake);
1320
+
1321
+ string pascal = original.ToPascalCase();
1322
+ string kebabFromPascal = pascal.ToKebabCase();
1323
+ Assert.AreEqual(original, kebabFromPascal);
1324
+
1325
+ string camel = original.ToCamelCase();
1326
+ string kebabFromCamel = camel.ToKebabCase();
1327
+ Assert.AreEqual(original, kebabFromCamel);
1328
+ }
1329
+
1330
+ [Test]
1331
+ public void ToKebabCaseEmptyPascalCaseResult()
1332
+ {
1333
+ // When ToPascalCase returns empty, ToKebabCase should too
1334
+ Assert.AreEqual(string.Empty, "___".ToKebabCase());
1335
+ Assert.AreEqual(string.Empty, "---".ToKebabCase());
1336
+ Assert.AreEqual(string.Empty, " ".ToKebabCase());
1337
+ }
1338
+
1339
+ [Test]
1340
+ public void ToKebabCasePreservesNumbersAndSpecialPatterns()
1341
+ {
1342
+ // When uppercase letters are present, digit boundaries get separators
1343
+ Assert.AreEqual("version-2-point-0", "version2Point0".ToKebabCase());
1344
+ Assert.AreEqual("version-2-point-0", "Version2Point0".ToKebabCase());
1345
+ Assert.AreEqual("i-phone-11", "iPhone11".ToKebabCase());
1346
+ Assert.AreEqual("i-os-14", "iOS14".ToKebabCase());
1347
+ }
1348
+
1349
+ [Test]
1350
+ public void ToKebabCaseStressTest()
1351
+ {
1352
+ // Multiple conversions with different patterns
1353
+ string[] patterns =
1354
+ {
1355
+ "simple",
1356
+ "Simple",
1357
+ "SIMPLE",
1358
+ "simple_case",
1359
+ "SimpleCase",
1360
+ "SIMPLE_CASE",
1361
+ "simple-case",
1362
+ "simple case",
1363
+ "simpleCase",
1364
+ "a",
1365
+ "A",
1366
+ "aB",
1367
+ "AB",
1368
+ "a1",
1369
+ "A1",
1370
+ "1a",
1371
+ "1A",
1372
+ "XMLHttpRequest",
1373
+ "xml_http_request",
1374
+ "xml-http-request",
1375
+ };
1376
+
1377
+ foreach (string pattern in patterns)
1378
+ {
1379
+ string result = pattern.ToKebabCase();
1380
+ // Basic invariants
1381
+ Assert.IsNotNull(result, $"Result should not be null for: {pattern}");
1382
+
1383
+ if (result.Length > 0)
1384
+ {
1385
+ // First character should be lowercase or a non-letter
1386
+ Assert.IsTrue(
1387
+ char.IsLower(result[0]) || !char.IsLetter(result[0]),
1388
+ $"First char should be lowercase or non-letter for {pattern}, got: {result}"
1389
+ );
1390
+ }
1391
+
1392
+ // Should not contain other separators
1393
+ Assert.IsFalse(
1394
+ result.Contains("_"),
1395
+ $"Should not contain underscore: {pattern} -> {result}"
1396
+ );
1397
+ Assert.IsFalse(
1398
+ result.Contains(" "),
1399
+ $"Should not contain space: {pattern} -> {result}"
1400
+ );
1401
+
1402
+ // Idempotent
1403
+ string second = result.ToKebabCase();
1404
+ Assert.AreEqual(result, second, $"Should be idempotent for: {pattern}");
1405
+ }
1406
+ }
1407
+
1408
+ [Test]
1409
+ public void ToKebabCasePreservesLowercaseWithNumbers()
1410
+ {
1411
+ // Pure lowercase strings with numbers should be preserved
1412
+ Assert.AreEqual("user123", "user123".ToKebabCase());
1413
+ Assert.AreEqual("test456", "test456".ToKebabCase());
1414
+ Assert.AreEqual("abc789xyz", "abc789xyz".ToKebabCase());
1415
+ Assert.AreEqual("model3d", "model3d".ToKebabCase());
1416
+ Assert.AreEqual("http2", "http2".ToKebabCase());
1417
+
1418
+ // Pure numbers
1419
+ Assert.AreEqual("12345", "12345".ToKebabCase());
1420
+ Assert.AreEqual("0", "0".ToKebabCase());
1421
+
1422
+ // Numbers at start
1423
+ Assert.AreEqual("2fast", "2fast".ToKebabCase());
1424
+ Assert.AreEqual("404error", "404error".ToKebabCase());
1425
+
1426
+ // Numbers at end
1427
+ Assert.AreEqual("version2", "version2".ToKebabCase());
1428
+ Assert.AreEqual("player1", "player1".ToKebabCase());
1429
+
1430
+ // Mixed numbers
1431
+ Assert.AreEqual("abc123def456", "abc123def456".ToKebabCase());
1432
+ Assert.AreEqual("test1middle2end3", "test1middle2end3".ToKebabCase());
1433
+ }
1434
+
1435
+ [Test]
1436
+ public void ToKebabCaseHandlesNumbersWithCasing()
1437
+ {
1438
+ // When uppercase letters are present, digit boundaries should get separators
1439
+ Assert.AreEqual("user-123-name", "user123Name".ToKebabCase());
1440
+ Assert.AreEqual("test-456-value", "Test456Value".ToKebabCase());
1441
+ Assert.AreEqual("model-3-d", "model3D".ToKebabCase());
1442
+ Assert.AreEqual("http-2-client", "http2Client".ToKebabCase());
1443
+
1444
+ // Multiple transitions
1445
+ Assert.AreEqual("api-v-1-endpoint-2", "apiV1Endpoint2".ToKebabCase());
1446
+ Assert.AreEqual("test-123-abc-456-def", "test123Abc456Def".ToKebabCase());
1447
+
1448
+ // Numbers with consecutive uppercase
1449
+ Assert.AreEqual("http-200-ok", "HTTP200OK".ToKebabCase());
1450
+ Assert.AreEqual("xml-2-parser", "XML2Parser".ToKebabCase());
1451
+ }
1452
+
1453
+ [Test]
1454
+ public void ToKebabCaseHandlesUnderscoresWithNumbers()
1455
+ {
1456
+ // Strings already with underscores
1457
+ Assert.AreEqual("test-123", "test_123".ToKebabCase());
1458
+ Assert.AreEqual("value-456-end", "value_456_end".ToKebabCase());
1459
+ Assert.AreEqual("my-3d-model", "my_3d_model".ToKebabCase());
1460
+
1461
+ // Mixed underscores and uppercase
1462
+ Assert.AreEqual("test-123-value", "test_123Value".ToKebabCase());
1463
+ Assert.AreEqual("my-test-2-beta", "my_test2Beta".ToKebabCase());
1464
+ }
1465
+
1466
+ [Test]
1467
+ public void ToKebabCaseHandlesEdgeCasesWithNumbers()
1468
+ {
1469
+ // Single character with number
1470
+ Assert.AreEqual("a1", "a1".ToKebabCase());
1471
+ Assert.AreEqual("a-1", "A1".ToKebabCase());
1472
+
1473
+ // Multiple single digits
1474
+ Assert.AreEqual("a1b2c3d4", "a1b2c3d4".ToKebabCase());
1475
+ Assert.AreEqual("a-1-b-2-c-3-d-4", "A1B2C3D4".ToKebabCase());
1476
+
1477
+ // Consecutive numbers
1478
+ Assert.AreEqual("test123456", "test123456".ToKebabCase());
1479
+ Assert.AreEqual("test-123456-end", "test123456End".ToKebabCase());
1480
+
1481
+ // Number at very start
1482
+ Assert.AreEqual("1test", "1test".ToKebabCase());
1483
+ Assert.AreEqual("1-test", "1Test".ToKebabCase());
1484
+ Assert.AreEqual("123test456", "123test456".ToKebabCase());
1485
+ Assert.AreEqual("123-test-456", "123Test456".ToKebabCase());
1486
+ }
1487
+
1488
+ [Test]
1489
+ public void ToKebabCaseFromExistingKebabCase()
1490
+ {
1491
+ // These were the old tests, now incorporated above
1492
+ Assert.AreEqual("test-123-value", "test123Value".ToKebabCase());
1493
+ }
1494
+
1495
+ [Test]
1496
+ public void ToTitleCaseNominal()
1497
+ {
1498
+ Assert.AreEqual("Hello World", "hello world".ToTitleCase());
1499
+ Assert.AreEqual("The Quick Brown Fox", "the quick brown fox".ToTitleCase());
1500
+ Assert.AreEqual("A", "a".ToTitleCase());
1501
+ }
1502
+
1503
+ [Test]
1504
+ public void ToTitleCasePreservesWhitespace()
1505
+ {
1506
+ Assert.AreEqual("Hello World", "hello world".ToTitleCase());
1507
+ Assert.AreEqual("Hello\tWorld", "hello\tworld".ToTitleCase());
1508
+ }
1509
+
1510
+ [Test]
1511
+ public void ToTitleCaseEdgeCases()
1512
+ {
1513
+ Assert.AreEqual(string.Empty, ((string)null).ToTitleCase());
1514
+ Assert.AreEqual(string.Empty, string.Empty.ToTitleCase());
1515
+ Assert.AreEqual("Hello World", "HELLO WORLD".ToTitleCase());
1516
+ Assert.AreEqual("Hello World", "hELLO wORLD".ToTitleCase());
1517
+ }
1518
+
1519
+ [Test]
1520
+ public void ToTitleCaseHandlesSeparators()
1521
+ {
1522
+ Assert.AreEqual("Hello_World", "hello_world".ToTitleCase());
1523
+ Assert.AreEqual("Hello's World", "hello's world".ToTitleCase());
1524
+ }
1525
+
1526
+ [Test]
1527
+ public void ContainsIgnoreCaseNominal()
1528
+ {
1529
+ Assert.IsTrue("Hello World".ContainsIgnoreCase("hello"));
1530
+ Assert.IsTrue("Hello World".ContainsIgnoreCase("WORLD"));
1531
+ Assert.IsTrue("Hello World".ContainsIgnoreCase("o W"));
1532
+ Assert.IsTrue("test".ContainsIgnoreCase("TEST"));
1533
+ }
1534
+
1535
+ [Test]
1536
+ public void ContainsIgnoreCaseReturnsFalseWhenNotFound()
1537
+ {
1538
+ Assert.IsFalse("Hello World".ContainsIgnoreCase("foo"));
1539
+ Assert.IsFalse("test".ContainsIgnoreCase("testing"));
1540
+ }
1541
+
1542
+ [Test]
1543
+ public void ContainsIgnoreCaseHandlesNulls()
1544
+ {
1545
+ Assert.IsFalse(((string)null).ContainsIgnoreCase("test"));
1546
+ Assert.IsFalse("test".ContainsIgnoreCase(null));
1547
+ Assert.IsFalse(((string)null).ContainsIgnoreCase(null));
1548
+ }
1549
+
1550
+ [Test]
1551
+ public void EqualsIgnoreCaseNominal()
1552
+ {
1553
+ Assert.IsTrue("Hello".EqualsIgnoreCase("hello"));
1554
+ Assert.IsTrue("WORLD".EqualsIgnoreCase("world"));
1555
+ Assert.IsTrue("TeSt".EqualsIgnoreCase("tEsT"));
1556
+ }
1557
+
1558
+ [Test]
1559
+ public void EqualsIgnoreCaseReturnsFalseForDifferent()
1560
+ {
1561
+ Assert.IsFalse("Hello".EqualsIgnoreCase("World"));
1562
+ Assert.IsFalse("test".EqualsIgnoreCase("testing"));
1563
+ }
1564
+
1565
+ [Test]
1566
+ public void EqualsIgnoreCaseHandlesNulls()
1567
+ {
1568
+ Assert.IsTrue(((string)null).EqualsIgnoreCase(null));
1569
+ Assert.IsFalse("test".EqualsIgnoreCase(null));
1570
+ Assert.IsFalse(((string)null).EqualsIgnoreCase("test"));
1571
+ }
1572
+
1573
+ [Test]
1574
+ public void ReverseNominal()
1575
+ {
1576
+ Assert.AreEqual("tset", "test".Reverse());
1577
+ Assert.AreEqual("dlrow olleh", "hello world".Reverse());
1578
+ Assert.AreEqual("a", "a".Reverse());
1579
+ }
1580
+
1581
+ [Test]
1582
+ public void ReverseEdgeCases()
1583
+ {
1584
+ Assert.AreEqual(null, ((string)null).Reverse());
1585
+ Assert.AreEqual(string.Empty, string.Empty.Reverse());
1586
+ }
1587
+
1588
+ [Test]
1589
+ public void ReverseIsPalindrome()
1590
+ {
1591
+ Assert.AreEqual("racecar", "racecar".Reverse());
1592
+ Assert.AreEqual("noon", "noon".Reverse());
1593
+ }
1594
+
1595
+ [Test]
1596
+ public void RemoveWhitespaceNominal()
1597
+ {
1598
+ Assert.AreEqual("helloworld", "hello world".RemoveWhitespace());
1599
+ Assert.AreEqual("test", " test ".RemoveWhitespace());
1600
+ Assert.AreEqual("abc", "a b c".RemoveWhitespace());
1601
+ }
1602
+
1603
+ [Test]
1604
+ public void RemoveWhitespaceHandlesAllTypes()
1605
+ {
1606
+ Assert.AreEqual("test", "t\te\ns\rt ".RemoveWhitespace());
1607
+ Assert.AreEqual("abc", " a b c ".RemoveWhitespace());
1608
+ }
1609
+
1610
+ [Test]
1611
+ public void RemoveWhitespaceEdgeCases()
1612
+ {
1613
+ Assert.AreEqual(null, ((string)null).RemoveWhitespace());
1614
+ Assert.AreEqual(string.Empty, string.Empty.RemoveWhitespace());
1615
+ Assert.AreEqual(string.Empty, " ".RemoveWhitespace());
1616
+ }
1617
+
1618
+ [Test]
1619
+ public void CountOccurrencesCharNominal()
1620
+ {
1621
+ Assert.AreEqual(2, "hello".CountOccurrences('l'));
1622
+ Assert.AreEqual(1, "hello".CountOccurrences('h'));
1623
+ Assert.AreEqual(0, "hello".CountOccurrences('x'));
1624
+ }
1625
+
1626
+ [Test]
1627
+ public void CountOccurrencesCharEdgeCases()
1628
+ {
1629
+ Assert.AreEqual(0, ((string)null).CountOccurrences('a'));
1630
+ Assert.AreEqual(0, string.Empty.CountOccurrences('a'));
1631
+ Assert.AreEqual(5, "aaaaa".CountOccurrences('a'));
1632
+ }
1633
+
1634
+ [Test]
1635
+ public void CountOccurrencesStringNominal()
1636
+ {
1637
+ Assert.AreEqual(2, "hello world hello".CountOccurrences("hello"));
1638
+ Assert.AreEqual(1, "test".CountOccurrences("test"));
1639
+ Assert.AreEqual(0, "hello".CountOccurrences("world"));
1640
+ }
1641
+
1642
+ [Test]
1643
+ public void CountOccurrencesStringOverlapping()
1644
+ {
1645
+ Assert.AreEqual(2, "aaaa".CountOccurrences("aa"));
1646
+ Assert.AreEqual(4, "abababab".CountOccurrences("ab"));
1647
+ }
1648
+
1649
+ [Test]
1650
+ public void CountOccurrencesStringEdgeCases()
1651
+ {
1652
+ Assert.AreEqual(0, ((string)null).CountOccurrences("test"));
1653
+ Assert.AreEqual(0, "test".CountOccurrences(null));
1654
+ Assert.AreEqual(0, string.Empty.CountOccurrences("test"));
1655
+ Assert.AreEqual(0, "test".CountOccurrences(string.Empty));
1656
+ }
1657
+
1658
+ [Test]
1659
+ public void IsNumericNominal()
1660
+ {
1661
+ Assert.IsTrue("123".IsNumeric());
1662
+ Assert.IsTrue("0".IsNumeric());
1663
+ Assert.IsTrue("9876543210".IsNumeric());
1664
+ }
1665
+
1666
+ [Test]
1667
+ public void IsNumericReturnsFalseForNonNumeric()
1668
+ {
1669
+ Assert.IsFalse("abc".IsNumeric());
1670
+ Assert.IsFalse("123abc".IsNumeric());
1671
+ Assert.IsFalse("12.34".IsNumeric());
1672
+ Assert.IsFalse("-123".IsNumeric());
1673
+ Assert.IsFalse("1 2 3".IsNumeric());
1674
+ }
1675
+
1676
+ [Test]
1677
+ public void IsNumericEdgeCases()
1678
+ {
1679
+ Assert.IsFalse(((string)null).IsNumeric());
1680
+ Assert.IsFalse(string.Empty.IsNumeric());
1681
+ Assert.IsFalse(" ".IsNumeric());
1682
+ }
1683
+
1684
+ [Test]
1685
+ public void IsAlphabeticNominal()
1686
+ {
1687
+ Assert.IsTrue("abc".IsAlphabetic());
1688
+ Assert.IsTrue("ABC".IsAlphabetic());
1689
+ Assert.IsTrue("AbCdEf".IsAlphabetic());
1690
+ }
1691
+
1692
+ [Test]
1693
+ public void IsAlphabeticReturnsFalseForNonAlphabetic()
1694
+ {
1695
+ Assert.IsFalse("abc123".IsAlphabetic());
1696
+ Assert.IsFalse("123".IsAlphabetic());
1697
+ Assert.IsFalse("a b c".IsAlphabetic());
1698
+ Assert.IsFalse("hello world".IsAlphabetic());
1699
+ }
1700
+
1701
+ [Test]
1702
+ public void IsAlphabeticEdgeCases()
1703
+ {
1704
+ Assert.IsFalse(((string)null).IsAlphabetic());
1705
+ Assert.IsFalse(string.Empty.IsAlphabetic());
1706
+ Assert.IsFalse(" ".IsAlphabetic());
1707
+ }
1708
+
1709
+ [Test]
1710
+ public void IsAlphanumericNominal()
1711
+ {
1712
+ Assert.IsTrue("abc123".IsAlphanumeric());
1713
+ Assert.IsTrue("ABC".IsAlphanumeric());
1714
+ Assert.IsTrue("123".IsAlphanumeric());
1715
+ Assert.IsTrue("Test123".IsAlphanumeric());
1716
+ }
1717
+
1718
+ [Test]
1719
+ public void IsAlphanumericReturnsFalseForNonAlphanumeric()
1720
+ {
1721
+ Assert.IsFalse("abc 123".IsAlphanumeric());
1722
+ Assert.IsFalse("hello-world".IsAlphanumeric());
1723
+ Assert.IsFalse("test!".IsAlphanumeric());
1724
+ }
1725
+
1726
+ [Test]
1727
+ public void IsAlphanumericEdgeCases()
1728
+ {
1729
+ Assert.IsFalse(((string)null).IsAlphanumeric());
1730
+ Assert.IsFalse(string.Empty.IsAlphanumeric());
1731
+ Assert.IsFalse(" ".IsAlphanumeric());
1732
+ }
1733
+
1734
+ [Test]
1735
+ public void ToBase64AndFromBase64RoundTrip()
1736
+ {
1737
+ string original = "Hello, World!";
1738
+ string base64 = original.ToBase64();
1739
+ Assert.IsNotNull(base64);
1740
+ Assert.AreNotEqual(original, base64);
1741
+
1742
+ string decoded = base64.FromBase64();
1743
+ Assert.AreEqual(original, decoded);
1744
+ }
1745
+
1746
+ [Test]
1747
+ public void ToBase64HandlesSpecialCharacters()
1748
+ {
1749
+ string original = "Test @#$%^&*()";
1750
+ string base64 = original.ToBase64();
1751
+ string decoded = base64.FromBase64();
1752
+ Assert.AreEqual(original, decoded);
1753
+ }
1754
+
1755
+ [Test]
1756
+ public void ToBase64EdgeCases()
1757
+ {
1758
+ Assert.AreEqual(string.Empty, ((string)null).ToBase64());
1759
+ Assert.AreEqual(string.Empty, string.Empty.ToBase64());
1760
+ }
1761
+
1762
+ [Test]
1763
+ public void FromBase64HandlesInvalidInput()
1764
+ {
1765
+ Assert.AreEqual(string.Empty, "not valid base64!@#".FromBase64());
1766
+ Assert.AreEqual(string.Empty, ((string)null).FromBase64());
1767
+ Assert.AreEqual(string.Empty, string.Empty.FromBase64());
1768
+ }
1769
+
1770
+ [Test]
1771
+ public void RepeatNominal()
1772
+ {
1773
+ Assert.AreEqual("aaa", "a".Repeat(3));
1774
+ Assert.AreEqual("testtest", "test".Repeat(2));
1775
+ Assert.AreEqual("hello", "hello".Repeat(1));
1776
+ }
1777
+
1778
+ [Test]
1779
+ public void RepeatEdgeCases()
1780
+ {
1781
+ Assert.AreEqual(string.Empty, ((string)null).Repeat(5));
1782
+ Assert.AreEqual(string.Empty, string.Empty.Repeat(5));
1783
+ Assert.AreEqual(string.Empty, "test".Repeat(0));
1784
+ Assert.AreEqual(string.Empty, "test".Repeat(-1));
1785
+ }
1786
+
1787
+ [Test]
1788
+ public void RepeatLargeCount()
1789
+ {
1790
+ string result = "a".Repeat(100);
1791
+ Assert.AreEqual(100, result.Length);
1792
+ Assert.IsTrue(result.All(c => c == 'a'));
1793
+ }
1794
+
1795
+ [Test]
1796
+ public void SplitCamelCaseNominal()
1797
+ {
1798
+ string[] result = "HelloWorld".SplitCamelCase();
1799
+ Assert.AreEqual(2, result.Length);
1800
+ Assert.AreEqual("Hello", result[0]);
1801
+ Assert.AreEqual("World", result[1]);
1802
+ }
1803
+
1804
+ [Test]
1805
+ public void SplitCamelCaseHandlesConsecutiveUppercase()
1806
+ {
1807
+ string[] result = "HTMLParser".SplitCamelCase();
1808
+ Assert.AreEqual(2, result.Length);
1809
+ Assert.AreEqual("HTML", result[0]);
1810
+ Assert.AreEqual("Parser", result[1]);
1811
+ }
1812
+
1813
+ [Test]
1814
+ public void SplitCamelCaseHandlesSeparators()
1815
+ {
1816
+ string[] result = "hello_world_test".SplitCamelCase();
1817
+ Assert.AreEqual(3, result.Length);
1818
+ Assert.AreEqual("hello", result[0]);
1819
+ Assert.AreEqual("world", result[1]);
1820
+ Assert.AreEqual("test", result[2]);
1821
+ }
1822
+
1823
+ [Test]
1824
+ public void SplitCamelCaseEdgeCases()
1825
+ {
1826
+ Assert.AreEqual(0, ((string)null).SplitCamelCase().Length);
1827
+ Assert.AreEqual(0, string.Empty.SplitCamelCase().Length);
1828
+ Assert.AreEqual(1, "test".SplitCamelCase().Length);
1829
+ }
1830
+
1831
+ [Test]
1832
+ public void SplitCamelCaseMixed()
1833
+ {
1834
+ string[] result = "XMLHttpRequest".SplitCamelCase();
1835
+ Assert.AreEqual(3, result.Length);
1836
+ Assert.AreEqual("XML", result[0]);
1837
+ Assert.AreEqual("Http", result[1]);
1838
+ Assert.AreEqual("Request", result[2]);
1839
+ }
1840
+
1841
+ [Test]
1842
+ public void ReplaceFirstNominal()
1843
+ {
1844
+ Assert.AreEqual("bbc", "abc".ReplaceFirst("a", "b"));
1845
+ Assert.AreEqual("test world test", "hello world test".ReplaceFirst("hello", "test"));
1846
+ Assert.AreEqual("abcdefabc", "abcabc".ReplaceFirst("abc", "abcdef"));
1847
+ }
1848
+
1849
+ [Test]
1850
+ public void ReplaceFirstOnlyReplacesFirst()
1851
+ {
1852
+ Assert.AreEqual("xc abc abc", "abc abc abc".ReplaceFirst("ab", "x"));
1853
+ Assert.AreEqual("test test hello", "hello test hello".ReplaceFirst("hello", "test"));
1854
+ }
1855
+
1856
+ [Test]
1857
+ public void ReplaceFirstEdgeCases()
1858
+ {
1859
+ Assert.AreEqual(null, ((string)null).ReplaceFirst("a", "b"));
1860
+ Assert.AreEqual(string.Empty, string.Empty.ReplaceFirst("a", "b"));
1861
+ Assert.AreEqual("abc", "abc".ReplaceFirst("x", "y"));
1862
+ Assert.AreEqual("abc", "abc".ReplaceFirst("", "x"));
1863
+ }
1864
+
1865
+ [Test]
1866
+ public void ReplaceFirstWithNull()
1867
+ {
1868
+ Assert.AreEqual("bc", "abc".ReplaceFirst("a", null));
1869
+ }
1870
+
1871
+ [Test]
1872
+ public void ReplaceLastNominal()
1873
+ {
1874
+ Assert.AreEqual("abb", "abc".ReplaceLast("c", "b"));
1875
+ Assert.AreEqual("hello test world", "hello test test".ReplaceLast("test", "world"));
1876
+ Assert.AreEqual("abcabcdef", "abcabc".ReplaceLast("abc", "abcdef"));
1877
+ }
1878
+
1879
+ [Test]
1880
+ public void ReplaceLastOnlyReplacesLast()
1881
+ {
1882
+ Assert.AreEqual("abc abc xc", "abc abc abc".ReplaceLast("ab", "x"));
1883
+ Assert.AreEqual("hello test test", "hello test hello".ReplaceLast("hello", "test"));
1884
+ }
1885
+
1886
+ [Test]
1887
+ public void ReplaceLastEdgeCases()
1888
+ {
1889
+ Assert.AreEqual(null, ((string)null).ReplaceLast("a", "b"));
1890
+ Assert.AreEqual(string.Empty, string.Empty.ReplaceLast("a", "b"));
1891
+ Assert.AreEqual("abc", "abc".ReplaceLast("x", "y"));
1892
+ Assert.AreEqual("abc", "abc".ReplaceLast("", "x"));
1893
+ }
1894
+
1895
+ [Test]
1896
+ public void ReplaceLastWithNull()
1897
+ {
1898
+ Assert.AreEqual("ab", "abc".ReplaceLast("c", null));
1899
+ }
1900
+
1901
+ [Test]
1902
+ public void GetBytesHandlesUnicodeCharacters()
1903
+ {
1904
+ string unicode = "Hello 世界 🌍";
1905
+ byte[] bytes = unicode.GetBytes();
1906
+ Assert.IsNotNull(bytes);
1907
+ Assert.Greater(bytes.Length, unicode.Length);
1908
+
1909
+ string decoded = bytes.GetString();
1910
+ Assert.AreEqual(unicode, decoded);
1911
+ }
1912
+
1913
+ [Test]
1914
+ public void GetStringHandlesEmptyArray()
1915
+ {
1916
+ Assert.AreEqual(string.Empty, Array.Empty<byte>().GetString());
1917
+ Assert.AreEqual(string.Empty, ((byte[])null).GetString());
1918
+ }
1919
+
1920
+ [Test]
1921
+ public void ToPascalCaseMultipleConsecutiveUppercase()
1922
+ {
1923
+ Assert.AreEqual("XmlHttpRequest", "XMLHttpRequest".ToPascalCase());
1924
+ Assert.AreEqual("HtmlParser", "HTMLParser".ToPascalCase());
1925
+ Assert.AreEqual("IoError", "IOError".ToPascalCase());
1926
+ }
1927
+
1928
+ [Test]
1929
+ public void ToPascalCaseWithNumbers()
1930
+ {
1931
+ Assert.AreEqual("Test123", "test123".ToPascalCase());
1932
+ Assert.AreEqual("Test123Test", "test_123_test".ToPascalCase());
1933
+ }
1934
+
1935
+ [Test]
1936
+ public void ToPascalCaseComplexStrings()
1937
+ {
1938
+ Assert.AreEqual("ThisIsAComplexTest", "this_is_a_complex_test".ToPascalCase());
1939
+ Assert.AreEqual("ThisIsAComplexTest", "THIS_IS_A_COMPLEX_TEST".ToPascalCase());
1940
+ Assert.AreEqual("ThisIsAComplexTest", "this-is-a-complex-test".ToPascalCase());
1941
+ }
1942
+
1943
+ [Test]
1944
+ public void CenterHandlesEmptyString()
1945
+ {
1946
+ Assert.AreEqual(" ", string.Empty.Center(5));
1947
+ }
1948
+
1949
+ [Test]
1950
+ public void LevenshteinDistanceLongerStrings()
1951
+ {
1952
+ Assert.AreEqual(5, "intention".LevenshteinDistance("execution"));
1953
+ Assert.AreEqual(6, "algorithm".LevenshteinDistance("altruistic"));
1954
+ }
1955
+
1956
+ [Test]
1957
+ public void ToSnakeCasePreservesNumbers()
1958
+ {
1959
+ Assert.AreEqual("test123", "test123".ToSnakeCase());
1960
+ Assert.AreEqual("test_123_value", "test123Value".ToSnakeCase());
1961
+ }
1962
+
1963
+ [Test]
1964
+ public void ToSnakeCaseWithNumbers()
1965
+ {
1966
+ // Letter to digit transitions (only when there are uppercase letters)
1967
+ Assert.AreEqual("test_456_end", "test456End".ToSnakeCase());
1968
+
1969
+ // Digit to letter transitions (only when there are uppercase letters)
1970
+ Assert.AreEqual("version_2_beta", "version2Beta".ToSnakeCase());
1971
+ Assert.AreEqual("my_3_d_model", "my3DModel".ToSnakeCase());
1972
+
1973
+ // Multiple number groups
1974
+ Assert.AreEqual("test_123_value_456", "test123Value456".ToSnakeCase());
1975
+ Assert.AreEqual("api_v_2_endpoint_3", "apiV2Endpoint3".ToSnakeCase());
1976
+
1977
+ // Edge cases
1978
+ Assert.AreEqual("123", "123".ToSnakeCase());
1979
+ Assert.AreEqual("test_123_value_456_end", "test123Value456End".ToSnakeCase());
1980
+
1981
+ // Combined with uppercase
1982
+ Assert.AreEqual("my_class_2_d", "MyClass2D".ToSnakeCase());
1983
+ Assert.AreEqual("http_2_client", "HTTP2Client".ToSnakeCase());
1984
+
1985
+ // Already lowercase - should be preserved
1986
+ Assert.AreEqual("abc123", "abc123".ToSnakeCase());
1987
+ Assert.AreEqual("value1", "value1".ToSnakeCase());
1988
+ Assert.AreEqual("123abc", "123abc".ToSnakeCase());
1989
+ Assert.AreEqual("a1b2c3", "a1b2c3".ToSnakeCase());
1990
+ }
1991
+
1992
+ [Test]
1993
+ public void ToSnakeCasePreservesLowercaseWithNumbers()
1994
+ {
1995
+ // Pure lowercase strings with numbers should be preserved
1996
+ Assert.AreEqual("user123", "user123".ToSnakeCase());
1997
+ Assert.AreEqual("test456", "test456".ToSnakeCase());
1998
+ Assert.AreEqual("abc789xyz", "abc789xyz".ToSnakeCase());
1999
+ Assert.AreEqual("model3d", "model3d".ToSnakeCase());
2000
+ Assert.AreEqual("http2", "http2".ToSnakeCase());
2001
+
2002
+ // Pure numbers
2003
+ Assert.AreEqual("12345", "12345".ToSnakeCase());
2004
+ Assert.AreEqual("0", "0".ToSnakeCase());
2005
+
2006
+ // Numbers at start
2007
+ Assert.AreEqual("2fast", "2fast".ToSnakeCase());
2008
+ Assert.AreEqual("404error", "404error".ToSnakeCase());
2009
+
2010
+ // Numbers at end
2011
+ Assert.AreEqual("version2", "version2".ToSnakeCase());
2012
+ Assert.AreEqual("player1", "player1".ToSnakeCase());
2013
+
2014
+ // Mixed numbers
2015
+ Assert.AreEqual("abc123def456", "abc123def456".ToSnakeCase());
2016
+ Assert.AreEqual("test1middle2end3", "test1middle2end3".ToSnakeCase());
2017
+ }
2018
+
2019
+ [Test]
2020
+ public void ToSnakeCaseHandlesNumbersWithCasing()
2021
+ {
2022
+ // When uppercase letters are present, digit boundaries should get separators
2023
+ Assert.AreEqual("user_123_name", "user123Name".ToSnakeCase());
2024
+ Assert.AreEqual("test_456_value", "Test456Value".ToSnakeCase());
2025
+ Assert.AreEqual("model_3_d", "model3D".ToSnakeCase());
2026
+ Assert.AreEqual("http_2_client", "http2Client".ToSnakeCase());
2027
+
2028
+ // Multiple transitions
2029
+ Assert.AreEqual("api_v_1_endpoint_2", "apiV1Endpoint2".ToSnakeCase());
2030
+ Assert.AreEqual("test_123_abc_456_def", "test123Abc456Def".ToSnakeCase());
2031
+
2032
+ // Numbers with consecutive uppercase
2033
+ Assert.AreEqual("http_200_ok", "HTTP200OK".ToSnakeCase());
2034
+ Assert.AreEqual("xml_2_parser", "XML2Parser".ToSnakeCase());
2035
+ }
2036
+
2037
+ [Test]
2038
+ public void ToSnakeCaseHandlesUnderscoresWithNumbers()
2039
+ {
2040
+ // Strings already with underscores
2041
+ Assert.AreEqual("test_123", "test_123".ToSnakeCase());
2042
+ Assert.AreEqual("value_456_end", "value_456_end".ToSnakeCase());
2043
+ Assert.AreEqual("my_3d_model", "my_3d_model".ToSnakeCase());
2044
+
2045
+ // Mixed underscores and uppercase
2046
+ Assert.AreEqual("test_123_value", "test_123Value".ToSnakeCase());
2047
+ Assert.AreEqual("my_test_2_beta", "my_test2Beta".ToSnakeCase());
2048
+ }
2049
+
2050
+ [Test]
2051
+ public void ToSnakeCaseHandlesEdgeCasesWithNumbers()
2052
+ {
2053
+ // Single character with number
2054
+ Assert.AreEqual("a1", "a1".ToSnakeCase());
2055
+ Assert.AreEqual("a_1", "A1".ToSnakeCase());
2056
+
2057
+ // Multiple single digits
2058
+ Assert.AreEqual("a1b2c3d4", "a1b2c3d4".ToSnakeCase());
2059
+ Assert.AreEqual("a_1_b_2_c_3_d_4", "A1B2C3D4".ToSnakeCase());
2060
+
2061
+ // Consecutive numbers
2062
+ Assert.AreEqual("test123456", "test123456".ToSnakeCase());
2063
+ Assert.AreEqual("test_123456_end", "test123456End".ToSnakeCase());
2064
+
2065
+ // Number at very start
2066
+ Assert.AreEqual("1test", "1test".ToSnakeCase());
2067
+ Assert.AreEqual("1_test", "1Test".ToSnakeCase());
2068
+ Assert.AreEqual("123test456", "123test456".ToSnakeCase());
2069
+ Assert.AreEqual("123_test_456", "123Test456".ToSnakeCase());
2070
+ }
2071
+
2072
+ [Test]
2073
+ public void ToSnakeCaseIdempotent()
2074
+ {
2075
+ // Applying ToSnakeCase twice should give the same result
2076
+ Assert.AreEqual("test_value", "test_value".ToSnakeCase());
2077
+ Assert.AreEqual("hello_world", "hello_world".ToSnakeCase());
2078
+ Assert.AreEqual("test123", "test123".ToSnakeCase());
2079
+ Assert.AreEqual("abc_123_def", "abc_123_def".ToSnakeCase());
2080
+
2081
+ // Verify idempotence
2082
+ string test1 = "TestValue123";
2083
+ string snake1 = test1.ToSnakeCase();
2084
+ string snake2 = snake1.ToSnakeCase();
2085
+ Assert.AreEqual(snake1, snake2);
2086
+
2087
+ string test2 = "user123Name";
2088
+ string snake3 = test2.ToSnakeCase();
2089
+ string snake4 = snake3.ToSnakeCase();
2090
+ Assert.AreEqual(snake3, snake4);
2091
+ }
2092
+
2093
+ [Test]
2094
+ public void ToSnakeCasePerformanceEdgeCases()
2095
+ {
2096
+ // Very long strings
2097
+ string longString = "a".Repeat(100) + "123" + "b".Repeat(100);
2098
+ Assert.AreEqual(longString, longString.ToSnakeCase());
2099
+
2100
+ string longMixed = "Test" + "Value".Repeat(50);
2101
+ string result = longMixed.ToSnakeCase();
2102
+ Assert.IsTrue(result.Contains("_"));
2103
+ Assert.IsFalse(result.Contains("__")); // No double underscores
2104
+
2105
+ // Many number transitions
2106
+ string manyNumbers = "a1b2c3d4e5f6g7h8i9j0";
2107
+ Assert.AreEqual(manyNumbers, manyNumbers.ToSnakeCase());
2108
+ }
2109
+
2110
+ [Test]
2111
+ public void TruncateExactlyAtLimit()
2112
+ {
2113
+ Assert.AreEqual("tes...", "testing".Truncate(6));
2114
+ Assert.AreEqual("te...", "testing".Truncate(5));
2115
+ }
2116
+
2117
+ [Test]
2118
+ public void RepeatWithMultiCharacterString()
2119
+ {
2120
+ Assert.AreEqual("abcabcabc", "abc".Repeat(3));
2121
+ Assert.AreEqual("hello hello ", "hello ".Repeat(2));
2122
+ }
2123
+
2124
+ [Test]
2125
+ public void CountOccurrencesWithSingleCharSubstring()
2126
+ {
2127
+ Assert.AreEqual(2, "hello".CountOccurrences("l"));
2128
+ Assert.AreEqual(2, "test".CountOccurrences("t"));
2129
+ }
2130
+
2131
+ [Test]
2132
+ public void ContainsIgnoreCaseEmptyString()
2133
+ {
2134
+ Assert.IsTrue("test".ContainsIgnoreCase(""));
2135
+ Assert.IsTrue("".ContainsIgnoreCase(""));
2136
+ }
2137
+
2138
+ [Test]
2139
+ public void ToBase64HandlesEmptyString()
2140
+ {
2141
+ string base64 = string.Empty.ToBase64();
2142
+ Assert.AreEqual(string.Empty, base64);
2143
+ }
2144
+
2145
+ [Test]
2146
+ public void FromBase64HandlesValidBase64()
2147
+ {
2148
+ string base64 = "SGVsbG8gV29ybGQ=";
2149
+ string decoded = base64.FromBase64();
2150
+ Assert.AreEqual("Hello World", decoded);
2151
+ }
2152
+
2153
+ [Test]
2154
+ public void ToPascalCaseMixedSeparators()
2155
+ {
2156
+ Assert.AreEqual("ThisIsATest", "this_is-a_test".ToPascalCase());
2157
+ Assert.AreEqual("HelloWorldTest", "hello-world_test".ToPascalCase());
2158
+ Assert.AreEqual("MixedCaseTest", "mixed_Case-Test".ToPascalCase());
2159
+ }
2160
+
2161
+ [Test]
2162
+ public void ToPascalCaseMultipleSeparators()
2163
+ {
2164
+ Assert.AreEqual("TestCase", "test__case".ToPascalCase());
2165
+ Assert.AreEqual("TestCase", "test--case".ToPascalCase());
2166
+ Assert.AreEqual("TestCase", "test__--__case".ToPascalCase());
2167
+ }
2168
+
2169
+ [Test]
2170
+ public void ToPascalCaseLeadingAndTrailingSeparators()
2171
+ {
2172
+ Assert.AreEqual("TestCase", "_test_case".ToPascalCase());
2173
+ Assert.AreEqual("TestCase", "test_case_".ToPascalCase());
2174
+ Assert.AreEqual("TestCase", "_test_case_".ToPascalCase());
2175
+ Assert.AreEqual("TestCase", "-test-case-".ToPascalCase());
2176
+ Assert.AreEqual("TestCase", "__test__case__".ToPascalCase());
2177
+ }
2178
+
2179
+ [Test]
2180
+ public void ToPascalCaseAllSeparators()
2181
+ {
2182
+ Assert.AreEqual("TestCase", "test_case".ToPascalCase());
2183
+ Assert.AreEqual("TestCase", "test-case".ToPascalCase());
2184
+ Assert.AreEqual("TestCase", "test case".ToPascalCase());
2185
+ Assert.AreEqual("TestCase", "test.case".ToPascalCase());
2186
+ Assert.AreEqual("TestCase", "test\tcase".ToPascalCase());
2187
+ Assert.AreEqual("TestCase", "test\ncase".ToPascalCase());
2188
+ Assert.AreEqual("TestCase", "test\rcase".ToPascalCase());
2189
+ }
2190
+
2191
+ [Test]
2192
+ public void ToPascalCaseSingleWord()
2193
+ {
2194
+ Assert.AreEqual("Test", "test".ToPascalCase());
2195
+ Assert.AreEqual("Test", "TEST".ToPascalCase());
2196
+ Assert.AreEqual("Test", "Test".ToPascalCase());
2197
+ }
2198
+
2199
+ [Test]
2200
+ public void ToPascalCaseSingleCharacter()
2201
+ {
2202
+ Assert.AreEqual("A", "a".ToPascalCase());
2203
+ Assert.AreEqual("A", "A".ToPascalCase());
2204
+ Assert.AreEqual(string.Empty, "_".ToPascalCase());
2205
+ Assert.AreEqual(string.Empty, "-".ToPascalCase());
2206
+ }
2207
+
2208
+ [Test]
2209
+ public void ToPascalCaseOnlySeparators()
2210
+ {
2211
+ Assert.AreEqual(string.Empty, "___".ToPascalCase());
2212
+ Assert.AreEqual(string.Empty, "---".ToPascalCase());
2213
+ Assert.AreEqual(string.Empty, " ".ToPascalCase());
2214
+ Assert.AreEqual(string.Empty, "_-_ ".ToPascalCase());
2215
+ }
2216
+
2217
+ [Test]
2218
+ public void ToPascalCaseUppercaseWords()
2219
+ {
2220
+ Assert.AreEqual("ThisIsATest", "THIS-IS-A-TEST".ToPascalCase());
2221
+ Assert.AreEqual("HelloWorld", "HELLO_WORLD".ToPascalCase());
2222
+ }
2223
+
2224
+ [Test]
2225
+ public void ToPascalCaseMixedCamelAndSnake()
2226
+ {
2227
+ Assert.AreEqual("HelloWorldTest", "helloWorld_test".ToPascalCase());
2228
+ Assert.AreEqual("TestCaseExample", "testCase_example".ToPascalCase());
2229
+ }
2230
+
2231
+ [Test]
2232
+ public void ToPascalCaseWithNumbersAndSeparators()
2233
+ {
2234
+ Assert.AreEqual("Test123Case456", "test_123_case_456".ToPascalCase());
2235
+ Assert.AreEqual("Version2Update", "version-2-update".ToPascalCase());
2236
+ Assert.AreEqual("Test1Test2", "test1_test2".ToPascalCase());
2237
+ }
2238
+
2239
+ [Test]
2240
+ public void ToPascalCaseSpecialCharacterSeparators()
2241
+ {
2242
+ Assert.AreEqual("TestCase", "test'Case".ToPascalCase());
2243
+ Assert.AreEqual("HelloWorld", "hello\"World".ToPascalCase());
2244
+ Assert.AreEqual("MixedTest", "mixed.'Test".ToPascalCase());
2245
+ }
2246
+
2247
+ [Test]
2248
+ public void ToCasePascalCase()
2249
+ {
2250
+ Assert.AreEqual("PascalCase", "pascalCase".ToCase(StringCase.PascalCase));
2251
+ Assert.AreEqual("PascalCase", "pascal_case".ToCase(StringCase.PascalCase));
2252
+ Assert.AreEqual("PascalCase", "PASCAL_CASE".ToCase(StringCase.PascalCase));
2253
+ Assert.AreEqual("PascalCase", "pascal-case".ToCase(StringCase.PascalCase));
2254
+ Assert.AreEqual("TestValue", "test value".ToCase(StringCase.PascalCase));
2255
+ }
2256
+
2257
+ [Test]
2258
+ public void ToCaseCamelCase()
2259
+ {
2260
+ Assert.AreEqual("camelCase", "CamelCase".ToCase(StringCase.CamelCase));
2261
+ Assert.AreEqual("camelCase", "camel_case".ToCase(StringCase.CamelCase));
2262
+ Assert.AreEqual("camelCase", "CAMEL_CASE".ToCase(StringCase.CamelCase));
2263
+ Assert.AreEqual("camelCase", "camel-case".ToCase(StringCase.CamelCase));
2264
+ Assert.AreEqual("testValue", "test value".ToCase(StringCase.CamelCase));
2265
+ }
2266
+
2267
+ [Test]
2268
+ public void ToCaseSnakeCase()
2269
+ {
2270
+ Assert.AreEqual("snake_case", "SnakeCase".ToCase(StringCase.SnakeCase));
2271
+ Assert.AreEqual("snake_case", "snakeCase".ToCase(StringCase.SnakeCase));
2272
+ Assert.AreEqual("snake_case", "SNAKE_CASE".ToCase(StringCase.SnakeCase));
2273
+ Assert.AreEqual("snake_case", "snake-case".ToCase(StringCase.SnakeCase));
2274
+ Assert.AreEqual("test_value", "test value".ToCase(StringCase.SnakeCase));
2275
+ }
2276
+
2277
+ [Test]
2278
+ public void ToCaseKebabCase()
2279
+ {
2280
+ Assert.AreEqual("kebab-case", "KebabCase".ToCase(StringCase.KebabCase));
2281
+ Assert.AreEqual("kebab-case", "kebabCase".ToCase(StringCase.KebabCase));
2282
+ Assert.AreEqual("kebab-case", "KEBAB_CASE".ToCase(StringCase.KebabCase));
2283
+ Assert.AreEqual("kebab-case", "kebab_case".ToCase(StringCase.KebabCase));
2284
+ Assert.AreEqual("test-value", "test value".ToCase(StringCase.KebabCase));
2285
+ }
2286
+
2287
+ [Test]
2288
+ public void ToCaseTitleCase()
2289
+ {
2290
+ Assert.AreEqual("Title Case", "title case".ToCase(StringCase.TitleCase));
2291
+ Assert.AreEqual("Title Case", "TitleCase".ToCase(StringCase.TitleCase));
2292
+ Assert.AreEqual("Title Case", "TITLE CASE".ToCase(StringCase.TitleCase));
2293
+ Assert.AreEqual("Test Value", "test_value".ToCase(StringCase.TitleCase));
2294
+ }
2295
+
2296
+ [Test]
2297
+ public void ToCaseLowerCase()
2298
+ {
2299
+ Assert.AreEqual("lowercase", "LowerCase".ToCase(StringCase.LowerCase));
2300
+ Assert.AreEqual("lowercase", "LOWERCASE".ToCase(StringCase.LowerCase));
2301
+ Assert.AreEqual("test value", "Test Value".ToCase(StringCase.LowerCase));
2302
+ Assert.AreEqual("hello world", "HeLLo WoRLd".ToCase(StringCase.LowerCase));
2303
+ }
2304
+
2305
+ [Test]
2306
+ public void ToCaseUpperCase()
2307
+ {
2308
+ Assert.AreEqual("UPPERCASE", "UpperCase".ToCase(StringCase.UpperCase));
2309
+ Assert.AreEqual("UPPERCASE", "uppercase".ToCase(StringCase.UpperCase));
2310
+ Assert.AreEqual("TEST VALUE", "Test Value".ToCase(StringCase.UpperCase));
2311
+ Assert.AreEqual("HELLO WORLD", "HeLLo WoRLd".ToCase(StringCase.UpperCase));
2312
+ }
2313
+
2314
+ [Test]
2315
+ public void ToCaseLowerInvariant()
2316
+ {
2317
+ Assert.AreEqual("lowercase", "LowerCase".ToCase(StringCase.LowerInvariant));
2318
+ Assert.AreEqual("lowercase", "LOWERCASE".ToCase(StringCase.LowerInvariant));
2319
+ Assert.AreEqual("test value", "Test Value".ToCase(StringCase.LowerInvariant));
2320
+ Assert.AreEqual("istanbul", "İSTANBUL".ToCase(StringCase.LowerInvariant));
2321
+ }
2322
+
2323
+ [Test]
2324
+ public void ToCaseUpperInvariant()
2325
+ {
2326
+ Assert.AreEqual("UPPERCASE", "UpperCase".ToCase(StringCase.UpperInvariant));
2327
+ Assert.AreEqual("UPPERCASE", "uppercase".ToCase(StringCase.UpperInvariant));
2328
+ Assert.AreEqual("TEST VALUE", "Test Value".ToCase(StringCase.UpperInvariant));
2329
+ Assert.AreEqual("ISTANBUL", "istanbul".ToCase(StringCase.UpperInvariant));
2330
+ }
2331
+
2332
+ [Test]
2333
+ public void ToCaseNone()
2334
+ {
2335
+ #pragma warning disable CS0618 // Type or member is obsolete
2336
+ Assert.AreEqual("NoChange", "NoChange".ToCase(StringCase.None));
2337
+ Assert.AreEqual("test_value", "test_value".ToCase(StringCase.None));
2338
+ Assert.AreEqual("MixedCase", "MixedCase".ToCase(StringCase.None));
2339
+ #pragma warning restore CS0618 // Type or member is obsolete
2340
+ }
2341
+
2342
+ [Test]
2343
+ public void ToCaseWithNullInput()
2344
+ {
2345
+ Assert.AreEqual(string.Empty, ((string)null).ToCase(StringCase.PascalCase));
2346
+ Assert.AreEqual(string.Empty, ((string)null).ToCase(StringCase.CamelCase));
2347
+ Assert.AreEqual(string.Empty, ((string)null).ToCase(StringCase.SnakeCase));
2348
+ Assert.AreEqual(string.Empty, ((string)null).ToCase(StringCase.KebabCase));
2349
+ Assert.AreEqual(string.Empty, ((string)null).ToCase(StringCase.TitleCase));
2350
+ Assert.AreEqual(string.Empty, ((string)null).ToCase(StringCase.LowerCase));
2351
+ Assert.AreEqual(string.Empty, ((string)null).ToCase(StringCase.UpperCase));
2352
+ Assert.AreEqual(string.Empty, ((string)null).ToCase(StringCase.LowerInvariant));
2353
+ Assert.AreEqual(string.Empty, ((string)null).ToCase(StringCase.UpperInvariant));
2354
+ #pragma warning disable CS0618 // Type or member is obsolete
2355
+ Assert.AreEqual(string.Empty, ((string)null).ToCase(StringCase.None));
2356
+ #pragma warning restore CS0618 // Type or member is obsolete
2357
+ }
2358
+
2359
+ [Test]
2360
+ public void ToCaseWithEmptyInput()
2361
+ {
2362
+ Assert.AreEqual(string.Empty, string.Empty.ToCase(StringCase.PascalCase));
2363
+ Assert.AreEqual(string.Empty, string.Empty.ToCase(StringCase.CamelCase));
2364
+ Assert.AreEqual(string.Empty, string.Empty.ToCase(StringCase.SnakeCase));
2365
+ Assert.AreEqual(string.Empty, string.Empty.ToCase(StringCase.KebabCase));
2366
+ Assert.AreEqual(string.Empty, string.Empty.ToCase(StringCase.TitleCase));
2367
+ Assert.AreEqual(string.Empty, string.Empty.ToCase(StringCase.LowerCase));
2368
+ Assert.AreEqual(string.Empty, string.Empty.ToCase(StringCase.UpperCase));
2369
+ Assert.AreEqual(string.Empty, string.Empty.ToCase(StringCase.LowerInvariant));
2370
+ Assert.AreEqual(string.Empty, string.Empty.ToCase(StringCase.UpperInvariant));
2371
+ #pragma warning disable CS0618 // Type or member is obsolete
2372
+ Assert.AreEqual(string.Empty, string.Empty.ToCase(StringCase.None));
2373
+ #pragma warning restore CS0618 // Type or member is obsolete
2374
+ }
2375
+
2376
+ [Test]
2377
+ public void ToCaseWithSingleCharacter()
2378
+ {
2379
+ Assert.AreEqual("A", "a".ToCase(StringCase.PascalCase));
2380
+ Assert.AreEqual("a", "A".ToCase(StringCase.CamelCase));
2381
+ Assert.AreEqual("a", "A".ToCase(StringCase.SnakeCase));
2382
+ Assert.AreEqual("a", "A".ToCase(StringCase.KebabCase));
2383
+ Assert.AreEqual("A", "a".ToCase(StringCase.TitleCase));
2384
+ Assert.AreEqual("a", "A".ToCase(StringCase.LowerCase));
2385
+ Assert.AreEqual("A", "a".ToCase(StringCase.UpperCase));
2386
+ }
2387
+
2388
+ [Test]
2389
+ public void ToCaseWithNumbers()
2390
+ {
2391
+ Assert.AreEqual("Test123", "test123".ToCase(StringCase.PascalCase));
2392
+ Assert.AreEqual("test123", "Test123".ToCase(StringCase.CamelCase));
2393
+ Assert.AreEqual("test_123_value", "test123Value".ToCase(StringCase.SnakeCase));
2394
+ Assert.AreEqual("test-123-value", "test123Value".ToCase(StringCase.KebabCase));
2395
+ }
2396
+
2397
+ [Test]
2398
+ public void ToCaseWithSpecialCharacters()
2399
+ {
2400
+ Assert.AreEqual("HelloWorld", "hello_world".ToCase(StringCase.PascalCase));
2401
+ Assert.AreEqual("helloWorld", "hello_world".ToCase(StringCase.CamelCase));
2402
+ Assert.AreEqual("hello_world", "hello-world".ToCase(StringCase.SnakeCase));
2403
+ Assert.AreEqual("hello-world", "hello_world".ToCase(StringCase.KebabCase));
2404
+ }
2405
+
2406
+ [Test]
2407
+ public void ToCaseWithMultipleWords()
2408
+ {
2409
+ string input = "this is a test string";
2410
+ Assert.AreEqual("ThisIsATestString", input.ToCase(StringCase.PascalCase));
2411
+ Assert.AreEqual("thisIsATestString", input.ToCase(StringCase.CamelCase));
2412
+ Assert.AreEqual("this_is_a_test_string", input.ToCase(StringCase.SnakeCase));
2413
+ Assert.AreEqual("this-is-a-test-string", input.ToCase(StringCase.KebabCase));
2414
+ Assert.AreEqual("This Is A Test String", input.ToCase(StringCase.TitleCase));
2415
+ }
2416
+
2417
+ [Test]
2418
+ public void ToCaseWithMixedInput()
2419
+ {
2420
+ string input = "Some_MIXED-Input String";
2421
+ Assert.AreEqual("SomeMixedInputString", input.ToCase(StringCase.PascalCase));
2422
+ Assert.AreEqual("someMixedInputString", input.ToCase(StringCase.CamelCase));
2423
+ Assert.AreEqual("some_mixed_input_string", input.ToCase(StringCase.SnakeCase));
2424
+ Assert.AreEqual("some-mixed-input-string", input.ToCase(StringCase.KebabCase));
2425
+ }
2426
+
2427
+ [Test]
2428
+ public void ToCaseWithUnicodeCharacters()
2429
+ {
2430
+ Assert.AreEqual("CAFÉ", "café".ToCase(StringCase.UpperCase));
2431
+ Assert.AreEqual("café", "CAFÉ".ToCase(StringCase.LowerCase));
2432
+ Assert.AreEqual("CAFÉ", "café".ToCase(StringCase.UpperInvariant));
2433
+ Assert.AreEqual("café", "CAFÉ".ToCase(StringCase.LowerInvariant));
2434
+ }
2435
+
2436
+ [Test]
2437
+ public void ToCaseWithConsecutiveUppercase()
2438
+ {
2439
+ Assert.AreEqual("XmlHttpRequest", "XMLHttpRequest".ToCase(StringCase.PascalCase));
2440
+ Assert.AreEqual("xmlHttpRequest", "XMLHttpRequest".ToCase(StringCase.CamelCase));
2441
+ Assert.AreEqual("xml_http_request", "XMLHttpRequest".ToCase(StringCase.SnakeCase));
2442
+ Assert.AreEqual("xml-http-request", "XMLHttpRequest".ToCase(StringCase.KebabCase));
2443
+ }
2444
+
2445
+ [Test]
2446
+ public void ToCasePreservesCorrectFormat()
2447
+ {
2448
+ Assert.AreEqual("PascalCase", "PascalCase".ToCase(StringCase.PascalCase));
2449
+ Assert.AreEqual("camelCase", "camelCase".ToCase(StringCase.CamelCase));
2450
+ Assert.AreEqual("snake_case", "snake_case".ToCase(StringCase.SnakeCase));
2451
+ }
2452
+
2453
+ [Test]
2454
+ public void ToCaseWithWhitespace()
2455
+ {
2456
+ Assert.AreEqual("TestValue", " test value ".ToCase(StringCase.PascalCase));
2457
+ Assert.AreEqual("testValue", " test value ".ToCase(StringCase.CamelCase));
2458
+ Assert.AreEqual("test_value", " test value ".ToCase(StringCase.SnakeCase));
2459
+ Assert.AreEqual("test-value", " test value ".ToCase(StringCase.KebabCase));
2460
+ }
2461
+
2462
+ [Test]
2463
+ public void ToCaseWithUnderscoresAndDashes()
2464
+ {
2465
+ Assert.AreEqual("TestValue", "test___value".ToCase(StringCase.PascalCase));
2466
+ Assert.AreEqual("testValue", "test---value".ToCase(StringCase.CamelCase));
2467
+ Assert.AreEqual("test_value", "test---value".ToCase(StringCase.SnakeCase));
2468
+ Assert.AreEqual("test-value", "test___value".ToCase(StringCase.KebabCase));
2469
+ }
2470
+
2471
+ [Test]
2472
+ public void ToCaseAllEnumValues()
2473
+ {
2474
+ string input = "testValue";
2475
+
2476
+ Dictionary<StringCase, string> expectations = new()
2477
+ {
2478
+ { StringCase.PascalCase, "TestValue" },
2479
+ { StringCase.CamelCase, "testValue" },
2480
+ { StringCase.SnakeCase, "test_value" },
2481
+ { StringCase.KebabCase, "test-value" },
2482
+ { StringCase.TitleCase, "TestValue" },
2483
+ { StringCase.LowerCase, "testvalue" },
2484
+ { StringCase.UpperCase, "TESTVALUE" },
2485
+ { StringCase.LowerInvariant, "testvalue" },
2486
+ { StringCase.UpperInvariant, "TESTVALUE" },
2487
+ #pragma warning disable CS0618 // Type or member is obsolete
2488
+ { StringCase.None, "testValue" },
2489
+ #pragma warning restore CS0618 // Type or member is obsolete
2490
+ };
2491
+
2492
+ StringCase[] enumValues = Enum.GetValues(typeof(StringCase))
2493
+ .Cast<StringCase>()
2494
+ .ToArray();
2495
+
2496
+ CollectionAssert.AreEquivalent(
2497
+ enumValues,
2498
+ expectations.Keys,
2499
+ "Update ToCaseAllEnumValues test expectations when new StringCase values are added."
2500
+ );
2501
+
2502
+ foreach (StringCase stringCase in enumValues)
2503
+ {
2504
+ string actual = input.ToCase(stringCase);
2505
+
2506
+ if (!expectations.TryGetValue(stringCase, out string expected))
2507
+ {
2508
+ Assert.Fail(
2509
+ $"Missing expectation for StringCase.{stringCase}. Update ToCaseAllEnumValues test."
2510
+ );
2511
+ }
2512
+
2513
+ Assert.That(
2514
+ actual,
2515
+ Is.EqualTo(expected),
2516
+ $"StringCase.{stringCase} on \"{input}\" produced \"{actual}\" instead of \"{expected}\"."
2517
+ );
2518
+ }
2519
+ }
2520
+
2521
+ [Test]
2522
+ public void ToCaseEdgeCasesSingleUnderscore()
2523
+ {
2524
+ Assert.AreEqual(string.Empty, "_".ToCase(StringCase.PascalCase));
2525
+ Assert.AreEqual(string.Empty, "_".ToCase(StringCase.CamelCase));
2526
+ Assert.AreEqual(string.Empty, "_".ToCase(StringCase.SnakeCase));
2527
+ Assert.AreEqual(string.Empty, "_".ToCase(StringCase.KebabCase));
2528
+ }
2529
+
2530
+ [Test]
2531
+ public void ToCaseEdgeCasesSingleDash()
2532
+ {
2533
+ Assert.AreEqual(string.Empty, "-".ToCase(StringCase.PascalCase));
2534
+ Assert.AreEqual(string.Empty, "-".ToCase(StringCase.CamelCase));
2535
+ Assert.AreEqual(string.Empty, "-".ToCase(StringCase.SnakeCase));
2536
+ Assert.AreEqual(string.Empty, "-".ToCase(StringCase.KebabCase));
2537
+ }
2538
+
2539
+ [Test]
2540
+ public void ToCaseComplex()
2541
+ {
2542
+ string input = "get_HTTPResponse_from_URL";
2543
+ Assert.AreEqual("GetHttpResponseFromUrl", input.ToCase(StringCase.PascalCase));
2544
+ Assert.AreEqual("getHttpResponseFromUrl", input.ToCase(StringCase.CamelCase));
2545
+ Assert.AreEqual("get_http_response_from_url", input.ToCase(StringCase.SnakeCase));
2546
+ Assert.AreEqual("get-http-response-from-url", input.ToCase(StringCase.KebabCase));
2547
+ }
2548
+
2549
+ [Test]
2550
+ public void ToCaseWithApostrophe()
2551
+ {
2552
+ Assert.AreEqual("DontStop", "don't stop".ToCase(StringCase.PascalCase));
2553
+ Assert.AreEqual("dontStop", "don't stop".ToCase(StringCase.CamelCase));
2554
+ }
2555
+
2556
+ [Test]
2557
+ public void ToCaseWithQuotes()
2558
+ {
2559
+ Assert.AreEqual("HelloWorld", "hello\"world".ToCase(StringCase.PascalCase));
2560
+ Assert.AreEqual("helloWorld", "hello\"world".ToCase(StringCase.CamelCase));
2561
+ }
2562
+
2563
+ [Test]
2564
+ public void ToCasePerformanceMultipleCalls()
2565
+ {
2566
+ string input = "TestValue";
2567
+ for (int i = 0; i < 1000; i++)
2568
+ {
2569
+ _ = input.ToCase(StringCase.PascalCase);
2570
+ _ = input.ToCase(StringCase.CamelCase);
2571
+ _ = input.ToCase(StringCase.SnakeCase);
2572
+ _ = input.ToCase(StringCase.KebabCase);
2573
+ }
2574
+ }
2575
+
2576
+ [Test]
2577
+ public void ToCaseWithInvalidEnumValue()
2578
+ {
2579
+ Assert.AreEqual("testValue", "testValue".ToCase((StringCase)999));
2580
+ }
2581
+
2582
+ [Test]
2583
+ public void ToCaseTitleCaseComplexInput()
2584
+ {
2585
+ Assert.AreEqual(
2586
+ "The Quick Brown Fox",
2587
+ "the_quick_brown_fox".ToCase(StringCase.TitleCase)
2588
+ );
2589
+ Assert.AreEqual("Hello World", "HELLO-WORLD".ToCase(StringCase.TitleCase));
2590
+ }
2591
+ }
2592
+ }