Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- public class TaxRule
- {
- private Func<decimal, bool> isMatch;
- private Func<decimal, decimal> calculator;
- public TaxRule(Func<decimal, bool> isMatch, Func<decimal, decimal> calculator)
- {
- this.isMatch = isMatch;
- this.calculator = calculator;
- }
- public bool IsMatch(decimal value)
- {
- return this.isMatch(value);
- }
- public decimal CalculateTax(decimal value)
- {
- return this.calculator(value);
- }
- }
- public class TaxCalculator
- {
- List<TaxRule> rules = new List<TaxRule>
- {
- new TaxRule(m => m > 40230, m => (m-40230m)*.45m + 10671.6m),
- new TaxRule(m => m >= 21241 && m <= 40230, m => (m-21240m)*.33m + 4404.9m),
- new TaxRule(m => m >= 14071 && m <= 21240, m => (m-14070m)*.30m + 2253.9m),
- new TaxRule(m => m >= 8661 && m <= 14070, m => (m-8660m)*.23m + 1009.6m),
- new TaxRule(m => m >= 5071 && m <= 8660, m => (m-5070m)*.14m + 507m),
- new TaxRule(m => (m < 5070), m => m * .10m),
- };
- public decimal CalculateTax(decimal value)
- {
- foreach (var rule in this.rules)
- {
- if (rule.IsMatch(value))
- return rule.CalculateTax(value);
- }
- return 0;
- }
- }
- [TestClass]
- public class UnitTest1
- {
- [TestMethod]
- public void Salary_Of_5000_Has_Tax_Of_500()
- {
- var salary = 5000m;
- var expected = 500m;
- TaxCalculator calculator = new TaxCalculator();
- var actual = calculator.CalculateTax(salary);
- Assert.AreEqual(expected, actual);
- }
- [TestMethod]
- public void Salary_Of_5800_Has_Tax_Of_609_2()
- {
- var salary = 5800m;
- var expected = 609.2m;
- TaxCalculator calculator = new TaxCalculator();
- var actual = calculator.CalculateTax(salary);
- Assert.AreEqual(expected, actual);
- }
- [TestMethod]
- public void Salary_Of_9000_Has_Tax_Of_1087_8()
- {
- var salary = 9000m;
- var expected = 1087.8m;
- TaxCalculator calculator = new TaxCalculator();
- var actual = calculator.CalculateTax(salary);
- Assert.AreEqual(expected, actual);
- }
- [TestMethod]
- public void Salary_Of_15000_Has_Tax_Of_2532_9()
- {
- var salary = 15000m;
- var expected = 2532.9m;
- TaxCalculator calculator = new TaxCalculator();
- var actual = calculator.CalculateTax(salary);
- Assert.AreEqual(expected, actual);
- }
- [TestMethod]
- public void Salary_Of_50000_Has_Tax_Of_15068_1()
- {
- var salary = 50000m;
- var expected = 15068.1m;
- TaxCalculator calculator = new TaxCalculator();
- var actual = calculator.CalculateTax(salary);
- Assert.AreEqual(expected, actual);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment