public void TransformToCoordinate_ShouldReturnFirstResult_WhenUsingFirstSuccessCompositeAdapter()
        {
            CrsTransformationAdapterComposite firstSuccessCompositeAdapter = crsTransformationAdapterCompositeFactory.CreateCrsTransformationFirstSuccess(allLeafAdapters);
            CrsCoordinate resultCoordinate = firstSuccessCompositeAdapter.TransformToCoordinate(inputCoordinateSweref99, EpsgNumber.WORLD__WGS_84__4326);

            Assert.IsNotNull(resultCoordinate);

            // The assumption below (according to the setup code in the "before" method in this JUnit class)
            // is that the first adapter in the above list allLeafAdapters will return the result outputCoordinateWgs84ForImplementation_1
            Assert.AreEqual(
                outputCoordinateWgs84ForImplementation_1.YNorthingLatitude,
                resultCoordinate.YNorthingLatitude,
                SMALL_DELTA_VALUE_FOR_COMPARISONS
                );
            Assert.AreEqual(
                outputCoordinateWgs84ForImplementation_1.XEastingLongitude,
                resultCoordinate.XEastingLongitude,
                SMALL_DELTA_VALUE_FOR_COMPARISONS
                );

            AssertCompositeResultHasLeafSubResults(
                firstSuccessCompositeAdapter,
                1 // expectedNumberOfLeafResults
                );
        }
        public void TransformToCoordinate_ShouldReturnWeightedAverageResult_WhenUsingWeightedAverageCompositeAdapter()
        {
            double[] weights    = { 1, 2, 4, 5, 9 };
            double   totWeights = 0;
            double   totLats    = 0;
            double   totLons    = 0;

            for (int i = 0; i < weights.Length; i++)
            {
                double weight = weights[i];
                totWeights += weight;
                CrsCoordinate coordinate = outputCoordinates[i];
                totLats += weight * coordinate.YNorthingLatitude;
                totLons += weight * coordinate.XEastingLongitude;
            }
            double        weightedLat             = totLats / totWeights;
            double        weightedLon             = totLons / totWeights;
            CrsCoordinate expectedWeightedAverage = CrsCoordinateFactory.CreateFromLatitudeLongitude(weightedLat, weightedLon);

            List <CrsTransformationAdapterWeight> weightedAdapters = new List <CrsTransformationAdapterWeight> {
                weightFactory.CreateFromInstance(leafAdapterImplementation_1, weights[0]),
                weightFactory.CreateFromInstance(leafAdapterImplementation_2, weights[1]),
                weightFactory.CreateFromInstance(leafAdapterImplementation_3, weights[2]),
                weightFactory.CreateFromInstance(leafAdapterImplementation_4, weights[3]),
                weightFactory.CreateFromInstance(leafAdapterImplementation_5, weights[4])
            };

            CrsTransformationAdapterComposite weightedAverageCompositeAdapter = crsTransformationAdapterCompositeFactory.CreateCrsTransformationWeightedAverage(weightedAdapters);
            CrsCoordinate result = weightedAverageCompositeAdapter.TransformToCoordinate(inputCoordinateSweref99, EpsgNumber.WORLD__WGS_84__4326);

            Assert.IsNotNull(result);

            Assert.AreEqual(expectedWeightedAverage.YNorthingLatitude, result.YNorthingLatitude, SMALL_DELTA_VALUE_FOR_COMPARISONS);
            Assert.AreEqual(expectedWeightedAverage.XEastingLongitude, result.XEastingLongitude, SMALL_DELTA_VALUE_FOR_COMPARISONS);

            AssertCompositeResultHasLeafSubResults(
                weightedAverageCompositeAdapter,
                allLeafAdapters.Count
                );
        }
        public void TransformToCoordinate_ShouldReturnMedianResult_WhenUsingMedianCompositeAdapter()
        {
            CrsTransformationAdapterComposite medianCompositeAdapter = crsTransformationAdapterCompositeFactory.CreateCrsTransformationMedian(allLeafAdapters);
            CrsCoordinate resultCoordinate = medianCompositeAdapter.TransformToCoordinate(inputCoordinateSweref99, EpsgNumber.WORLD__WGS_84__4326);

            Assert.IsNotNull(resultCoordinate);

            Assert.AreEqual(
                expectedMedianLatitude,
                resultCoordinate.YNorthingLatitude,
                SMALL_DELTA_VALUE_FOR_COMPARISONS
                );
            Assert.AreEqual(
                expectedMedianLongitude,
                resultCoordinate.XEastingLongitude,
                SMALL_DELTA_VALUE_FOR_COMPARISONS
                );

            AssertCompositeResultHasLeafSubResults(
                medianCompositeAdapter,
                allLeafAdapters.Count // expectedNumberOfLeafResults
                );
        }