private static void TestPartitionOfUnity(IIsoparametricInterpolation2D interpolation)
        {
            double tolerance = 1e-10;

            NaturalPoint[] points = pointGenerators[interpolation]();
            for (int p = 0; p < points.Length; ++p)
            {
                double[] shapeFuncs = interpolation.EvaluateFunctionsAt(points[p]);
                double   sum        = 0.0;
                for (int f = 0; f < interpolation.NumFunctions; ++f)
                {
                    sum += shapeFuncs[f];
                }
                Assert.True(Utilities.AreValuesEqual(1.0, sum, tolerance));
            }
        }
        private static void TestValuesAtNodes(IIsoparametricInterpolation2D interpolation)
        {
            double tolerance = 1e-10;

            for (int n = 0; n < interpolation.NodalNaturalCoordinates.Count; ++n)
            {
                double[] shapeFuncs = interpolation.EvaluateFunctionsAt(interpolation.NodalNaturalCoordinates[n]);
                for (int f = 0; f < interpolation.NumFunctions; ++f)
                {
                    if (f == n)
                    {
                        Assert.True(Utilities.AreValuesEqual(1.0, shapeFuncs[f], tolerance));
                    }
                    else
                    {
                        Assert.True(Utilities.AreValuesEqual(0.0, shapeFuncs[f], tolerance));
                    }
                }
            }
        }