public async Task <IScatteredPointsLinearInterpolatorOnSphere> CreateAsync()
        {
            var cachingDecorator = await contextProvidingFactory.CreateAsync();

            var adapter = new CellRequestToPointsAdapter <TContext>(weightsProvider);
            var facade  = new TwoPhaseScatteredPointsLenearInterpolatorFacade <TContext>(cachingDecorator, adapter);

            return(facade);
        }
 public CachingLinearWeightsProviderFactory2(IScatteredPointContextBasedLinearWeightProviderOnSphere <TContext> weightsProvider, IAsyncMap <INodes, TContext> contextProvider)
 {
     result = new AsyncLazy <IScatteredPointsLinearInterpolatorOnSphere>(async() =>
     {
         var contextProvidingFactory = new AsyncMapCacheDecoratingFactory <INodes, TContext>(new HashBasedEquatibleINodesConverter(), contextProvider);
         var cachingDecorator        = await contextProvidingFactory.CreateAsync();
         var adapter = new CellRequestToPointsAdapter <TContext>(weightsProvider);
         var facade  = new TwoPhaseScatteredPointsLenearInterpolatorFacade <TContext>(cachingDecorator, adapter);
         return(facade);
     });
 }
        public async Task GeoCellTupleToPointLinearInterpolatorAdapterTest()
        {
            var adapter = new CellRequestToPointsAdapter <Tuple <double, double> >(new Stub());
            var context = await(new Stub2()).GetAsync(new NodesStub());

            var cell = new RequestStubs()
            {
                LatMin = 5.0, LatMax = 7.0, LonMin = 11.0, LonMax = 13.0
            };

            var result = await adapter.GetLinearWeigthsAsync(cell, context);

            Assert.AreEqual(2, result.Length);
            Assert.AreEqual(0, result[0].DataIndex);
            Assert.AreEqual(1, result[1].DataIndex);
            Assert.AreEqual(2620.0 / 8580.0, result[0].Weight, TestConstants.DoublePrecision); //manual camputation
            Assert.AreEqual(5960.0 / 8580.0, result[1].Weight, TestConstants.DoublePrecision);
        }