Files
Lorenz Junglas 91f8fcf183 Speed up / parallelize tests (#3587)
- Added Sandbox.Test.Unit project (contains independent tests that can run in parallel) 
- Modify some slow/stress tests (e.g. instead of doing a million iterations settle for 10k).

Tests run almost twice as fast now.
2025-12-10 14:23:00 +01:00

127 lines
2.9 KiB
C#

using Sandbox.Network;
namespace Networking;
[TestClass]
public class StringTable
{
private void StringTablesMatch( Sandbox.Network.StringTable a, Sandbox.Network.StringTable b )
{
Assert.AreEqual( a.Entries.Count, b.Entries.Count );
foreach ( var e in a.Entries )
{
Assert.IsTrue( b.Entries.TryGetValue( e.Key, out var d ) );
Assert.IsTrue( d.Data.SequenceEqual( e.Value.Data ) );
}
}
[TestMethod]
public void Set()
{
Sandbox.Network.StringTable table = new( "Assembly", true );
table.Set( "TestAssembly", new byte[883712] );
Assert.AreEqual( 1, table.Entries.Count );
}
void DoUpdateExchange( Sandbox.Network.StringTable a, Sandbox.Network.StringTable b )
{
Assert.IsTrue( a.HasChanged );
var bs = ByteStream.Create( 1024 );
a.BuildUpdateMessage( ref bs );
var updateData = bs.ToArray();
bs.Dispose();
Assert.IsTrue( a.HasChanged );
a.ClearChanges();
Assert.IsFalse( a.HasChanged );
Assert.AreNotEqual( 0, updateData.Length );
var reader = ByteStream.CreateReader( updateData );
b.ReadUpdate( reader );
reader.Dispose();
}
void DoSnapshotExchange( Sandbox.Network.StringTable a, Sandbox.Network.StringTable b )
{
var bs = ByteStream.Create( 1024 );
a.BuildSnapshotMessage( ref bs );
var snapshotData = bs.ToArray();
bs.Dispose();
Assert.AreNotEqual( 0, snapshotData.Length );
var reader = ByteStream.CreateReader( snapshotData );
b.Reset();
b.ReadSnapshot( reader );
reader.Dispose();
}
[TestMethod]
public void Updates()
{
Sandbox.Network.StringTable a = new( "Assembly", true );
a.Set( "TestAssembly", new byte[883712] );
a.Set( "OtherAssembly", new byte[2345] );
Assert.AreEqual( 2, a.Entries.Count );
Sandbox.Network.StringTable b = new( "Assembly", true );
DoUpdateExchange( a, b );
Assert.AreEqual( a.Entries.Count, b.Entries.Count );
a.Remove( "TestAssembly" );
Assert.AreEqual( 1, a.Entries.Count );
DoUpdateExchange( a, b );
Assert.AreEqual( a.Entries.Count, b.Entries.Count );
a.Set( "HelloThere", new byte[2345] );
Assert.AreEqual( 2, a.Entries.Count );
DoUpdateExchange( a, b );
Assert.AreEqual( a.Entries.Count, b.Entries.Count );
}
[TestMethod]
public void EmptyEntries()
{
Sandbox.Network.StringTable a = new( "Assembly", true );
// start with an empty entry
a.Set( "TestAssembly", new byte[0] );
a.Set( "OtherAssembly", new byte[2345] );
Assert.AreEqual( 2, a.Entries.Count );
Sandbox.Network.StringTable b = new( "Assembly", true );
DoUpdateExchange( a, b );
StringTablesMatch( a, b );
// Change to empty
a.Set( "OtherAssembly", new byte[0] );
DoUpdateExchange( a, b );
StringTablesMatch( a, b );
// change to not empty
a.Set( "TestAssembly", new byte[43] );
a.Set( "OtherAssembly", new byte[56] );
DoUpdateExchange( a, b );
StringTablesMatch( a, b );
// change to empty again
a.Set( "OtherAssembly", new byte[0] );
DoSnapshotExchange( a, b );
StringTablesMatch( a, b );
}
}