com.wallstop-studios.unity-helpers 2.0.0-rc04 → 2.0.0-rc06

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 (121) hide show
  1. package/CHANGELOG.md.meta +7 -7
  2. package/Editor/AnimationEventEditor.cs.meta +11 -11
  3. package/Editor.meta +8 -8
  4. package/LICENSE.md.meta +7 -7
  5. package/README.md.meta +7 -7
  6. package/Runtime/Core/Attributes/AnimationEventAttribute.cs.meta +11 -11
  7. package/Runtime/Core/Attributes/ChildComponentAttribute.cs.meta +11 -11
  8. package/Runtime/Core/Attributes/KSerializableAttribute.cs.meta +11 -11
  9. package/Runtime/Core/Attributes/NotNullAttribute.cs.meta +11 -11
  10. package/Runtime/Core/Attributes/ParentComponent.cs.meta +11 -11
  11. package/Runtime/Core/Attributes/ReadOnlyAttribute.cs.meta +11 -11
  12. package/Runtime/Core/Attributes/RelationalComponentExtensions.cs.meta +11 -11
  13. package/Runtime/Core/DataStructure/Adapters/FastVector2Int.cs.meta +11 -11
  14. package/Runtime/Core/DataStructure/Adapters/FastVector3Int.cs.meta +11 -11
  15. package/Runtime/Core/DataStructure/Adapters/KGuid.cs.meta +11 -11
  16. package/Runtime/Core/DataStructure/Adapters/KVector2.cs.meta +11 -11
  17. package/Runtime/Core/DataStructure/Adapters.meta +8 -8
  18. package/Runtime/Core/DataStructure/Circle.cs.meta +11 -11
  19. package/Runtime/Core/DataStructure/CyclicBuffer.cs.meta +11 -11
  20. package/Runtime/Core/DataStructure/QuadTree.cs.meta +11 -11
  21. package/Runtime/Core/DataStructure/StringWrapper.cs.meta +11 -11
  22. package/Runtime/Core/DataStructure/TimedCache.cs +4 -3
  23. package/Runtime/Core/DataStructure/TimedCache.cs.meta +11 -11
  24. package/Runtime/Core/DataStructure.meta +8 -8
  25. package/Runtime/Core/Extension/AnimatorExtensions.cs.meta +11 -11
  26. package/Runtime/Core/Extension/CircleExtensions.cs.meta +11 -11
  27. package/Runtime/Core/Extension/ColorExtensions.cs.meta +11 -11
  28. package/Runtime/Core/Extension/DictionaryExtensions.cs.meta +11 -11
  29. package/Runtime/Core/Extension/DirectionExtensions.cs.meta +11 -11
  30. package/Runtime/Core/Extension/HashSetExtensions.cs.meta +11 -11
  31. package/Runtime/Core/Extension/IEnumerableExtensions.cs.meta +11 -11
  32. package/Runtime/Core/Extension/IListExtensions.cs +2 -2
  33. package/Runtime/Core/Extension/IListExtensions.cs.meta +11 -11
  34. package/Runtime/Core/Extension/LoggingExtensions.cs.meta +11 -11
  35. package/Runtime/Core/Extension/RandomExtensions.cs +23 -4
  36. package/Runtime/Core/Extension/RandomExtensions.cs.meta +11 -11
  37. package/Runtime/Core/Extension/StringExtensions.cs.meta +11 -11
  38. package/Runtime/Core/Extension/UnityExtensions.cs +278 -90
  39. package/Runtime/Core/Extension/UnityExtensions.cs.meta +11 -11
  40. package/Runtime/Core/Extension.meta +8 -8
  41. package/Runtime/Core/Helper/ArrayConverter.cs +39 -0
  42. package/Runtime/Core/Helper/ArrayConverter.cs.meta +3 -0
  43. package/Runtime/Core/Helper/Enumerables.cs.meta +11 -11
  44. package/Runtime/Core/Helper/Geometry.cs.meta +11 -11
  45. package/Runtime/Core/Helper/Helpers.cs +209 -84
  46. package/Runtime/Core/Helper/LifetimeHelpers.cs.meta +11 -11
  47. package/Runtime/Core/Helper/Objects.cs.meta +11 -11
  48. package/Runtime/Core/Helper/WallMath.cs +85 -22
  49. package/Runtime/Core/Helper/WallMath.cs.meta +11 -11
  50. package/Runtime/Core/Helper.meta +8 -8
  51. package/Runtime/Core/Math/Line.cs.meta +11 -11
  52. package/Runtime/Core/Math/Parabola.cs.meta +11 -11
  53. package/Runtime/Core/Math/Range.cs.meta +11 -11
  54. package/Runtime/Core/Math.meta +8 -8
  55. package/Runtime/Core/Model/Direction.cs.meta +11 -11
  56. package/Runtime/Core/Model.meta +8 -8
  57. package/Runtime/Core/OneOf/FastOneOf.cs.meta +11 -11
  58. package/Runtime/Core/OneOf/None.cs.meta +11 -11
  59. package/Runtime/Core/OneOf.meta +8 -8
  60. package/Runtime/Core/Random/AbstractRandom.cs +34 -20
  61. package/Runtime/Core/Random/AbstractRandom.cs.meta +11 -11
  62. package/Runtime/Core/Random/DotNetRandom.cs +52 -0
  63. package/Runtime/Core/Random/DotNetRandom.cs.meta +3 -0
  64. package/Runtime/Core/Random/IRandom.cs.meta +11 -11
  65. package/Runtime/Core/Random/NativePcgRandom.cs.meta +11 -11
  66. package/Runtime/Core/Random/PRNG.cs +7 -0
  67. package/Runtime/Core/Random/PRNG.cs.meta +3 -0
  68. package/Runtime/Core/Random/PcgRandom.cs +23 -22
  69. package/Runtime/Core/Random/PcgRandom.cs.meta +11 -11
  70. package/Runtime/Core/Random/RandomState.cs +44 -5
  71. package/Runtime/Core/Random/RandomState.cs.meta +11 -11
  72. package/Runtime/Core/Random/SquirrelRandom.cs +13 -10
  73. package/Runtime/Core/Random/SquirrelRandom.cs.meta +11 -11
  74. package/Runtime/Core/Random/SystemRandom.cs +31 -16
  75. package/Runtime/Core/Random/SystemRandom.cs.meta +11 -11
  76. package/Runtime/Core/Random/ThreadLocalRandom.cs +2 -1
  77. package/Runtime/Core/Random/ThreadLocalRandom.cs.meta +11 -11
  78. package/Runtime/Core/Random/UnityRandom.cs +37 -4
  79. package/Runtime/Core/Random/WyRandom.cs +121 -0
  80. package/Runtime/Core/Random/WyRandom.cs.meta +3 -0
  81. package/Runtime/Core/Random/XorShiftRandom.cs +9 -7
  82. package/Runtime/Core/Random.meta +8 -8
  83. package/Runtime/Core/Serialization/JsonConverters/Vector2Converter.cs.meta +11 -11
  84. package/Runtime/Core/Serialization/JsonConverters/Vector3Converter.cs.meta +11 -11
  85. package/Runtime/Core/Serialization/JsonConverters.meta +8 -8
  86. package/Runtime/Core/Serialization/Serializer.cs +36 -14
  87. package/Runtime/Core/Serialization/Serializer.cs.meta +11 -11
  88. package/Runtime/Core/Serialization.meta +8 -8
  89. package/Runtime/Core/Threading/SingleThreadedThreadPool.cs.meta +11 -11
  90. package/Runtime/Core/Threading.meta +8 -8
  91. package/Runtime/Core.meta +8 -8
  92. package/Runtime/Protobuf-Net.meta +8 -8
  93. package/Runtime/Utils/AnimationEventEqualityComparer.cs.meta +11 -11
  94. package/Runtime/Utils/AnimatorEnumStateMachine.cs.meta +11 -11
  95. package/Runtime/Utils/Buffers.cs.meta +11 -11
  96. package/Runtime/Utils/CircleLineRenderer.cs +17 -5
  97. package/Runtime/Utils/CircleLineRenderer.cs.meta +11 -11
  98. package/Runtime/Utils/Oscillator.cs.meta +11 -11
  99. package/Runtime/Utils/SetTextureImportData.cs.meta +11 -11
  100. package/Runtime/Utils.meta +8 -8
  101. package/Runtime/WallstopStudios.UnityHelpers.asmdef.meta +7 -7
  102. package/Runtime.meta +8 -8
  103. package/Tests/Runtime/DataStructures/SpatialTreeTests.cs +34 -10
  104. package/Tests/Runtime/Helper/ArrayConverterTests.cs +19 -0
  105. package/Tests/Runtime/Helper/ArrayConverterTests.cs.meta +3 -0
  106. package/Tests/Runtime/Helper/WallMathTests.cs +221 -0
  107. package/Tests/Runtime/Helper/WallMathTests.cs.meta +3 -0
  108. package/Tests/Runtime/Helper.meta +3 -0
  109. package/Tests/Runtime/Performance/RandomPerformanceTests.cs +18 -13
  110. package/Tests/Runtime/Performance/SpatialTreePerformanceTest.cs +47 -34
  111. package/Tests/Runtime/Random/DotNetRandomTests.cs +9 -0
  112. package/Tests/Runtime/Random/DotNetRandomTests.cs.meta +3 -0
  113. package/Tests/Runtime/Random/RandomTestBase.cs +89 -15
  114. package/Tests/Runtime/Random/WyRandomTests.cs +9 -0
  115. package/Tests/Runtime/Random/WyRandomTests.cs.meta +3 -0
  116. package/Tests/Runtime/Serialization/JsonSerializationTest.cs +24 -11
  117. package/Tests/Runtime/Utils/SpriteRendererMetadataTests.cs +21 -17
  118. package/Tests.meta +8 -8
  119. package/Third Party Notices.md.meta +7 -7
  120. package/package.json +1 -1
  121. package/package.json.meta +7 -7
