Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -1796,6 +1796,13 @@ public unsafe T RandGenBytes<T>(System.Random rand) where T : unmanaged
return t;
}

// RandGenBytes<bool> 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();
Expand Down Expand Up @@ -1940,7 +1947,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);
}
Expand Down Expand Up @@ -2401,7 +2408,7 @@ public void WhenSerializingAndDeserializingVeryLargeListNetworkVariables_ValuesA
}
else if (testType == typeof(bool))
{
(var original, var original2, var changed, var changed2) = GetLists(RandGenBytes<bool>);
(var original, var original2, var changed, var changed2) = GetLists(RandGenBool);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1

The boolean list tests can now fail intermittently even when serialization is correct. GetLists allows changed2Adds == 0 and overwrites randomly selected positions with freshly generated booleans. Those overwrites can all preserve the existing values, leaving original2 and changed2 equal. TestList then unconditionally calls AssertListsDoNotMatch after assigning changedValue. GetNativeLists and TestValueTypeNativeList have the same issue. Guarantee that the final changed2 differs from original2 in both list generators.

🤖 Helpful? 👍/👎

TestList(original, changed);
TestList(original2, changed2);
}
Expand Down Expand Up @@ -2594,7 +2601,7 @@ public void WhenSerializingAndDeserializingVeryLargeHashSetNetworkVariables_Valu
}
else if (testType == typeof(bool))
{
(var original, var original2, var changed, var changed2) = GetHashSets(RandGenBytes<bool>);
(var original, var original2, var changed, var changed2) = GetHashSets(RandGenBool);
TestHashSet(original, changed);
TestHashSet(original2, changed2);
}
Expand Down Expand Up @@ -2944,27 +2951,27 @@ public void WhenSerializingAndDeserializingVeryLargeDictionaryNetworkVariables_V
{
if (keyType == typeof(byte))
{
(var original, var original2, var changed, var changed2) = GetDictionaries(RandGenBytes<byte>, RandGenBytes<bool>);
(var original, var original2, var changed, var changed2) = GetDictionaries(RandGenBytes<byte>, RandGenBool);
TestDictionary(original, changed);
TestDictionary(original2, changed2);

}
else if (keyType == typeof(ulong))
{
(var original, var original2, var changed, var changed2) = GetDictionaries(RandGenBytes<ulong>, RandGenBytes<bool>);
(var original, var original2, var changed, var changed2) = GetDictionaries(RandGenBytes<ulong>, 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<bool>);
(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<HashMapKeyStruct>(rand) }, RandGenBytes<bool>);
(var original, var original2, var changed, var changed2) = GetDictionaries((rand) => new HashMapKeyClass { Data = RandGenBytes<HashMapKeyStruct>(rand) }, RandGenBool);
TestDictionary(original, changed);
TestDictionary(original2, changed2);
}
Expand Down Expand Up @@ -3899,7 +3906,7 @@ public void WhenSerializingAndDeserializingVeryLargeValueTypeNativeListNetworkVa
}
else if (testType == typeof(bool))
{
(var original, var original2, var changed, var changed2) = GetNativeLists(RandGenBytes<bool>);
(var original, var original2, var changed, var changed2) = GetNativeLists(RandGenBool);
TestValueTypeNativeList(original, changed);
TestValueTypeNativeList(original2, changed2);
}
Expand Down Expand Up @@ -4088,7 +4095,7 @@ public void WhenSerializingAndDeserializingVeryLargeValueTypeNativeHashSetNetwor
}
else if (testType == typeof(bool))
{
(var original, var original2, var changed, var changed2) = GetNativeHashSets(RandGenBytes<bool>);
(var original, var original2, var changed, var changed2) = GetNativeHashSets(RandGenBool);
TestValueTypeNativeHashSet(original, changed);
TestValueTypeNativeHashSet(original2, changed2);
}
Expand Down Expand Up @@ -4434,27 +4441,27 @@ public void WhenSerializingAndDeserializingVeryLargeValueTypeNativeHashMapNetwor
{
if (keyType == typeof(byte))
{
(var original, var original2, var changed, var changed2) = GetMaps(RandGenBytes<byte>, RandGenBytes<bool>);
(var original, var original2, var changed, var changed2) = GetMaps(RandGenBytes<byte>, RandGenBool);
TestValueTypeNativeHashMap(original, changed);
TestValueTypeNativeHashMap(original2, changed2);

}
else if (keyType == typeof(ulong))
{
(var original, var original2, var changed, var changed2) = GetMaps(RandGenBytes<ulong>, RandGenBytes<bool>);
(var original, var original2, var changed, var changed2) = GetMaps(RandGenBytes<ulong>, 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<bool>);
(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<HashMapKeyStruct>, RandGenBytes<bool>);
(var original, var original2, var changed, var changed2) = GetMaps(RandGenBytes<HashMapKeyStruct>, RandGenBool);
TestValueTypeNativeHashMap(original, changed);
TestValueTypeNativeHashMap(original2, changed2);
}
Expand Down
Loading