using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Azimuth.UnitTests { public class KahanAccumulatorTests : UnitTestSharp.TestFixture { RobustAccumulator accumulator; public override void TestSetup() { accumulator = new RobustAccumulator(); } public void Basic() { accumulator.Add(1); accumulator.Add(2); accumulator.Add(3); accumulator.Add(4); Check(Scalar.FuzzyEquality(10, accumulator.ComputedSum, 1e-30)); } public void CancellationError_Scalars() { Scalar sum = 0; sum += 1e-20; sum += 1; sum += -1; CheckEqual(0, sum.Value); } public void CancellationError() { accumulator.Add(1e-20); accumulator.Add(1); accumulator.Add(-1); Check(Scalar.FuzzyEquality(1e-20, accumulator.ComputedSum, 1e-40)); } public void List() { var list = new Scalar[] { 1e-20, 1, -1 }; accumulator.AddList(list); Check(Scalar.FuzzyEquality(1e-20, accumulator.ComputedSum, 1e-40)); } } }