using Microsoft.VisualStudio.TestTools.UnitTesting;
using Sandbox.Bind;
namespace TestBind;
///
/// Not real tests, just indicative of relative performance
///
[TestClass]
public class Performance
{
const int Iterations = 1000000;
public string One { get; set; }
public string Two { get; set; }
[TestMethod]
public void Create_Name()
{
var bind = new BindSystem( "UnitTest" );
for ( int i = 0; i < Iterations; i++ )
{
var source = PropertyProxy.Create( this, "One" );
}
}
[TestMethod]
public void Create_Method()
{
var bind = new BindSystem( "UnitTest" );
for ( int i = 0; i < Iterations; i++ )
{
var source = new MethodProxy( () => One, x => One = x );
}
}
[TestMethod]
public void ValueRead_Name()
{
var bind = new BindSystem( "UnitTest" );
var source = PropertyProxy.Create( this, "One" );
for ( int i = 0; i < Iterations; i++ )
{
var val = source.Value;
}
}
[TestMethod]
public void ValueRead_Method()
{
var bind = new BindSystem( "UnitTest" );
var source = new MethodProxy( () => One, x => One = x );
for ( int i = 0; i < Iterations; i++ )
{
var val = source.Value;
}
}
[TestMethod]
public void ValueWrite_Name()
{
var bind = new BindSystem( "UnitTest" );
var source = PropertyProxy.Create( this, "One" );
for ( int i = 0; i < Iterations; i++ )
{
source.Value = "Poops";
}
}
[TestMethod]
public void ValueWrite_Method()
{
var bind = new BindSystem( "UnitTest" );
var source = new MethodProxy( () => One, x => One = x );
for ( int i = 0; i < Iterations; i++ )
{
source.Value = "Poops";
}
}
[TestMethod]
public void Link_TwoWay()
{
var bind = new Sandbox.Bind.BindSystem( "test" );
for ( int i = 0; i < 1000; i++ )
{
bind.Build.Set( this, "One" ).From( this, "Two" );
}
for ( int i = 0; i < 1000; i++ )
{
bind.Tick();
}
}
[TestMethod]
public void Link_TwoWay_WithThrottling()
{
var bind = new Sandbox.Bind.BindSystem( "test" );
bind.ThrottleUpdates = true;
for ( int i = 0; i < 1000; i++ )
{
bind.Build.Set( this, "One" ).From( this, "Two" );
}
for ( int i = 0; i < 1000; i++ )
{
bind.Tick();
}
}
}