Esempio n. 1
0
        protected override void Context()
        {
            _objectBaseFactory         = A.Fake <IObjectBaseFactory>();
            _rateObjectPathsRepository = A.Fake <IRateObjectPathsRepository>();
            _rateFormulaRepository     = A.Fake <IRateFormulaRepository>();
            _distributionFactory       = A.Fake <IDistributionFormulaFactory>();
            _dimensionRepository       = A.Fake <IDimensionRepository>();
            _timeDimension             = A.Fake <IDimension>();
            _idGenerator = A.Fake <IIdGenerator>();
            A.CallTo(() => _objectBaseFactory.Create <ExplicitFormula>()).Returns(new ExplicitFormula());
            A.CallTo(() => _objectBaseFactory.Create <ConstantFormula>()).Returns(new ConstantFormula());
            A.CallTo(() => _objectBaseFactory.Create <SumFormula>()).Returns(new SumFormula());
            A.CallTo(() => _dimensionRepository.Time).Returns(_timeDimension);
            _objectPathFactory          = new ObjectPathFactoryForSpecs();
            _dynamicFormulaCriteriaRepo = A.Fake <IDynamicFormulaCriteriaRepository>();

            _dynamicSumFormulaRateKey = new RateKey(CoreConstants.CalculationMethod.DynamicSumFormulas, "SomeFormula");

            _sumFormulaCriteria = new DescriptorCriteria();
            _sumFormulaCriteria.Add(new MatchTagCondition("xxx"));
            _sumFormulaCriteria.Add(new NotMatchTagCondition("yyy"));

            A.CallTo(() => _dynamicFormulaCriteriaRepo.CriteriaFor(_dynamicSumFormulaRateKey)).Returns(_sumFormulaCriteria);
            A.CallTo(() => _rateFormulaRepository.FormulaFor(_dynamicSumFormulaRateKey)).Returns("P_#i");
            sut = new FormulaFactory(_objectBaseFactory, _rateObjectPathsRepository, _rateFormulaRepository, _distributionFactory,
                                     _objectPathFactory, _dimensionRepository, _idGenerator, _dynamicFormulaCriteriaRepo);
        }
Esempio n. 2
0
        private IFormula createFormula(RateKey rateKey)
        {
            if (rateKey.IsBlackBoxFormula)
            {
                return(_objectBaseFactory.Create <BlackBoxFormula>()
                       .WithId(rateKey)
                       .WithName(rateKey.Rate));
            }

            if (rateKey.IsTableWithOffsetFormula)
            {
                return(createTableFormulaWithOffset(rateKey));
            }

            if (rateKey.IsTableWithXArgumentFormula)
            {
                return(createTableFormulaWithArgument(rateKey));
            }

            //now it can be either dynamic formula or explicit formula
            FormulaWithFormulaString formula;

            if (rateKey.IsDynamicSumFormula)
            {
                var sumFormula = _objectBaseFactory.Create <SumFormula>();
                sumFormula.Criteria = _dynamicFormulaCriteriaRepository.CriteriaFor(rateKey).Clone();
                formula             = sumFormula;
            }
            else
            {
                formula = _objectBaseFactory.Create <ExplicitFormula>();
            }

            formula.WithFormulaString(_rateFormulaRepository.FormulaFor(rateKey))
            .WithId(rateKey)
            .WithName(rateKey.Rate);

            foreach (var rateObjectPath in _rateObjectPathsRepository.ObjectPathsFor(rateKey))
            {
                formula.AddObjectPath(rateObjectPath.Clone <IFormulaUsablePath>());
            }

            addTimeReferenceIfNeeded(formula);

            //set formula dimension if available
            var dimensionName = _rateFormulaRepository.DimensionNameFor(rateKey);
            var dimension     = _dimensionRepository.DimensionByName(dimensionName);

            formula.Dimension = dimension;

            if (formula.ObjectPaths.Any() || formula.IsAnImplementationOf <DynamicFormula>())
            {
                return(formula);
            }

            //this is actually a constant formula! Evaluate the function and return a contant formula
            return(constantFormula(formula.Calculate(null)).WithDimension(dimension));
        }