@@ -3,14 +3,17 @@
3
3
  using System;
4
4
  using System.Collections.Generic;
5
5
  using System.Linq;
6
+ using Core.Extension;
7
+ using Core.Serialization;
6
8
  using NUnit.Framework;
7
9
  using UnityHelpers.Core.Random;
8
10
 
9
11
  public abstract class RandomTestBase
10
12
  {
11
- protected const int SampleCount = 10_000_000;
13
+ private const int NumGeneratorChecks = 1_000;
14
+ private const int SampleCount = 12_500_000;
12
15
 
13
- protected readonly int[] _samples = new int[1_000];
16
+ private readonly int[] _samples = new int[1_000];
14
17
 
15
18
  protected abstract IRandom NewRandom();
16
19
 
@@ -48,22 +51,37 @@
48
51
  public void Byte()
49
52
  {
50
53
  TestAndVerify(
51
- random => random.NextByte(0, (byte)(_samples.Length < byte.MaxValue ? _samples.Length : byte.MaxValue)),
52
- byte.MaxValue);
54
+ random =>
55
+ random.NextByte(
56
+ 0,
57
+ (byte)(_samples.Length < byte.MaxValue ? _samples.Length : byte.MaxValue)
58
+ ),
59
+ byte.MaxValue
60
+ );
53
61
  }
