Skip to content

Commit df51caa

Browse files
fix: generate canonical bools in NetworkVariable serialization tests (#4198)
* test: generate canonical bools in NetworkVariable serialization tests RandGenBytes<bool> filled each bool with a random byte, so most values were neither 0 nor 1. On mac arm64 IL2CPP the List<bool> and NativeHashMap<K, bool> cases then failed with both sides printing identical all-True contents. RandGenBool returns only false or true. * test: use RandGenBool for the NativeArray<bool> case * test: make changed2 always differ from original2 in collection generators With RandGenBool an overwrite keeps the existing value half the time, so when no elements were added or removed, changed2 could equal original2 and the "do not match" assertions failed. Each overwrite now redraws until it differs from the original element. --------- Co-authored-by: Emma <emma.mcmillan@unity3d.com> (cherry picked from commit b5c186c)
1 parent ac583bd commit df51caa

1 file changed

Lines changed: 35 additions & 13 deletions

File tree

‎com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableTests.cs‎

Lines changed: 35 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1850,6 +1850,13 @@ public unsafe T RandGenBytes<T>(System.Random rand) where T : unmanaged
18501850
return t;
18511851
}
18521852

1853+
// RandGenBytes<bool> yields bools whose byte is neither 0 nor 1, which IL2CPP on ARM64 can
1854+
// compare as unequal even though both print True.
1855+
public bool RandGenBool(System.Random rand)
1856+
{
1857+
return rand.Next(2) == 1;
1858+
}
1859+
18531860
public FixedString32Bytes RandGenFixedString32(System.Random rand)
18541861
{
18551862
var s = new FixedString32Bytes();
@@ -1917,6 +1924,11 @@ public string ArrayStr<T>(NativeArray<T> arr) where T : unmanaged
19171924
{
19181925
var idx = rand.Next(changed2.Length - 1);
19191926
var item = generator(rand);
1927+
// Ensures changed2 differs from original2 when its length matches original2.
1928+
while (idx < original2.Length && EqualityComparer<T>.Default.Equals(item, original2[idx]))
1929+
{
1930+
item = generator(rand);
1931+
}
19201932
changed2[idx] = item;
19211933
}
19221934

@@ -1997,7 +2009,7 @@ public void WhenSerializingAndDeserializingVeryLargeValueTypeNativeArrayNetworkV
19972009
}
19982010
else if (testType == typeof(bool))
19992011
{
2000-
(var original, var original2, var changed, var changed2) = GetArarys((rand) => rand.Next(2) == 1);
2012+
(var original, var original2, var changed, var changed2) = GetArarys(RandGenBool);
20012013
TestValueTypeNativeArray(original, changed);
20022014
TestValueTypeNativeArray(original2, changed2);
20032015
}
@@ -2215,6 +2227,11 @@ public string DictionaryStr<TKey, TVal>(Dictionary<TKey, TVal> list)
22152227
{
22162228
var idx = rand.Next(changed2.Count - 1);
22172229
var item = generator(rand);
2230+
// Ensures changed2 differs from original2 when no elements are added or removed.
2231+
while (EqualityComparer<T>.Default.Equals(item, original2[idx]))
2232+
{
2233+
item = generator(rand);
2234+
}
22182235
changed2[idx] = item;
22192236
}
22202237

