Implement number comparison operators

This commit is contained in:
2018-12-03 16:05:14 +01:00
parent a9f4ef1b65
commit 6ba3860e84
7 changed files with 146 additions and 2 deletions

View File

@@ -60,6 +60,7 @@ namespace Upsilon.BaseTypes.Number
return new ScriptNumberLong(-((ScriptNumberLong)n).Value);
}
#region Equality
private bool Equals(ScriptNumber other)
{
@@ -82,6 +83,40 @@ namespace Upsilon.BaseTypes.Number
#endregion
public static ScriptBoolean operator < (ScriptNumber a, ScriptNumber b)
{
if (!a.IsFloat && !b.IsFloat)
return new ScriptBoolean(((ScriptNumberLong) a).Value < ((ScriptNumberLong) b).Value);
if (a.IsFloat && b.IsFloat)
return new ScriptBoolean(((ScriptNumberDouble) a).Value < ((ScriptNumberDouble) b).Value);
if (a.IsFloat)
return new ScriptBoolean(((ScriptNumberDouble) a).Value < ((ScriptNumberLong) b).Value);
return new ScriptBoolean(((ScriptNumberLong) a).Value < ((ScriptNumberDouble) b).Value);
}
public static ScriptBoolean operator > (ScriptNumber a, ScriptNumber b)
{
if (!a.IsFloat && !b.IsFloat)
return new ScriptBoolean(((ScriptNumberLong) a).Value > ((ScriptNumberLong) b).Value);
if (a.IsFloat && b.IsFloat)
return new ScriptBoolean(((ScriptNumberDouble) a).Value > ((ScriptNumberDouble) b).Value);
if (a.IsFloat)
return new ScriptBoolean(((ScriptNumberDouble) a).Value > ((ScriptNumberLong) b).Value);
return new ScriptBoolean(((ScriptNumberLong) a).Value > ((ScriptNumberDouble) b).Value);
}
public static ScriptBoolean operator <= (ScriptNumber a, ScriptNumber b)
{
return (a < b) || a.Equals(b);
}
public static ScriptBoolean operator >= (ScriptNumber a, ScriptNumber b)
{
return !(a < b) || a.Equals(b);
}
public static explicit operator double(ScriptNumber n)
{
if (n.IsFloat)