54
62
 
55
63
  [Test]
56
64
  public void Float()
57
65
  {
58
- TestAndVerify(
59
- random => Math.Clamp((int)Math.Floor(random.NextFloat(0, _samples.Length)), 0, _samples.Length - 1));
66
+ TestAndVerify(random =>
67
+ Math.Clamp(
68
+ (int)Math.Floor(random.NextFloat(0, _samples.Length)),
69
+ 0,
70
+ _samples.Length - 1
71
+ )
72
+ );
60
73
  }
61
74
 
62
75
  [Test]
63
76
  public void Double()
64
77
  {
65
- TestAndVerify(
66
- random => Math.Clamp((int)Math.Floor(random.NextDouble(0, _samples.Length)), 0, _samples.Length - 1));
78
+ TestAndVerify(random =>
79
+ Math.Clamp(
80
+ (int)Math.Floor(random.NextDouble(0, _samples.Length)),
81
+ 0,
82
+ _samples.Length - 1
83
+ )
84
+ );
67
85
  }
68
86
 
69
87
  [Test]
@@ -78,7 +96,54 @@
78
96
  TestAndVerify(random => (int)random.NextUlong(0, (ulong)_samples.Length));
79
97
  }
80
98
 
81
- protected void TestAndVerify(Func<IRandom, int> sample, int? maxLength = null)
99
+ [Test]
100
+ public void Copy()
101
+ {
102
+ IRandom random1 = NewRandom();
103
+ IRandom random2 = random1.Copy();
104
+ Assert.AreEqual(random1.InternalState, random2.InternalState);
105
+ // UnityRandom has shared state, the below test is not possible for it. We did all we could.
106
+ if (NewRandom() is not UnityRandom)
107
+ {
108
+ for (int i = 0; i < NumGeneratorChecks; ++i)
109
+ {
110
+ Assert.AreEqual(random1.Next(), random2.Next());
111
+ Assert.AreEqual(random1.InternalState, random2.InternalState);
112
+ }
113
+ }
114
+
115
+ Assert.AreEqual(random1.InternalState, random2.InternalState);
116
+ IRandom random3 = random1.Copy();
117
+ Assert.AreEqual(random1.InternalState, random3.InternalState);
118
+ if (NewRandom() is not UnityRandom)
119
+ {
120
+ for (int i = 0; i < NumGeneratorChecks; ++i)
121
+ {
122
+ Assert.AreEqual(random1.Next(), random3.Next());
123
+ Assert.AreEqual(random1.InternalState, random3.InternalState);
124
+ }
125
+ }
126
+ }
127
+
128
+ [Test]
129
+ public void Json()
130
+ {
131
+ IRandom random = NewRandom();
132
+ string json = random.ToJson();
133
+ IRandom deserialized = Serializer.JsonDeserialize<IRandom>(json, random.GetType());
134
+ Assert.AreEqual(random.InternalState, deserialized.InternalState);
135
+
136
+ if (NewRandom() is not UnityRandom)
137
+ {
138
+ for (int i = 0; i < NumGeneratorChecks; ++i)
139
+ {
140
+ Assert.AreEqual(random.Next(), deserialized.Next());
141
+ Assert.AreEqual(random.InternalState, deserialized.InternalState);
142
+ }
143
+ }
144
+ }
145
+
146
+ private void TestAndVerify(Func<IRandom, int> sample, int? maxLength = null)
82
147
  {
83
148
  IRandom random = NewRandom();
84
149
  for (int i = 0; i < SampleCount; ++i)
@@ -114,12 +179,21 @@
114
179
  }
