From 16d7d3cf3d977de0fb0e491296fe4d6a23e8a68f Mon Sep 17 00:00:00 2001 From: Amanda Huang <79762895+AmandaJ-Huang@users.noreply.github.com> Date: Sat, 20 Nov 2021 10:54:33 -0500 Subject: [PATCH 1/5] DiceTest added --- pom.xml | 8 ++++++++ src/test/java/DiceTest.java | 9 +++++++++ 2 files changed, 17 insertions(+) create mode 100644 src/test/java/DiceTest.java diff --git a/pom.xml b/pom.xml index 7219542..1b5e145 100644 --- a/pom.xml +++ b/pom.xml @@ -7,6 +7,14 @@ com.zipcodewilmington Dicey-Lab 1.0-SNAPSHOT + + + junit + junit + 4.13.1 + test + + \ No newline at end of file diff --git a/src/test/java/DiceTest.java b/src/test/java/DiceTest.java new file mode 100644 index 0000000..57b44ea --- /dev/null +++ b/src/test/java/DiceTest.java @@ -0,0 +1,9 @@ +import org.junit.Test; + +public class DiceTest{ + + @Test + public void tossOneTest() { + + } +} From f348d42ac5c08187cf80a8bc64bba91484c91249 Mon Sep 17 00:00:00 2001 From: Amanda Huang <79762895+AmandaJ-Huang@users.noreply.github.com> Date: Sat, 20 Nov 2021 10:57:35 -0500 Subject: [PATCH 2/5] set up main --- src/main/java/MainApplication.java | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 src/main/java/MainApplication.java diff --git a/src/main/java/MainApplication.java b/src/main/java/MainApplication.java new file mode 100644 index 0000000..6f07a12 --- /dev/null +++ b/src/main/java/MainApplication.java @@ -0,0 +1,5 @@ +public class MainApplication { + public static void main(String[] args) { + Simulation sim = new Simulation(); + } +} From 041262e1508c3a88ee8a1e945bdc771a1e979438 Mon Sep 17 00:00:00 2001 From: Amanda Huang <79762895+AmandaJ-Huang@users.noreply.github.com> Date: Sat, 20 Nov 2021 11:37:58 -0500 Subject: [PATCH 3/5] added Dice constructor and tossAndSum method --- pom.xml | 4 ++++ src/main/java/Dice.java | 15 +++++++++++++++ src/test/java/DiceTest.java | 22 +++++++++++++++++++++- 3 files changed, 40 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1b5e145..ee02794 100644 --- a/pom.xml +++ b/pom.xml @@ -15,6 +15,10 @@ test + + 11 + 11 + \ No newline at end of file diff --git a/src/main/java/Dice.java b/src/main/java/Dice.java index 2283c96..f307489 100644 --- a/src/main/java/Dice.java +++ b/src/main/java/Dice.java @@ -1,4 +1,19 @@ +import java.util.Random; + public class Dice { + private Integer numberOfDie; + + public Dice(int numberOfDie) { + this.numberOfDie = numberOfDie; + } + public Integer tossAndSum() { + Random random = new Random(); + Integer sum = 0; + for (int i = 0; i < numberOfDie; i++) { + sum += random.nextInt(6) + 1; + } + return sum; + } } diff --git a/src/test/java/DiceTest.java b/src/test/java/DiceTest.java index 57b44ea..bde5f83 100644 --- a/src/test/java/DiceTest.java +++ b/src/test/java/DiceTest.java @@ -1,9 +1,29 @@ +import org.junit.Assert; import org.junit.Test; public class DiceTest{ @Test - public void tossOneTest() { + public void tossAndSumTwoDiceTest() { + //Given + Dice dice = new Dice(2); + //When + Integer toss = dice.tossAndSum(); + + //Then + Assert.assertTrue((toss > 1) && (toss < 13)); + } + + @Test + public void tossAndSumFiveDiceTest() { + //Given + Dice dice = new Dice(5); + + //When + Integer toss = dice.tossAndSum(); + + //Then + Assert.assertTrue((toss > 4) && (toss < 31)); } } From 4e9386a7dd1c5c4a40dbcd87388afd2364c432b9 Mon Sep 17 00:00:00 2001 From: Amanda Huang <79762895+AmandaJ-Huang@users.noreply.github.com> Date: Sat, 20 Nov 2021 12:25:00 -0500 Subject: [PATCH 4/5] Bins constructor, getBin, and incrementBin methods --- src/main/java/Bins.java | 22 ++++++++++++++++++++++ src/main/java/Dice.java | 4 ++++ src/test/java/BinsTest.java | 34 ++++++++++++++++++++++++++++++++++ src/test/java/DiceTest.java | 13 +++++++++++++ 4 files changed, 73 insertions(+) create mode 100644 src/test/java/BinsTest.java diff --git a/src/main/java/Bins.java b/src/main/java/Bins.java index b9da83e..ff78e79 100644 --- a/src/main/java/Bins.java +++ b/src/main/java/Bins.java @@ -1,4 +1,26 @@ +import java.util.HashMap; +import java.util.Map; public class Bins { + private Integer lower; + private Integer upper; + private Map binsMap = new HashMap<>(); + + public Bins(Integer lower, Integer upper) { + this.lower = lower; + this.upper = upper; + + for (int i = lower; i <= upper; i++) { + binsMap.put(i, 0); + } + } + + public Integer getBin(int bin) { + return binsMap.get(bin); + } + + public void incrementBin(int bin) { + binsMap.put(bin, getBin(bin)+1); + } } diff --git a/src/main/java/Dice.java b/src/main/java/Dice.java index f307489..07e1e4c 100644 --- a/src/main/java/Dice.java +++ b/src/main/java/Dice.java @@ -16,4 +16,8 @@ public Integer tossAndSum() { } return sum; } + + public Integer getNumOfDie() { + return this.numberOfDie; + } } diff --git a/src/test/java/BinsTest.java b/src/test/java/BinsTest.java new file mode 100644 index 0000000..8dcef99 --- /dev/null +++ b/src/test/java/BinsTest.java @@ -0,0 +1,34 @@ +import org.junit.Assert; +import org.junit.Test; + +public class BinsTest { + + @Test + public void incrementBinTest() { + //Given + Bins bins = new Bins(2, 12); + Integer expected = 1; + + //When + bins.incrementBin(10); + Integer actual = bins.getBin(10); + + //Then + Assert.assertEquals(expected, actual); + } + + @Test + public void binsConstructorTest() { + //Given + Integer lower = 2; + Integer upper = 12; + Integer expected = 0; + + //When + Bins bins = new Bins(lower, upper); + Integer actual = bins.getBin(2); + + //Then + Assert.assertEquals(expected, actual); + } +} diff --git a/src/test/java/DiceTest.java b/src/test/java/DiceTest.java index bde5f83..6a3eec6 100644 --- a/src/test/java/DiceTest.java +++ b/src/test/java/DiceTest.java @@ -3,6 +3,19 @@ public class DiceTest{ + @Test + public void diceConstructorTest() { + //Given + Integer expectedNumOfDie = 8; + + //When + Dice dice = new Dice(expectedNumOfDie); + Integer actual = dice.getNumOfDie(); + + //Then + Assert.assertEquals(expectedNumOfDie, actual); + } + @Test public void tossAndSumTwoDiceTest() { //Given From eebab62c3089c83c2b98af8c63011a0176e19330 Mon Sep 17 00:00:00 2001 From: Amanda Huang <79762895+AmandaJ-Huang@users.noreply.github.com> Date: Sat, 20 Nov 2021 13:52:11 -0500 Subject: [PATCH 5/5] simulation output formatting matches readme sample --- src/main/java/MainApplication.java | 5 ++- src/main/java/Simulation.java | 56 ++++++++++++++++++++++++++++++ src/test/java/SimulationTest.java | 22 ++++++++++++ 3 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 src/test/java/SimulationTest.java diff --git a/src/main/java/MainApplication.java b/src/main/java/MainApplication.java index 6f07a12..2d541b4 100644 --- a/src/main/java/MainApplication.java +++ b/src/main/java/MainApplication.java @@ -1,5 +1,8 @@ public class MainApplication { public static void main(String[] args) { - Simulation sim = new Simulation(); + Simulation sim = new Simulation(2, 1000000); + + sim.runSimulation(); + sim.printResults(); } } diff --git a/src/main/java/Simulation.java b/src/main/java/Simulation.java index 73d86e8..48629c4 100644 --- a/src/main/java/Simulation.java +++ b/src/main/java/Simulation.java @@ -1,5 +1,61 @@ public class Simulation { + private Integer numberOfDie; + private Integer numberOfTosses; + private Bins bins; + public Simulation(Integer numberOfDie, Integer numberOfTosses) { + this.numberOfDie = numberOfDie; + this.numberOfTosses = numberOfTosses; + } + + public Integer getNumOfDie() { + return this.numberOfDie; + } + + public Integer getNumOfTosses() { + return this.numberOfTosses; + } + + public Bins runSimulation() { + Dice dice = new Dice(numberOfDie); + bins = new Bins(numberOfDie, numberOfDie*6); + Integer result; + + for (int i = 0; i < numberOfTosses; i++) { + result = dice.tossAndSum(); + bins.incrementBin(result); + } + return bins; + } + + public void printResults() { + + System.out.println(new StringBuilder() + .append("\n***") + .append("\nSimulation of " + numberOfDie + " dice tossed " + numberOfTosses + " times.") + .append("\n***") + + printBins(bins)); + + } + + + private String printBins(Bins bins) { + String binLine = ""; + Double binPercent; + Integer stars = 0; + + for(int i = numberOfDie; i <= (numberOfDie*6); i++) { + binPercent = ((double) bins.getBin(i)) / numberOfTosses; + binLine += String.format("\n%2d : %8d : %.2f ", i, bins.getBin(i), binPercent); + + stars = (100 * bins.getBin(i)) / numberOfTosses; + + for (int j = 0; j < stars; j++) { + binLine += "*"; + } + } + return binLine; + } } diff --git a/src/test/java/SimulationTest.java b/src/test/java/SimulationTest.java new file mode 100644 index 0000000..ec1769f --- /dev/null +++ b/src/test/java/SimulationTest.java @@ -0,0 +1,22 @@ +import org.junit.Assert; +import org.junit.Test; + +public class SimulationTest { + + @Test + public void simulationConstructorTest() { + //Given + Integer numberOfDie = 2; + Integer numberOfTosses = 10000; + + //When + Simulation sim = new Simulation(numberOfDie, numberOfTosses); + Integer actualNumOfDie = sim.getNumOfDie(); + Integer actualNumOfTosses = sim.getNumOfTosses(); + + //Then + Assert.assertEquals(numberOfDie, actualNumOfDie); + Assert.assertEquals(numberOfTosses, actualNumOfTosses); + } + +}