public void BoundingBoxTestLinearInterpolator() { WeightProviders.LinearInterpolation lwp = new WeightProviders.LinearInterpolation(); double[] grid = System.Linq.Enumerable.Range(0, 10).Select(v => (double)v).ToArray(); var bb = lwp.GetBoundingBox(grid, -1.0, -0.3); Assert.IsTrue(bb.IsSingular); bb = lwp.GetBoundingBox(grid, -1.0, 0.5); Assert.IsTrue(bb.IsSingular); bb = lwp.GetBoundingBox(grid, -1.0, 0.0); Assert.IsTrue(bb.IsSingular); bb = lwp.GetBoundingBox(grid, 0.5, 0.5); Assert.AreEqual(0, bb.first); Assert.AreEqual(1, bb.last); bb = lwp.GetBoundingBox(grid, 0.0, 0.0); Assert.AreEqual(0, bb.first); Assert.AreEqual(0, bb.last); bb = lwp.GetBoundingBox(grid, 0.0, 0.6); Assert.AreEqual(0, bb.first); Assert.AreEqual(1, bb.last); bb = lwp.GetBoundingBox(grid, 0.5, 0.6); Assert.AreEqual(0, bb.first); Assert.AreEqual(1, bb.last); bb = lwp.GetBoundingBox(grid, 0.5, 1.0); Assert.AreEqual(0, bb.first); Assert.AreEqual(1, bb.last); bb = lwp.GetBoundingBox(grid, 0.5, 1.1); Assert.AreEqual(0, bb.first); Assert.AreEqual(2, bb.last); bb = lwp.GetBoundingBox(grid, 8.5, 8.5); Assert.AreEqual(8, bb.first); Assert.AreEqual(9, bb.last); bb = lwp.GetBoundingBox(grid, 7.9, 8.5); Assert.AreEqual(7, bb.first); Assert.AreEqual(9, bb.last); bb = lwp.GetBoundingBox(grid, 8.5, 9.0); Assert.AreEqual(8, bb.first); Assert.AreEqual(9, bb.last); bb = lwp.GetBoundingBox(grid, 9.0, 9.0); Assert.AreEqual(9, bb.first); Assert.AreEqual(9, bb.last); bb = lwp.GetBoundingBox(grid, 9.0, 10.0); Assert.IsTrue(bb.IsSingular); bb = lwp.GetBoundingBox(grid, 8.5, 10.0); Assert.IsTrue(bb.IsSingular); bb = lwp.GetBoundingBox(grid, 9.1, 10.0); Assert.IsTrue(bb.IsSingular); }
public void GetWeightsTestLinearInterpolator() { double tolerance = 1e-8; WeightProviders.LinearInterpolation lwp = new WeightProviders.LinearInterpolation(); double[] grid = System.Linq.Enumerable.Range(0, 10).Select(v => (double)v).ToArray(); int start, stop; var w = lwp.GetWeights(grid, 0.5, 0.5, out start, out stop); Assert.AreEqual(2, w.Length); Assert.AreEqual(0.5, w[0]); Assert.AreEqual(0.5, w[1]); Assert.AreEqual(0, start); Assert.AreEqual(1, stop); w = lwp.GetWeights(grid, 0.0, 0.0, out start, out stop); Assert.AreEqual(1, w.Length); Assert.AreEqual(1.0, w[0]); Assert.AreEqual(0, start); Assert.AreEqual(0, stop); w = lwp.GetWeights(grid, 0.0, 0.5, out start, out stop); Assert.AreEqual(2, w.Length); Assert.AreEqual(0.75, w[0]); Assert.AreEqual(0.25, w[1]); Assert.AreEqual(0, start); Assert.AreEqual(1, stop); w = lwp.GetWeights(grid, 0.5, 0.75, out start, out stop); Assert.AreEqual(2, w.Length); Assert.AreEqual(3.0 / 8.0, w[0]); Assert.AreEqual(5.0 / 8.0, w[1]); Assert.AreEqual(0, start); Assert.AreEqual(1, stop); w = lwp.GetWeights(grid, 0.5, 1.0, out start, out stop); Assert.AreEqual(2, w.Length); Assert.AreEqual(0.25, w[0]); Assert.AreEqual(0.75, w[1]); Assert.AreEqual(0, start); Assert.AreEqual(1, stop); w = lwp.GetWeights(grid, 0.5, 1.25, out start, out stop); Assert.AreEqual(3, w.Length); Assert.AreEqual(0.125 / 0.75, w[0]); Assert.AreEqual(0.59375 / 0.75, w[1]); Assert.AreEqual(1 / 32.0 / 0.75, w[2]); Assert.AreEqual(0, start); Assert.AreEqual(2, stop); w = lwp.GetWeights(grid, 8.5, 8.5, out start, out stop); Assert.AreEqual(2, w.Length); Assert.AreEqual(0.5, w[0]); Assert.AreEqual(0.5, w[1]); Assert.AreEqual(8, start); Assert.AreEqual(9, stop); w = lwp.GetWeights(grid, 7.75, 8.5, out start, out stop); Assert.AreEqual(3, w.Length); Assert.AreEqual(1 / 32.0 / 0.75, w[0]); Assert.AreEqual(0.59375 / 0.75, w[1]); Assert.AreEqual(0.125 / 0.75, w[2]); Assert.AreEqual(7, start); Assert.AreEqual(9, stop); w = lwp.GetWeights(grid, 8.5, 9.0, out start, out stop); Assert.AreEqual(2, w.Length); Assert.AreEqual(0.25, w[0]); Assert.AreEqual(0.75, w[1]); Assert.AreEqual(8, start); Assert.AreEqual(9, stop); w = lwp.GetWeights(grid, 9.0, 9.0, out start, out stop); Assert.AreEqual(1, w.Length); Assert.AreEqual(1.0, w[0]); Assert.AreEqual(9, start); Assert.AreEqual(9, stop); grid = new double[] { 0.0, 1.0, 3.0, 4.0, 5.0 }; w = lwp.GetWeights(grid, 0.5, 4.25, out start, out stop); Assert.AreEqual(5, w.Length); Assert.AreEqual(1.0 / 8.0 / 3.75, w[0], tolerance); Assert.AreEqual(11.0 / 8.0 / 3.75, w[1], tolerance); Assert.AreEqual(3.0 / 2.0 / 3.75, w[2], tolerance); Assert.AreEqual(23.0 / 32.0 / 3.75, w[3], tolerance); Assert.AreEqual(1.0 / 32.0 / 3.75, w[4], tolerance); Assert.AreEqual(0, start); Assert.AreEqual(4, stop); //out of orange w = lwp.GetWeights(grid, 11.0, 11.0, out start, out stop); Assert.AreEqual(0, w.Length); w = lwp.GetWeights(grid, 11.0, 12.0, out start, out stop); Assert.AreEqual(0, w.Length); w = lwp.GetWeights(grid, -2.0, -1.0, out start, out stop); Assert.AreEqual(0, w.Length); w = lwp.GetWeights(grid, 5.5, 12.0, out start, out stop); Assert.AreEqual(0, w.Length); }