diff --git a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableTests.cs b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableTests.cs index 2d76f87a3c..6fa812d0e2 100644 --- a/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableTests.cs +++ b/com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableTests.cs @@ -1796,6 +1796,13 @@ public unsafe T RandGenBytes(System.Random rand) where T : unmanaged return t; } + // RandGenBytes yields bools whose byte is neither 0 nor 1, which IL2CPP on ARM64 can + // compare as unequal even though both print True. + public bool RandGenBool(System.Random rand) + { + return rand.Next(2) == 1; + } + public FixedString32Bytes RandGenFixedString32(System.Random rand) { var s = new FixedString32Bytes(); @@ -1863,6 +1870,11 @@ public string ArrayStr(NativeArray arr) where T : unmanaged { var idx = rand.Next(changed2.Length - 1); var item = generator(rand); + // Ensures changed2 differs from original2 when its length matches original2. + while (idx < original2.Length && EqualityComparer.Default.Equals(item, original2[idx])) + { + item = generator(rand); + } changed2[idx] = item; } @@ -1940,7 +1952,7 @@ public void WhenSerializingAndDeserializingVeryLargeValueTypeNativeArrayNetworkV } else if (testType == typeof(bool)) { - (var original, var original2, var changed, var changed2) = GetArarys((rand) => rand.Next(2) == 1); + (var original, var original2, var changed, var changed2) = GetArarys(RandGenBool); TestValueTypeNativeArray(original, changed); TestValueTypeNativeArray(original2, changed2); } @@ -2158,6 +2170,11 @@ public string DictionaryStr(Dictionary list) { var idx = rand.Next(changed2.Count - 1); var item = generator(rand); + // Ensures changed2 differs from original2 when no elements are added or removed. + while (EqualityComparer.Default.Equals(item, original2[idx])) + { + item = generator(rand); + } changed2[idx] = item; } @@ -2401,7 +2418,7 @@ public void WhenSerializingAndDeserializingVeryLargeListNetworkVariables_ValuesA } else if (testType == typeof(bool)) { - (var original, var original2, var changed, var changed2) = GetLists(RandGenBytes); + (var original, var original2, var changed, var changed2) = GetLists(RandGenBool); TestList(original, changed); TestList(original2, changed2); } @@ -2594,7 +2611,7 @@ public void WhenSerializingAndDeserializingVeryLargeHashSetNetworkVariables_Valu } else if (testType == typeof(bool)) { - (var original, var original2, var changed, var changed2) = GetHashSets(RandGenBytes); + (var original, var original2, var changed, var changed2) = GetHashSets(RandGenBool); TestHashSet(original, changed); TestHashSet(original2, changed2); } @@ -2944,27 +2961,27 @@ public void WhenSerializingAndDeserializingVeryLargeDictionaryNetworkVariables_V { if (keyType == typeof(byte)) { - (var original, var original2, var changed, var changed2) = GetDictionaries(RandGenBytes, RandGenBytes); + (var original, var original2, var changed, var changed2) = GetDictionaries(RandGenBytes, RandGenBool); TestDictionary(original, changed); TestDictionary(original2, changed2); } else if (keyType == typeof(ulong)) { - (var original, var original2, var changed, var changed2) = GetDictionaries(RandGenBytes, RandGenBytes); + (var original, var original2, var changed, var changed2) = GetDictionaries(RandGenBytes, RandGenBool); TestDictionary(original, changed); TestDictionary(original2, changed2); } else if (keyType == typeof(Vector2)) { - (var original, var original2, var changed, var changed2) = GetDictionaries((rand) => new Vector2((float)rand.NextDouble(), (float)rand.NextDouble()), RandGenBytes); + (var original, var original2, var changed, var changed2) = GetDictionaries((rand) => new Vector2((float)rand.NextDouble(), (float)rand.NextDouble()), RandGenBool); TestDictionary(original, changed); TestDictionary(original2, changed2); } else if (keyType == typeof(HashMapKeyClass)) { - (var original, var original2, var changed, var changed2) = GetDictionaries((rand) => new HashMapKeyClass { Data = RandGenBytes(rand) }, RandGenBytes); + (var original, var original2, var changed, var changed2) = GetDictionaries((rand) => new HashMapKeyClass { Data = RandGenBytes(rand) }, RandGenBool); TestDictionary(original, changed); TestDictionary(original2, changed2); } @@ -3656,6 +3673,11 @@ public string NativeHashMapStr(NativeHashMap list) { var idx = rand.Next(changed2.Length - 1); var item = generator(rand); + // Ensures changed2 differs from original2 when no elements are added or removed. + while (EqualityComparer.Default.Equals(item, original2[idx])) + { + item = generator(rand); + } changed2[idx] = item; } @@ -3899,7 +3921,7 @@ public void WhenSerializingAndDeserializingVeryLargeValueTypeNativeListNetworkVa } else if (testType == typeof(bool)) { - (var original, var original2, var changed, var changed2) = GetNativeLists(RandGenBytes); + (var original, var original2, var changed, var changed2) = GetNativeLists(RandGenBool); TestValueTypeNativeList(original, changed); TestValueTypeNativeList(original2, changed2); } @@ -4088,7 +4110,7 @@ public void WhenSerializingAndDeserializingVeryLargeValueTypeNativeHashSetNetwor } else if (testType == typeof(bool)) { - (var original, var original2, var changed, var changed2) = GetNativeHashSets(RandGenBytes); + (var original, var original2, var changed, var changed2) = GetNativeHashSets(RandGenBool); TestValueTypeNativeHashSet(original, changed); TestValueTypeNativeHashSet(original2, changed2); } @@ -4434,27 +4456,27 @@ public void WhenSerializingAndDeserializingVeryLargeValueTypeNativeHashMapNetwor { if (keyType == typeof(byte)) { - (var original, var original2, var changed, var changed2) = GetMaps(RandGenBytes, RandGenBytes); + (var original, var original2, var changed, var changed2) = GetMaps(RandGenBytes, RandGenBool); TestValueTypeNativeHashMap(original, changed); TestValueTypeNativeHashMap(original2, changed2); } else if (keyType == typeof(ulong)) { - (var original, var original2, var changed, var changed2) = GetMaps(RandGenBytes, RandGenBytes); + (var original, var original2, var changed, var changed2) = GetMaps(RandGenBytes, RandGenBool); TestValueTypeNativeHashMap(original, changed); TestValueTypeNativeHashMap(original2, changed2); } else if (keyType == typeof(Vector2)) { - (var original, var original2, var changed, var changed2) = GetMaps((rand) => new Vector2((float)rand.NextDouble(), (float)rand.NextDouble()), RandGenBytes); + (var original, var original2, var changed, var changed2) = GetMaps((rand) => new Vector2((float)rand.NextDouble(), (float)rand.NextDouble()), RandGenBool); TestValueTypeNativeHashMap(original, changed); TestValueTypeNativeHashMap(original2, changed2); } else if (keyType == typeof(HashMapKeyStruct)) { - (var original, var original2, var changed, var changed2) = GetMaps(RandGenBytes, RandGenBytes); + (var original, var original2, var changed, var changed2) = GetMaps(RandGenBytes, RandGenBool); TestValueTypeNativeHashMap(original, changed); TestValueTypeNativeHashMap(original2, changed2); }