public void CalculateTest() { var rateComparasionCalculator = new RateComparasionCalculator(); var left = new Models.Currency("EUR", "321"); var right = new Models.Currency("RUB", "123"); var one = new CurrencyRate(left, right, 1000); var two = new CurrencyRate(left, right, 1100); var res = rateComparasionCalculator.Calculate(one, two); Assert.IsTrue(res.Currency.Equals(right)); Assert.AreEqual(100m, res.Difference); Assert.AreEqual(10m, res.Percent); Assert.AreEqual(RateComparasionType.Increased, res.RateComparasionType); one = new CurrencyRate(left, right, 1000); two = new CurrencyRate(left, right, 700); res = rateComparasionCalculator.Calculate(one, two); Assert.IsTrue(res.Currency.Equals(right)); Assert.AreEqual(300m, res.Difference); Assert.AreEqual(30m, res.Percent); Assert.AreEqual(RateComparasionType.Decreased, res.RateComparasionType); one = new CurrencyRate(left, right, 1000); two = new CurrencyRate(left, right, 1000); res = rateComparasionCalculator.Calculate(one, two); Assert.IsTrue(res.Currency.Equals(right)); Assert.AreEqual(0m, res.Difference); Assert.AreEqual(0m, res.Percent); Assert.AreEqual(RateComparasionType.NotChanged, res.RateComparasionType); }
public RateComparison Calculate(CurrencyRate one, CurrencyRate two) { if (!one.Left.Equals(two.Left)) { throw new FormatException("Left currency must be equals"); } if (!one.Right.Equals(two.Right)) { throw new FormatException("Right currency must be equals"); } var type = one.Rate < two.Rate ? RateComparasionType.Increased : one.Rate > two.Rate ? RateComparasionType.Decreased : RateComparasionType.NotChanged; var onePercent = (one.Rate / 100); var percent = 100m - (two.Rate/onePercent); return new RateComparison(one.Right, Math.Abs(percent), Math.Abs(one.Rate - two.Rate), type); }
public bool TryLoad(CurrencyRateLoadModel currencyRateLoadModel, out CurrencyRate rate) { return _cache.TryGetValue(currencyRateLoadModel, out rate); }
public bool TryLoad(string leftCharCode, string rightCharCode, DateTime day, out CurrencyRate rate) { return TryLoad(new CurrencyRateLoadModel(leftCharCode, rightCharCode, day), out rate); }
public void Save(CurrencyRate rate, DateTime day) { var currencyRateLoadModel = new CurrencyRateLoadModel(rate.Left.CharCode, rate.Right.CharCode, day); _cache.Add(currencyRateLoadModel, rate); }