Unit tests for CubicSpline class. More...
Public Member Functions | |
| void | SplineExceptionOnNoPointsAdded () |
| Test exception when trying to interpolate with no points added. | |
| void | SplineExceptionOnOnlyOnePointAdded () |
| Test exception when trying to interpolate with only one point added. | |
| void | SplineExceptionInvalidDimension () |
| Test exception when trying to create spline with wrong dimension. | |
| void | SplineExceptionAddingWithDimensionMismatch () |
| Test exception when trying to add points with the wrong dimension. | |
| void | SplineExceptionOnOnlyTwoPointsAdded () |
| Test exception when trying to interpolate with only two points added. | |
| void | SplineExceptionOnOnlyThreePointsAdded () |
| Test exception when trying to interpolate with only three points added. | |
| void | SplineInterpolateFourPointLine () |
| Interpolate between 4 points forming a straight line. | |
| void | SplineRejectDuplicatePointsWhenAdding () |
| Validate that adding duplicate x coordinates will reject the data. | |
| void | SplineCanClearDataArrayThenAddAndInterpolate () |
| Validate that the data array can be cleared. | |
| void | SplineInterpolateFourPointShape () |
| Interpolate between 4 points forming Z shape. | |
| void | SplineInterpolateFourPointShape2D () |
| Interpolate between 4 points forming Z shape in two dimensions. | |
| void | SplineInterpolatePastEdgeOfFourPointShape () |
| Interpolate left and right of the 4 points forming a Z shape. | |
| void | SplineInterpolateSineWave () |
| Interpolate points along a sine wave approximated with 12 points. | |
Properties | |
| TestContext | TestContext [get, set] |
| Gets or sets the test context which provides information about and functionality for the current test run. /summary>. | |
Unit tests for CubicSpline class.
Definition at line 12 of file UnitTestSpline.cs.
| void Tests.UnitTestSpline.SplineCanClearDataArrayThenAddAndInterpolate | ( | ) |
Validate that the data array can be cleared.
Definition at line 192 of file UnitTestSpline.cs.
00193 { 00194 double[,] data = {{0.0, 0.0}, 00195 {1.0, 1.0}, 00196 {2.0, 2.0}, 00197 {3.0, 3.0}, 00198 }; 00199 00200 CubicSpline spline = new CubicSpline(); 00201 00202 // several tries 00203 for (int t = 0; t < 3; t++) 00204 { 00205 for (int i = 0; i < 4; i++) 00206 { 00207 bool addResult = spline.AddDataPoint(data[i, 0], new double[] { data[i, 1] }); 00208 Assert.IsTrue(addResult); 00209 } 00210 00211 Assert.AreEqual(4, spline.Count); 00212 Assert.IsTrue(spline.CanInterpolate); 00213 00214 // test interpolator 00215 Random random = new Random(); 00216 for (int j = 0; j < 10; j++) 00217 { 00218 double x = random.NextDouble(); 00219 double[] y = spline.Interpolate(x); 00220 Assert.AreEqual(x, y[0]); 00221 } 00222 00223 // test clear 00224 spline.Clear(); 00225 Assert.AreEqual(0, spline.Count); 00226 Assert.IsFalse(spline.CanInterpolate); 00227 } 00228 }
| void Tests.UnitTestSpline.SplineExceptionAddingWithDimensionMismatch | ( | ) |
Test exception when trying to add points with the wrong dimension.
Definition at line 80 of file UnitTestSpline.cs.
| void Tests.UnitTestSpline.SplineExceptionInvalidDimension | ( | ) |
Test exception when trying to create spline with wrong dimension.
Definition at line 70 of file UnitTestSpline.cs.
| void Tests.UnitTestSpline.SplineExceptionOnNoPointsAdded | ( | ) |
Test exception when trying to interpolate with no points added.
Definition at line 44 of file UnitTestSpline.cs.
| void Tests.UnitTestSpline.SplineExceptionOnOnlyOnePointAdded | ( | ) |
Test exception when trying to interpolate with only one point added.
Definition at line 56 of file UnitTestSpline.cs.
| void Tests.UnitTestSpline.SplineExceptionOnOnlyThreePointsAdded | ( | ) |
Test exception when trying to interpolate with only three points added.
Definition at line 113 of file UnitTestSpline.cs.
00114 { 00115 double[,] data = {{1.0, 1.0}, 00116 {2.0, 2.0}, 00117 {3.0, 1.0}}; 00118 00119 CubicSpline spline = new CubicSpline(); 00120 for (int i = 0; i < 3; i++) 00121 { 00122 spline.AddDataPoint(data[i, 0], new double[] { data[i, 1] }); 00123 } 00124 00125 Assert.AreEqual(3, spline.Count); 00126 Assert.IsFalse(spline.CanInterpolate); 00127 double[] y = spline.Interpolate(1.5); 00128 }
| void Tests.UnitTestSpline.SplineExceptionOnOnlyTwoPointsAdded | ( | ) |
Test exception when trying to interpolate with only two points added.
Definition at line 92 of file UnitTestSpline.cs.
00093 { 00094 double[,] data = {{1.0, 1.0}, 00095 {2.0, 2.0}}; 00096 00097 CubicSpline spline = new CubicSpline(); 00098 for (int i = 0; i < 2; i++) 00099 { 00100 spline.AddDataPoint(data[i, 0], new double[] { data[i, 1] }); 00101 } 00102 00103 Assert.AreEqual(2, spline.Count); 00104 Assert.IsFalse(spline.CanInterpolate); 00105 double[] y = spline.Interpolate(1.5); 00106 }
| void Tests.UnitTestSpline.SplineInterpolateFourPointLine | ( | ) |
Interpolate between 4 points forming a straight line.
Definition at line 134 of file UnitTestSpline.cs.
00135 { 00136 double[,] data = {{0.0, 0.0}, 00137 {1.0, 1.0}, 00138 {2.0, 2.0}, 00139 {3.0, 3.0}}; 00140 00141 CubicSpline spline = new CubicSpline(); 00142 for (int i = 0; i < 4; i++) 00143 { 00144 spline.AddDataPoint(data[i, 0], new double[] { data[i, 1] }); 00145 } 00146 00147 Assert.AreEqual(4, spline.Count); 00148 Assert.IsTrue(spline.CanInterpolate); 00149 00150 for (int i = 0; i <= 30; i++) 00151 { 00152 double x = 0.1 * (double)i; 00153 double[] y = spline.Interpolate(x); 00154 Assert.AreEqual(x, y[0]); 00155 } 00156 }
| void Tests.UnitTestSpline.SplineInterpolateFourPointShape | ( | ) |
Interpolate between 4 points forming Z shape.
Definition at line 234 of file UnitTestSpline.cs.
00235 { 00236 double[,] data = {{1.0, 1.0}, 00237 {2.0, 2.0}, 00238 {3.0, 1.0}, 00239 {4.0, 3.0}}; 00240 00241 CubicSpline spline = new CubicSpline(); 00242 for (int i = 0; i < 4; i++) 00243 { 00244 spline.AddDataPoint(data[i, 0], new double[] { data[i, 1] }); 00245 } 00246 00247 Assert.AreEqual(4, spline.Count); 00248 Assert.IsTrue(spline.CanInterpolate); 00249 00250 double[] testinput = { 1.5, 2.5, 3.5, 3.9 }; 00251 double[] testoutput = { 1.6, 1.6, 2.0, 2.85 }; 00252 00253 for (int i=0; i<testinput.Length; i++) 00254 { 00255 double[] y = spline.Interpolate(testinput[i]); 00256 Assert.AreEqual(testoutput[i], y[0], 0.1); 00257 } 00258 }
| void Tests.UnitTestSpline.SplineInterpolateFourPointShape2D | ( | ) |
Interpolate between 4 points forming Z shape in two dimensions.
Definition at line 264 of file UnitTestSpline.cs.
00265 { 00266 double[,] data = {{1.0, 1.0, 2.0}, 00267 {2.0, 2.0, 4.0}, 00268 {3.0, 1.0, 2.0}, 00269 {4.0, 3.0, 6.0}}; 00270 00271 CubicSpline spline = new CubicSpline(2); 00272 Assert.AreEqual(2, spline.Dimensions); 00273 for (int i = 0; i < 4; i++) 00274 { 00275 spline.AddDataPoint(data[i, 0], new double[] { data[i, 1], data[i, 2] }); 00276 } 00277 00278 Assert.AreEqual(4, spline.Count); 00279 Assert.IsTrue(spline.CanInterpolate); 00280 00281 double[] testinput = { 1.5, 2.5, 3.5, 3.9 }; 00282 double[] testoutput = { 1.6, 1.6, 2.0, 2.85 }; 00283 00284 for (int i = 0; i < testinput.Length; i++) 00285 { 00286 double[] y = spline.Interpolate(testinput[i]); 00287 Assert.AreEqual(testoutput[i], y[0], 0.1); 00288 Assert.AreEqual(2 * testoutput[i], y[1], 0.2); 00289 } 00290 }
| void Tests.UnitTestSpline.SplineInterpolatePastEdgeOfFourPointShape | ( | ) |
Interpolate left and right of the 4 points forming a Z shape.
Definition at line 296 of file UnitTestSpline.cs.
00297 { 00298 double[,] data = {{1.0, 1.0}, 00299 {2.0, 2.0}, 00300 {3.0, 1.0}, 00301 {4.0, 2.0}}; 00302 00303 CubicSpline spline = new CubicSpline(); 00304 for (int i = 0; i < 4; i++) 00305 { 00306 spline.AddDataPoint(data[i, 0], new double[] { data[i, 1] }); 00307 } 00308 00309 Assert.AreEqual(4, spline.Count); 00310 Assert.IsTrue(spline.CanInterpolate); 00311 00312 double[] testinput = { 0.8, 0.9, 4.1, 4.2 }; 00313 double[] testoutput = { 0.8, 0.9, 2.1, 2.2 }; 00314 00315 for (int i = 0; i < testinput.Length; i++) 00316 { 00317 double[] y = spline.Interpolate(testinput[i]); 00318 Assert.AreEqual(testoutput[i], y[0], 0.1); 00319 } 00320 }
| void Tests.UnitTestSpline.SplineInterpolateSineWave | ( | ) |
Interpolate points along a sine wave approximated with 12 points.
Definition at line 326 of file UnitTestSpline.cs.
00327 { 00328 00329 int N = 12; 00330 double[] x = new double[N]; 00331 double[] y = new double[N]; 00332 double xx = Math.PI; 00333 double step = 4 * Math.PI / (N - 1); 00334 00335 for (int i = 0; i < N; ++i, xx += step) 00336 { 00337 double yy = Math.Sin(2 * xx) / xx; 00338 x[i] = xx; 00339 y[i] = yy; 00340 } 00341 00342 CubicSpline spline = new CubicSpline(); 00343 for (int i = 0; i < N; i++) 00344 { 00345 spline.AddDataPoint(x[i], new double[] { y[i] }); 00346 } 00347 00348 Assert.AreEqual(N, spline.Count); 00349 Assert.IsTrue(spline.CanInterpolate); 00350 00351 N = 30; 00352 xx = Math.PI; 00353 step = 3 * Math.PI / (N - 1); 00354 for (int i = 0; i < N; ++i, xx += step) 00355 { 00356 double yExpected = Math.Sin(2 * xx) / xx; 00357 double[] yCalculated = spline.Interpolate(xx); 00358 Assert.AreEqual(yExpected, yCalculated[0], 0.1); 00359 } 00360 }
| void Tests.UnitTestSpline.SplineRejectDuplicatePointsWhenAdding | ( | ) |
Validate that adding duplicate x coordinates will reject the data.
Definition at line 162 of file UnitTestSpline.cs.
00163 { 00164 double[,] data = {{0.0, 0.0}, 00165 {1.0, 1.0}, 00166 {2.0, 2.0}, 00167 {3.0, 3.0}, 00168 }; 00169 00170 CubicSpline spline = new CubicSpline(); 00171 for (int i = 0; i < 4; i++) 00172 { 00173 bool addResult = spline.AddDataPoint(data[i, 0], new double[] { data[i, 1] }); 00174 Assert.IsTrue(addResult); 00175 } 00176 00177 // try to add again 00178 for (int i = 0; i < 4; i++) 00179 { 00180 bool addResult = spline.AddDataPoint(data[i, 0], new double[] { data[i, 1] }); 00181 Assert.IsFalse(addResult); 00182 } 00183 00184 Assert.AreEqual(4, spline.Count); 00185 Assert.IsTrue(spline.CanInterpolate); 00186 }
1.6.2