115
180
 
116
181
  Assert.AreEqual(
117
- 0, zeroCountIndexes.Count, "No samples at {0} indices: [{1}]", zeroCountIndexes.Count,
118
- string.Join(",", zeroCountIndexes));
182
+ 0,
183
+ zeroCountIndexes.Count,
184
+ "No samples at {0} indices: [{1}]",
185
+ zeroCountIndexes.Count,
186
+ string.Join(",", zeroCountIndexes)
187
+ );
119
188
  Assert.AreEqual(
120
- 0, outsideRange.Count, "{0} indexes outside of dev {1:0.00}. Expected: {2:0.00}. Found: [{3}]",
121
- outsideRange.Count, deviationAllowed, average,
122
- string.Join(",", outsideRange.Select(index => _samples[index])));
189
+ 0,
190
+ outsideRange.Count,
191
+ "{0} indexes outside of dev {1:0.00}. Expected: {2:0.00}. Found: [{3}]",
192
+ outsideRange.Count,
193
+ deviationAllowed,
194
+ average,
195
+ string.Join(",", outsideRange.Select(index => _samples[index]))
196
+ );
123
197
  }
124
198
  }
125
- }
199
+ }
@@ -0,0 +1,9 @@
1
+ namespace UnityHelpers.Tests.Random
2
+ {
3
+ using Core.Random;
4
+
5
+ public sealed class WyRandomTests : RandomTestBase
6
+ {
7
+ protected override IRandom NewRandom() => new WyRandom();
8
+ }
9
+ }
@@ -0,0 +1,3 @@
1
+ fileFormatVersion: 2
2
+ guid: 700b0f9e94074d7fb2177d37ff9bcd4f
3
+ timeCreated: 1732481488
@@ -29,12 +29,12 @@
29
29
  [Test]
30
30
  public void SerializationWorks()
