Initial commit

This commit is contained in:
2026-07-13 09:25:40 +07:00
parent c08ff54676
commit bccfb156d7
1938 changed files with 641646 additions and 0 deletions

View File

@@ -0,0 +1,189 @@
using CeresSharp;
using CeresSharp.Enums;
namespace CeresSharp.Test;
[TestFixture]
public class CostFunctionTests
{
[Test]
public void AutoDiffCostFunction_SimpleLinear_ShouldWork()
{
var costFunction = new AutoDiffCostFunction(
(parameters, residuals) =>
{
// Simple linear: residual = x - 1.0
residuals[0] = parameters[0][0] - 1.0;
return true;
},
numResiduals: 1,
parameterBlockSizes: new[] { 1 });
Assert.That(costFunction, Is.Not.Null);
}
[Test]
public void AutoDiffCostFunction_MultipleParameterBlocks_ShouldWork()
{
var costFunction = new AutoDiffCostFunction(
(parameters, residuals) =>
{
// residual = x[0] * y[0] - 2.0
residuals[0] = parameters[0][0] * parameters[1][0] - 2.0;
return true;
},
numResiduals: 1,
parameterBlockSizes: new[] { 1, 1 });
Assert.That(costFunction, Is.Not.Null);
}
[Test]
public void AutoDiffCostFunction_MultipleResiduals_ShouldWork()
{
var costFunction = new AutoDiffCostFunction(
(parameters, residuals) =>
{
// 2 residuals: [x - 1, x - 2]
residuals[0] = parameters[0][0] - 1.0;
residuals[1] = parameters[0][0] - 2.0;
return true;
},
numResiduals: 2,
parameterBlockSizes: new[] { 1 });
Assert.That(costFunction, Is.Not.Null);
}
[Test]
public void DynamicAutoDiffCostFunction_ShouldWork()
{
var costFunction = new DynamicAutoDiffCostFunction(
(parameters, residuals) =>
{
residuals[0] = parameters[0][0] - 1.0;
return true;
},
numResiduals: 1,
parameterBlockSizes: new[] { 1 });
Assert.That(costFunction, Is.Not.Null);
}
[Test]
public void DynamicAutoDiffCostFunction_MultipleBlocks_ShouldWork()
{
var costFunction = new DynamicAutoDiffCostFunction(
(parameters, residuals) =>
{
residuals[0] = parameters[0][0] + parameters[1][0] - 3.0;
return true;
},
numResiduals: 1,
parameterBlockSizes: new[] { 1, 2 });
Assert.That(costFunction, Is.Not.Null);
}
[Test]
public void NumericDiffCostFunction_Central_ShouldWork()
{
var costFunction = new NumericDiffCostFunction(
(parameters, residuals) =>
{
residuals[0] = parameters[0][0] * parameters[0][0] - 4.0;
return true;
},
method: NumericDiffMethod.Central,
numResiduals: 1,
parameterBlockSizes: new[] { 1 });
Assert.That(costFunction, Is.Not.Null);
}
[Test]
public void NumericDiffCostFunction_Forward_ShouldWork()
{
var costFunction = new NumericDiffCostFunction(
(parameters, residuals) =>
{
residuals[0] = parameters[0][0] - 1.0;
return true;
},
method: NumericDiffMethod.Forward,
numResiduals: 1,
parameterBlockSizes: new[] { 1 });
Assert.That(costFunction, Is.Not.Null);
}
[Test]
public void NumericDiffCostFunction_Ridders_ShouldWork()
{
var costFunction = new NumericDiffCostFunction(
(parameters, residuals) =>
{
residuals[0] = parameters[0][0] - 1.0;
return true;
},
method: NumericDiffMethod.Ridders,
numResiduals: 1,
parameterBlockSizes: new[] { 1 });
Assert.That(costFunction, Is.Not.Null);
}
[Test]
public void DynamicNumericDiffCostFunction_ShouldWork()
{
var costFunction = new DynamicNumericDiffCostFunction(
(parameters, residuals) =>
{
residuals[0] = parameters[0][0] - 1.0;
return true;
},
method: NumericDiffMethod.Central,
numResiduals: 1,
parameterBlockSizes: new[] { 1 });
Assert.That(costFunction, Is.Not.Null);
}
[Test]
public void CostFunction_WithComplexCalculation_ShouldWork()
{
var costFunction = new AutoDiffCostFunction(
(parameters, residuals) =>
{
var x = parameters[0][0];
var y = parameters[0][1];
// residual = x^2 + y^2 - 1 (circle constraint)
residuals[0] = x * x + y * y - 1.0;
return true;
},
numResiduals: 1,
parameterBlockSizes: new[] { 2 });
Assert.That(costFunction, Is.Not.Null);
}
[Test]
public void CostFunction_ReturnFalse_ShouldIndicateFailure()
{
var costFunction = new AutoDiffCostFunction(
(parameters, residuals) =>
{
// Simulate failure condition
if (parameters[0][0] < 0)
{
return false;
}
residuals[0] = parameters[0][0] - 1.0;
return true;
},
numResiduals: 1,
parameterBlockSizes: new[] { 1 });
Assert.That(costFunction, Is.Not.Null);
}
}