mirror of
https://github.com/Facepunch/sbox-public.git
synced 2026-07-31 07:48:52 -04:00
* Move all unit tests to Engine/Tests * Fix Margin.EdgeSubtract * Fix Capsule.Contains * EnvironmentVariables.Remove if it's null * Fixed ray trace never returning startedsolid * Fix HistoryList.Navigate on empty list * Fix GameObject.WorldPosition accepting NaNs * Fix flex: initial expanding to the wrong grow/shrink * Translation.TryConvert shouldn't throw on invalid enum strings * Skip sound file tests on machines with no audio device
138 lines
4.1 KiB
C#
138 lines
4.1 KiB
C#
namespace JsonTests;
|
|
|
|
[TestClass]
|
|
public class SerializerTest
|
|
{
|
|
static void RoundTripTest<T>( T obj )
|
|
{
|
|
var json = Json.Serialize( obj );
|
|
var obj_from = Json.Deserialize<T>( json );
|
|
|
|
Assert.AreEqual( obj, obj_from );
|
|
}
|
|
|
|
[TestMethod]
|
|
public void Vector3Serialize()
|
|
{
|
|
RoundTripTest( new Vector3( 0, 0, 0 ) );
|
|
RoundTripTest( new Vector3( 1, 2, 3 ) );
|
|
RoundTripTest( new Vector3( -1, 0, 0 ) );
|
|
RoundTripTest( new Vector3( -10, -10, -10 ) );
|
|
RoundTripTest( new Vector3( 10030.12f, 1000.543f, 1340.1234f ) );
|
|
|
|
// Fuzz with a fixed seed to catch precision loss across a wide range of float values
|
|
var rng = new System.Random( 42 );
|
|
for ( var i = 0; i < 1000; i++ )
|
|
{
|
|
var x = (float)(rng.NextDouble() * 20000.0 - 10000.0);
|
|
var y = (float)(rng.NextDouble() * 20000.0 - 10000.0);
|
|
var z = (float)(rng.NextDouble() * 20000.0 - 10000.0);
|
|
RoundTripTest( new Vector3( x, y, z ) );
|
|
}
|
|
}
|
|
|
|
[TestMethod]
|
|
public void Vector3IntSerialize()
|
|
{
|
|
RoundTripTest( new Vector3Int( 0, 0, 0 ) );
|
|
RoundTripTest( new Vector3Int( 1, 2, 3 ) );
|
|
RoundTripTest( new Vector3Int( -1, 0, 0 ) );
|
|
RoundTripTest( new Vector3Int( -10, -10, -10 ) );
|
|
RoundTripTest( new Vector3Int( 0, -1, 0 ) );
|
|
|
|
// Fuzz with a fixed seed for broad integer coverage
|
|
var rng = new System.Random( 42 );
|
|
for ( var i = 0; i < 1000; i++ )
|
|
{
|
|
RoundTripTest( new Vector3Int( rng.Next( -10000, 10000 ), rng.Next( -10000, 10000 ), rng.Next( -10000, 10000 ) ) );
|
|
}
|
|
}
|
|
|
|
[TestMethod]
|
|
public void AngleSerialize()
|
|
{
|
|
RoundTripTest( new Angles( 0, 0, 0 ) );
|
|
RoundTripTest( new Angles( 180, 12, 45 ) );
|
|
|
|
var rng = new System.Random( 42 );
|
|
for ( var i = 0; i < 1000; i++ )
|
|
RoundTripTest( new Angles( (float)(rng.NextDouble() * 360 - 180), (float)(rng.NextDouble() * 360 - 180), (float)(rng.NextDouble() * 360 - 180) ) );
|
|
}
|
|
|
|
[TestMethod]
|
|
public void Vector2Serialize()
|
|
{
|
|
RoundTripTest( new Vector2( 0, 0 ) );
|
|
RoundTripTest( new Vector2( 180.3f, 12.234f ) );
|
|
RoundTripTest( new Vector2( -180.3f, 12.234f ) );
|
|
RoundTripTest( new Vector2( -180.3f, -12.234f ) );
|
|
RoundTripTest( new Vector2( -134534680.553f, -13453456.2434f ) );
|
|
|
|
var rng = new System.Random( 42 );
|
|
for ( var i = 0; i < 1000; i++ )
|
|
RoundTripTest( new Vector2( (float)(rng.NextDouble() * 20000 - 10000), (float)(rng.NextDouble() * 20000 - 10000) ) );
|
|
}
|
|
|
|
[TestMethod]
|
|
public void Vector2IntSerialize()
|
|
{
|
|
RoundTripTest( new Vector2Int( 0, 0 ) );
|
|
RoundTripTest( new Vector2Int( 1, 2 ) );
|
|
RoundTripTest( new Vector2Int( -1, 0 ) );
|
|
RoundTripTest( new Vector2Int( -10, -10 ) );
|
|
RoundTripTest( new Vector2Int( 0, -1 ) );
|
|
|
|
var rng = new System.Random( 42 );
|
|
for ( var i = 0; i < 1000; i++ )
|
|
RoundTripTest( new Vector2Int( rng.Next( -10000, 10000 ), rng.Next( -10000, 10000 ) ) );
|
|
}
|
|
|
|
[TestMethod]
|
|
public void RotationSerialize()
|
|
{
|
|
RoundTripTest( Rotation.FromAxis( Vector3.Up, 45 ) );
|
|
RoundTripTest( Rotation.FromAxis( Vector3.Up, -45 ) );
|
|
RoundTripTest( Rotation.FromAxis( Vector3.Up + Vector3.Right, -45 ) );
|
|
|
|
var rng = new System.Random( 42 );
|
|
for ( var i = 0; i < 1000; i++ )
|
|
RoundTripTest( Rotation.FromAxis( new Vector3( (float)(rng.NextDouble() * 2 - 1), (float)(rng.NextDouble() * 2 - 1), (float)(rng.NextDouble() * 2 - 1) ), (float)(rng.NextDouble() * 360) ) );
|
|
}
|
|
|
|
[TestMethod]
|
|
public void SplinePointSerialize()
|
|
{
|
|
// Test with default values
|
|
RoundTripTest( new Spline.Point
|
|
{
|
|
Position = new Vector3( 0, 0, 0 )
|
|
// Other fields are defaults
|
|
} );
|
|
|
|
// Test with all fields set
|
|
RoundTripTest( new Spline.Point
|
|
{
|
|
Position = new Vector3( 1, 2, 3 ),
|
|
In = new Vector3( 0.1f, 0.2f, 0.3f ),
|
|
Out = new Vector3( 0.4f, 0.5f, 0.6f ),
|
|
Mode = Spline.HandleMode.Mirrored,
|
|
Roll = 45f,
|
|
Scale = new Vector3( 1.5f, 2f, 2f ),
|
|
Up = new Vector3( 0, 1, 0 )
|
|
} );
|
|
|
|
// Test with some fields missing (testing defaults on deserialization)
|
|
RoundTripTest( new Spline.Point
|
|
{
|
|
Position = new Vector3( -1, -2, -3 ),
|
|
// InPositionRelative and OutPositionRelative are defaults
|
|
Mode = Spline.HandleMode.Linear,
|
|
// Roll is default
|
|
Scale = new Vector3( 0.5f, 0.5f, 0.5f ),
|
|
// UpVector is default
|
|
} );
|
|
}
|
|
|
|
}
|
|
|