Function registry fix.

This commit is contained in:
Jordan Wages 2025-08-20 05:45:22 -05:00
commit afb7a65a66
9 changed files with 74 additions and 96 deletions

View file

@ -1,105 +1,24 @@
using csmic;
using csmic.stdlib;
using NUnit.Framework;
using stdlib;
using stdlib.functions;
using System.Globalization;
using System.Reflection.Metadata;
namespace tests;
public class StdlibFunctionsTests
{
private static FunctionArgument NumArg(decimal d) => new FunctionArgument("value", new FunctionValue(FunctionValueType.Numeric, d));
private InputInterpreter _interp = null!;
[Test]
public void AbsoluteValue_Positive_ReturnsSame()
[SetUp]
public void Setup()
{
var fn = new AbsoluteValue();
var result = fn.Execute(NumArg(5m));
Assert.That(result.Type, Is.EqualTo(FunctionValueType.Numeric));
Assert.That(result.Value, Is.EqualTo(5m));
}
[Test]
public void AbsoluteValue_Negative_ReturnsPositive()
{
var fn = new AbsoluteValue();
var result = fn.Execute(NumArg(-12.5m));
Assert.That(result.Type, Is.EqualTo(FunctionValueType.Numeric));
Assert.That(result.Value, Is.EqualTo(12.5m));
}
[Test]
public void AbsoluteValue_Zero_ReturnsZero()
{
var fn = new AbsoluteValue();
var result = fn.Execute(NumArg(0m));
Assert.That(result.Type, Is.EqualTo(FunctionValueType.Numeric));
Assert.That(result.Value, Is.EqualTo(0m));
}
[Test]
public void AbsoluteValue_InvalidArgType_ReturnsNone()
{
var fn = new AbsoluteValue();
var badArg = new FunctionArgument("value", FunctionValue.STRING);
var result = fn.Execute(badArg);
Assert.That(result.Type, Is.EqualTo(FunctionValueType.None));
Assert.That(result.Value, Is.Null);
}
[Test]
public void AbsoluteValue_WrongArgCount_ReturnsNone()
{
var fn = new AbsoluteValue();
var result0 = fn.Execute();
var result2 = fn.Execute(NumArg(1m), NumArg(2m));
Assert.That(result0.Type, Is.EqualTo(FunctionValueType.None));
Assert.That(result2.Type, Is.EqualTo(FunctionValueType.None));
}
[Test]
public void Sign_Negative_ReturnsNegativeOne()
{
var fn = new Sign();
var result = fn.Execute(NumArg(-1m));
Assert.That(result.Type, Is.EqualTo(FunctionValueType.Numeric));
Assert.That(result.Value, Is.EqualTo(Sign.NEGATIVE));
}
[Test]
public void Sign_Zero_ReturnsPositiveOne()
{
var fn = new Sign();
var result = fn.Execute(NumArg(0m));
Assert.That(result.Type, Is.EqualTo(FunctionValueType.Numeric));
Assert.That(result.Value, Is.EqualTo(Sign.POSITIVE));
}
[Test]
public void Sign_Positive_ReturnsPositiveOne()
{
var fn = new Sign();
var result = fn.Execute(NumArg(99.99m));
Assert.That(result.Type, Is.EqualTo(FunctionValueType.Numeric));
Assert.That(result.Value, Is.EqualTo(Sign.POSITIVE));
}
[Test]
public void Sign_InvalidArgType_ReturnsNone()
{
var fn = new Sign();
var badArg = new FunctionArgument("value", FunctionValue.STRING);
var result = fn.Execute(badArg);
Assert.That(result.Type, Is.EqualTo(FunctionValueType.None));
Assert.That(result.Value, Is.Null);
}
[Test]
public void Sign_WrongArgCount_ReturnsNone()
{
var fn = new Sign();
var result0 = fn.Execute();
var result2 = fn.Execute(NumArg(1m), NumArg(2m));
Assert.That(result0.Type, Is.EqualTo(FunctionValueType.None));
Assert.That(result2.Type, Is.EqualTo(FunctionValueType.None));
CultureInfo.CurrentCulture = CultureInfo.InvariantCulture;
_interp = new InputInterpreter();
Constants.Initialize(_interp);
Functions.Initialize(_interp); ;
}
}