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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1449) hide show
  1. package/.config/dotnet-tools.json +10 -10
  2. package/.csharpierignore +1 -0
  3. package/.csharpierrc.json +3 -0
  4. package/.editorconfig +184 -184
  5. package/.gitattributes +87 -63
  6. package/.githooks/pre-commit +49 -0
  7. package/.github/dependabot.yml +9 -9
  8. package/.github/workflows/csharpier.yml +135 -0
  9. package/.github/workflows/lint-doc-links.yml +27 -0
  10. package/.github/workflows/markdown-json.yml +41 -0
  11. package/.github/workflows/npm-publish.yml +75 -75
  12. package/.lychee.toml +26 -0
  13. package/.markdownlint.json +21 -0
  14. package/.markdownlintignore +8 -0
  15. package/.pre-commit-config.yaml +39 -22
  16. package/.prettierignore +22 -0
  17. package/.prettierrc.json +20 -0
  18. package/AGENTS.md +52 -0
  19. package/{Third Party Notices.md.meta → AGENTS.md.meta} +7 -7
  20. package/CHANGELOG.md.meta +7 -7
  21. package/DATA_STRUCTURES.md +324 -0
  22. package/DATA_STRUCTURES.md.meta +7 -0
  23. package/Docs/Images/attribute_resolution.svg +40 -0
  24. package/Docs/Images/attribute_resolution.svg.meta +7 -0
  25. package/Docs/Images/bitset.svg +47 -0
  26. package/Docs/Images/bitset.svg.meta +7 -0
  27. package/Docs/Images/concave_hull.svg +30 -0
  28. package/Docs/Images/concave_hull.svg.meta +7 -0
  29. package/Docs/Images/convex_hull.svg +29 -0
  30. package/Docs/Images/convex_hull.svg.meta +7 -0
  31. package/Docs/Images/cyclic_buffer.svg +37 -0
  32. package/Docs/Images/cyclic_buffer.svg.meta +7 -0
  33. package/Docs/Images/data_distribution_decision.svg +88 -0
  34. package/Docs/Images/data_distribution_decision.svg.meta +7 -0
  35. package/Docs/Images/deque.svg +64 -0
  36. package/Docs/Images/deque.svg.meta +7 -0
  37. package/Docs/Images/deque_queue.svg +107 -0
  38. package/Docs/Images/deque_queue.svg.meta +7 -0
  39. package/Docs/Images/disjoint_set.svg +47 -0
  40. package/Docs/Images/disjoint_set.svg.meta +7 -0
  41. package/Docs/Images/effects_pipeline.svg +59 -0
  42. package/Docs/Images/effects_pipeline.svg.meta +7 -0
  43. package/Docs/Images/geometry_edge_cases.svg +61 -0
  44. package/Docs/Images/geometry_edge_cases.svg.meta +7 -0
  45. package/Docs/Images/heap.svg +56 -0
  46. package/Docs/Images/heap.svg.meta +7 -0
  47. package/Docs/Images/kdtree_2d.svg +38 -0
  48. package/Docs/Images/kdtree_2d.svg.meta +7 -0
  49. package/Docs/Images/kdtree_3d.svg +83 -0
  50. package/Docs/Images/kdtree_3d.svg.meta +7 -0
  51. package/Docs/Images/octree_3d.svg +79 -0
  52. package/Docs/Images/octree_3d.svg.meta +7 -0
  53. package/Docs/Images/polyline_simplify.svg +18 -0
  54. package/Docs/Images/polyline_simplify.svg.meta +7 -0
  55. package/Docs/Images/quadtree_2d.svg +37 -0
  56. package/Docs/Images/quadtree_2d.svg.meta +7 -0
  57. package/Docs/Images/query_boundaries.svg +38 -0
  58. package/Docs/Images/query_boundaries.svg.meta +7 -0
  59. package/Docs/Images/random_generators.svg +105 -0
  60. package/Docs/Images/random_generators.svg.meta +7 -0
  61. package/Docs/Images/reflection_scan.svg +33 -0
  62. package/Docs/Images/reflection_scan.svg.meta +7 -0
  63. package/Docs/Images/relational_wiring.svg +75 -0
  64. package/Docs/Images/relational_wiring.svg.meta +7 -0
  65. package/Docs/Images/rtree_2d.svg +27 -0
  66. package/Docs/Images/rtree_2d.svg.meta +7 -0
  67. package/Docs/Images/rtree_3d.svg +79 -0
  68. package/Docs/Images/rtree_3d.svg.meta +7 -0
  69. package/Docs/Images/serialization_flow.svg +50 -0
  70. package/Docs/Images/serialization_flow.svg.meta +7 -0
  71. package/Docs/Images/singletons_lifecycle.svg +54 -0
  72. package/Docs/Images/singletons_lifecycle.svg.meta +7 -0
  73. package/Docs/Images/sparse_set.svg +54 -0
  74. package/Docs/Images/sparse_set.svg.meta +7 -0
  75. package/Docs/Images/trie.svg +55 -0
  76. package/Docs/Images/trie.svg.meta +7 -0
  77. package/Docs/Images.meta +8 -0
  78. package/Docs.meta +8 -0
  79. package/EDITOR_TOOLS_GUIDE.md +1976 -0
  80. package/EDITOR_TOOLS_GUIDE.md.meta +7 -0
  81. package/EFFECTS_SYSTEM.md +242 -0
  82. package/EFFECTS_SYSTEM.md.meta +7 -0
  83. package/EFFECTS_SYSTEM_TUTORIAL.md +467 -0
  84. package/EFFECTS_SYSTEM_TUTORIAL.md.meta +7 -0
  85. package/Editor/AnimationEventEditor.cs +1393 -874
  86. package/Editor/AnimationEventEditor.cs.meta +11 -11
  87. package/Editor/AssemblyInfo.cs +4 -0
  88. package/Editor/AssemblyInfo.cs.meta +3 -0
  89. package/Editor/AssetProcessors/SpriteLabelProcessor.cs +138 -111
  90. package/Editor/AssetProcessors/SpriteLabelProcessor.cs.meta +2 -2
  91. package/Editor/AssetProcessors.meta +2 -2
  92. package/Editor/Core/Helper/AnimationEventHelpers.cs +204 -0
  93. package/{Runtime/Core/DataStructure/ISpatialTree.cs.meta → Editor/Core/Helper/AnimationEventHelpers.cs.meta} +11 -11
  94. package/Editor/Core/Helper.meta +8 -0
  95. package/Editor/Core.meta +8 -0
  96. package/Editor/CustomDrawers/IntDropdownDrawer.cs +46 -46
  97. package/Editor/CustomDrawers/IntDropdownDrawer.cs.meta +2 -2
  98. package/Editor/CustomDrawers/StringInListeDrawer.cs +135 -135
  99. package/Editor/CustomDrawers/StringInListeDrawer.cs.meta +2 -2
  100. package/Editor/CustomDrawers/WShowIfPropertyDrawer.cs +105 -105
  101. package/Editor/CustomDrawers/WShowIfPropertyDrawer.cs.meta +2 -2
  102. package/Editor/CustomDrawers.meta +2 -2
  103. package/Editor/CustomEditors/MatchColliderToSpriteEditor.cs +32 -32
  104. package/Editor/CustomEditors/MatchColliderToSpriteEditor.cs.meta +2 -2
  105. package/Editor/CustomEditors/PersistentDirectoryGUI.cs +799 -799
  106. package/Editor/CustomEditors/PersistentDirectoryGUI.cs.meta +2 -2
  107. package/Editor/CustomEditors/PolygonCollider2DOptimizerEditor.cs +38 -40
  108. package/Editor/CustomEditors/PolygonCollider2DOptimizerEditor.cs.meta +2 -2
  109. package/Editor/CustomEditors/SourceFolderEntryDrawer.cs +685 -413
  110. package/Editor/CustomEditors/SourceFolderEntryDrawer.cs.meta +2 -2
  111. package/Editor/CustomEditors/TexturePlatformOverrideEntryDrawer.cs +146 -0
  112. package/{Runtime/Core/DataStructure/KDTree.cs.meta → Editor/CustomEditors/TexturePlatformOverrideEntryDrawer.cs.meta} +11 -11
  113. package/Editor/CustomEditors.meta +2 -2
  114. package/Editor/Extensions/SerializedPropertyExtensions.cs +217 -190
  115. package/Editor/Extensions/SerializedPropertyExtensions.cs.meta +2 -2
  116. package/Editor/Extensions/UnityExtensions.cs +50 -26
  117. package/Editor/Extensions/UnityExtensions.cs.meta +2 -2
  118. package/Editor/Extensions.meta +2 -2
  119. package/Editor/FitTextureSizeWindow.cs +785 -332
  120. package/Editor/FitTextureSizeWindow.cs.meta +2 -2
  121. package/Editor/Persistence/MultiFileSelectorPersistenceManager.cs +62 -0
  122. package/{Runtime/Core/DataStructure/QuadTree.cs.meta → Editor/Persistence/MultiFileSelectorPersistenceManager.cs.meta} +11 -11
  123. package/Editor/Persistence/MultiFileSelectorPersistenceWindow.cs +65 -0
  124. package/Editor/Persistence/MultiFileSelectorPersistenceWindow.cs.meta +11 -0
  125. package/Editor/Persistence.meta +8 -0
  126. package/Editor/PersistentDirectorySettings.cs +529 -248
  127. package/Editor/PersistentDirectorySettings.cs.meta +2 -2
  128. package/Editor/PrefabChecker.cs +1329 -741
  129. package/Editor/PrefabChecker.cs.meta +11 -11
  130. package/Editor/Sprites/AnimationCopier.cs +1518 -789
  131. package/Editor/Sprites/AnimationCopier.cs.meta +2 -2
  132. package/Editor/Sprites/AnimationCreator.cs +1532 -881
  133. package/Editor/Sprites/AnimationCreator.cs.meta +11 -11
  134. package/Editor/Sprites/AnimationViewerWindow.cs +1634 -1522
  135. package/Editor/Sprites/AnimationViewerWindow.cs.meta +2 -2
  136. package/Editor/Sprites/ScriptableSpriteAtlas.cs +251 -178
  137. package/Editor/Sprites/ScriptableSpriteAtlas.cs.meta +2 -2
  138. package/Editor/Sprites/ScriptableSpriteAtlasEditor.cs +1470 -1026
  139. package/Editor/Sprites/ScriptableSpriteAtlasEditor.cs.meta +2 -2
  140. package/Editor/Sprites/SpriteCropper.cs +1013 -523
  141. package/Editor/Sprites/SpriteCropper.cs.meta +2 -2
  142. package/Editor/Sprites/SpritePivotAdjustor.cs +605 -265
  143. package/Editor/Sprites/SpritePivotAdjustor.cs.meta +2 -2
  144. package/Editor/Sprites/SpriteSettingsApplier.cs +942 -918
  145. package/Editor/Sprites/SpriteSettingsApplier.cs.meta +2 -2
  146. package/Editor/Sprites/SpriteSettingsApplierAPI.cs +441 -0
  147. package/Editor/Sprites/SpriteSettingsApplierAPI.cs.meta +11 -0
  148. package/Editor/Sprites/SpriteSettingsProfileCollection.cs +12 -0
  149. package/Editor/Sprites/SpriteSettingsProfileCollection.cs.meta +11 -0
  150. package/Editor/Sprites/SpriteSheetAnimationCreator.cs +1586 -1537
  151. package/Editor/Sprites/SpriteSheetAnimationCreator.cs.meta +2 -2
  152. package/Editor/Sprites/TexturePlatformNameHelper.cs +78 -0
  153. package/Editor/Sprites/TexturePlatformNameHelper.cs.meta +11 -0
  154. package/Editor/Sprites/TextureResizerWizard.cs +434 -175
  155. package/Editor/Sprites/TextureResizerWizard.cs.meta +2 -2
  156. package/Editor/Sprites/TextureSettingsApplierAPI.cs +359 -0
  157. package/Editor/Sprites/TextureSettingsApplierAPI.cs.meta +11 -0
  158. package/Editor/Sprites/TextureSettingsApplierWindow.cs +605 -0
  159. package/Editor/Sprites/TextureSettingsApplierWindow.cs.meta +11 -0
  160. package/Editor/Sprites.meta +2 -2
  161. package/Editor/Styles/AnimationViewer.uss +115 -115
  162. package/Editor/Styles/AnimationViewer.uss.meta +2 -2
  163. package/Editor/Styles/AnimationViewer.uxml +56 -56
  164. package/Editor/Styles/AnimationViewer.uxml.meta +2 -2
  165. package/Editor/Styles/SpriteSheetAnimationCreator.uss +10 -0
  166. package/Editor/Styles/SpriteSheetAnimationCreator.uss.meta +11 -0
  167. package/Editor/Styles.meta +2 -2
  168. package/Editor/Tags/AttributeMetadataCacheEditor.cs +46 -0
  169. package/Editor/Tags/AttributeMetadataCacheEditor.cs.meta +11 -0
  170. package/Editor/Tags/AttributeMetadataCacheGenerator.cs +258 -0
  171. package/Editor/Tags/AttributeMetadataCacheGenerator.cs.meta +11 -0
  172. package/Editor/Tags.meta +8 -0
  173. package/Editor/Tools/ImageBlurTool.cs +451 -409
  174. package/Editor/Tools/ImageBlurTool.cs.meta +2 -2
  175. package/Editor/Tools.meta +2 -2
  176. package/Editor/Utils/DxReadOnlyPropertyDrawer.cs +26 -26
  177. package/Editor/Utils/DxReadOnlyPropertyDrawer.cs.meta +11 -11
  178. package/Editor/Utils/EditorUi.cs +228 -0
  179. package/Editor/Utils/EditorUi.cs.meta +11 -0
  180. package/Editor/Utils/EditorUtilities.cs +22 -22
  181. package/Editor/Utils/EditorUtilities.cs.meta +11 -11
  182. package/Editor/Utils/ScriptableObjectSingletonCreator.cs +633 -52
  183. package/Editor/Utils/ScriptableObjectSingletonCreator.cs.meta +2 -2
  184. package/Editor/Utils.meta +8 -8
  185. package/Editor/Visuals/EnhancedImageEditor.cs +160 -160
  186. package/Editor/Visuals/EnhancedImageEditor.cs.meta +11 -11
  187. package/Editor/Visuals.meta +2 -2
  188. package/Editor/WallstopStudios.UnityHelpers.Editor.asmdef +14 -18
  189. package/Editor/WallstopStudios.UnityHelpers.Editor.asmdef.meta +7 -7
  190. package/Editor.meta +8 -8
  191. package/GETTING_STARTED.md +425 -0
  192. package/GETTING_STARTED.md.meta +7 -0
  193. package/GLOSSARY.md +313 -0
  194. package/GLOSSARY.md.meta +7 -0
  195. package/HULLS.md +45 -0
  196. package/HULLS.md.meta +7 -0
  197. package/INDEX.md +429 -0
  198. package/INDEX.md.meta +7 -0
  199. package/LICENSE +21 -21
  200. package/LICENSE.md +7 -7
  201. package/LICENSE.md.meta +7 -7
  202. package/LICENSE.meta +7 -7
  203. package/MATH_AND_EXTENSIONS.md +316 -0
  204. package/MATH_AND_EXTENSIONS.md.meta +7 -0
  205. package/RANDOM_PERFORMANCE.md +140 -0
  206. package/RANDOM_PERFORMANCE.md.meta +7 -0
  207. package/README.md +3195 -188
  208. package/README.md.meta +7 -7
  209. package/REFLECTION_HELPERS.md +272 -0
  210. package/REFLECTION_HELPERS.md.meta +7 -0
  211. package/RELATIONAL_COMPONENTS.md +543 -0
  212. package/RELATIONAL_COMPONENTS.md.meta +7 -0
  213. package/Runtime/AssemblyInfo.cs +7 -0
  214. package/Runtime/AssemblyInfo.cs.meta +11 -0
  215. package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.dll +0 -0
  216. package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.dll.meta +33 -33
  217. package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.xml +499 -278
  218. package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.xml.meta +7 -7
  219. package/Runtime/Binaries/System.IO.Pipelines.dll +0 -0
  220. package/Runtime/Binaries/System.IO.Pipelines.dll.meta +33 -0
  221. package/Runtime/Binaries/System.IO.Pipelines.xml +702 -0
  222. package/Runtime/Binaries/System.IO.Pipelines.xml.meta +7 -0
  223. package/Runtime/Binaries/System.Text.Encodings.Web.dll +0 -0
  224. package/Runtime/Binaries/System.Text.Encodings.Web.dll.meta +33 -33
  225. package/Runtime/Binaries/System.Text.Encodings.Web.xml +1084 -1079
  226. package/Runtime/Binaries/System.Text.Encodings.Web.xml.meta +7 -7
  227. package/Runtime/Binaries/System.Text.Json.dll +0 -0
  228. package/Runtime/Binaries/System.Text.Json.dll.meta +33 -33
  229. package/Runtime/Binaries/System.Text.Json.xml +10217 -8116
  230. package/Runtime/Binaries/System.Text.Json.xml.meta +7 -7
  231. package/Runtime/Binaries.meta +8 -8
  232. package/Runtime/Core/Attributes/AnimationEventAttribute.cs +10 -138
  233. package/Runtime/Core/Attributes/AnimationEventAttribute.cs.meta +11 -11
  234. package/Runtime/Core/Attributes/BaseRelationalComponentAttribute.cs +841 -0
  235. package/Runtime/Core/Attributes/BaseRelationalComponentAttribute.cs.meta +11 -0
  236. package/Runtime/Core/Attributes/ChildComponentAttribute.cs +284 -226
  237. package/Runtime/Core/Attributes/ChildComponentAttribute.cs.meta +11 -11
  238. package/Runtime/Core/Attributes/DxReadOnlyAttribute.cs +6 -6
  239. package/Runtime/Core/Attributes/DxReadOnlyAttribute.cs.meta +11 -11
  240. package/Runtime/Core/Attributes/EnumDisplayNameAttribute.cs +15 -15
  241. package/Runtime/Core/Attributes/EnumDisplayNameAttribute.cs.meta +2 -2
  242. package/Runtime/Core/Attributes/IRelationalComponentAssigner.cs +36 -0
  243. package/Runtime/Core/Attributes/IRelationalComponentAssigner.cs.meta +11 -0
  244. package/Runtime/Core/Attributes/IntDropdownAttribute.cs +14 -14
  245. package/Runtime/Core/Attributes/IntDropdownAttribute.cs.meta +2 -2
  246. package/Runtime/Core/Attributes/KSerializableAttribute.cs +19 -19
  247. package/Runtime/Core/Attributes/KSerializableAttribute.cs.meta +11 -11
  248. package/Runtime/Core/Attributes/NotNullAttribute.cs +32 -32
  249. package/Runtime/Core/Attributes/NotNullAttribute.cs.meta +11 -11
  250. package/Runtime/Core/Attributes/ParentComponentAttribute.cs +376 -0
  251. package/Runtime/Core/Attributes/{ParentComponent.cs.meta → ParentComponentAttribute.cs.meta} +11 -11
  252. package/Runtime/Core/Attributes/RelationalComponentAssigner.cs +107 -0
  253. package/Runtime/Core/Attributes/RelationalComponentAssigner.cs.meta +11 -0
  254. package/Runtime/Core/Attributes/RelationalComponentExtensions.cs +61 -14
  255. package/Runtime/Core/Attributes/RelationalComponentExtensions.cs.meta +11 -11
  256. package/Runtime/Core/Attributes/RelationalComponentInitializer.cs +331 -0
  257. package/Runtime/Core/Attributes/RelationalComponentInitializer.cs.meta +11 -0
  258. package/Runtime/Core/Attributes/ScriptableSingletonPathAttribute.cs +15 -15
  259. package/Runtime/Core/Attributes/ScriptableSingletonPathAttribute.cs.meta +2 -2
  260. package/Runtime/Core/Attributes/SiblingComponentAttribute.cs +264 -137
  261. package/Runtime/Core/Attributes/SiblingComponentAttribute.cs.meta +11 -11
  262. package/Runtime/Core/Attributes/ValidateAssignmentAttribute.cs +115 -106
  263. package/Runtime/Core/Attributes/ValidateAssignmentAttribute.cs.meta +11 -11
  264. package/Runtime/Core/Attributes/ValueHelpers.cs +10 -0
  265. package/Runtime/Core/Attributes/ValueHelpers.cs.meta +3 -0
  266. package/Runtime/Core/Attributes/WShowIfAttribute.cs +24 -24
  267. package/Runtime/Core/Attributes/WShowIfAttribute.cs.meta +2 -2
  268. package/Runtime/Core/Attributes.meta +8 -8
  269. package/Runtime/Core/DataStructure/Adapters/FastVector2Int.cs +192 -92
  270. package/Runtime/Core/DataStructure/Adapters/FastVector2Int.cs.meta +11 -11
  271. package/Runtime/Core/DataStructure/Adapters/FastVector3Int.cs +268 -185
  272. package/Runtime/Core/DataStructure/Adapters/FastVector3Int.cs.meta +11 -11
  273. package/Runtime/Core/DataStructure/Adapters/KGuid.cs +360 -305
  274. package/Runtime/Core/DataStructure/Adapters/KGuid.cs.meta +11 -11
  275. package/Runtime/Core/DataStructure/Adapters/KVector2.cs +146 -80
  276. package/Runtime/Core/DataStructure/Adapters/KVector2.cs.meta +11 -11
  277. package/Runtime/Core/DataStructure/Adapters.meta +8 -8
  278. package/Runtime/Core/DataStructure/BitSet.cs +626 -0
  279. package/Runtime/Core/DataStructure/BitSet.cs.meta +11 -0
  280. package/Runtime/Core/DataStructure/BoundingBox3D.cs +405 -0
  281. package/Runtime/Core/DataStructure/BoundingBox3D.cs.meta +11 -0
  282. package/Runtime/Core/DataStructure/Circle.cs +203 -50
  283. package/Runtime/Core/DataStructure/Circle.cs.meta +11 -11
  284. package/Runtime/Core/DataStructure/CyclicBuffer.cs +489 -266
  285. package/Runtime/Core/DataStructure/CyclicBuffer.cs.meta +11 -11
  286. package/Runtime/Core/DataStructure/Deque.cs +561 -0
  287. package/Runtime/Core/DataStructure/Deque.cs.meta +11 -0
  288. package/Runtime/Core/DataStructure/DisjointSet.cs +483 -0
  289. package/Runtime/Core/DataStructure/DisjointSet.cs.meta +11 -0
  290. package/Runtime/Core/DataStructure/Heap.cs +514 -0
  291. package/Runtime/Core/DataStructure/Heap.cs.meta +11 -0
  292. package/Runtime/Core/DataStructure/{ISpatialTree.cs → ISpatialTree2D.cs} +25 -21
  293. package/Runtime/Core/DataStructure/ISpatialTree2D.cs.meta +11 -0
  294. package/Runtime/Core/DataStructure/ISpatialTree3D.cs +33 -0
  295. package/Runtime/Core/DataStructure/ISpatialTree3D.cs.meta +11 -0
  296. package/Runtime/Core/DataStructure/ImmutableBitSet.cs +398 -0
  297. package/Runtime/Core/DataStructure/ImmutableBitSet.cs.meta +3 -0
  298. package/Runtime/Core/DataStructure/KDTree2D.cs +852 -0
  299. package/Runtime/Core/DataStructure/KDTree2D.cs.meta +11 -0
  300. package/Runtime/Core/DataStructure/KDTree3D.cs +911 -0
  301. package/Runtime/Core/DataStructure/KDTree3D.cs.meta +11 -0
  302. package/Runtime/Core/DataStructure/OctTree3D.cs +983 -0
  303. package/Runtime/Core/DataStructure/OctTree3D.cs.meta +11 -0
  304. package/Runtime/Core/DataStructure/PriorityQueue.cs +194 -0
  305. package/Runtime/Core/DataStructure/PriorityQueue.cs.meta +11 -0
  306. package/Runtime/Core/DataStructure/QuadTree2D.cs +722 -0
  307. package/Runtime/Core/DataStructure/QuadTree2D.cs.meta +11 -0
  308. package/Runtime/Core/DataStructure/RTree2D.cs +704 -0
  309. package/Runtime/Core/DataStructure/{RTree.cs.meta → RTree2D.cs.meta} +11 -11
  310. package/Runtime/Core/DataStructure/RTree3D.cs +775 -0
  311. package/Runtime/Core/DataStructure/RTree3D.cs.meta +11 -0
  312. package/Runtime/Core/DataStructure/SparseSet.cs +597 -0
  313. package/Runtime/Core/DataStructure/SparseSet.cs.meta +11 -0
  314. package/Runtime/Core/DataStructure/SpatialHash2D.cs +312 -0
  315. package/Runtime/Core/DataStructure/SpatialHash2D.cs.meta +3 -0
  316. package/Runtime/Core/DataStructure/SpatialHash3D.cs +341 -0
  317. package/Runtime/Core/DataStructure/SpatialHash3D.cs.meta +11 -0
  318. package/Runtime/Core/DataStructure/Sphere.cs +264 -0
  319. package/Runtime/Core/DataStructure/Sphere.cs.meta +11 -0
  320. package/Runtime/Core/DataStructure/StringWrapper.cs +115 -91
  321. package/Runtime/Core/DataStructure/StringWrapper.cs.meta +11 -11
  322. package/Runtime/Core/DataStructure/TimedCache.cs +88 -66
  323. package/Runtime/Core/DataStructure/TimedCache.cs.meta +11 -11
  324. package/Runtime/Core/DataStructure/Trie.cs +660 -359
  325. package/Runtime/Core/DataStructure/Trie.cs.meta +2 -2
  326. package/Runtime/Core/DataStructure.meta +8 -8
  327. package/Runtime/Core/Extension/AnimatorExtensions.cs +40 -25
  328. package/Runtime/Core/Extension/AnimatorExtensions.cs.meta +11 -11
  329. package/Runtime/Core/Extension/AsyncOperationExtensions.cs +404 -110
  330. package/Runtime/Core/Extension/AsyncOperationExtensions.cs.meta +2 -2
  331. package/Runtime/Core/Extension/CircleExtensions.cs +125 -25
  332. package/Runtime/Core/Extension/CircleExtensions.cs.meta +11 -11
  333. package/Runtime/Core/Extension/ColorExtensions.cs +983 -644
  334. package/Runtime/Core/Extension/ColorExtensions.cs.meta +11 -11
  335. package/Runtime/Core/Extension/DictionaryExtensions.cs +606 -299
  336. package/Runtime/Core/Extension/DictionaryExtensions.cs.meta +11 -11
  337. package/Runtime/Core/Extension/DirectionExtensions.cs +377 -213
  338. package/Runtime/Core/Extension/DirectionExtensions.cs.meta +11 -11
  339. package/Runtime/Core/Extension/EnumExtensions.cs +535 -137
  340. package/Runtime/Core/Extension/EnumExtensions.cs.meta +2 -2
  341. package/Runtime/Core/Extension/IEnumerableExtensions.cs +341 -124
  342. package/Runtime/Core/Extension/IEnumerableExtensions.cs.meta +11 -11
  343. package/Runtime/Core/Extension/IListExtensions.cs +767 -248
  344. package/Runtime/Core/Extension/IListExtensions.cs.meta +11 -11
  345. package/Runtime/Core/Extension/IReadonlyListExtensions.cs +687 -37
  346. package/Runtime/Core/Extension/IReadonlyListExtensions.cs.meta +2 -2
  347. package/Runtime/Core/Extension/ProtoEqualityExtensions.cs +292 -0
  348. package/Runtime/Core/Extension/ProtoEqualityExtensions.cs.meta +3 -0
  349. package/Runtime/Core/Extension/RandomExtensions.cs +938 -109
  350. package/Runtime/Core/Extension/RandomExtensions.cs.meta +11 -11
  351. package/Runtime/Core/Extension/StringExtensions.cs +1635 -239
  352. package/Runtime/Core/Extension/StringExtensions.cs.meta +11 -11
  353. package/Runtime/Core/Extension/UnityExtensions.cs +4555 -1689
  354. package/Runtime/Core/Extension/UnityExtensions.cs.meta +11 -11
  355. package/Runtime/Core/Extension/WallstopStudiosLogger.cs +271 -245
  356. package/Runtime/Core/Extension/WallstopStudiosLogger.cs.meta +11 -11
  357. package/Runtime/Core/Extension.meta +8 -8
  358. package/Runtime/Core/Helper/ArrayConverter.cs +73 -39
  359. package/Runtime/Core/Helper/ArrayConverter.cs.meta +2 -2
  360. package/Runtime/Core/Helper/AssignUtilities.cs +33 -14
  361. package/Runtime/Core/Helper/AssignUtilities.cs.meta +11 -11
  362. package/Runtime/Core/Helper/DirectoryHelper.cs +210 -196
  363. package/Runtime/Core/Helper/DirectoryHelper.cs.meta +2 -2
  364. package/Runtime/Core/Helper/Enumerables.cs +51 -17
  365. package/Runtime/Core/Helper/Enumerables.cs.meta +11 -11
  366. package/Runtime/Core/Helper/FileHelper.cs +97 -77
  367. package/Runtime/Core/Helper/FileHelper.cs.meta +2 -2
  368. package/Runtime/Core/Helper/FormattingHelpers.cs +49 -38
  369. package/Runtime/Core/Helper/FormattingHelpers.cs.meta +2 -2
  370. package/Runtime/Core/Helper/FuncBasedComparer.cs +29 -0
  371. package/Runtime/Core/Helper/FuncBasedComparer.cs.meta +3 -0
  372. package/Runtime/Core/Helper/Geometry.cs +65 -43
  373. package/Runtime/Core/Helper/Geometry.cs.meta +11 -11
  374. package/Runtime/Core/Helper/Helpers.cs +1271 -831
  375. package/Runtime/Core/Helper/Helpers.cs.meta +11 -11
  376. package/Runtime/Core/Helper/IterationHelpers.cs +83 -32
  377. package/Runtime/Core/Helper/IterationHelpers.cs.meta +11 -11
  378. package/Runtime/Core/Helper/LifetimeHelpers.cs +20 -13
  379. package/Runtime/Core/Helper/LifetimeHelpers.cs.meta +11 -11
  380. package/Runtime/Core/Helper/LineHelper.cs +259 -194
  381. package/Runtime/Core/Helper/LineHelper.cs.meta +2 -2
  382. package/Runtime/Core/Helper/Logging/UnityLogTagFormatter.cs +549 -539
  383. package/Runtime/Core/Helper/Logging/UnityLogTagFormatter.cs.meta +2 -2
  384. package/Runtime/Core/Helper/Logging.meta +2 -2
  385. package/Runtime/Core/Helper/Objects.cs +477 -769
  386. package/Runtime/Core/Helper/Objects.cs.meta +11 -11
  387. package/Runtime/Core/Helper/Partials/LogHelpers.cs +13 -13
  388. package/Runtime/Core/Helper/Partials/LogHelpers.cs.meta +2 -2
  389. package/Runtime/Core/Helper/Partials/MathHelpers.cs +45 -30
  390. package/Runtime/Core/Helper/Partials/MathHelpers.cs.meta +2 -2
  391. package/Runtime/Core/Helper/Partials/ObjectHelpers.cs +506 -400
  392. package/Runtime/Core/Helper/Partials/ObjectHelpers.cs.meta +2 -2
  393. package/Runtime/Core/Helper/Partials/TransformHelpers.cs +393 -377
  394. package/Runtime/Core/Helper/Partials/TransformHelpers.cs.meta +2 -2
  395. package/Runtime/Core/Helper/Partials.meta +2 -2
  396. package/Runtime/Core/Helper/PathHelper.cs +42 -15
  397. package/Runtime/Core/Helper/PathHelper.cs.meta +2 -2
  398. package/Runtime/Core/Helper/ReflectionHelpers.cs +5287 -1963
  399. package/Runtime/Core/Helper/ReflectionHelpers.cs.meta +2 -2
  400. package/Runtime/Core/Helper/ReverseComparer.cs +33 -0
  401. package/Runtime/Core/Helper/ReverseComparer.cs.meta +3 -0
  402. package/Runtime/Core/Helper/SceneHelper.cs +251 -224
  403. package/Runtime/Core/Helper/SceneHelper.cs.meta +2 -2
  404. package/Runtime/Core/Helper/SpriteHelpers.cs +50 -41
  405. package/Runtime/Core/Helper/SpriteHelpers.cs.meta +11 -11
  406. package/Runtime/Core/Helper/StringInList.cs +61 -35
  407. package/Runtime/Core/Helper/StringInList.cs.meta +11 -11
  408. package/Runtime/Core/Helper/TestAssemblyHelper.cs +134 -0
  409. package/Runtime/Core/Helper/TestAssemblyHelper.cs.meta +11 -0
  410. package/Runtime/Core/Helper/UnityMainThreadDispatcher.cs +100 -82
  411. package/Runtime/Core/Helper/UnityMainThreadDispatcher.cs.meta +2 -2
  412. package/Runtime/Core/Helper/WallMath.cs +672 -166
  413. package/Runtime/Core/Helper/WallMath.cs.meta +11 -11
  414. package/Runtime/Core/Helper.meta +8 -8
  415. package/Runtime/Core/Math/Line2D.cs +263 -0
  416. package/Runtime/Core/Math/Line2D.cs.meta +11 -0
  417. package/Runtime/Core/Math/Line3D.cs +452 -0
  418. package/Runtime/Core/Math/Line3D.cs.meta +11 -0
  419. package/Runtime/Core/Math/Parabola.cs +241 -47
  420. package/Runtime/Core/Math/Parabola.cs.meta +11 -11
  421. package/Runtime/Core/Math/PointPolygonCheck.cs +175 -36
  422. package/Runtime/Core/Math/PointPolygonCheck.cs.meta +11 -11
  423. package/Runtime/Core/Math/Range.cs +157 -92
  424. package/Runtime/Core/Math/Range.cs.meta +11 -11
  425. package/Runtime/Core/Math.meta +8 -8
  426. package/Runtime/Core/Model/Direction.cs +25 -43
  427. package/Runtime/Core/Model/Direction.cs.meta +11 -11
  428. package/Runtime/Core/Model.meta +8 -8
  429. package/Runtime/Core/OneOf/FastOneOf.cs +252 -152
  430. package/Runtime/Core/OneOf/FastOneOf.cs.meta +11 -11
  431. package/Runtime/Core/OneOf/FastOneOf2.cs +198 -0
  432. package/Runtime/Core/OneOf/FastOneOf2.cs.meta +11 -0
  433. package/Runtime/Core/OneOf/FastOneOf4.cs +324 -0
  434. package/Runtime/Core/OneOf/FastOneOf4.cs.meta +11 -0
  435. package/Runtime/Core/OneOf/None.cs +30 -4
  436. package/Runtime/Core/OneOf/None.cs.meta +11 -11
  437. package/Runtime/Core/OneOf.meta +8 -8
  438. package/Runtime/Core/Random/AbstractRandom.cs +1318 -655
  439. package/Runtime/Core/Random/AbstractRandom.cs.meta +11 -11
  440. package/Runtime/Core/Random/DotNetRandom.cs +118 -54
  441. package/Runtime/Core/Random/DotNetRandom.cs.meta +2 -2
  442. package/Runtime/Core/Random/IRandom.cs +203 -161
  443. package/Runtime/Core/Random/IRandom.cs.meta +11 -11
  444. package/Runtime/Core/Random/IllusionFlow.cs +171 -107
  445. package/Runtime/Core/Random/IllusionFlow.cs.meta +2 -2
  446. package/Runtime/Core/Random/LinearCongruentialGenerator.cs +90 -49
  447. package/Runtime/Core/Random/LinearCongruentialGenerator.cs.meta +2 -2
  448. package/Runtime/Core/Random/NativePcgRandom.cs +139 -97
  449. package/Runtime/Core/Random/NativePcgRandom.cs.meta +11 -11
  450. package/Runtime/Core/Random/PRNG.cs +21 -7
  451. package/Runtime/Core/Random/PRNG.cs.meta +2 -2
  452. package/Runtime/Core/Random/PcgRandom.cs +243 -149
  453. package/Runtime/Core/Random/PcgRandom.cs.meta +11 -11
  454. package/Runtime/Core/Random/PerlinNoise.cs +369 -369
  455. package/Runtime/Core/Random/PerlinNoise.cs.meta +2 -2
  456. package/Runtime/Core/Random/RandomComparer.cs +34 -0
  457. package/Runtime/Core/Random/RandomComparer.cs.meta +3 -0
  458. package/Runtime/Core/Random/RandomState.cs +206 -131
  459. package/Runtime/Core/Random/RandomState.cs.meta +11 -11
  460. package/Runtime/Core/Random/RandomUtilities.cs +55 -26
  461. package/Runtime/Core/Random/RandomUtilities.cs.meta +11 -11
  462. package/Runtime/Core/Random/RomuDuo.cs +171 -116
  463. package/Runtime/Core/Random/RomuDuo.cs.meta +2 -2
  464. package/Runtime/Core/Random/SplitMix64.cs +134 -94
  465. package/Runtime/Core/Random/SplitMix64.cs.meta +2 -2
  466. package/Runtime/Core/Random/SquirrelRandom.cs +127 -84
  467. package/Runtime/Core/Random/SquirrelRandom.cs.meta +11 -11
  468. package/Runtime/Core/Random/SystemRandom.cs +203 -162
  469. package/Runtime/Core/Random/SystemRandom.cs.meta +11 -11
  470. package/Runtime/Core/Random/ThreadLocalRandom.cs +25 -12
  471. package/Runtime/Core/Random/ThreadLocalRandom.cs.meta +11 -11
  472. package/Runtime/Core/Random/UnityRandom.cs +109 -57
  473. package/Runtime/Core/Random/UnityRandom.cs.meta +11 -11
  474. package/Runtime/Core/Random/WyRandom.cs +158 -121
  475. package/Runtime/Core/Random/WyRandom.cs.meta +2 -2
  476. package/Runtime/Core/Random/XorShiftRandom.cs +106 -52
  477. package/Runtime/Core/Random/XorShiftRandom.cs.meta +11 -11
  478. package/Runtime/Core/Random/XoroShiroRandom.cs +184 -119
  479. package/Runtime/Core/Random/XoroShiroRandom.cs.meta +2 -2
  480. package/Runtime/Core/Random.meta +8 -8
  481. package/Runtime/Core/Serialization/JsonConverters/AnimationCurveConverter.cs +248 -0
  482. package/Runtime/Core/Serialization/JsonConverters/AnimationCurveConverter.cs.meta +11 -0
  483. package/Runtime/Core/Serialization/JsonConverters/BitSetConverter.cs +119 -0
  484. package/Runtime/Core/Serialization/JsonConverters/BitSetConverter.cs.meta +11 -0
  485. package/Runtime/Core/Serialization/JsonConverters/BoundingSphereConverter.cs +74 -0
  486. package/Runtime/Core/Serialization/JsonConverters/BoundingSphereConverter.cs.meta +11 -0
  487. package/Runtime/Core/Serialization/JsonConverters/BoundsConverter.cs +132 -0
  488. package/Runtime/Core/Serialization/JsonConverters/BoundsConverter.cs.meta +11 -0
  489. package/Runtime/Core/Serialization/JsonConverters/BoundsIntConverter.cs +135 -0
  490. package/Runtime/Core/Serialization/JsonConverters/BoundsIntConverter.cs.meta +11 -0
  491. package/Runtime/Core/Serialization/JsonConverters/Color32Converter.cs +98 -0
  492. package/Runtime/Core/Serialization/JsonConverters/Color32Converter.cs.meta +11 -0
  493. package/Runtime/Core/Serialization/JsonConverters/ColorBlockConverter.cs +123 -0
  494. package/Runtime/Core/Serialization/JsonConverters/ColorBlockConverter.cs.meta +11 -0
  495. package/Runtime/Core/Serialization/JsonConverters/ColorConverter.cs +88 -88
  496. package/Runtime/Core/Serialization/JsonConverters/ColorConverter.cs.meta +2 -2
  497. package/Runtime/Core/Serialization/JsonConverters/CyclicBufferConverterFactory.cs +112 -0
  498. package/Runtime/Core/Serialization/JsonConverters/CyclicBufferConverterFactory.cs.meta +11 -0
  499. package/Runtime/Core/Serialization/JsonConverters/DequeConverterFactory.cs +62 -0
  500. package/Runtime/Core/Serialization/JsonConverters/DequeConverterFactory.cs.meta +11 -0
  501. package/Runtime/Core/Serialization/JsonConverters/FastVector2IntConverter.cs +72 -0
  502. package/Runtime/Core/Serialization/JsonConverters/FastVector2IntConverter.cs.meta +11 -0
  503. package/Runtime/Core/Serialization/JsonConverters/FastVector3IntConverter.cs +80 -0
  504. package/Runtime/Core/Serialization/JsonConverters/FastVector3IntConverter.cs.meta +11 -0
  505. package/Runtime/Core/Serialization/JsonConverters/GameObjectConverter.cs +36 -36
  506. package/Runtime/Core/Serialization/JsonConverters/GameObjectConverter.cs.meta +2 -2
  507. package/Runtime/Core/Serialization/JsonConverters/GradientConverter.cs +245 -0
  508. package/Runtime/Core/Serialization/JsonConverters/GradientConverter.cs.meta +11 -0
  509. package/Runtime/Core/Serialization/JsonConverters/Hash128Converter.cs +92 -0
  510. package/Runtime/Core/Serialization/JsonConverters/Hash128Converter.cs.meta +11 -0
  511. package/Runtime/Core/Serialization/JsonConverters/ImmutableBitSetConverter.cs +119 -0
  512. package/Runtime/Core/Serialization/JsonConverters/ImmutableBitSetConverter.cs.meta +11 -0
  513. package/Runtime/Core/Serialization/JsonConverters/KVector2Converter.cs +72 -0
  514. package/Runtime/Core/Serialization/JsonConverters/KVector2Converter.cs.meta +11 -0
  515. package/Runtime/Core/Serialization/JsonConverters/LayerMaskConverter.cs +95 -0
  516. package/Runtime/Core/Serialization/JsonConverters/LayerMaskConverter.cs.meta +11 -0
  517. package/Runtime/Core/Serialization/JsonConverters/Matrix4x4Converter.cs +237 -218
  518. package/Runtime/Core/Serialization/JsonConverters/Matrix4x4Converter.cs.meta +2 -2
  519. package/Runtime/Core/Serialization/JsonConverters/MinMaxCurveConverter.cs +142 -0
  520. package/Runtime/Core/Serialization/JsonConverters/MinMaxCurveConverter.cs.meta +11 -0
  521. package/Runtime/Core/Serialization/JsonConverters/MinMaxGradientConverter.cs +135 -0
  522. package/Runtime/Core/Serialization/JsonConverters/MinMaxGradientConverter.cs.meta +11 -0
  523. package/Runtime/Core/Serialization/JsonConverters/PlaneConverter.cs +79 -0
  524. package/Runtime/Core/Serialization/JsonConverters/PlaneConverter.cs.meta +11 -0
  525. package/Runtime/Core/Serialization/JsonConverters/PoseConverter.cs +76 -0
  526. package/Runtime/Core/Serialization/JsonConverters/PoseConverter.cs.meta +11 -0
  527. package/Runtime/Core/Serialization/JsonConverters/QuaternionConverter.cs +88 -0
  528. package/Runtime/Core/Serialization/JsonConverters/QuaternionConverter.cs.meta +11 -0
  529. package/Runtime/Core/Serialization/JsonConverters/RangeConverterFactory.cs +106 -0
  530. package/Runtime/Core/Serialization/JsonConverters/RangeConverterFactory.cs.meta +11 -0
  531. package/Runtime/Core/Serialization/JsonConverters/RangeIntConverter.cs +71 -0
  532. package/Runtime/Core/Serialization/JsonConverters/RangeIntConverter.cs.meta +11 -0
  533. package/Runtime/Core/Serialization/JsonConverters/Ray2DConverter.cs +80 -0
  534. package/Runtime/Core/Serialization/JsonConverters/Ray2DConverter.cs.meta +11 -0
  535. package/Runtime/Core/Serialization/JsonConverters/RayConverter.cs +76 -0
  536. package/Runtime/Core/Serialization/JsonConverters/RayConverter.cs.meta +11 -0
  537. package/Runtime/Core/Serialization/JsonConverters/RaycastHitConverter.cs +115 -0
  538. package/Runtime/Core/Serialization/JsonConverters/RaycastHitConverter.cs.meta +11 -0
  539. package/Runtime/Core/Serialization/JsonConverters/RectConverter.cs +84 -0
  540. package/Runtime/Core/Serialization/JsonConverters/RectConverter.cs.meta +11 -0
  541. package/Runtime/Core/Serialization/JsonConverters/RectIntConverter.cs +88 -0
  542. package/Runtime/Core/Serialization/JsonConverters/RectIntConverter.cs.meta +11 -0
  543. package/Runtime/Core/Serialization/JsonConverters/RectOffsetConverter.cs +87 -0
  544. package/Runtime/Core/Serialization/JsonConverters/RectOffsetConverter.cs.meta +11 -0
  545. package/Runtime/Core/Serialization/JsonConverters/RenderTextureDescriptorConverter.cs +264 -0
  546. package/Runtime/Core/Serialization/JsonConverters/RenderTextureDescriptorConverter.cs.meta +11 -0
  547. package/Runtime/Core/Serialization/JsonConverters/ResolutionConverter.cs +158 -0
  548. package/Runtime/Core/Serialization/JsonConverters/ResolutionConverter.cs.meta +11 -0
  549. package/Runtime/Core/Serialization/JsonConverters/SceneConverter.cs +103 -0
  550. package/Runtime/Core/Serialization/JsonConverters/SceneConverter.cs.meta +11 -0
  551. package/Runtime/Core/Serialization/JsonConverters/SphericalHarmonicsL2Converter.cs +121 -0
  552. package/Runtime/Core/Serialization/JsonConverters/SphericalHarmonicsL2Converter.cs.meta +11 -0
  553. package/Runtime/Core/Serialization/JsonConverters/TouchConverter.cs +54 -0
  554. package/Runtime/Core/Serialization/JsonConverters/TouchConverter.cs.meta +11 -0
  555. package/Runtime/Core/Serialization/JsonConverters/TypeConverter.cs +30 -28
  556. package/Runtime/Core/Serialization/JsonConverters/TypeConverter.cs.meta +2 -2
  557. package/Runtime/Core/Serialization/JsonConverters/Vector2Converter.cs +72 -74
  558. package/Runtime/Core/Serialization/JsonConverters/Vector2Converter.cs.meta +11 -11
  559. package/Runtime/Core/Serialization/JsonConverters/Vector2IntConverter.cs +72 -0
  560. package/Runtime/Core/Serialization/JsonConverters/Vector2IntConverter.cs.meta +11 -0
  561. package/Runtime/Core/Serialization/JsonConverters/Vector3Converter.cs +80 -81
  562. package/Runtime/Core/Serialization/JsonConverters/Vector3Converter.cs.meta +11 -11
  563. package/Runtime/Core/Serialization/JsonConverters/Vector3IntConverter.cs +80 -0
  564. package/Runtime/Core/Serialization/JsonConverters/Vector3IntConverter.cs.meta +11 -0
  565. package/Runtime/Core/Serialization/JsonConverters/Vector4Converter.cs +88 -88
  566. package/Runtime/Core/Serialization/JsonConverters/Vector4Converter.cs.meta +2 -2
  567. package/Runtime/Core/Serialization/JsonConverters.meta +8 -8
  568. package/Runtime/Core/Serialization/ProtobufUnitySurrogates.cs +383 -0
  569. package/Runtime/Core/Serialization/ProtobufUnitySurrogates.cs.meta +11 -0
  570. package/Runtime/Core/Serialization/Serializer.cs +2020 -195
  571. package/Runtime/Core/Serialization/Serializer.cs.meta +11 -11
  572. package/Runtime/Core/Serialization.meta +8 -8
  573. package/Runtime/Core/Threading/SingleThreadedThreadPool.cs +228 -228
  574. package/Runtime/Core/Threading/SingleThreadedThreadPool.cs.meta +11 -11
  575. package/Runtime/Core/Threading.meta +8 -8
  576. package/Runtime/Core.meta +8 -8
  577. package/Runtime/Integrations/VContainer/ObjectResolverRelationalExtensions.cs +185 -0
  578. package/Runtime/Integrations/VContainer/ObjectResolverRelationalExtensions.cs.meta +11 -0
  579. package/Runtime/Integrations/VContainer/RelationalComponentEntryPoint.cs +109 -0
  580. package/Runtime/Integrations/VContainer/RelationalComponentEntryPoint.cs.meta +11 -0
  581. package/Runtime/Integrations/VContainer/RelationalComponentsBuilderExtensions.cs +78 -0
  582. package/Runtime/Integrations/VContainer/RelationalComponentsBuilderExtensions.cs.meta +11 -0
  583. package/Runtime/Integrations/VContainer/RelationalSceneAssignmentOptions.cs +83 -0
  584. package/Runtime/Integrations/VContainer/RelationalSceneAssignmentOptions.cs.meta +11 -0
  585. package/Runtime/Integrations/VContainer/WallstopStudios.UnityHelpers.Integration.VContainer.asmdef +30 -0
  586. package/Runtime/Integrations/VContainer/WallstopStudios.UnityHelpers.Integration.VContainer.asmdef.meta +7 -0
  587. package/Runtime/Integrations/VContainer.meta +8 -0
  588. package/Runtime/Integrations/Zenject/DiContainerRelationalExtensions.cs +180 -0
  589. package/Runtime/Integrations/Zenject/DiContainerRelationalExtensions.cs.meta +11 -0
  590. package/Runtime/Integrations/Zenject/RelationalComponentSceneInitializer.cs +105 -0
  591. package/Runtime/Integrations/Zenject/RelationalComponentSceneInitializer.cs.meta +11 -0
  592. package/Runtime/Integrations/Zenject/RelationalComponentsInstaller.cs +72 -0
  593. package/Runtime/Integrations/Zenject/RelationalComponentsInstaller.cs.meta +11 -0
  594. package/Runtime/Integrations/Zenject/RelationalSceneAssignmentOptions.cs +87 -0
  595. package/Runtime/Integrations/Zenject/RelationalSceneAssignmentOptions.cs.meta +11 -0
  596. package/Runtime/Integrations/Zenject/WallstopStudios.UnityHelpers.Integration.Zenject.asmdef +30 -0
  597. package/Runtime/Integrations/Zenject/WallstopStudios.UnityHelpers.Integration.Zenject.asmdef.meta +7 -0
  598. package/Runtime/Integrations/Zenject.meta +8 -0
  599. package/Runtime/Integrations.meta +8 -0
  600. package/Runtime/Protobuf-Net/System.Collections.Immutable.dll.meta +33 -33
  601. package/Runtime/Protobuf-Net/System.Runtime.CompilerServices.Unsafe.dll.meta +33 -33
  602. package/Runtime/Protobuf-Net/protobuf-net.Core.dll.meta +33 -33
  603. package/Runtime/Protobuf-Net/protobuf-net.dll.meta +33 -33
  604. package/Runtime/Protobuf-Net.meta +8 -8
  605. package/Runtime/Tags/AlwaysIncludeInAttributeMetadataCacheAttribute.cs +11 -0
  606. package/Runtime/Tags/AlwaysIncludeInAttributeMetadataCacheAttribute.cs.meta +11 -0
  607. package/Runtime/Tags/Attribute.cs +399 -205
  608. package/Runtime/Tags/Attribute.cs.meta +2 -2
  609. package/Runtime/Tags/AttributeEffect.cs +372 -281
  610. package/Runtime/Tags/AttributeEffect.cs.meta +2 -2
  611. package/Runtime/Tags/AttributeMetadataCache.cs +503 -0
  612. package/Runtime/Tags/AttributeMetadataCache.cs.meta +11 -0
  613. package/Runtime/Tags/AttributeMetadataFilters.cs +108 -0
  614. package/Runtime/Tags/AttributeMetadataFilters.cs.meta +11 -0
  615. package/Runtime/Tags/AttributeModification.cs +132 -48
  616. package/Runtime/Tags/AttributeModification.cs.meta +2 -2
  617. package/Runtime/Tags/AttributeUtilities.cs +376 -209
  618. package/Runtime/Tags/AttributeUtilities.cs.meta +2 -2
  619. package/Runtime/Tags/AttributesComponent.cs +237 -163
  620. package/Runtime/Tags/AttributesComponent.cs.meta +2 -2
  621. package/Runtime/Tags/CollisionSenses.cs +117 -91
  622. package/Runtime/Tags/CollisionSenses.cs.meta +2 -2
  623. package/Runtime/Tags/CosmeticEffectComponent.cs +112 -50
  624. package/Runtime/Tags/CosmeticEffectComponent.cs.meta +2 -2
  625. package/Runtime/Tags/CosmeticEffectData.cs +109 -63
  626. package/Runtime/Tags/CosmeticEffectData.cs.meta +2 -2
  627. package/Runtime/Tags/EffectHandle.cs +150 -65
  628. package/Runtime/Tags/EffectHandle.cs.meta +2 -2
  629. package/Runtime/Tags/EffectHandler.cs +470 -393
  630. package/Runtime/Tags/EffectHandler.cs.meta +2 -2
  631. package/Runtime/Tags/ModificationAction.cs +60 -9
  632. package/Runtime/Tags/ModificationAction.cs.meta +2 -2
  633. package/Runtime/Tags/ModifierDurationType.cs +71 -13
  634. package/Runtime/Tags/ModifierDurationType.cs.meta +2 -2
  635. package/Runtime/Tags/TagHandler.cs +373 -158
  636. package/Runtime/Tags/TagHandler.cs.meta +2 -2
  637. package/Runtime/Tags.meta +2 -2
  638. package/Runtime/Utils/AnimationEventEqualityComparer.cs +198 -161
  639. package/Runtime/Utils/AnimationEventEqualityComparer.cs.meta +11 -11
  640. package/Runtime/Utils/AnimatorEnumStateMachine.cs +110 -88
  641. package/Runtime/Utils/AnimatorEnumStateMachine.cs.meta +11 -11
  642. package/Runtime/Utils/Ascii85.cs +132 -115
  643. package/Runtime/Utils/Ascii85.cs.meta +2 -2
  644. package/Runtime/Utils/Buffers.cs +1151 -550
  645. package/Runtime/Utils/Buffers.cs.meta +11 -11
  646. package/Runtime/Utils/CenterPointOffset.cs +35 -30
  647. package/Runtime/Utils/CenterPointOffset.cs.meta +2 -2
  648. package/Runtime/Utils/ChildSpawner.cs +250 -157
  649. package/Runtime/Utils/ChildSpawner.cs.meta +2 -2
  650. package/Runtime/Utils/CircleLineRenderer.cs +142 -142
  651. package/Runtime/Utils/CircleLineRenderer.cs.meta +11 -11
  652. package/Runtime/Utils/CollisionProxy.cs +48 -48
  653. package/Runtime/Utils/CollisionProxy.cs.meta +2 -2
  654. package/Runtime/Utils/CoroutineHandler.cs +4 -4
  655. package/Runtime/Utils/CoroutineHandler.cs.meta +2 -2
  656. package/Runtime/Utils/DeferredDisposalResult.cs +20 -23
  657. package/Runtime/Utils/DeferredDisposalResult.cs.meta +2 -2
  658. package/Runtime/Utils/LZMA.cs +276 -53
  659. package/Runtime/Utils/LZMA.cs.meta +2 -2
  660. package/Runtime/Utils/MatchColliderToSprite.cs +104 -104
  661. package/Runtime/Utils/MatchColliderToSprite.cs.meta +2 -2
  662. package/Runtime/Utils/MatchTransform.cs +99 -82
  663. package/Runtime/Utils/MatchTransform.cs.meta +2 -2
  664. package/Runtime/Utils/Oscillator.cs +27 -27
  665. package/Runtime/Utils/Oscillator.cs.meta +11 -11
  666. package/Runtime/Utils/PolygonCollider2DOptimizer.cs +104 -83
  667. package/Runtime/Utils/PolygonCollider2DOptimizer.cs.meta +2 -2
  668. package/Runtime/Utils/RuntimeSingleton.cs +139 -88
  669. package/Runtime/Utils/RuntimeSingleton.cs.meta +11 -11
  670. package/Runtime/Utils/ScriptableObjectSingleton.cs +226 -85
  671. package/Runtime/Utils/ScriptableObjectSingleton.cs.meta +2 -2
  672. package/Runtime/Utils/SerializedStringComparer.cs +107 -107
  673. package/Runtime/Utils/SerializedStringComparer.cs.meta +2 -2
  674. package/Runtime/Utils/SetTextureImportData.cs +69 -69
  675. package/Runtime/Utils/SetTextureImportData.cs.meta +11 -11
  676. package/Runtime/Utils/SevenZip/Common/CRC.cs +70 -70
  677. package/Runtime/Utils/SevenZip/Common/CRC.cs.meta +11 -11
  678. package/Runtime/Utils/SevenZip/Common/InBuffer.cs +84 -84
  679. package/Runtime/Utils/SevenZip/Common/InBuffer.cs.meta +11 -11
  680. package/Runtime/Utils/SevenZip/Common/OutBuffer.cs +70 -70
  681. package/Runtime/Utils/SevenZip/Common/OutBuffer.cs.meta +11 -11
  682. package/Runtime/Utils/SevenZip/Common.meta +2 -2
  683. package/Runtime/Utils/SevenZip/Compress/LZ/IMatchFinder.cs +28 -28
  684. package/Runtime/Utils/SevenZip/Compress/LZ/IMatchFinder.cs.meta +11 -11
  685. package/Runtime/Utils/SevenZip/Compress/LZ/LzBinTree.cs +454 -454
  686. package/Runtime/Utils/SevenZip/Compress/LZ/LzBinTree.cs.meta +11 -11
  687. package/Runtime/Utils/SevenZip/Compress/LZ/LzInWindow.cs +179 -179
  688. package/Runtime/Utils/SevenZip/Compress/LZ/LzInWindow.cs.meta +11 -11
  689. package/Runtime/Utils/SevenZip/Compress/LZ/LzOutWindow.cs +137 -137
  690. package/Runtime/Utils/SevenZip/Compress/LZ/LzOutWindow.cs.meta +11 -11
  691. package/Runtime/Utils/SevenZip/Compress/LZ.meta +8 -8
  692. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaBase.cs +110 -110
  693. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaBase.cs.meta +11 -11
  694. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaDecoder.cs +525 -527
  695. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaDecoder.cs.meta +11 -11
  696. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaEncoder.cs +1891 -1904
  697. package/Runtime/Utils/SevenZip/Compress/LZMA/LzmaEncoder.cs.meta +11 -11
  698. package/Runtime/Utils/SevenZip/Compress/LZMA.meta +8 -8
  699. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoder.cs +242 -242
  700. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoder.cs.meta +11 -11
  701. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoderBit.cs +146 -149
  702. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoderBit.cs.meta +11 -11
  703. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoderBitTree.cs +177 -177
  704. package/Runtime/Utils/SevenZip/Compress/RangeCoder/RangeCoderBitTree.cs.meta +11 -11
  705. package/Runtime/Utils/SevenZip/Compress/RangeCoder.meta +8 -8
  706. package/Runtime/Utils/SevenZip/Compress.meta +8 -8
  707. package/Runtime/Utils/SevenZip/ICoder.cs +177 -177
  708. package/Runtime/Utils/SevenZip/ICoder.cs.meta +11 -11
  709. package/Runtime/Utils/SevenZip.meta +2 -2
  710. package/Runtime/Utils/SpriteRendererMetadata.cs +346 -370
  711. package/Runtime/Utils/SpriteRendererMetadata.cs.meta +2 -2
  712. package/Runtime/Utils/SpriteRendererSyncer.cs +100 -100
  713. package/Runtime/Utils/SpriteRendererSyncer.cs.meta +2 -2
  714. package/Runtime/Utils/StartTracker.cs +15 -15
  715. package/Runtime/Utils/StartTracker.cs.meta +2 -2
  716. package/Runtime/Utils/TextureScale.cs +356 -179
  717. package/Runtime/Utils/TextureScale.cs.meta +2 -2
  718. package/Runtime/Utils/TypeNameSorter.cs +17 -17
  719. package/Runtime/Utils/TypeNameSorter.cs.meta +2 -2
  720. package/Runtime/Utils/UnityObjectNameComparer.cs +89 -89
  721. package/Runtime/Utils/UnityObjectNameComparer.cs.meta +2 -2
  722. package/Runtime/Utils.meta +8 -8
  723. package/Runtime/Visuals/AnimatedSpriteLayer.cs +217 -130
  724. package/Runtime/Visuals/AnimatedSpriteLayer.cs.meta +2 -2
  725. package/Runtime/Visuals/UGUI/EnhancedImage.cs +218 -85
  726. package/Runtime/Visuals/UGUI/EnhancedImage.cs.meta +2 -2
  727. package/Runtime/Visuals/UGUI.meta +2 -2
  728. package/Runtime/Visuals/UIToolkit/LayeredImage.cs +781 -484
  729. package/Runtime/Visuals/UIToolkit/LayeredImage.cs.meta +2 -2
  730. package/Runtime/Visuals/UIToolkit/MultiFileSelectorElement.cs +945 -322
  731. package/Runtime/Visuals/UIToolkit/MultiFileSelectorElement.cs.meta +2 -2
  732. package/Runtime/Visuals/UIToolkit.meta +2 -2
  733. package/Runtime/Visuals.meta +2 -2
  734. package/Runtime/WallstopStudios.UnityHelpers.asmdef +22 -14
  735. package/Runtime/WallstopStudios.UnityHelpers.asmdef.meta +7 -7
  736. package/Runtime.meta +8 -8
  737. package/SERIALIZATION.md +648 -0
  738. package/SERIALIZATION.md.meta +7 -0
  739. package/SINGLETONS.md +427 -0
  740. package/SINGLETONS.md.meta +7 -0
  741. package/SPATIAL_TREES_2D_GUIDE.md +261 -0
  742. package/SPATIAL_TREES_2D_GUIDE.md.meta +7 -0
  743. package/SPATIAL_TREES_3D_GUIDE.md +214 -0
  744. package/SPATIAL_TREES_3D_GUIDE.md.meta +7 -0
  745. package/SPATIAL_TREE_2D_PERFORMANCE.md +238 -0
  746. package/SPATIAL_TREE_2D_PERFORMANCE.md.meta +7 -0
  747. package/SPATIAL_TREE_3D_PERFORMANCE.md +240 -0
  748. package/SPATIAL_TREE_3D_PERFORMANCE.md.meta +7 -0
  749. package/SPATIAL_TREE_SEMANTICS.md +106 -0
  750. package/SPATIAL_TREE_SEMANTICS.md.meta +7 -0
  751. package/Samples~/DI - VContainer/Prefabs/RelationalConsumer.prefab +77 -0
  752. package/Samples~/DI - VContainer/Prefabs/RelationalConsumer.prefab.meta +8 -0
  753. package/Samples~/DI - VContainer/Prefabs/Spawner.prefab +47 -0
  754. package/Samples~/DI - VContainer/Prefabs/Spawner.prefab.meta +8 -0
  755. package/Samples~/DI - VContainer/Prefabs.meta +9 -0
  756. package/Samples~/DI - VContainer/README.md +334 -0
  757. package/Samples~/DI - VContainer/README.md.meta +8 -0
  758. package/Samples~/DI - VContainer/Scenes/VContainer_Sample.unity +120 -0
  759. package/Samples~/DI - VContainer/Scenes/VContainer_Sample.unity.meta +8 -0
  760. package/Samples~/DI - VContainer/Scenes.meta +9 -0
  761. package/Samples~/DI - VContainer/Scripts/GameLifetimeScope.cs +24 -0
  762. package/Samples~/DI - VContainer/Scripts/GameLifetimeScope.cs.meta +12 -0
  763. package/Samples~/DI - VContainer/Scripts/RelationalConsumer.cs +21 -0
  764. package/Samples~/DI - VContainer/Scripts/RelationalConsumer.cs.meta +12 -0
  765. package/Samples~/DI - VContainer/Scripts/Samples.UnityHelpers.DI.VContainer.asmdef +37 -0
  766. package/Samples~/DI - VContainer/Scripts/Samples.UnityHelpers.DI.VContainer.asmdef.meta +8 -0
  767. package/Samples~/DI - VContainer/Scripts/Spawner.cs +21 -0
  768. package/Samples~/DI - VContainer/Scripts/Spawner.cs.meta +12 -0
  769. package/Samples~/DI - VContainer/Scripts.meta +9 -0
  770. package/Samples~/DI - VContainer.meta +9 -0
  771. package/Samples~/DI - Zenject/Prefabs/RelationalConsumer.prefab +77 -0
  772. package/Samples~/DI - Zenject/Prefabs/RelationalConsumer.prefab.meta +8 -0
  773. package/Samples~/DI - Zenject/Prefabs/SpawnerZenject.prefab +47 -0
  774. package/Samples~/DI - Zenject/Prefabs/SpawnerZenject.prefab.meta +8 -0
  775. package/Samples~/DI - Zenject/Prefabs.meta +9 -0
  776. package/Samples~/DI - Zenject/README.md +389 -0
  777. package/Samples~/DI - Zenject/README.md.meta +7 -0
  778. package/Samples~/DI - Zenject/Scenes/Zenject_Sample.unity +164 -0
  779. package/Samples~/DI - Zenject/Scenes/Zenject_Sample.unity.meta +8 -0
  780. package/Samples~/DI - Zenject/Scenes.meta +9 -0
  781. package/Samples~/DI - Zenject/Scripts/RelationalConsumer.cs +19 -0
  782. package/Samples~/DI - Zenject/Scripts/RelationalConsumer.cs.meta +12 -0
  783. package/Samples~/DI - Zenject/Scripts/Samples.UnityHelpers.DI.Zenject.asmdef +36 -0
  784. package/Samples~/DI - Zenject/Scripts/Samples.UnityHelpers.DI.Zenject.asmdef.meta +8 -0
  785. package/Samples~/DI - Zenject/Scripts/SceneContextPlaceholder.cs +47 -0
  786. package/Samples~/DI - Zenject/Scripts/SceneContextPlaceholder.cs.meta +12 -0
  787. package/Samples~/DI - Zenject/Scripts/SpawnerZenject.cs +20 -0
  788. package/Samples~/DI - Zenject/Scripts/SpawnerZenject.cs.meta +12 -0
  789. package/Samples~/DI - Zenject/Scripts.meta +9 -0
  790. package/Samples~/DI - Zenject.meta +9 -0
  791. package/Samples~/Random - PRNG/README.md +12 -0
  792. package/Samples~/Random - PRNG/README.md.meta +8 -0
  793. package/Samples~/Random - PRNG/Scripts/RandomPrngDemo.cs +28 -0
  794. package/Samples~/Random - PRNG/Scripts/RandomPrngDemo.cs.meta +12 -0
  795. package/Samples~/Random - PRNG/Scripts/Samples.UnityHelpers.Random.Prng.asmdef +17 -0
  796. package/Samples~/Random - PRNG/Scripts/Samples.UnityHelpers.Random.Prng.asmdef.meta +8 -0
  797. package/Samples~/Random - PRNG/Scripts.meta +9 -0
  798. package/Samples~/Random - PRNG.meta +9 -0
  799. package/Samples~/Relational Components - Basic/README.md +19 -0
  800. package/Samples~/Relational Components - Basic/README.md.meta +8 -0
  801. package/Samples~/Relational Components - Basic/Scripts/RelationalBasicConsumer.cs +37 -0
  802. package/Samples~/Relational Components - Basic/Scripts/RelationalBasicConsumer.cs.meta +12 -0
  803. package/Samples~/Relational Components - Basic/Scripts/Samples.UnityHelpers.Relational.Basic.asmdef +17 -0
  804. package/Samples~/Relational Components - Basic/Scripts/Samples.UnityHelpers.Relational.Basic.asmdef.meta +8 -0
  805. package/Samples~/Relational Components - Basic/Scripts.meta +9 -0
  806. package/Samples~/Relational Components - Basic.meta +9 -0
  807. package/Samples~/Serialization - JSON/README.md +13 -0
  808. package/Samples~/Serialization - JSON/README.md.meta +8 -0
  809. package/Samples~/Serialization - JSON/Scripts/JsonSerializationDemo.cs +50 -0
  810. package/Samples~/Serialization - JSON/Scripts/JsonSerializationDemo.cs.meta +12 -0
  811. package/Samples~/Serialization - JSON/Scripts/Samples.UnityHelpers.Serialization.Json.asmdef +17 -0
  812. package/Samples~/Serialization - JSON/Scripts/Samples.UnityHelpers.Serialization.Json.asmdef.meta +8 -0
  813. package/Samples~/Serialization - JSON/Scripts.meta +9 -0
  814. package/Samples~/Serialization - JSON.meta +9 -0
  815. package/Samples~/Spatial Structures - 2D and 3D/README.md +13 -0
  816. package/Samples~/Spatial Structures - 2D and 3D/README.md.meta +8 -0
  817. package/Samples~/Spatial Structures - 2D and 3D/Scripts/Samples.UnityHelpers.SpatialStructures.asmdef +17 -0
  818. package/Samples~/Spatial Structures - 2D and 3D/Scripts/Samples.UnityHelpers.SpatialStructures.asmdef.meta +8 -0
  819. package/Samples~/Spatial Structures - 2D and 3D/Scripts/SpatialStructuresDemo.cs +62 -0
  820. package/Samples~/Spatial Structures - 2D and 3D/Scripts/SpatialStructuresDemo.cs.meta +12 -0
  821. package/Samples~/Spatial Structures - 2D and 3D/Scripts.meta +9 -0
  822. package/Samples~/Spatial Structures - 2D and 3D.meta +9 -0
  823. package/Samples~/UGUI - EnhancedImage/README.md +12 -0
  824. package/Samples~/UGUI - EnhancedImage/README.md.meta +8 -0
  825. package/Samples~/UGUI - EnhancedImage/Scripts/EnhancedImageDemo.cs +36 -0
  826. package/Samples~/UGUI - EnhancedImage/Scripts/EnhancedImageDemo.cs.meta +12 -0
  827. package/Samples~/UGUI - EnhancedImage/Scripts/Samples.UnityHelpers.UGUI.EnhancedImage.asmdef +17 -0
  828. package/Samples~/UGUI - EnhancedImage/Scripts/Samples.UnityHelpers.UGUI.EnhancedImage.asmdef.meta +8 -0
  829. package/Samples~/UGUI - EnhancedImage/Scripts.meta +9 -0
  830. package/Samples~/UGUI - EnhancedImage.meta +9 -0
  831. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/README.md +12 -0
  832. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/README.md.meta +8 -0
  833. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts/Editor/MultiFileSelectorSampleWindow.cs +45 -0
  834. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts/Editor/MultiFileSelectorSampleWindow.cs.meta +12 -0
  835. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts/Editor/Samples.UnityHelpers.UIToolkit.Editor.asmdef +19 -0
  836. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts/Editor/Samples.UnityHelpers.UIToolkit.Editor.asmdef.meta +8 -0
  837. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts/Editor.meta +9 -0
  838. package/Samples~/UI Toolkit - MultiFile Selector (Editor)/Scripts.meta +9 -0
  839. package/Samples~/UI Toolkit - MultiFile Selector (Editor).meta +9 -0
  840. package/Shaders/Materials/BackgroundMask-Material.mat +59 -59
  841. package/Shaders/Materials/BackgroundMask-Material.mat.meta +8 -8
  842. package/Shaders/Materials.meta +8 -8
  843. package/Shaders/ShaderGraph/BackgroundMask.shadergraph +1653 -1653
  844. package/Shaders/ShaderGraph/BackgroundMask.shadergraph.meta +10 -10
  845. package/Shaders/ShaderGraph/DebugDisplayValue.shadersubgraph +835 -835
  846. package/Shaders/ShaderGraph/DebugDisplayValue.shadersubgraph.meta +10 -10
  847. package/Shaders/ShaderGraph.meta +8 -8
  848. package/Shaders/Support/EnhancedImageSupport.shader +64 -0
  849. package/Shaders/Support/EnhancedImageSupport.shader.meta +9 -0
  850. package/Shaders/Support.meta +8 -0
  851. package/Shaders.meta +8 -8
  852. package/Styles/Elements/Progress/ArcedProgressBar.cs +345 -345
  853. package/Styles/Elements/Progress/ArcedProgressBar.cs.meta +2 -2
  854. package/Styles/Elements/Progress/CircularProgressBar.cs +307 -307
  855. package/Styles/Elements/Progress/CircularProgressBar.cs.meta +2 -2
  856. package/Styles/Elements/Progress/GlitchProgressBar.cs +416 -416
  857. package/Styles/Elements/Progress/GlitchProgressBar.cs.meta +2 -2
  858. package/Styles/Elements/Progress/LiquidProgressBar.cs +632 -632
  859. package/Styles/Elements/Progress/LiquidProgressBar.cs.meta +2 -2
  860. package/Styles/Elements/Progress/MarchingAntsProgressBar.cs +722 -722
  861. package/Styles/Elements/Progress/MarchingAntsProgressBar.cs.meta +2 -2
  862. package/Styles/Elements/Progress/RegularProgressBar.cs +405 -405
  863. package/Styles/Elements/Progress/RegularProgressBar.cs.meta +2 -2
  864. package/Styles/Elements/Progress/WigglyProgressBar.cs +837 -837
  865. package/Styles/Elements/Progress/WigglyProgressBar.cs.meta +2 -2
  866. package/Styles/Elements/Progress.meta +2 -2
  867. package/Styles/Elements.meta +2 -2
  868. package/Styles/USS/ArcedProgressBar.uss +18 -18
  869. package/Styles/USS/ArcedProgressBar.uss.meta +2 -2
  870. package/Styles/USS/CirclularProgressBar.uss +17 -17
  871. package/Styles/USS/CirclularProgressBar.uss.meta +2 -2
  872. package/Styles/USS/RegularProgressBar.uss +32 -32
  873. package/Styles/USS/RegularProgressBar.uss.meta +2 -2
  874. package/Styles/USS/WigglyProgressBar.uss +16 -16
  875. package/Styles/USS/WigglyProgressBar.uss.meta +2 -2
  876. package/Styles/USS.meta +2 -2
  877. package/Styles/WallstopStudios.UnityHelpers.Styles.asmdef +14 -17
  878. package/Styles/WallstopStudios.UnityHelpers.Styles.asmdef.meta +7 -7
  879. package/Styles.meta +2 -2
  880. package/THIRD_PARTY_NOTICES.md +74 -0
  881. package/THIRD_PARTY_NOTICES.md.meta +7 -0
  882. package/Tests/Editor/Attributes/AnimationEventHelpersTests.cs +155 -0
  883. package/Tests/Editor/Attributes/AnimationEventHelpersTests.cs.meta +11 -0
  884. package/Tests/Editor/Attributes.meta +8 -0
  885. package/Tests/Editor/Core/Attributes/RelationalComponentAssignerTests.cs +118 -0
  886. package/Tests/Editor/Core/Attributes/RelationalComponentAssignerTests.cs.meta +11 -0
  887. package/Tests/Editor/Core/Attributes.meta +8 -0
  888. package/Tests/Editor/Core.meta +8 -0
  889. package/Tests/Editor/Extensions/SerializedPropertyExtensionsTests.cs +194 -0
  890. package/Tests/Editor/Extensions/SerializedPropertyExtensionsTests.cs.meta +3 -0
  891. package/Tests/Editor/Extensions.meta +3 -0
  892. package/Tests/Editor/Helper/DummyScriptableObject.cs +6 -0
  893. package/Tests/Editor/Helper/DummyScriptableObject.cs.meta +3 -0
  894. package/Tests/Editor/Helper/HelpersTests.cs +101 -0
  895. package/Tests/Editor/Helper/HelpersTests.cs.meta +3 -0
  896. package/Tests/Editor/Helper/ObjectHelpersEditorTests.cs +63 -0
  897. package/Tests/Editor/Helper/ObjectHelpersEditorTests.cs.meta +11 -0
  898. package/Tests/Editor/Helper/PromptScope.cs +28 -0
  899. package/Tests/Editor/Helper/PromptScope.cs.meta +11 -0
  900. package/Tests/Editor/Helper/ReflectionHelpersEditorTests.cs +105 -0
  901. package/Tests/Editor/Helper/ReflectionHelpersEditorTests.cs.meta +11 -0
  902. package/Tests/Editor/Helper/SpriteHelpersTests.cs +334 -0
  903. package/Tests/Editor/Helper/SpriteHelpersTests.cs.meta +3 -0
  904. package/Tests/Editor/Helper/SpriteSettingsApplierAdditionalTests.cs +183 -0
  905. package/Tests/Editor/Helper/SpriteSettingsApplierAdditionalTests.cs.meta +11 -0
  906. package/Tests/Editor/Helper/SpriteSettingsApplierTests.cs +161 -0
  907. package/Tests/Editor/Helper/SpriteSettingsApplierTests.cs.meta +11 -0
  908. package/Tests/Editor/Helper.meta +3 -0
  909. package/Tests/Editor/Integrations/VContainer/VContainerIntegrationCompilationTests.cs +40 -0
  910. package/Tests/Editor/Integrations/VContainer/VContainerIntegrationCompilationTests.cs.meta +11 -0
  911. package/Tests/Editor/Integrations/VContainer/VContainerRelationalEntryPointTests.cs +77 -0
  912. package/Tests/Editor/Integrations/VContainer/VContainerRelationalEntryPointTests.cs.meta +11 -0
  913. package/Tests/Editor/Integrations/VContainer/WallstopStudios.UnityHelpers.Tests.Editor.VContainer.asmdef +36 -0
  914. package/Tests/Editor/Integrations/VContainer/WallstopStudios.UnityHelpers.Tests.Editor.VContainer.asmdef.meta +7 -0
  915. package/Tests/Editor/Integrations/VContainer.meta +8 -0
  916. package/Tests/Editor/Integrations/Zenject/WallstopStudios.UnityHelpers.Tests.Editor.Zenject.asmdef +36 -0
  917. package/Tests/Editor/Integrations/Zenject/WallstopStudios.UnityHelpers.Tests.Editor.Zenject.asmdef.meta +7 -0
  918. package/Tests/Editor/Integrations/Zenject/ZenjectIntegrationCompilationTests.cs +40 -0
  919. package/Tests/Editor/Integrations/Zenject/ZenjectIntegrationCompilationTests.cs.meta +11 -0
  920. package/Tests/Editor/Integrations/Zenject/ZenjectRelationalInitializerTests.cs +76 -0
  921. package/Tests/Editor/Integrations/Zenject/ZenjectRelationalInitializerTests.cs.meta +11 -0
  922. package/Tests/Editor/Integrations/Zenject.meta +8 -0
  923. package/Tests/Editor/Integrations.meta +8 -0
  924. package/Tests/Editor/MultiFileSelectorElementTests.cs +265 -0
  925. package/Tests/Editor/MultiFileSelectorElementTests.cs.meta +11 -0
  926. package/Tests/Editor/MultiFileSelectorPersistenceManagerTests.cs +100 -0
  927. package/Tests/Editor/MultiFileSelectorPersistenceManagerTests.cs.meta +11 -0
  928. package/Tests/Editor/Sprites/AnimationCopierWindowTests.cs +199 -0
  929. package/Tests/Editor/Sprites/AnimationCopierWindowTests.cs.meta +11 -0
  930. package/Tests/Editor/Sprites/ScriptableSpriteAtlasEditorTests.cs +108 -0
  931. package/Tests/Editor/Sprites/ScriptableSpriteAtlasEditorTests.cs.meta +11 -0
  932. package/Tests/Editor/Sprites/SpriteCropperAdditionalTests.cs +323 -0
  933. package/Tests/Editor/Sprites/SpriteCropperAdditionalTests.cs.meta +11 -0
  934. package/Tests/Editor/Sprites/SpriteCropperTests.cs +162 -0
  935. package/Tests/Editor/Sprites/SpriteCropperTests.cs.meta +11 -0
  936. package/Tests/Editor/Sprites/SpritePivotAdjusterAdditionalTests.cs +227 -0
  937. package/Tests/Editor/Sprites/SpritePivotAdjusterAdditionalTests.cs.meta +11 -0
  938. package/Tests/Editor/Sprites/SpritePivotAdjusterTests.cs +113 -0
  939. package/Tests/Editor/Sprites/SpritePivotAdjusterTests.cs.meta +11 -0
  940. package/Tests/Editor/Sprites/TexturePlatformNameHelperTests.cs +28 -0
  941. package/Tests/Editor/Sprites/TexturePlatformNameHelperTests.cs.meta +11 -0
  942. package/Tests/Editor/Sprites/TextureResizerWizardTests.cs +248 -0
  943. package/Tests/Editor/Sprites/TextureResizerWizardTests.cs.meta +11 -0
  944. package/Tests/Editor/Sprites/TextureSettingsApplierAPITests.cs +180 -0
  945. package/Tests/Editor/Sprites/TextureSettingsApplierAPITests.cs.meta +11 -0
  946. package/Tests/Editor/Sprites/TextureSettingsApplierWizardAdditionalTests.cs +295 -0
  947. package/Tests/Editor/Sprites/TextureSettingsApplierWizardAdditionalTests.cs.meta +11 -0
  948. package/Tests/Editor/Sprites/TextureSettingsApplierWizardTests.cs +134 -0
  949. package/Tests/Editor/Sprites/TextureSettingsApplierWizardTests.cs.meta +11 -0
  950. package/Tests/Editor/Sprites.meta +8 -0
  951. package/Tests/Editor/TestComponents/PrewarmTesterComponent.cs +10 -0
  952. package/Tests/Editor/TestComponents/PrewarmTesterComponent.cs.meta +11 -0
  953. package/Tests/Editor/TestComponents.meta +8 -0
  954. package/Tests/Editor/Tools/ImageBlurToolTests.cs +135 -0
  955. package/Tests/Editor/Tools/ImageBlurToolTests.cs.meta +11 -0
  956. package/Tests/Editor/Tools.meta +8 -0
  957. package/Tests/Editor/Utils/CommonTestBase.cs +208 -0
  958. package/Tests/Editor/Utils/CommonTestBase.cs.meta +11 -0
  959. package/Tests/Editor/Utils/ScriptableObjectSingletonCreatorEditorTests.cs +306 -0
  960. package/Tests/Editor/Utils/ScriptableObjectSingletonCreatorEditorTests.cs.meta +9 -0
  961. package/Tests/Editor/Utils/ScriptableObjectSingletonCreatorTests.cs +183 -0
  962. package/Tests/Editor/Utils/ScriptableObjectSingletonCreatorTests.cs.meta +11 -0
  963. package/Tests/Editor/Utils/ScriptableObjectSingletonTests.cs +466 -0
  964. package/Tests/Editor/Utils/ScriptableObjectSingletonTests.cs.meta +11 -0
  965. package/Tests/Editor/Utils.meta +3 -0
  966. package/Tests/Editor/WallstopStudios.UnityHelpers.Tests.Editor.asmdef +19 -0
  967. package/Tests/Editor/WallstopStudios.UnityHelpers.Tests.Editor.asmdef.meta +7 -0
  968. package/Tests/Editor/Windows/FitTextureSizeWindowTests.cs +781 -0
  969. package/Tests/Editor/Windows/FitTextureSizeWindowTests.cs.meta +11 -0
  970. package/Tests/Editor/Windows/PrefabCheckerFolderAdditionTests.cs +96 -0
  971. package/Tests/Editor/Windows/PrefabCheckerFolderAdditionTests.cs.meta +11 -0
  972. package/Tests/Editor/Windows/PrefabCheckerTests.cs +81 -0
  973. package/Tests/Editor/Windows/PrefabCheckerTests.cs.meta +11 -0
  974. package/Tests/Editor/Windows.meta +8 -0
  975. package/Tests/Editor.meta +8 -0
  976. package/Tests/Runtime/AssemblyInfo.cs +4 -0
  977. package/Tests/Runtime/AssemblyInfo.cs.meta +3 -0
  978. package/Tests/Runtime/Attributes/ChildComponentTests.cs +766 -81
  979. package/Tests/Runtime/Attributes/ChildComponentTests.cs.meta +2 -2
  980. package/Tests/Runtime/Attributes/Components/ExpectChildSpriteRenderers.cs +28 -28
  981. package/Tests/Runtime/Attributes/Components/ExpectChildSpriteRenderers.cs.meta +2 -2
  982. package/Tests/Runtime/Attributes/Components/ExpectParentSpriteRenderers.cs +28 -28
  983. package/Tests/Runtime/Attributes/Components/ExpectParentSpriteRenderers.cs.meta +2 -2
  984. package/Tests/Runtime/{Components → Attributes/Components}/RelationalComponentTesterComplex.cs +34 -34
  985. package/Tests/Runtime/{Components → Attributes/Components}/RelationalComponentTesterComplex.cs.meta +2 -2
  986. package/Tests/Runtime/Attributes/Components/RelationalComponentsTesterSimple.cs +37 -0
  987. package/Tests/Runtime/{Components → Attributes/Components}/RelationalComponentsTesterSimple.cs.meta +2 -2
  988. package/Tests/Runtime/Attributes/Components.meta +2 -2
  989. package/Tests/Runtime/Attributes/MiscRuntimeAttributeTests.cs +75 -0
  990. package/Tests/Runtime/Attributes/MiscRuntimeAttributeTests.cs.meta +11 -0
  991. package/Tests/Runtime/Attributes/NotNullAttributeTests.cs +26 -0
  992. package/Tests/Runtime/Attributes/NotNullAttributeTests.cs.meta +3 -0
  993. package/Tests/Runtime/Attributes/ParentComponentTests.cs +565 -68
  994. package/Tests/Runtime/Attributes/ParentComponentTests.cs.meta +2 -2
  995. package/Tests/Runtime/Attributes/RelationalComponentAdvancedTests.cs +614 -0
  996. package/Tests/Runtime/Attributes/RelationalComponentAdvancedTests.cs.meta +11 -0
  997. package/Tests/Runtime/Attributes/RelationalComponentBackwardCompatibilityTests.cs +478 -0
  998. package/Tests/Runtime/Attributes/RelationalComponentBackwardCompatibilityTests.cs.meta +11 -0
  999. package/Tests/Runtime/Attributes/RelationalComponentExtensionsTests.cs +56 -0
  1000. package/Tests/Runtime/Attributes/RelationalComponentExtensionsTests.cs.meta +11 -0
  1001. package/Tests/Runtime/Attributes/RelationalComponentHashSetTests.cs +226 -0
  1002. package/Tests/Runtime/Attributes/RelationalComponentHashSetTests.cs.meta +11 -0
  1003. package/Tests/Runtime/Attributes/RelationalComponentInitializerTests.cs +109 -0
  1004. package/Tests/Runtime/Attributes/RelationalComponentInitializerTests.cs.meta +11 -0
  1005. package/Tests/Runtime/Attributes/RelationalComponentTagAndNameFilterEdgeTests.cs +234 -0
  1006. package/Tests/Runtime/Attributes/RelationalComponentTagAndNameFilterEdgeTests.cs.meta +11 -0
  1007. package/Tests/Runtime/Attributes/SiblingComponentTests.cs +721 -0
  1008. package/Tests/Runtime/Attributes/SiblingComponentTests.cs.meta +11 -0
  1009. package/Tests/Runtime/Attributes/ValidateAssignmentAttributeTests.cs +96 -0
  1010. package/Tests/Runtime/Attributes/ValidateAssignmentAttributeTests.cs.meta +11 -0
  1011. package/Tests/Runtime/Attributes.meta +2 -2
  1012. package/Tests/Runtime/Core/Random/RandomComparerTests.cs +166 -0
  1013. package/Tests/Runtime/Core/Random/RandomComparerTests.cs.meta +11 -0
  1014. package/Tests/Runtime/Core/Random.meta +8 -0
  1015. package/Tests/Runtime/Core/Threading/SingleThreadedThreadPoolTests.cs +56 -56
  1016. package/Tests/Runtime/Core/Threading/SingleThreadedThreadPoolTests.cs.meta +2 -2
  1017. package/Tests/Runtime/Core/Threading.meta +2 -2
  1018. package/Tests/Runtime/Core.meta +2 -2
  1019. package/Tests/Runtime/DataStructures/BalancedKDTree2DTests.cs +562 -0
  1020. package/Tests/Runtime/DataStructures/{BalancedKDTreeTests.cs.meta → BalancedKDTree2DTests.cs.meta} +11 -11
  1021. package/Tests/Runtime/DataStructures/BalancedKDTree3DTests.cs +10 -0
  1022. package/Tests/Runtime/DataStructures/BalancedKDTree3DTests.cs.meta +11 -0
  1023. package/Tests/Runtime/DataStructures/BitSetTests.cs +1400 -0
  1024. package/Tests/Runtime/DataStructures/BitSetTests.cs.meta +3 -0
  1025. package/Tests/Runtime/DataStructures/BoundingBox3DTests.cs +1215 -0
  1026. package/Tests/Runtime/DataStructures/BoundingBox3DTests.cs.meta +11 -0
  1027. package/Tests/Runtime/DataStructures/CircleTests.cs +965 -0
  1028. package/Tests/Runtime/DataStructures/CircleTests.cs.meta +11 -0
  1029. package/Tests/Runtime/DataStructures/CyclicBufferTests.cs +2083 -324
  1030. package/Tests/Runtime/DataStructures/CyclicBufferTests.cs.meta +2 -2
  1031. package/Tests/Runtime/DataStructures/DequeTests.cs +790 -0
  1032. package/Tests/Runtime/DataStructures/DequeTests.cs.meta +3 -0
  1033. package/Tests/Runtime/DataStructures/DisjointSetTests.cs +1114 -0
  1034. package/Tests/Runtime/DataStructures/DisjointSetTests.cs.meta +3 -0
  1035. package/Tests/Runtime/DataStructures/FastOneOfTests.cs +966 -0
  1036. package/Tests/Runtime/DataStructures/FastOneOfTests.cs.meta +11 -0
  1037. package/Tests/Runtime/DataStructures/FastVector2IntTests.cs +286 -0
  1038. package/Tests/Runtime/DataStructures/FastVector2IntTests.cs.meta +11 -0
  1039. package/Tests/Runtime/DataStructures/FastVector3IntTests.cs +414 -0
  1040. package/Tests/Runtime/DataStructures/FastVector3IntTests.cs.meta +11 -0
  1041. package/Tests/Runtime/DataStructures/HeapTests.cs +1953 -0
  1042. package/Tests/Runtime/DataStructures/HeapTests.cs.meta +11 -0
  1043. package/Tests/Runtime/DataStructures/ImmutableBitSetTests.cs +833 -0
  1044. package/Tests/Runtime/DataStructures/ImmutableBitSetTests.cs.meta +3 -0
  1045. package/Tests/Runtime/DataStructures/KDTree3DTestsBase.cs +297 -0
  1046. package/Tests/Runtime/DataStructures/KDTree3DTestsBase.cs.meta +11 -0
  1047. package/Tests/Runtime/DataStructures/OctTree3DTests.cs +351 -0
  1048. package/Tests/Runtime/DataStructures/OctTree3DTests.cs.meta +11 -0
  1049. package/Tests/Runtime/DataStructures/PriorityQueueTests.cs +71 -0
  1050. package/Tests/Runtime/DataStructures/PriorityQueueTests.cs.meta +3 -0
  1051. package/Tests/Runtime/DataStructures/ProtobufSerializationTests.cs +475 -0
  1052. package/Tests/Runtime/DataStructures/ProtobufSerializationTests.cs.meta +11 -0
  1053. package/Tests/Runtime/DataStructures/QuadTree2DTests.cs +660 -0
  1054. package/Tests/Runtime/DataStructures/QuadTree2DTests.cs.meta +11 -0
  1055. package/Tests/Runtime/DataStructures/RTree2DTests.cs +823 -0
  1056. package/Tests/Runtime/DataStructures/RTree2DTests.cs.meta +3 -0
  1057. package/Tests/Runtime/DataStructures/RTree3DTests.cs +270 -0
  1058. package/Tests/Runtime/DataStructures/RTree3DTests.cs.meta +11 -0
  1059. package/Tests/Runtime/DataStructures/SparseSetTests.cs +1146 -0
  1060. package/Tests/Runtime/DataStructures/SparseSetTests.cs.meta +3 -0
  1061. package/Tests/Runtime/DataStructures/SpatialHashTests.cs +992 -0
  1062. package/Tests/Runtime/DataStructures/SpatialHashTests.cs.meta +11 -0
  1063. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsConsistencyTests.cs +351 -0
  1064. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsConsistencyTests.cs.meta +11 -0
  1065. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsEdgeTests.cs +127 -0
  1066. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsEdgeTests.cs.meta +11 -0
  1067. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsFuzzTests.cs +218 -0
  1068. package/Tests/Runtime/DataStructures/SpatialTree2DBoundsFuzzTests.cs.meta +11 -0
  1069. package/Tests/Runtime/DataStructures/SpatialTree2DTests.cs +396 -0
  1070. package/Tests/Runtime/DataStructures/SpatialTree2DTests.cs.meta +11 -0
  1071. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsConsistencyTests.cs +281 -0
  1072. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsConsistencyTests.cs.meta +11 -0
  1073. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsEdgeTests.cs +127 -0
  1074. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsEdgeTests.cs.meta +11 -0
  1075. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsFuzzTests.cs +170 -0
  1076. package/Tests/Runtime/DataStructures/SpatialTree3DBoundsFuzzTests.cs.meta +11 -0
  1077. package/Tests/Runtime/DataStructures/SpatialTree3DTests.cs +474 -0
  1078. package/Tests/Runtime/DataStructures/SpatialTree3DTests.cs.meta +11 -0
  1079. package/Tests/Runtime/DataStructures/SphereTests.cs +806 -0
  1080. package/Tests/Runtime/DataStructures/SphereTests.cs.meta +3 -0
  1081. package/Tests/Runtime/DataStructures/StringWrapperTests.cs +333 -0
  1082. package/Tests/Runtime/DataStructures/StringWrapperTests.cs.meta +11 -0
  1083. package/Tests/Runtime/DataStructures/TimedCacheTests.cs +669 -0
  1084. package/Tests/Runtime/DataStructures/TimedCacheTests.cs.meta +11 -0
  1085. package/Tests/Runtime/DataStructures/TrieTests.cs +3385 -0
  1086. package/Tests/Runtime/DataStructures/TrieTests.cs.meta +11 -0
  1087. package/Tests/Runtime/DataStructures/UnbalancedKDTree2DTests.cs +565 -0
  1088. package/Tests/Runtime/DataStructures/{UnbalancedKDTreeTests.cs.meta → UnbalancedKDTree2DTests.cs.meta} +11 -11
  1089. package/Tests/Runtime/DataStructures/UnbalancedKDTree3DTests.cs +10 -0
  1090. package/Tests/Runtime/DataStructures/UnbalancedKDTree3DTests.cs.meta +11 -0
  1091. package/Tests/Runtime/DataStructures.meta +8 -8
  1092. package/Tests/Runtime/Extensions/AnimatorExtensionsTests.cs +28 -0
  1093. package/Tests/Runtime/Extensions/AnimatorExtensionsTests.cs.meta +11 -0
  1094. package/Tests/Runtime/Extensions/AsyncOperationExtensionsTests.cs +667 -0
  1095. package/Tests/Runtime/Extensions/AsyncOperationExtensionsTests.cs.meta +11 -0
  1096. package/Tests/Runtime/Extensions/CircleExtensionsTests.cs +230 -0
  1097. package/Tests/Runtime/Extensions/CircleExtensionsTests.cs.meta +11 -0
  1098. package/Tests/Runtime/Extensions/ColorExtensionsTests.cs +55 -0
  1099. package/Tests/Runtime/Extensions/ColorExtensionsTests.cs.meta +11 -0
  1100. package/Tests/Runtime/Extensions/DictionaryExtensionTests.cs +724 -438
  1101. package/Tests/Runtime/Extensions/DictionaryExtensionTests.cs.meta +2 -2
  1102. package/Tests/Runtime/Extensions/DirectionExtensionsComprehensiveTests.cs +403 -0
  1103. package/Tests/Runtime/Extensions/DirectionExtensionsComprehensiveTests.cs.meta +11 -0
  1104. package/Tests/Runtime/Extensions/DirectionExtensionsTests.cs +69 -0
  1105. package/Tests/Runtime/Extensions/DirectionExtensionsTests.cs.meta +11 -0
  1106. package/Tests/Runtime/Extensions/EnumExtensionTests.cs +809 -153
  1107. package/Tests/Runtime/Extensions/EnumExtensionTests.cs.meta +2 -2
  1108. package/Tests/Runtime/Extensions/IEnumerableExtensionsTests.cs +191 -0
  1109. package/Tests/Runtime/Extensions/IEnumerableExtensionsTests.cs.meta +11 -0
  1110. package/Tests/Runtime/Extensions/IListExtensionTests.cs +955 -169
  1111. package/Tests/Runtime/Extensions/IListExtensionTests.cs.meta +2 -2
  1112. package/Tests/Runtime/Extensions/IReadonlyListExtensionTests.cs +266 -58
  1113. package/Tests/Runtime/Extensions/IReadonlyListExtensionTests.cs.meta +2 -2
  1114. package/Tests/Runtime/Extensions/LoggingExtensionTests.cs +721 -718
  1115. package/Tests/Runtime/Extensions/LoggingExtensionTests.cs.meta +2 -2
  1116. package/Tests/Runtime/Extensions/ProtoEqualityExtensionsTests.cs +565 -0
  1117. package/Tests/Runtime/Extensions/ProtoEqualityExtensionsTests.cs.meta +3 -0
  1118. package/Tests/Runtime/Extensions/ProtoEqualityPolymorphismTests.cs +100 -0
  1119. package/Tests/Runtime/Extensions/ProtoEqualityPolymorphismTests.cs.meta +11 -0
  1120. package/Tests/Runtime/Extensions/RandomExtensionTests.cs +719 -27
  1121. package/Tests/Runtime/Extensions/RandomExtensionTests.cs.meta +2 -2
  1122. package/Tests/Runtime/Extensions/StringExtensionTests.cs +2592 -31
  1123. package/Tests/Runtime/Extensions/StringExtensionTests.cs.meta +2 -2
  1124. package/Tests/Runtime/Extensions/UnityExtensionsBasicTests.cs +166 -0
  1125. package/Tests/Runtime/Extensions/UnityExtensionsBasicTests.cs.meta +11 -0
  1126. package/Tests/Runtime/Extensions/UnityExtensionsComprehensiveTests.cs +1446 -0
  1127. package/Tests/Runtime/Extensions/UnityExtensionsComprehensiveTests.cs.meta +11 -0
  1128. package/Tests/Runtime/Extensions/UnityExtensionsMathTests.cs +1779 -0
  1129. package/Tests/Runtime/Extensions/UnityExtensionsMathTests.cs.meta +11 -0
  1130. package/Tests/Runtime/Extensions/UnityExtensionsVector2HullTests.cs +292 -0
  1131. package/Tests/Runtime/Extensions/UnityExtensionsVector2HullTests.cs.meta +11 -0
  1132. package/Tests/Runtime/Extensions/UnityLogTagFormatterEdgeTests.cs +260 -0
  1133. package/Tests/Runtime/Extensions/UnityLogTagFormatterEdgeTests.cs.meta +11 -0
  1134. package/Tests/Runtime/Extensions.meta +2 -2
  1135. package/Tests/Runtime/Helper/ArrayConverterTests.cs +19 -19
  1136. package/Tests/Runtime/Helper/ArrayConverterTests.cs.meta +2 -2
  1137. package/Tests/Runtime/Helper/AssignUtilitiesTests.cs +38 -0
  1138. package/Tests/Runtime/Helper/AssignUtilitiesTests.cs.meta +11 -0
  1139. package/Tests/Runtime/Helper/DirectoryHelperTests.cs +347 -0
  1140. package/Tests/Runtime/Helper/DirectoryHelperTests.cs.meta +11 -0
  1141. package/Tests/Runtime/Helper/EnumerablesTests.cs +45 -0
  1142. package/Tests/Runtime/Helper/EnumerablesTests.cs.meta +11 -0
  1143. package/Tests/Runtime/Helper/FileHelperTests.cs +481 -0
  1144. package/Tests/Runtime/Helper/FileHelperTests.cs.meta +11 -0
  1145. package/Tests/Runtime/Helper/FormattingHelpersTests.cs +353 -0
  1146. package/Tests/Runtime/Helper/FormattingHelpersTests.cs.meta +11 -0
  1147. package/Tests/Runtime/Helper/FuncBasedComparerTests.cs +27 -0
  1148. package/Tests/Runtime/Helper/FuncBasedComparerTests.cs.meta +11 -0
  1149. package/Tests/Runtime/Helper/GeometryTests.cs +517 -0
  1150. package/Tests/Runtime/Helper/GeometryTests.cs.meta +3 -0
  1151. package/Tests/Runtime/Helper/HelpersTests.cs +749 -0
  1152. package/Tests/Runtime/Helper/HelpersTests.cs.meta +11 -0
  1153. package/Tests/Runtime/Helper/IterationHelpersTests.cs +173 -0
  1154. package/Tests/Runtime/Helper/IterationHelpersTests.cs.meta +11 -0
  1155. package/Tests/Runtime/Helper/LineHelperTests.cs +662 -0
  1156. package/Tests/Runtime/Helper/LineHelperTests.cs.meta +11 -0
  1157. package/Tests/Runtime/Helper/ObjectHelperTests.cs +444 -432
  1158. package/Tests/Runtime/Helper/ObjectHelperTests.cs.meta +2 -2
  1159. package/Tests/Runtime/Helper/ObjectsTests.cs +363 -0
  1160. package/Tests/Runtime/Helper/ObjectsTests.cs.meta +3 -0
  1161. package/Tests/Runtime/Helper/PathHelperTests.cs +183 -0
  1162. package/Tests/Runtime/Helper/PathHelperTests.cs.meta +11 -0
  1163. package/Tests/Runtime/Helper/ReflectionHelperTests.cs +2199 -1493
  1164. package/Tests/Runtime/Helper/ReflectionHelperTests.cs.meta +2 -2
  1165. package/Tests/Runtime/Helper/ReflectionHelpersMemberLookupTests.cs +192 -0
  1166. package/Tests/Runtime/Helper/ReflectionHelpersMemberLookupTests.cs.meta +11 -0
  1167. package/Tests/Runtime/Helper/ReflectionHelpersTypeScanningTests.cs +58 -0
  1168. package/Tests/Runtime/Helper/ReflectionHelpersTypeScanningTests.cs.meta +11 -0
  1169. package/Tests/Runtime/Helper/SceneHelperTests.cs +77 -94
  1170. package/Tests/Runtime/Helper/SceneHelperTests.cs.meta +2 -2
  1171. package/Tests/Runtime/Helper/UnityMainThreadDispatcherTests.cs +45 -0
  1172. package/Tests/Runtime/Helper/UnityMainThreadDispatcherTests.cs.meta +11 -0
  1173. package/Tests/Runtime/Helper/WallMathTests.cs +1884 -233
  1174. package/Tests/Runtime/Helper/WallMathTests.cs.meta +2 -2
  1175. package/Tests/Runtime/Helper.meta +2 -2
  1176. package/Tests/Runtime/Integrations/VContainer/RelationalComponentsVContainerTests.cs +560 -0
  1177. package/Tests/Runtime/Integrations/VContainer/RelationalComponentsVContainerTests.cs.meta +11 -0
  1178. package/Tests/Runtime/Integrations/VContainer/WallstopStudios.UnityHelpers.Tests.Runtime.VContainer.asmdef +38 -0
  1179. package/Tests/Runtime/Integrations/VContainer/WallstopStudios.UnityHelpers.Tests.Runtime.VContainer.asmdef.meta +7 -0
  1180. package/Tests/Runtime/Integrations/VContainer.meta +8 -0
  1181. package/Tests/Runtime/Integrations/Zenject/RelationalComponentsZenjectTests.cs +591 -0
  1182. package/Tests/Runtime/Integrations/Zenject/RelationalComponentsZenjectTests.cs.meta +11 -0
  1183. package/Tests/Runtime/Integrations/Zenject/WallstopStudios.UnityHelpers.Tests.Runtime.Zenject.asmdef +38 -0
  1184. package/Tests/Runtime/Integrations/Zenject/WallstopStudios.UnityHelpers.Tests.Runtime.Zenject.asmdef.meta +7 -0
  1185. package/Tests/Runtime/Integrations/Zenject.meta +8 -0
  1186. package/Tests/Runtime/Integrations.meta +8 -0
  1187. package/Tests/Runtime/Math/Line2DTests.cs +594 -0
  1188. package/Tests/Runtime/Math/Line2DTests.cs.meta +11 -0
  1189. package/Tests/Runtime/Math/Line3DTests.cs +655 -0
  1190. package/Tests/Runtime/Math/Line3DTests.cs.meta +11 -0
  1191. package/Tests/Runtime/Math/LineTests.cs +480 -0
  1192. package/Tests/Runtime/Math/LineTests.cs.meta +11 -0
  1193. package/Tests/Runtime/Math/ParabolaTests.cs +477 -0
  1194. package/Tests/Runtime/Math/ParabolaTests.cs.meta +11 -0
  1195. package/Tests/Runtime/Math/PointPolygonCheckTests.cs +939 -0
  1196. package/Tests/Runtime/Math/PointPolygonCheckTests.cs.meta +11 -0
  1197. package/Tests/Runtime/Math/RangeTests.cs +197 -0
  1198. package/Tests/Runtime/Math/RangeTests.cs.meta +11 -0
  1199. package/Tests/Runtime/Math.meta +8 -0
  1200. package/Tests/Runtime/Performance/BenchmarkReadmeUpdater.cs +81 -0
  1201. package/Tests/Runtime/Performance/BenchmarkReadmeUpdater.cs.meta +11 -0
  1202. package/Tests/Runtime/Performance/JsonSerializationPerformanceTests.cs +421 -0
  1203. package/Tests/Runtime/Performance/JsonSerializationPerformanceTests.cs.meta +3 -0
  1204. package/Tests/Runtime/Performance/ListExtensionPerformanceTests.cs +76 -76
  1205. package/Tests/Runtime/Performance/ListExtensionPerformanceTests.cs.meta +2 -2
  1206. package/Tests/Runtime/Performance/ProtoEqualsPerformanceTests.cs +161 -0
  1207. package/Tests/Runtime/Performance/ProtoEqualsPerformanceTests.cs.meta +11 -0
  1208. package/Tests/Runtime/Performance/ProtoSerializationPerformanceTests.cs +207 -0
  1209. package/Tests/Runtime/Performance/ProtoSerializationPerformanceTests.cs.meta +3 -0
  1210. package/Tests/Runtime/Performance/RandomPerformanceTests.cs +195 -181
  1211. package/Tests/Runtime/Performance/RandomPerformanceTests.cs.meta +11 -11
  1212. package/Tests/Runtime/Performance/RelationComponentPerformanceTests.cs +60 -61
  1213. package/Tests/Runtime/Performance/RelationComponentPerformanceTests.cs.meta +2 -2
  1214. package/Tests/Runtime/Performance/SpatialTree2DPerformanceTests.cs +692 -0
  1215. package/Tests/Runtime/Performance/SpatialTree2DPerformanceTests.cs.meta +11 -0
  1216. package/Tests/Runtime/Performance/SpatialTree3DPerformanceTests.cs +650 -0
  1217. package/Tests/Runtime/Performance/SpatialTree3DPerformanceTests.cs.meta +11 -0
  1218. package/Tests/Runtime/Performance.meta +8 -8
  1219. package/Tests/Runtime/Random/DotNetRandomTests.cs +9 -9
  1220. package/Tests/Runtime/Random/DotNetRandomTests.cs.meta +2 -2
  1221. package/Tests/Runtime/Random/IllusionFlowTests.cs +12 -12
  1222. package/Tests/Runtime/Random/IllusionFlowTests.cs.meta +2 -2
  1223. package/Tests/Runtime/Random/LinearCongruentialGeneratorTests.cs +12 -12
  1224. package/Tests/Runtime/Random/LinearCongruentialGeneratorTests.cs.meta +2 -2
  1225. package/Tests/Runtime/Random/PcgRandomTests.cs +9 -9
  1226. package/Tests/Runtime/Random/PcgRandomTests.cs.meta +11 -11
  1227. package/Tests/Runtime/Random/RandomProtoSerializationTests.cs +494 -0
  1228. package/Tests/Runtime/Random/RandomProtoSerializationTests.cs.meta +3 -0
  1229. package/Tests/Runtime/Random/RandomStateSerializationTests.cs +304 -0
  1230. package/Tests/Runtime/Random/RandomStateSerializationTests.cs.meta +4 -0
  1231. package/Tests/Runtime/Random/RandomTestBase.cs +836 -787
  1232. package/Tests/Runtime/Random/RandomTestBase.cs.meta +11 -11
  1233. package/Tests/Runtime/Random/RomuDuoRandomTests.cs +9 -9
  1234. package/Tests/Runtime/Random/RomuDuoRandomTests.cs.meta +2 -2
  1235. package/Tests/Runtime/Random/SplitMix64RandomTests.cs +9 -9
  1236. package/Tests/Runtime/Random/SplitMix64RandomTests.cs.meta +2 -2
  1237. package/Tests/Runtime/Random/SquirrelRandomTests.cs +14 -14
  1238. package/Tests/Runtime/Random/SquirrelRandomTests.cs.meta +11 -11
  1239. package/Tests/Runtime/Random/SystemRandomTests.cs +10 -10
  1240. package/Tests/Runtime/Random/SystemRandomTests.cs.meta +11 -11
  1241. package/Tests/Runtime/Random/UnityRandomTests.cs +9 -9
  1242. package/Tests/Runtime/Random/UnityRandomTests.cs.meta +11 -11
  1243. package/Tests/Runtime/Random/WyRandomTests.cs +9 -9
  1244. package/Tests/Runtime/Random/WyRandomTests.cs.meta +2 -2
  1245. package/Tests/Runtime/Random/XorShiftRandomTests.cs +9 -9
  1246. package/Tests/Runtime/Random/XorShiftRandomTests.cs.meta +11 -11
  1247. package/Tests/Runtime/Random/XoroShiroRandomTests.cs +9 -9
  1248. package/Tests/Runtime/Random/XoroShiroRandomTests.cs.meta +2 -2
  1249. package/Tests/Runtime/Random.meta +8 -8
  1250. package/Tests/Runtime/RuntimeTestTimeouts.cs +3 -0
  1251. package/Tests/Runtime/RuntimeTestTimeouts.cs.meta +11 -0
  1252. package/Tests/Runtime/Scenes/Test1.unity +723 -723
  1253. package/Tests/Runtime/Scenes/Test1.unity.meta +7 -7
  1254. package/Tests/Runtime/Scenes/Test2.unity +723 -723
  1255. package/Tests/Runtime/Scenes/Test2.unity.meta +7 -7
  1256. package/Tests/Runtime/Scenes.meta +2 -2
  1257. package/Tests/Runtime/Serialization/AdaptersJsonTests.cs +67 -0
  1258. package/Tests/Runtime/Serialization/AdaptersJsonTests.cs.meta +11 -0
  1259. package/Tests/Runtime/Serialization/BitSetJsonTests.cs +50 -0
  1260. package/Tests/Runtime/Serialization/BitSetJsonTests.cs.meta +11 -0
  1261. package/Tests/Runtime/Serialization/CyclicBufferJsonTests.cs +67 -0
  1262. package/Tests/Runtime/Serialization/CyclicBufferJsonTests.cs.meta +11 -0
  1263. package/Tests/Runtime/Serialization/DequeJsonTests.cs +70 -0
  1264. package/Tests/Runtime/Serialization/DequeJsonTests.cs.meta +11 -0
  1265. package/Tests/Runtime/Serialization/ImmutableBitSetJsonTests.cs +25 -0
  1266. package/Tests/Runtime/Serialization/ImmutableBitSetJsonTests.cs.meta +11 -0
  1267. package/Tests/Runtime/Serialization/JsonConverterTests.cs +1157 -0
  1268. package/Tests/Runtime/Serialization/JsonConverterTests.cs.meta +11 -0
  1269. package/Tests/Runtime/Serialization/JsonRoundtripComprehensiveTests.cs +239 -0
  1270. package/Tests/Runtime/Serialization/JsonRoundtripComprehensiveTests.cs.meta +11 -0
  1271. package/Tests/Runtime/Serialization/JsonSerializationCorrectnessTests.cs +458 -0
  1272. package/Tests/Runtime/Serialization/JsonSerializationCorrectnessTests.cs.meta +3 -0
  1273. package/Tests/Runtime/Serialization/JsonSerializationTest.cs +156 -156
  1274. package/Tests/Runtime/Serialization/JsonSerializationTest.cs.meta +2 -2
  1275. package/Tests/Runtime/Serialization/MathJsonTests.cs +79 -0
  1276. package/Tests/Runtime/Serialization/MathJsonTests.cs.meta +11 -0
  1277. package/Tests/Runtime/Serialization/ProtoInterfaceResolutionEdgeTests.cs +76 -0
  1278. package/Tests/Runtime/Serialization/ProtoInterfaceResolutionEdgeTests.cs.meta +11 -0
  1279. package/Tests/Runtime/Serialization/ProtoRootRegistrationTests.cs +80 -0
  1280. package/Tests/Runtime/Serialization/ProtoRootRegistrationTests.cs.meta +11 -0
  1281. package/Tests/Runtime/Serialization/ProtoRoundtripComprehensiveTests.cs +257 -0
  1282. package/Tests/Runtime/Serialization/ProtoRoundtripComprehensiveTests.cs.meta +11 -0
  1283. package/Tests/Runtime/Serialization/ProtoSerializationCorrectnessTests.cs +471 -0
  1284. package/Tests/Runtime/Serialization/ProtoSerializationCorrectnessTests.cs.meta +3 -0
  1285. package/Tests/Runtime/Serialization/ProtoSerializationTests.cs +169 -0
  1286. package/Tests/Runtime/Serialization/ProtoSerializationTests.cs.meta +11 -0
  1287. package/Tests/Runtime/Serialization/ProtoSerializeBehaviorTests.cs +62 -0
  1288. package/Tests/Runtime/Serialization/ProtoSerializeBehaviorTests.cs.meta +11 -0
  1289. package/Tests/Runtime/Serialization/SerializerAdditionalTests.cs +895 -0
  1290. package/Tests/Runtime/Serialization/SerializerAdditionalTests.cs.meta +3 -0
  1291. package/Tests/Runtime/Serialization/TypeConverterTests.cs +34 -0
  1292. package/Tests/Runtime/Serialization/TypeConverterTests.cs.meta +11 -0
  1293. package/Tests/Runtime/Serialization.meta +2 -2
  1294. package/Tests/Runtime/Tags/AttributeComponentTests.cs +174 -0
  1295. package/Tests/Runtime/Tags/AttributeComponentTests.cs.meta +3 -0
  1296. package/Tests/Runtime/Tags/AttributeDataTests.cs +312 -0
  1297. package/Tests/Runtime/Tags/AttributeDataTests.cs.meta +11 -0
  1298. package/Tests/Runtime/Tags/AttributeUtilitiesTests.cs +405 -0
  1299. package/Tests/Runtime/Tags/AttributeUtilitiesTests.cs.meta +3 -0
  1300. package/Tests/Runtime/Tags/CosmeticAndCollisionTests.cs +147 -0
  1301. package/Tests/Runtime/Tags/CosmeticAndCollisionTests.cs.meta +11 -0
  1302. package/Tests/Runtime/Tags/CosmeticEffectDataTests.cs +60 -0
  1303. package/Tests/Runtime/Tags/CosmeticEffectDataTests.cs.meta +3 -0
  1304. package/Tests/Runtime/Tags/EffectHandleTests.cs +61 -0
  1305. package/Tests/Runtime/Tags/EffectHandleTests.cs.meta +3 -0
  1306. package/Tests/Runtime/Tags/EffectHandlerTests.cs +270 -0
  1307. package/Tests/Runtime/Tags/EffectHandlerTests.cs.meta +3 -0
  1308. package/Tests/Runtime/Tags/Helpers/RecordingCosmeticComponent.cs +39 -0
  1309. package/Tests/Runtime/Tags/Helpers/RecordingCosmeticComponent.cs.meta +3 -0
  1310. package/Tests/Runtime/Tags/Helpers/TagTestBase.cs +49 -0
  1311. package/Tests/Runtime/Tags/Helpers/TagTestBase.cs.meta +3 -0
  1312. package/Tests/Runtime/Tags/Helpers/TestAttributesComponent.cs +28 -0
  1313. package/Tests/Runtime/Tags/Helpers/TestAttributesComponent.cs.meta +3 -0
  1314. package/Tests/Runtime/Tags/Helpers.meta +3 -0
  1315. package/Tests/Runtime/Tags/TagHandlerTests.cs +108 -0
  1316. package/Tests/Runtime/Tags/TagHandlerTests.cs.meta +3 -0
  1317. package/Tests/Runtime/Tags.meta +8 -0
  1318. package/Tests/Runtime/TestUtils/CommonTestBase.cs +213 -0
  1319. package/Tests/Runtime/TestUtils/CommonTestBase.cs.meta +11 -0
  1320. package/Tests/Runtime/TestUtils/GCAssert.cs +55 -0
  1321. package/Tests/Runtime/TestUtils/GCAssert.cs.meta +11 -0
  1322. package/Tests/Runtime/TestUtils/SpatialAssert.cs +33 -0
  1323. package/Tests/Runtime/TestUtils/SpatialAssert.cs.meta +11 -0
  1324. package/Tests/Runtime/TestUtils/SpatialDiagnostics.cs +195 -0
  1325. package/Tests/Runtime/TestUtils/SpatialDiagnostics.cs.meta +11 -0
  1326. package/Tests/Runtime/TestUtils.meta +8 -0
  1327. package/Tests/Runtime/Utils/AnimationEventEqualityComparerTests.cs +144 -0
  1328. package/Tests/Runtime/Utils/AnimationEventEqualityComparerTests.cs.meta +11 -0
  1329. package/Tests/Runtime/Utils/Ascii85Tests.cs +56 -0
  1330. package/Tests/Runtime/Utils/Ascii85Tests.cs.meta +11 -0
  1331. package/Tests/Runtime/Utils/BuffersTests.cs +1148 -741
  1332. package/Tests/Runtime/Utils/BuffersTests.cs.meta +2 -2
  1333. package/Tests/Runtime/Utils/BuffersWaitInstructionTests.cs +31 -0
  1334. package/Tests/Runtime/Utils/BuffersWaitInstructionTests.cs.meta +11 -0
  1335. package/Tests/Runtime/Utils/CenterPointOffsetTests.cs +67 -0
  1336. package/Tests/Runtime/Utils/CenterPointOffsetTests.cs.meta +11 -0
  1337. package/Tests/Runtime/Utils/ChildSpawnerTests.cs +490 -0
  1338. package/Tests/Runtime/Utils/ChildSpawnerTests.cs.meta +11 -0
  1339. package/Tests/Runtime/Utils/CircleLineRendererTests.cs +80 -0
  1340. package/Tests/Runtime/Utils/CircleLineRendererTests.cs.meta +11 -0
  1341. package/Tests/Runtime/Utils/CollisionProxyTests.cs +442 -0
  1342. package/Tests/Runtime/Utils/CollisionProxyTests.cs.meta +11 -0
  1343. package/Tests/Runtime/Utils/CoroutineHandlerTests.cs +353 -0
  1344. package/Tests/Runtime/Utils/CoroutineHandlerTests.cs.meta +11 -0
  1345. package/Tests/Runtime/Utils/DeferredDisposalResultTests.cs +44 -0
  1346. package/Tests/Runtime/Utils/DeferredDisposalResultTests.cs.meta +11 -0
  1347. package/Tests/Runtime/Utils/LZMAComprehensiveTests.cs +249 -0
  1348. package/Tests/Runtime/Utils/LZMAComprehensiveTests.cs.meta +11 -0
  1349. package/Tests/Runtime/Utils/LZMATests.cs +31 -0
  1350. package/Tests/Runtime/Utils/LZMATests.cs.meta +11 -0
  1351. package/Tests/Runtime/Utils/MatchColliderToSpriteAdditionalTests.cs +86 -0
  1352. package/Tests/Runtime/Utils/MatchColliderToSpriteAdditionalTests.cs.meta +11 -0
  1353. package/Tests/Runtime/Utils/MatchColliderToSpriteTests.cs +503 -0
  1354. package/Tests/Runtime/Utils/MatchColliderToSpriteTests.cs.meta +11 -0
  1355. package/Tests/Runtime/Utils/MatchTransformEdgeTests.cs +34 -0
  1356. package/Tests/Runtime/Utils/MatchTransformEdgeTests.cs.meta +11 -0
  1357. package/Tests/Runtime/Utils/MatchTransformTests.cs +495 -0
  1358. package/Tests/Runtime/Utils/MatchTransformTests.cs.meta +11 -0
  1359. package/Tests/Runtime/Utils/OscillatorTests.cs +540 -0
  1360. package/Tests/Runtime/Utils/OscillatorTests.cs.meta +11 -0
  1361. package/Tests/Runtime/Utils/PolygonCollider2DOptimizerTests.cs +52 -0
  1362. package/Tests/Runtime/Utils/PolygonCollider2DOptimizerTests.cs.meta +11 -0
  1363. package/Tests/Runtime/Utils/RuntimeSingletonTests.cs +766 -0
  1364. package/Tests/Runtime/Utils/RuntimeSingletonTests.cs.meta +11 -0
  1365. package/Tests/Runtime/Utils/SerializedStringComparerEdgeTests.cs +47 -0
  1366. package/Tests/Runtime/Utils/SerializedStringComparerEdgeTests.cs.meta +11 -0
  1367. package/Tests/Runtime/Utils/SerializedStringComparerTests.cs +361 -0
  1368. package/Tests/Runtime/Utils/SerializedStringComparerTests.cs.meta +11 -0
  1369. package/Tests/Runtime/Utils/SpriteRendererMetadataTests.cs +383 -398
  1370. package/Tests/Runtime/Utils/SpriteRendererMetadataTests.cs.meta +2 -2
  1371. package/Tests/Runtime/Utils/SpriteRendererSyncTests.cs +134 -0
  1372. package/Tests/Runtime/Utils/SpriteRendererSyncTests.cs.meta +11 -0
  1373. package/Tests/Runtime/Utils/StartTrackerTests.cs +24 -0
  1374. package/Tests/Runtime/Utils/StartTrackerTests.cs.meta +11 -0
  1375. package/Tests/Runtime/Utils/TextureScaleEdgeTests.cs +114 -0
  1376. package/Tests/Runtime/Utils/TextureScaleEdgeTests.cs.meta +11 -0
  1377. package/Tests/Runtime/Utils/TextureScaleTests.cs +298 -0
  1378. package/Tests/Runtime/Utils/TextureScaleTests.cs.meta +3 -0
  1379. package/Tests/Runtime/Utils/TypeNameSorterAdditionalTests.cs +36 -0
  1380. package/Tests/Runtime/Utils/TypeNameSorterAdditionalTests.cs.meta +11 -0
  1381. package/Tests/Runtime/Utils/TypeNameSorterTests.cs +34 -0
  1382. package/Tests/Runtime/Utils/TypeNameSorterTests.cs.meta +11 -0
  1383. package/Tests/Runtime/Utils/UnityObjectNameComparerEdgeTests.cs +63 -0
  1384. package/Tests/Runtime/Utils/UnityObjectNameComparerEdgeTests.cs.meta +11 -0
  1385. package/Tests/Runtime/Utils/UnityObjectNameComparerTests.cs +59 -0
  1386. package/Tests/Runtime/Utils/UnityObjectNameComparerTests.cs.meta +11 -0
  1387. package/Tests/Runtime/Utils.meta +2 -2
  1388. package/Tests/Runtime/Visuals/AnimatedSpriteLayerTests.cs +266 -0
  1389. package/Tests/Runtime/Visuals/AnimatedSpriteLayerTests.cs.meta +11 -0
  1390. package/Tests/Runtime/Visuals/EnhancedImageTests.cs +184 -0
  1391. package/Tests/Runtime/Visuals/EnhancedImageTests.cs.meta +11 -0
  1392. package/Tests/Runtime/Visuals/LayeredImageTests.cs +422 -0
  1393. package/Tests/Runtime/Visuals/LayeredImageTests.cs.meta +11 -0
  1394. package/Tests/Runtime/Visuals/VisualsTestHelpers.cs +132 -0
  1395. package/Tests/Runtime/Visuals/VisualsTestHelpers.cs.meta +11 -0
  1396. package/Tests/Runtime/Visuals.meta +3 -0
  1397. package/Tests/Runtime/WallstopStudios.UnityHelpers.Tests.Runtime.asmdef +24 -23
  1398. package/Tests/Runtime/WallstopStudios.UnityHelpers.Tests.Runtime.asmdef.meta +7 -7
  1399. package/Tests/Runtime.meta +8 -8
  1400. package/Tests.meta +8 -8
  1401. package/URP/VolumeProfiles/Post Processing Bloom Profile(URP).asset +63 -63
  1402. package/URP/VolumeProfiles/Post Processing Bloom Profile(URP).asset.meta +8 -8
  1403. package/URP/VolumeProfiles.meta +8 -8
  1404. package/URP.meta +8 -8
  1405. package/node_modules.meta +8 -0
  1406. package/package.json +95 -38
  1407. package/package.json.meta +7 -7
  1408. package/scripts/check-eol.ps1 +52 -0
  1409. package/scripts/check-eol.ps1.meta +7 -0
  1410. package/scripts/clean-nul.ps1 +29 -0
  1411. package/scripts/clean-nul.ps1.meta +7 -0
  1412. package/scripts/lint-doc-links.ps1 +80 -0
  1413. package/scripts/lint-doc-links.ps1.meta +7 -0
  1414. package/scripts/normalize-eol.ps1 +71 -0
  1415. package/scripts/normalize-eol.ps1.meta +7 -0
  1416. package/scripts.meta +8 -0
  1417. package/Editor/Sprites/ProjectAnimationSettings.cs +0 -50
  1418. package/Editor/Sprites/ProjectAnimationSettings.cs.meta +0 -3
  1419. package/Editor/Sprites/TextureSettingsApplier.cs +0 -178
  1420. package/Editor/Sprites/TextureSettingsApplier.cs.meta +0 -3
  1421. package/Runtime/Core/Attributes/ParentComponent.cs +0 -189
  1422. package/Runtime/Core/DataStructure/KDTree.cs +0 -434
  1423. package/Runtime/Core/DataStructure/QuadTree.cs +0 -431
  1424. package/Runtime/Core/DataStructure/RTree.cs +0 -356
  1425. package/Runtime/Core/Extension/HashSetExtensions.cs +0 -12
  1426. package/Runtime/Core/Extension/HashSetExtensions.cs.meta +0 -11
  1427. package/Runtime/Core/Math/Line.cs +0 -55
  1428. package/Runtime/Core/Math/Line.cs.meta +0 -11
  1429. package/Runtime/Core/Math/XXHash.cs +0 -310
  1430. package/Runtime/Core/Math/XXHash.cs.meta +0 -11
  1431. package/Tests/Runtime/Components/RelationalComponentsTesterSimple.cs +0 -40
  1432. package/Tests/Runtime/Components.meta +0 -3
  1433. package/Tests/Runtime/DataStructures/BalancedKDTreeTests.cs +0 -14
  1434. package/Tests/Runtime/DataStructures/QuadTreeTests.cs +0 -14
  1435. package/Tests/Runtime/DataStructures/QuadTreeTests.cs.meta +0 -11
  1436. package/Tests/Runtime/DataStructures/SpatialTreeTests.cs +0 -130
  1437. package/Tests/Runtime/DataStructures/SpatialTreeTests.cs.meta +0 -11
  1438. package/Tests/Runtime/DataStructures/UnbalancedKDTreeTests.cs +0 -14
  1439. package/Tests/Runtime/Helper/FormattingHelperTests.cs +0 -129
  1440. package/Tests/Runtime/Helper/FormattingHelperTests.cs.meta +0 -3
  1441. package/Tests/Runtime/Performance/KDTreePerformanceTests.cs +0 -14
  1442. package/Tests/Runtime/Performance/KDTreePerformanceTests.cs.meta +0 -11
  1443. package/Tests/Runtime/Performance/QuadTreePerformanceTests.cs +0 -14
  1444. package/Tests/Runtime/Performance/QuadTreePerformanceTests.cs.meta +0 -11
  1445. package/Tests/Runtime/Performance/SpatialTreePerformanceTest.cs +0 -158
  1446. package/Tests/Runtime/Performance/SpatialTreePerformanceTest.cs.meta +0 -11
  1447. package/Tests/Runtime/Performance/UnbalancedKDTreeTests.cs +0 -14
  1448. package/Tests/Runtime/Performance/UnbalancedKDTreeTests.cs.meta +0 -11
  1449. package/Third Party Notices.md +0 -1
@@ -1,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
+ }