sodablue

Tax Calculator

Sep 23rd, 2011
474
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.54 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. public class TaxRule
  5. {
  6.     private Func<decimal, bool> isMatch;
  7.     private Func<decimal, decimal> calculator;
  8.  
  9.     public TaxRule(Func<decimal, bool> isMatch, Func<decimal, decimal> calculator)
  10.     {
  11.         this.isMatch = isMatch;
  12.         this.calculator = calculator;
  13.     }
  14.  
  15.     public bool IsMatch(decimal value)
  16.     {
  17.         return this.isMatch(value);
  18.     }
  19.  
  20.     public decimal CalculateTax(decimal value)
  21.     {
  22.         return this.calculator(value);
  23.     }
  24. }
  25.  
  26. public class TaxCalculator
  27. {
  28.     List<TaxRule> rules = new List<TaxRule>
  29.         {
  30.             new TaxRule(m => m > 40230, m => (m-40230m)*.45m + 10671.6m),
  31.             new TaxRule(m => m >= 21241 && m <= 40230, m => (m-21240m)*.33m + 4404.9m),
  32.             new TaxRule(m => m >= 14071 && m <= 21240, m => (m-14070m)*.30m + 2253.9m),
  33.             new TaxRule(m => m >= 8661 && m <= 14070, m => (m-8660m)*.23m + 1009.6m),
  34.             new TaxRule(m => m >= 5071 && m <= 8660, m => (m-5070m)*.14m + 507m),
  35.             new TaxRule(m => (m < 5070), m => m * .10m),
  36.         };
  37.  
  38.     public decimal CalculateTax(decimal value)
  39.     {
  40.         foreach (var rule in this.rules)
  41.         {
  42.             if (rule.IsMatch(value))
  43.                 return rule.CalculateTax(value);
  44.         }
  45.  
  46.         return 0;
  47.     }
  48. }
  49.  
  50. [TestClass]
  51.     public class UnitTest1
  52.     {
  53.         [TestMethod]
  54.         public void Salary_Of_5000_Has_Tax_Of_500()
  55.         {
  56.             var salary = 5000m;
  57.             var expected = 500m;
  58.  
  59.             TaxCalculator calculator = new TaxCalculator();
  60.             var actual = calculator.CalculateTax(salary);
  61.  
  62.             Assert.AreEqual(expected, actual);
  63.         }
  64.  
  65.         [TestMethod]
  66.         public void Salary_Of_5800_Has_Tax_Of_609_2()
  67.         {
  68.             var salary = 5800m;
  69.             var expected = 609.2m;
  70.  
  71.             TaxCalculator calculator = new TaxCalculator();
  72.             var actual = calculator.CalculateTax(salary);
  73.  
  74.             Assert.AreEqual(expected, actual);
  75.         }
  76.  
  77.         [TestMethod]
  78.         public void Salary_Of_9000_Has_Tax_Of_1087_8()
  79.         {
  80.             var salary = 9000m;
  81.             var expected = 1087.8m;
  82.  
  83.             TaxCalculator calculator = new TaxCalculator();
  84.             var actual = calculator.CalculateTax(salary);
  85.  
  86.             Assert.AreEqual(expected, actual);
  87.         }
  88.  
  89.         [TestMethod]
  90.         public void Salary_Of_15000_Has_Tax_Of_2532_9()
  91.         {
  92.             var salary = 15000m;
  93.             var expected = 2532.9m;
  94.  
  95.             TaxCalculator calculator = new TaxCalculator();
  96.             var actual = calculator.CalculateTax(salary);
  97.  
  98.             Assert.AreEqual(expected, actual);
  99.         }
  100.  
  101.         [TestMethod]
  102.         public void Salary_Of_50000_Has_Tax_Of_15068_1()
  103.         {
  104.             var salary = 50000m;
  105.             var expected = 15068.1m;
  106.  
  107.             TaxCalculator calculator = new TaxCalculator();
  108.             var actual = calculator.CalculateTax(salary);
  109.  
  110.             Assert.AreEqual(expected, actual);
  111.         }
  112.  
  113.     }
Advertisement
Add Comment
Please, Sign In to add comment