Skip to content

Commit b5c186c

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>
1 parent 16a7308 commit b5c186c

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
@@ -1796,6 +1796,13 @@ public unsafe T RandGenBytes<T>(System.Random rand) where T : unmanaged
17961796
return t;
17971797
}
17981798

1799+
// RandGenBytes<bool> yields bools whose byte is neither 0 nor 1, which IL2CPP on ARM64 can
1800+
// compare as unequal even though both print True.
1801+
public bool RandGenBool(System.Random rand)
1802+
{
1803+
return rand.Next(2) == 1;
1804+
}
1805+
17991806
public FixedString32Bytes RandGenFixedString32(System.Random rand)
18001807
{
18011808
var s = new FixedString32Bytes();
@@ -1863,6 +1870,11 @@ public string ArrayStr<T>(NativeArray<T> arr) where T : unmanaged
18631870
{
18641871
var idx = rand.Next(changed2.Length - 1);
18651872
var item = generator(rand);
1873+
// Ensures changed2 differs from original2 when its length matches original2.
1874+
while (idx < original2.Length && EqualityComparer<T>.Default.Equals(item, original2[idx]))
1875+
{
1876+
item = generator(rand);
1877+
}
18661878
changed2[idx] = item;
18671879
}
18681880

@@ -1940,7 +1952,7 @@ public void WhenSerializingAndDeserializingVeryLargeValueTypeNativeArrayNetworkV
19401952
}
19411953
else if (testType == typeof(bool))
19421954
{
1943-
(var original, var original2, var changed, var changed2) = GetArarys((rand) => rand.Next(2) == 1);
1955+
(var original, var original2, var changed, var changed2) = GetArarys(RandGenBool);
19441956
TestValueTypeNativeArray(original, changed);
19451957
TestValueTypeNativeArray(original2, changed2);
19461958
}
@@ -2158,6 +2170,11 @@ public string DictionaryStr<TKey, TVal>(Dictionary<TKey, TVal> list)
21582170
{
21592171
var idx = rand.Next(changed2.Count - 1);
21602172
var item = generator(rand);
2173+
// Ensures changed2 differs from original2 when no elements are added or removed.
2174+
while (EqualityComparer<T>.Default.Equals(item, original2[idx]))
2175+
{
2176+
item = generator(rand);
2177+
}
21612178
changed2[idx] = item;
21622179
}
21632180