@@ -2461,7 +2478,7 @@ public void WhenSerializingAndDeserializingVeryLargeListNetworkVariables_ValuesA
24612478
}
24622479
else if (testType == typeof(bool))
24632480
{
2464-
(var original, var original2, var changed, var changed2) = GetLists(RandGenBytes<bool>);
2481+
(var original, var original2, var changed, var changed2) = GetLists(RandGenBool);
24652482
TestList(original, changed);
24662483
TestList(original2, changed2);
24672484
}
@@ -2657,7 +2674,7 @@ public void WhenSerializingAndDeserializingVeryLargeHashSetNetworkVariables_Valu
26572674
}
26582675
else if (testType == typeof(bool))
26592676
{
2660-
(var original, var original2, var changed, var changed2) = GetHashSets(RandGenBytes<bool>);
2677+
(var original, var original2, var changed, var changed2) = GetHashSets(RandGenBool);
26612678
TestHashSet(original, changed);
26622679
TestHashSet(original2, changed2);
26632680
}
@@ -3010,27 +3027,27 @@ public void WhenSerializingAndDeserializingVeryLargeDictionaryNetworkVariables_V
30103027
{
30113028
if (keyType == typeof(byte))
30123029
{
3013-
(var original, var original2, var changed, var changed2) = GetDictionaries(RandGenBytes<byte>, RandGenBytes<bool>);
3030+
(var original, var original2, var changed, var changed2) = GetDictionaries(RandGenBytes<byte>, RandGenBool);
30143031
TestDictionary(original, changed);
30153032
TestDictionary(original2, changed2);
30163033

30173034
}
30183035
else if (keyType == typeof(ulong))
30193036
{
3020-
(var original, var original2, var changed, var changed2) = GetDictionaries(RandGenBytes<ulong>, RandGenBytes<bool>);
3037+
(var original, var original2, var changed, var changed2) = GetDictionaries(RandGenBytes<ulong>, RandGenBool);
30213038
TestDictionary(original, changed);
30223039
TestDictionary(original2, changed2);
30233040
}
30243041
else if (keyType == typeof(Vector2))
30253042
{
3026-
(var original, var original2, var changed, var changed2) = GetDictionaries((rand) => new Vector2((float)rand.NextDouble(), (float)rand.NextDouble()), RandGenBytes<bool>);
3043+
(var original, var original2, var changed, var changed2) = GetDictionaries((rand) => new Vector2((float)rand.NextDouble(), (float)rand.NextDouble()), RandGenBool);
30273044
TestDictionary(original, changed);
30283045
TestDictionary(original2, changed2);
30293046

30303047
}
30313048
else if (keyType == typeof(HashMapKeyClass))
30323049
{
3033-
(var original, var original2, var changed, var changed2) = GetDictionaries((rand) => new HashMapKeyClass { Data = RandGenBytes<HashMapKeyStruct>(rand) }, RandGenBytes<bool>);
3050+
(var original, var original2, var changed, var changed2) = GetDictionaries((rand) => new HashMapKeyClass { Data = RandGenBytes<HashMapKeyStruct>(rand) }, RandGenBool);
30343051
TestDictionary(original, changed);
30353052
TestDictionary(original2, changed2);
30363053
}
@@ -3722,6 +3739,11 @@ public string NativeHashMapStr<TKey, TVal>(NativeHashMap<TKey, TVal> list)
37223739
{
37233740
var idx = rand.Next(changed2.Length - 1);
37243741
var item = generator(rand);
3742+
// Ensures changed2 differs from original2 when no elements are added or removed.
3743+
while (EqualityComparer<T>.Default.Equals(item, original2[idx]))
3744+
{
3745+
item = generator(rand);
3746+
}
37253747
changed2[idx] = item;
37263748
}
37273749

@@ -3965,7 +3987,7 @@ public void WhenSerializingAndDeserializingVeryLargeValueTypeNativeListNetworkVa
39653987
}
39663988
else if (testType == typeof(bool))
39673989
{
3968-
(var original, var original2, var changed, var changed2) = GetNativeLists(RandGenBytes<bool>);
3990+
(var original, var original2, var changed, var changed2) = GetNativeLists(RandGenBool);
39693991
TestValueTypeNativeList(original, changed);
39703992
TestValueTypeNativeList(original2, changed2);
39713993
}
@@ -4154,7 +4176,7 @@ public void WhenSerializingAndDeserializingVeryLargeValueTypeNativeHashSetNetwor
41544176
}
41554177
else if (testType == typeof(bool))
41564178
{
4157-
(var original, var original2, var changed, var changed2) = GetNativeHashSets(RandGenBytes<bool>);
4179+
(var original, var original2, var changed, var changed2) = GetNativeHashSets(RandGenBool);
41584180
TestValueTypeNativeHashSet(original, changed);
41594181
TestValueTypeNativeHashSet(original2, changed2);
41604182
}
@@ -4500,27 +4522,27 @@ public void WhenSerializingAndDeserializingVeryLargeValueTypeNativeHashMapNetwor
45004522
{
45014523
if (keyType == typeof(byte))
45024524
{
4503-
(var original, var original2, var changed, var changed2) = GetMaps(RandGenBytes<byte>, RandGenBytes<bool>);
4525+
(var original, var original2, var changed, var changed2) = GetMaps(RandGenBytes<byte>, RandGenBool);
45044526
TestValueTypeNativeHashMap(original, changed);
45054527
TestValueTypeNativeHashMap(original2, changed2);
45064528

45074529
}
45084530
else if (keyType == typeof(ulong))
45094531
{
4510-
(var original, var original2, var changed, var changed2) = GetMaps(RandGenBytes<ulong>, RandGenBytes<bool>);
4532+
(var original, var original2, var changed, var changed2) = GetMaps(RandGenBytes<ulong>, RandGenBool);
45114533
TestValueTypeNativeHashMap(original, changed);
45124534
TestValueTypeNativeHashMap(original2, changed2);
45134535
}
45144536
else if (keyType == typeof(Vector2))
45154537
{
4516-
(var original, var original2, var changed, var changed2) = GetMaps((rand) => new Vector2((float)rand.NextDouble(), (float)rand.NextDouble()), RandGenBytes<bool>);
4538+
(var original, var original2, var changed, var changed2) = GetMaps((rand) => new Vector2((float)rand.NextDouble(), (float)rand.NextDouble()), RandGenBool);
45174539
TestValueTypeNativeHashMap(original, changed);
45184540
TestValueTypeNativeHashMap(original2, changed2);
45194541

45204542
}
45214543
else if (keyType == typeof(HashMapKeyStruct))
45224544
{
4523-
(var original, var original2, var changed, var changed2) = GetMaps(RandGenBytes<HashMapKeyStruct>, RandGenBytes<bool>);
4545+
(var original, var original2, var changed, var changed2) = GetMaps(RandGenBytes<HashMapKeyStruct>, RandGenBool);
45244546
TestValueTypeNativeHashMap(original, changed);
45254547
TestValueTypeNativeHashMap(original2, changed2);
45264548
}

0 commit comments

Comments
 (0)