Пример #1
0
 public void AddCalculationResult(int numOfAffectedRows, long time)
 {
     CalculationResults.Add(new CaluclationResult()
     {
         DurationMs = time, RowsAffected = numOfAffectedRows
     });
 }
Пример #2
0
        public void SetUp()
        {
            Family family = new Family
            {
                Members = new List <Person> {
                    new Person {
                        IsEmployee = true,
                        FirstName  = "Aaron",
                        LastName   = "Smith"
                    },
                    new Person {
                        FirstName = "Ahmed",
                        LastName  = "Smith"
                    },
                    new Person {
                        FirstName = "Amy",
                        LastName  = "Smith"
                    }
                },
            };

            Calculator calculator = new Calculator();

            _appConfig = new AppConfiguration();

            _calculation = calculator.RunCalculations(family, _appConfig);
        }
Пример #3
0
        // POST: api/BenefitsApi
        /// <summary>
        /// Post performs the calculation.
        /// </summary>
        /// <param name="model">a Family instance</param>
        /// <returns>CalculateResultsModel</returns>
        /// an IEnumerable collection
        public HttpResponseMessage Post([FromBody] Family model)
        {
            try
            {
                var validationResults = _familyValidator.Run(model);

                if (validationResults.IsValid)
                {
                    CalculationResults     results      = _calculator.RunCalculations(model, _appConfig);
                    CalculatedResultsModel resultsModel = _modelMapper.MapToResults(results);

                    return(Request.CreateResponse(HttpStatusCode.OK, resultsModel));
                }

                HttpError err = new HttpError("Invalid input parameter. " + validationResults.Message);
                return(Request.CreateErrorResponse(HttpStatusCode.NotAcceptable, err));
            }
            catch (Exception e)
            {
                Debug.WriteLine(e.Message);
                //TODO: log the exception
                HttpError err = new HttpError("Exception occurred check server logs");
                return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, err));
            }
        }
Пример #4
0
        public CalculatedResultsModel MapToResults(CalculationResults calculation)
        {
            CalculatedResultsModel model = new CalculatedResultsModel();

            //Brute force approach
            //in real application we can integrate a mapping technology such
            //as automapper
            model.EmployeeName            = getEmployeeName(calculation.Family);
            model.AdjustedPeriodPayAmount = calculation.AdjustedPeriodAmount;
            model.AnnualCosts             = calculation.AnnualCosts;
            model.AnnualSalary            = calculation.AnnualSalary;
            model.EmployerDiscounts       = calculation.EmployerDiscounts;
            model.Family         = calculation.Family;
            model.PerPeriodCosts = (calculation.AnnualCosts - calculation.EmployerDiscounts) / 26;

            return(model);
        }
Пример #5
0
        public void SetUp()
        {
            _family = new Family
            {
                Members = new List <Person> {
                    new Person {
                        IsEmployee = true,
                        FirstName  = "Joe",
                        LastName   = "Smith"
                    }
                },
            };

            _calculator = new Calculator();
            _appConfig  = new AppConfiguration();

            _calculation = _calculator.RunCalculations(_family, _appConfig);
        }
Пример #6
0
        public void SetUp()
        {
            _family = new Family
            {
                Members = new List <Person> {
                    new Person {
                        IsEmployee = true,
                        FirstName  = "Aaron",
                        LastName   = "Smith"
                    }
                },
            };

            _calculator = new Calculator();
            _appConfig  = new AppConfiguration();

            _calculation = _calculator.RunCalculations(_family, _appConfig);
            _mapper      = new ModelMapper();
            _results     = _mapper.MapToResults(_calculation);
        }
Пример #7
0
        public async Task VisualizeAsync(CalculationResults calculationResults)
        {
            CancellationTokenSource = new CancellationTokenSource();
            var cancellationToken = CancellationTokenSource.Token;

            VisualizationStarted?.Invoke(calculationResults);

            try
            {
                VisualizationTask = ValuesOutputAsync?.Invoke(calculationResults, cancellationToken);
                if (VisualizationTask is not null)
                {
                    await VisualizationTask;
                }
            }
            catch
            {
                return;
            }

            VisualizationFinished?.Invoke(calculationResults);
        }
Пример #8
0
        /// <summary>
        /// Calculator is a service object that
        /// performs calculations and returns the results of those calculations.
        /// </summary>
        /// <param name="family">this parameter is input to perform the calculations</param>
        /// <param name="appConfig">The app config is provides values necessary for the calculations</param>
        /// <returns></returns>
        public CalculationResults RunCalculations(Family family, IAppConfiguration appConfig)
        {
            decimal totalAnnualCosts  = 0;
            decimal employerDiscounts = 0;
            decimal annualSalary      = appConfig.AnnualSalary;

            foreach (Person p in family.Members)
            {
                decimal annualCosts = 0;

                if (p.IsEmployee)
                {
                    annualCosts = appConfig.AnnualCostPerEmployee;
                }
                else
                {
                    annualCosts = appConfig.AnnualCostPerMember;
                }

                totalAnnualCosts += annualCosts;

                if (QualifiesForDiscount(p.FirstName))
                {
                    employerDiscounts += (appConfig.BonusDiscountPercentage * .010M) * annualCosts;
                }
            }

            CalculationResults results = new CalculationResults
            {
                AnnualCosts       = totalAnnualCosts,
                EmployerDiscounts = employerDiscounts,
                AnnualSalary      = annualSalary,
                Family            = family
            };

            return(results);
        }
Пример #9
0
    public IEnumerator Launch()
    {
        //Check how many spawned objects are not disintegrated yet
        int spawnedObjectsStillAlive = 0;

        foreach (GameObject obj in spawnedObjects)
        {
            if (!obj.GetComponentInChildren <MoveableScript>().isFall)
            {
                spawnedObjectsStillAlive++;
            }
        }

        if (spawnedObjectsStillAlive < maxNumberOfObjectsInGame)
        {
            GameObject ins = Instantiate(launchObject, transform.position, Quaternion.identity, game.transform.root);

            PlayerScript.restrictAllInput = true;
            PlayerScript.allowRotate      = false;
            game.allowRewind = false;

            MoveableScript moveable = ins.GetComponentInChildren <MoveableScript>();

            moveable.moveCountAtSpawnTime = PlayerScript.moveCount;

            Rigidbody rbody = ins.GetComponent <Rigidbody>();
            rbody.isKinematic = false;
            rbody.useGravity  = true;
            CalculationResults calc = CalculateLaunchData(ins);
            rbody.velocity = calc.velocity;


            DisintegrationScript destroy = ins.GetComponentInChildren <DisintegrationScript>();
            destroy.destroyOnObstructedLanding = true;

            spawnedObjects.Add(ins);


            game.moveables.Add(moveable);

            yield return(new WaitForSeconds(calc.time));


            if (ins != null)
            {
                destroy.destroyOnObstructedLanding = false;
                rbody.isKinematic = true;
                rbody.useGravity  = false;

                ins.transform.position    = targetPos;
                ins.transform.eulerAngles = launchedObjectRotation;
            }

            PlayerScript.restrictAllInput = false;
            PlayerScript.allowRotate      = true;
            game.allowRewind = true;
        }
        else
        {
            print("TOO MANY OBJECTS IN SCENE - ABOVE SET QUOTA");
            moveCountWhenDenied.Add(PlayerScript.moveCount);
        }
    }