@@ -2401,7 +2418,7 @@ public void WhenSerializingAndDeserializingVeryLargeListNetworkVariables_ValuesA
24012418
}
24022419
else if (testType == typeof(bool))
24032420
{
2404-
(var original, var original2, var changed, var changed2) = GetLists(RandGenBytes<bool>);
2421+
(var original, var original2, var changed, var changed2) = GetLists(RandGenBool);
24052422
TestList(original, changed);
24062423
TestList(original2, changed2);
24072424
}
@@ -2594,7 +2611,7 @@ public void WhenSerializingAndDeserializingVeryLargeHashSetNetworkVariables_Valu
25942611
}
25952612
else if (testType == typeof(bool))
25962613
{
2597-
(var original, var original2, var changed, var changed2) = GetHashSets(RandGenBytes<bool>);
2614+
(var original, var original2, var changed, var changed2) = GetHashSets(RandGenBool);
25982615
TestHashSet(original, changed);
25992616
TestHashSet(original2, changed2);
26002617
}
@@ -2944,27 +2961,27 @@ public void WhenSerializingAndDeserializingVeryLargeDictionaryNetworkVariables_V
29442961
{
29452962
if (keyType == typeof(byte))
29462963
{
2947-
(var original, var original2, var changed, var changed2) = GetDictionaries(RandGenBytes<byte>, RandGenBytes<bool>);
2964+
(var original, var original2, var changed, var changed2) = GetDictionaries(RandGenBytes<byte>, RandGenBool);
29482965
TestDictionary(original, changed);
29492966
TestDictionary(original2, changed2);
29502967

29512968
}
29522969
else if (keyType == typeof(ulong))
29532970
{
2954-
(var original, var original2, var changed, var changed2) = GetDictionaries(RandGenBytes<ulong>, RandGenBytes<bool>);
2971+
(var original, var original2, var changed, var changed2) = GetDictionaries(RandGenBytes<ulong>, RandGenBool);
29552972
TestDictionary(original, changed);
29562973
TestDictionary(original2, changed2);
29572974
}
29582975
else if (keyType == typeof(Vector2))
29592976
{
2960-
(var original, var original2, var changed, var changed2) = GetDictionaries((rand) => new Vector2((float)rand.NextDouble(), (float)rand.NextDouble()), RandGenBytes<bool>);
2977+
(var original, var original2, var changed, var changed2) = GetDictionaries((rand) => new Vector2((float)rand.NextDouble(), (float)rand.NextDouble()), RandGenBool);
29612978
TestDictionary(original, changed);
29622979
TestDictionary(original2, changed2);
29632980

29642981
}
29652982
else if (keyType == typeof(HashMapKeyClass))
29662983
{
2967-
(var original, var original2, var changed, var changed2) = GetDictionaries((rand) => new HashMapKeyClass { Data = RandGenBytes<HashMapKeyStruct>(rand) }, RandGenBytes<bool>);
2984+
(var original, var original2, var changed, var changed2) = GetDictionaries((rand) => new HashMapKeyClass { Data = RandGenBytes<HashMapKeyStruct>(rand) }, RandGenBool);
29682985
TestDictionary(original, changed);
29692986
TestDictionary(original2, changed2);
29702987
}
@@ -3656,6 +3673,11 @@ public string NativeHashMapStr<TKey, TVal>(NativeHashMap<TKey, TVal> list)
36563673
{
36573674
var idx = rand.Next(changed2.Length - 1);
36583675
var item = generator(rand);
3676+
// Ensures changed2 differs from original2 when no elements are added or removed.
3677+
while (EqualityComparer<T>.Default.Equals(item, original2[idx]))
3678+
{
3679+
item = generator(rand);
3680+
}
36593681
changed2[idx] = item;
36603682
}
36613683

@@ -3899,7 +3921,7 @@ public void WhenSerializingAndDeserializingVeryLargeValueTypeNativeListNetworkVa
38993921
}
39003922
else if (testType == typeof(bool))
39013923
{
3902-
(var original, var original2, var changed, var changed2) = GetNativeLists(RandGenBytes<bool>);
3924+
(var original, var original2, var changed, var changed2) = GetNativeLists(RandGenBool);
39033925
TestValueTypeNativeList(original, changed);
39043926
TestValueTypeNativeList(original2, changed2);
39053927
}
@@ -4088,7 +4110,7 @@ public void WhenSerializingAndDeserializingVeryLargeValueTypeNativeHashSetNetwor
40884110
}
40894111
else if (testType == typeof(bool))
40904112
{
4091-
(var original, var original2, var changed, var changed2) = GetNativeHashSets(RandGenBytes<bool>);
4113+
(var original, var original2, var changed, var changed2) = GetNativeHashSets(RandGenBool);
40924114
TestValueTypeNativeHashSet(original, changed);
40934115
TestValueTypeNativeHashSet(original2, changed2);
40944116
}
@@ -4434,27 +4456,27 @@ public void WhenSerializingAndDeserializingVeryLargeValueTypeNativeHashMapNetwor
44344456
{
44354457
if (keyType == typeof(byte))
44364458
{
4437-
(var original, var original2, var changed, var changed2) = GetMaps(RandGenBytes<byte>, RandGenBytes<bool>);
4459+
(var original, var original2, var changed, var changed2) = GetMaps(RandGenBytes<byte>, RandGenBool);
44384460
TestValueTypeNativeHashMap(original, changed);
44394461
TestValueTypeNativeHashMap(original2, changed2);
44404462

44414463
}
44424464
else if (keyType == typeof(ulong))
44434465
{
4444-
(var original, var original2, var changed, var changed2) = GetMaps(RandGenBytes<ulong>, RandGenBytes<bool>);
4466+
(var original, var original2, var changed, var changed2) = GetMaps(RandGenBytes<ulong>, RandGenBool);
44454467
TestValueTypeNativeHashMap(original, changed);
44464468
TestValueTypeNativeHashMap(original2, changed2);
44474469
}
44484470
else if (keyType == typeof(Vector2))
44494471
{
4450-
(var original, var original2, var changed, var changed2) = GetMaps((rand) => new Vector2((float)rand.NextDouble(), (float)rand.NextDouble()), RandGenBytes<bool>);
4472+
(var original, var original2, var changed, var changed2) = GetMaps((rand) => new Vector2((float)rand.NextDouble(), (float)rand.NextDouble()), RandGenBool);
44514473
TestValueTypeNativeHashMap(original, changed);
44524474
TestValueTypeNativeHashMap(original2, changed2);
44534475

44544476
}
44554477
else if (keyType == typeof(HashMapKeyStruct))
44564478
{
4457-
(var original, var original2, var changed, var changed2) = GetMaps(RandGenBytes<HashMapKeyStruct>, RandGenBytes<bool>);
4479+
(var original, var original2, var changed, var changed2) = GetMaps(RandGenBytes<HashMapKeyStruct>, RandGenBool);
44584480
TestValueTypeNativeHashMap(original, changed);
44594481
TestValueTypeNativeHashMap(original2, changed2);
44604482
}

0 commit comments

Comments
 (0)