Functions/Mathematical/RandomFunction.cs
using Expressive.Expressions;
using System;
namespace Expressive.Functions.Mathematical
{
internal class RandomFunction : FunctionBase
{
#region FunctionBase Members
public override string Name { get { return "Random"; } }
public override object Evaluate(IExpression[] parameters, Context context)
{
this.ValidateParameterCount(parameters, 2, 2);
object min = parameters[0].Evaluate(Variables);
object max = parameters[1].Evaluate(Variables);
var random = new Random(DateTime.UtcNow.Millisecond);
if (min is int && max is int)
{
return random.Next((int)min, (int)max);
}
else if (min is double || max is double)
{
var value = random.NextDouble();
var typedMin = Convert.ToDouble(min);
var scale = Convert.ToDouble(max) - typedMin;
return typedMin + (scale * value);
}
return null;
}
#endregion
}
}