31
31
  {
32
- IRandom random = PcgRandom.Instance;
32
+ IRandom random = PRNG.Instance;
33
33
  TestDataObject input = new()
34
34
  {
35
35
  field = Guid.NewGuid().ToString(),
36
36
  Property = random.Next(),
37
- NamedProperty = random.NextFloat()
37
+ NamedProperty = random.NextFloat(),
38
38
  };
39
39
 
40
40
  int dictionaryProperties = random.Next(4, 10);
@@ -51,21 +51,34 @@
51
51
 
52
52
  string json = input.ToJson();
53
53
  Assert.IsTrue(
54
- json.Contains("DifferentPropertyName"), $"DifferentPropertyName failed to serialize! JSON: {json}");
54
+ json.Contains("DifferentPropertyName"),
55
+ $"DifferentPropertyName failed to serialize! JSON: {json}"
56
+ );
55
57
 
56
58
  TestDataObject deserialized = Serializer.JsonDeserialize<TestDataObject>(json);
57
- Assert.AreEqual(input.field, deserialized.field, $"Unexpected {nameof(deserialized.field)}! JSON: {json}");
58
59
  Assert.AreEqual(
59
- input.Property, deserialized.Property, $"Unexpected {nameof(deserialized.Property)}! JSON: {json}");
60
+ input.field,
61
+ deserialized.field,
62
+ $"Unexpected {nameof(deserialized.field)}! JSON: {json}"
63
+ );
60
64
  Assert.AreEqual(
61
- input.NamedProperty, deserialized.NamedProperty,
62
- $"Unexpected {nameof(deserialized.NamedProperty)}! JSON: {json}");
63
- Assert.IsTrue(
65
+ input.Property,
66
+ deserialized.Property,
67
+ $"Unexpected {nameof(deserialized.Property)}! JSON: {json}"
68
+ );
69
+ Assert.AreEqual(
70
+ input.NamedProperty,
71
+ deserialized.NamedProperty,
72
+ $"Unexpected {nameof(deserialized.NamedProperty)}! JSON: {json}"
73
+ );
74
+ Assert.IsTrue(
64
75
  input.DictionaryProperty.ContentEquals(deserialized.DictionaryProperty),
65
- $"Unexpected {nameof(deserialized.DictionaryProperty)}! JSON: {json}");
76
+ $"Unexpected {nameof(deserialized.DictionaryProperty)}! JSON: {json}"
77
+ );
66
78
  Assert.IsTrue(
67
79
  input.ListProperty.SequenceEqual(deserialized.ListProperty),
68
- $"Unexpected {nameof(deserialized.ListProperty)}! JSON: {json}");
80
+ $"Unexpected {nameof(deserialized.ListProperty)}! JSON: {json}"
81
+ );
69
82
  }
70
83
  }
71
- }
84
+ }
@@ -32,7 +32,11 @@
32
32
 
33
33
  private SpriteRendererMetadata CreateMetadata()
34
34
  {
35
- GameObject go = new("TestSpriteRendererMetadata", typeof(SpriteRenderer), typeof(SpriteRendererMetadata));
35
+ GameObject go = new(
36
+ "TestSpriteRendererMetadata",
37
+ typeof(SpriteRenderer),
38
+ typeof(SpriteRendererMetadata)
39
+ );
36
40
  _spawned.Add(go);
37
41
  return go.GetComponent<SpriteRendererMetadata>();
38
42
  }
@@ -44,8 +48,13 @@
44
48
 
45
49
  private Color CreateColor()
46
50
  {
47
- IRandom random = PcgRandom.Instance;
48
- Color color = new(random.NextFloat(), random.NextFloat(), random.NextFloat(), random.NextFloat());
51
+ IRandom random = PRNG.Instance;
52
+ Color color = new(
53
+ random.NextFloat(),
54
+ random.NextFloat(),
55
+ random.NextFloat(),
56
+ random.NextFloat()
57
+ );
49
58
  return color;
50
59
  }
51
60
 
@@ -74,9 +83,8 @@
74
83
  Material originalMaterial = metadata.OriginalMaterial;
75
84
  do
76
85
  {
77
- newColor.r = PcgRandom.Instance.NextFloat();
78
- }
79
- while (newColor == originalColor);
86
+ newColor.r = PRNG.Instance.NextFloat();
87
+ } while (newColor == originalColor);
80
88
 
