Handle Binary operator overloading for UserData
This commit is contained in:
@@ -41,6 +41,21 @@ namespace UpsilonTests
|
||||
return new UserDataHelper(a.Value + b);
|
||||
}
|
||||
|
||||
public static UserDataHelper operator -(UserDataHelper a, UserDataHelper b)
|
||||
{
|
||||
return new UserDataHelper(a.Value - b.Value);
|
||||
}
|
||||
|
||||
public static UserDataHelper operator *(UserDataHelper a, UserDataHelper b)
|
||||
{
|
||||
return new UserDataHelper(a.Value * b.Value);
|
||||
}
|
||||
|
||||
public static UserDataHelper operator /(UserDataHelper a, UserDataHelper b)
|
||||
{
|
||||
return new UserDataHelper(a.Value / b.Value);
|
||||
}
|
||||
|
||||
}
|
||||
#pragma warning restore 414, 649
|
||||
|
||||
@@ -55,9 +70,80 @@ end
|
||||
";
|
||||
var script = new Script(input);
|
||||
Assert.Empty(script.Diagnostics.Messages);
|
||||
var o1 = new UserDataHelper(100);
|
||||
var o2 = new UserDataHelper(215);
|
||||
var result = script.EvaluateFunction("add", new[] {o1, o2});
|
||||
var o1 = new UserDataHelper(100);
|
||||
var o2 = new UserDataHelper(215);
|
||||
var result = script.EvaluateFunction<UserDataHelper>("add", new[] {o1, o2});
|
||||
Assert.Empty(script.Diagnostics.Messages);
|
||||
Assert.Equal(315, result.Value);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TestAdditionOverloading()
|
||||
{
|
||||
const string input = @"
|
||||
function add(o1, o2)
|
||||
return o1 + o2
|
||||
end
|
||||
";
|
||||
var script = new Script(input);
|
||||
Assert.Empty(script.Diagnostics.Messages);
|
||||
var o1 = new UserDataHelper(100);
|
||||
const double o2 = 1.5;
|
||||
var result = script.EvaluateFunction<UserDataHelper>("add", new object[] {o1, o2});
|
||||
Assert.Empty(script.Diagnostics.Messages);
|
||||
Assert.Equal(101.5, result.Value);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TestSubtraction()
|
||||
{
|
||||
const string input = @"
|
||||
function subtract(o1, o2)
|
||||
return o1 - o2
|
||||
end
|
||||
";
|
||||
var script = new Script(input);
|
||||
Assert.Empty(script.Diagnostics.Messages);
|
||||
var o1 = new UserDataHelper(100);
|
||||
var o2 = new UserDataHelper(1.5);
|
||||
var result = script.EvaluateFunction<UserDataHelper>("subtract", new object[] {o1, o2});
|
||||
Assert.Empty(script.Diagnostics.Messages);
|
||||
Assert.Equal(98.5, result.Value);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TestMultiplication()
|
||||
{
|
||||
const string input = @"
|
||||
function multiply(o1, o2)
|
||||
return o1 * o2
|
||||
end
|
||||
";
|
||||
var script = new Script(input);
|
||||
Assert.Empty(script.Diagnostics.Messages);
|
||||
var o1 = new UserDataHelper(100);
|
||||
var o2 = new UserDataHelper(4);
|
||||
var result = script.EvaluateFunction<UserDataHelper>("multiply", new object[] {o1, o2});
|
||||
Assert.Empty(script.Diagnostics.Messages);
|
||||
Assert.Equal(400, result.Value);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TestDivision()
|
||||
{
|
||||
const string input = @"
|
||||
function divide(o1, o2)
|
||||
return o1 / o2
|
||||
end
|
||||
";
|
||||
var script = new Script(input);
|
||||
Assert.Empty(script.Diagnostics.Messages);
|
||||
var o1 = new UserDataHelper(100);
|
||||
var o2 = new UserDataHelper(10);
|
||||
var result = script.EvaluateFunction<UserDataHelper>("divide", new object[] {o1, o2});
|
||||
Assert.Empty(script.Diagnostics.Messages);
|
||||
Assert.Equal(10, result.Value);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user