From 058f424d7fbae3c25f6931a19e7838b54601fa61 Mon Sep 17 00:00:00 2001 From: Noah Oosterhoff Date: Tue, 16 Jan 2024 12:09:19 -0500 Subject: [PATCH 1/6] Creating and running test --- .idea/misc.xml | 2 +- test/EMPTY | 0 test/InsuranceCalculatorTest.java | 44 +++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 1 deletion(-) delete mode 100644 test/EMPTY create mode 100644 test/InsuranceCalculatorTest.java diff --git a/.idea/misc.xml b/.idea/misc.xml index 0792e77..c56f193 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/test/EMPTY b/test/EMPTY deleted file mode 100644 index e69de29..0000000 diff --git a/test/InsuranceCalculatorTest.java b/test/InsuranceCalculatorTest.java new file mode 100644 index 0000000..54f8a32 --- /dev/null +++ b/test/InsuranceCalculatorTest.java @@ -0,0 +1,44 @@ +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class InsuranceCalculatorTest { + @Test + public void low() { + assertEquals( + 1825, + insuranceFor(5000), + 0.01 + ); + } + + @Test + public void medium() { + assertEquals( + 38600, + insuranceFor(25000), + 0.01 + ); + } + + @Test + public void high() { + assertEquals( + 78500, + insuranceFor(50000), + 0.01 + ); + } + + @Test + public void veryHigh() { + assertEquals( + 106400, + insuranceFor(100000), + 0.01 + ); + } + + private double insuranceFor(double income) { + return new InsuranceCalculator().calculateInsurance(income); + } +} \ No newline at end of file From 4ba8d3258a0b6fda0afbb00c1d83d637f4bf30d8 Mon Sep 17 00:00:00 2001 From: Noah Oosterhoff Date: Tue, 16 Jan 2024 12:14:13 -0500 Subject: [PATCH 2/6] Extracting methods --- src/InsuranceCalculator.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/InsuranceCalculator.java b/src/InsuranceCalculator.java index 558e0a0..c43ce86 100644 --- a/src/InsuranceCalculator.java +++ b/src/InsuranceCalculator.java @@ -8,8 +8,24 @@ public double calculateInsurance(double income) { } else if (income <= 60000) { return (income-30000)*0.1+76500; } else { - return (income-60000)*0.02+105600; + return calculateInsuranceVeryHigh(income); } } + public double calculateInsuranceVeryHigh(double income) { + return (income - getAdjustment()) * getWeight() + getConstant(); + } + + private static int getConstant() { + return 105600; + } + + private static double getWeight() { + return 0.02; + } + + private static int getAdjustment() { + return 60000; + } + } From 11484d37bd945eebf8e4dcea8aca5d44573c906a Mon Sep 17 00:00:00 2001 From: Noah Oosterhoff Date: Tue, 16 Jan 2024 12:22:59 -0500 Subject: [PATCH 3/6] Using the Extract Delegate refactoring --- src/InsuranceCalculator.java | 21 +++------------------ src/InsuranceStrategyVeryHigh.java | 20 ++++++++++++++++++++ 2 files changed, 23 insertions(+), 18 deletions(-) create mode 100644 src/InsuranceStrategyVeryHigh.java diff --git a/src/InsuranceCalculator.java b/src/InsuranceCalculator.java index c43ce86..19ccf2e 100644 --- a/src/InsuranceCalculator.java +++ b/src/InsuranceCalculator.java @@ -1,5 +1,7 @@ public class InsuranceCalculator { + private final InsuranceStrategyVeryHigh insuranceStrategyVeryHigh = new InsuranceStrategyVeryHigh(); + public double calculateInsurance(double income) { if (income <= 10000) { return income*0.365; @@ -8,24 +10,7 @@ public double calculateInsurance(double income) { } else if (income <= 60000) { return (income-30000)*0.1+76500; } else { - return calculateInsuranceVeryHigh(income); + return insuranceStrategyVeryHigh.calculateInsuranceVeryHigh(income); } } - - public double calculateInsuranceVeryHigh(double income) { - return (income - getAdjustment()) * getWeight() + getConstant(); - } - - private static int getConstant() { - return 105600; - } - - private static double getWeight() { - return 0.02; - } - - private static int getAdjustment() { - return 60000; - } - } diff --git a/src/InsuranceStrategyVeryHigh.java b/src/InsuranceStrategyVeryHigh.java new file mode 100644 index 0000000..b8e4dcf --- /dev/null +++ b/src/InsuranceStrategyVeryHigh.java @@ -0,0 +1,20 @@ +public class InsuranceStrategyVeryHigh { + public InsuranceStrategyVeryHigh() { + } + + public double calculateInsuranceVeryHigh(double income) { + return (income - getAdjustment()) * getWeight() + getConstant(); + } + + static int getConstant() { + return 105600; + } + + static double getWeight() { + return 0.02; + } + + static int getAdjustment() { + return 60000; + } +} \ No newline at end of file From 7d0db1fa609d51487cb91017e106a7ee543b4576 Mon Sep 17 00:00:00 2001 From: Noah Oosterhoff Date: Tue, 16 Jan 2024 12:39:09 -0500 Subject: [PATCH 4/6] Fine tuning --- src/InsuranceCalculator.java | 4 ++-- src/InsuranceStrategy.java | 11 +++++++++++ src/InsuranceStrategyVeryHigh.java | 20 -------------------- 3 files changed, 13 insertions(+), 22 deletions(-) create mode 100644 src/InsuranceStrategy.java delete mode 100644 src/InsuranceStrategyVeryHigh.java diff --git a/src/InsuranceCalculator.java b/src/InsuranceCalculator.java index 19ccf2e..a4b570d 100644 --- a/src/InsuranceCalculator.java +++ b/src/InsuranceCalculator.java @@ -1,6 +1,6 @@ public class InsuranceCalculator { - private final InsuranceStrategyVeryHigh insuranceStrategyVeryHigh = new InsuranceStrategyVeryHigh(); + private InsuranceStrategy strategy; public double calculateInsurance(double income) { if (income <= 10000) { @@ -10,7 +10,7 @@ public double calculateInsurance(double income) { } else if (income <= 60000) { return (income-30000)*0.1+76500; } else { - return insuranceStrategyVeryHigh.calculateInsuranceVeryHigh(income); + return strategy.calculateInsuranceVeryHigh(income); } } } diff --git a/src/InsuranceStrategy.java b/src/InsuranceStrategy.java new file mode 100644 index 0000000..41d9d0c --- /dev/null +++ b/src/InsuranceStrategy.java @@ -0,0 +1,11 @@ +public abstract class InsuranceStrategy { + public double calculateInsuranceVeryHigh(double income) { + return (income - getAdjustment()) * getWeight() + getConstant(); + } + + public abstract int getConstant(); + + public abstract double getWeight(); + + public abstract int getAdjustment(); +} diff --git a/src/InsuranceStrategyVeryHigh.java b/src/InsuranceStrategyVeryHigh.java deleted file mode 100644 index b8e4dcf..0000000 --- a/src/InsuranceStrategyVeryHigh.java +++ /dev/null @@ -1,20 +0,0 @@ -public class InsuranceStrategyVeryHigh { - public InsuranceStrategyVeryHigh() { - } - - public double calculateInsuranceVeryHigh(double income) { - return (income - getAdjustment()) * getWeight() + getConstant(); - } - - static int getConstant() { - return 105600; - } - - static double getWeight() { - return 0.02; - } - - static int getAdjustment() { - return 60000; - } -} \ No newline at end of file From a2ee2df40e25db245cdbd8b1c1f7bf506133364c Mon Sep 17 00:00:00 2001 From: Noah Oosterhoff Date: Tue, 16 Jan 2024 12:48:48 -0500 Subject: [PATCH 5/6] Implementing the abstract class --- src/InsuranceCalculator.java | 12 ++++++++---- src/InsuranceStrategy.java | 2 +- src/InsuranceStrategyHigh.java | 16 ++++++++++++++++ src/InsuranceStrategyLow.java | 16 ++++++++++++++++ src/InsuranceStrategyMedium.java | 16 ++++++++++++++++ src/InsuranceStrategyVeryHigh.java | 16 ++++++++++++++++ 6 files changed, 73 insertions(+), 5 deletions(-) create mode 100644 src/InsuranceStrategyHigh.java create mode 100644 src/InsuranceStrategyLow.java create mode 100644 src/InsuranceStrategyMedium.java create mode 100644 src/InsuranceStrategyVeryHigh.java diff --git a/src/InsuranceCalculator.java b/src/InsuranceCalculator.java index a4b570d..1d3b3bf 100644 --- a/src/InsuranceCalculator.java +++ b/src/InsuranceCalculator.java @@ -4,13 +4,17 @@ public class InsuranceCalculator { public double calculateInsurance(double income) { if (income <= 10000) { - return income*0.365; + strategy = new InsuranceStrategyLow(); + return strategy.calculate(income); } else if (income <= 30000) { - return (income-10000)*0.2+35600; + strategy = new InsuranceStrategyMedium(); + return strategy.calculate(income); } else if (income <= 60000) { - return (income-30000)*0.1+76500; + strategy = new InsuranceStrategyHigh(); + return strategy.calculate(income); } else { - return strategy.calculateInsuranceVeryHigh(income); + strategy = new InsuranceStrategyVeryHigh(); + return strategy.calculate(income); } } } diff --git a/src/InsuranceStrategy.java b/src/InsuranceStrategy.java index 41d9d0c..1ebf362 100644 --- a/src/InsuranceStrategy.java +++ b/src/InsuranceStrategy.java @@ -1,5 +1,5 @@ public abstract class InsuranceStrategy { - public double calculateInsuranceVeryHigh(double income) { + public double calculate(double income) { return (income - getAdjustment()) * getWeight() + getConstant(); } diff --git a/src/InsuranceStrategyHigh.java b/src/InsuranceStrategyHigh.java new file mode 100644 index 0000000..e316b15 --- /dev/null +++ b/src/InsuranceStrategyHigh.java @@ -0,0 +1,16 @@ +public class InsuranceStrategyHigh extends InsuranceStrategy { + @Override + public int getConstant() { + return 76500; + } + + @Override + public double getWeight() { + return 0.1; + } + + @Override + public int getAdjustment() { + return 30000; + } +} diff --git a/src/InsuranceStrategyLow.java b/src/InsuranceStrategyLow.java new file mode 100644 index 0000000..58278e8 --- /dev/null +++ b/src/InsuranceStrategyLow.java @@ -0,0 +1,16 @@ +public class InsuranceStrategyLow extends InsuranceStrategy { + @Override + public int getConstant() { + return 0; + } + + @Override + public double getWeight() { + return 0.365; + } + + @Override + public int getAdjustment() { + return 0; + } +} diff --git a/src/InsuranceStrategyMedium.java b/src/InsuranceStrategyMedium.java new file mode 100644 index 0000000..6994a01 --- /dev/null +++ b/src/InsuranceStrategyMedium.java @@ -0,0 +1,16 @@ +public class InsuranceStrategyMedium extends InsuranceStrategy { + @Override + public int getConstant() { + return 35600; + } + + @Override + public double getWeight() { + return 0.2; + } + + @Override + public int getAdjustment() { + return 10000; + } +} diff --git a/src/InsuranceStrategyVeryHigh.java b/src/InsuranceStrategyVeryHigh.java new file mode 100644 index 0000000..1a71ba1 --- /dev/null +++ b/src/InsuranceStrategyVeryHigh.java @@ -0,0 +1,16 @@ +public class InsuranceStrategyVeryHigh extends InsuranceStrategy { + @Override + public int getConstant() { + return 105600; + } + + @Override + public double getWeight() { + return 0.02; + } + + @Override + public int getAdjustment() { + return 60000; + } +} From 5c51cd80e3ab94118310d6cae42d512e8f5f8d99 Mon Sep 17 00:00:00 2001 From: Noah Oosterhoff Date: Wed, 17 Jan 2024 15:51:11 -0500 Subject: [PATCH 6/6] DAHAHAHAHAHAHAHAHA I DID IT LETS GOOOOOOO --- src/InsuranceCalculator.java | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/InsuranceCalculator.java b/src/InsuranceCalculator.java index 1d3b3bf..d136920 100644 --- a/src/InsuranceCalculator.java +++ b/src/InsuranceCalculator.java @@ -1,18 +1,22 @@ +import java.lang.Math; + public class InsuranceCalculator { private InsuranceStrategy strategy; public double calculateInsurance(double income) { - if (income <= 10000) { - strategy = new InsuranceStrategyLow(); - return strategy.calculate(income); - } else if (income <= 30000) { - strategy = new InsuranceStrategyMedium(); - return strategy.calculate(income); - } else if (income <= 60000) { - strategy = new InsuranceStrategyHigh(); + InsuranceStrategy[] hashBrown = new InsuranceStrategy[6]; + hashBrown[0] = new InsuranceStrategyLow(); + hashBrown[1] = new InsuranceStrategyMedium(); + hashBrown[2] = new InsuranceStrategyMedium(); + hashBrown[3] = new InsuranceStrategyHigh(); + hashBrown[4] = new InsuranceStrategyHigh(); + hashBrown[5] = new InsuranceStrategyHigh(); + int deviousNum = (int)Math.floor(Math.abs(income / 10000 - 0.1)); + try { + strategy = hashBrown[deviousNum]; return strategy.calculate(income); - } else { + } catch(ArrayIndexOutOfBoundsException error) { strategy = new InsuranceStrategyVeryHigh(); return strategy.calculate(income); }