81
89
  SpriteRendererMetadata second = CreateMetadata();
82
90
  SpriteRenderer spriteRenderer = metadata.GetComponent<SpriteRenderer>();
@@ -91,9 +99,8 @@
91
99
  Color updatedColor = newColor;
92
100
  do
93
101
  {
94
- updatedColor.g = PcgRandom.Instance.NextFloat();
95
- }
96
- while (updatedColor == newColor);
102
+ updatedColor.g = PRNG.Instance.NextFloat();
103
+ } while (updatedColor == newColor);
97
104
 
98
105
  metadata.PushColor(spriteRenderer, updatedColor);
99
106
  Assert.AreEqual(spriteRenderer.color, metadata.CurrentColor);
@@ -108,9 +115,8 @@
108
115
  Color latestColor = updatedColor;
109
116
  do
110
117
  {
111
- latestColor.b = PcgRandom.Instance.NextFloat();
112
- }
113
- while (latestColor == updatedColor);
118
+ latestColor.b = PRNG.Instance.NextFloat();
119
+ } while (latestColor == updatedColor);
114
120
 
115
121
  metadata.PushColor(second, latestColor);
116
122
  Assert.AreEqual(spriteRenderer.color, metadata.CurrentColor);
@@ -120,9 +126,8 @@
120
126
  Assert.IsFalse(metadata.Colors.Contains(newColor));
121
127
  do
122
128
  {
123
- newColor.a = PcgRandom.Instance.NextFloat();
124
- }
125
- while (newColor == latestColor);
129
+ newColor.a = PRNG.Instance.NextFloat();
130
+ } while (newColor == latestColor);
126
131
 
127
132
  metadata.PushColor(second, newColor);
128
133
  Assert.AreEqual(spriteRenderer.color, metadata.CurrentColor);
@@ -189,7 +194,6 @@
189
194
  yield break;
190
195
  }
191
196
 
192
-
193
197
  [UnityTest]
194
198
  public IEnumerator PopColorIdempotent()
195
199
  {
@@ -392,4 +396,4 @@
392
396
  yield break;
393
397
  }
394
398
  }
395
- }
399
+ }
package/Tests.meta CHANGED
@@ -1,8 +1,8 @@
1
- fileFormatVersion: 2
2
- guid: 95113a6d0bd1caa45a97f7f4db1e7c0a
3
- folderAsset: yes
4
- DefaultImporter:
5
- externalObjects: {}
6
- userData:
7
- assetBundleName:
8
- assetBundleVariant:
1
+ fileFormatVersion: 2
2
+ guid: 95113a6d0bd1caa45a97f7f4db1e7c0a
3
+ folderAsset: yes
4
+ DefaultImporter:
5
+ externalObjects: {}
6
+ userData:
7
+ assetBundleName:
8
+ assetBundleVariant:
@@ -1,7 +1,7 @@
1
- fileFormatVersion: 2
2
- guid: 4908409161853e24bbbd3b2522b0fcc2
3
- TextScriptImporter:
4
- externalObjects: {}
5
- userData:
6
- assetBundleName:
7
- assetBundleVariant:
1
+ fileFormatVersion: 2
2
+ guid: 4908409161853e24bbbd3b2522b0fcc2
3
+ TextScriptImporter:
4
+ externalObjects: {}
5
+ userData:
6
+ assetBundleName:
7
+ assetBundleVariant:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "com.wallstop-studios.unity-helpers",
3
- "version": "2.0.0-rc04",
3
+ "version": "2.0.0-rc06",
4
4
  "displayName": "Unity Helpers",
5
5
  "description": "Various Unity Helper Library",
6
6
  "dependencies": {},
package/package.json.meta CHANGED
@@ -1,7 +1,7 @@
1
- fileFormatVersion: 2
2
- guid: 37c8a4d958841ed4b9cf38ef3b01ea92
3
- PackageManifestImporter:
4
- externalObjects: {}
5
- userData:
6
- assetBundleName:
7
- assetBundleVariant:
1
+ fileFormatVersion: 2
2
+ guid: 37c8a4d958841ed4b9cf38ef3b01ea92
3
+ PackageManifestImporter:
4
+ externalObjects: {}
5
+ userData:
6
+ assetBundleName:
7
+ assetBundleVariant: