diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..62c89355 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.idea/ \ No newline at end of file diff --git a/pom.xml b/pom.xml index df6458d1..9eadb11f 100644 --- a/pom.xml +++ b/pom.xml @@ -27,7 +27,6 @@ junit junit 4.12 - test - + \ No newline at end of file diff --git a/src/main/java/edu/kis/vh/nursery/FIFORhymer.java b/src/main/java/edu/kis/vh/nursery/FIFORhymer.java deleted file mode 100644 index 28591ada..00000000 --- a/src/main/java/edu/kis/vh/nursery/FIFORhymer.java +++ /dev/null @@ -1,21 +0,0 @@ -package edu.kis.vh.nursery; - -public class FIFORhymer extends defaultCountingOutRhymer { - - public defaultCountingOutRhymer temp = new defaultCountingOutRhymer(); - - @Override - public int countOut() { - while (!callCheck()) - - temp.countIn(super.countOut()); - - int ret = temp.countOut(); - - while (!temp.callCheck()) - - countIn(temp.countOut()); - - return ret; - } -} diff --git a/src/main/java/edu/kis/vh/nursery/FIFOrhymer.java b/src/main/java/edu/kis/vh/nursery/FIFOrhymer.java new file mode 100644 index 00000000..a7bdd886 --- /dev/null +++ b/src/main/java/edu/kis/vh/nursery/FIFOrhymer.java @@ -0,0 +1,25 @@ +package edu.kis.vh.nursery; + +public class FIFOrhymer extends defaultRhymer { + + private final defaultRhymer temp = new defaultRhymer(); + + @Override + protected int getPenultimateNumber() { + while (!check()) + + temp.countIn(super.getPenultimateNumber()); + + int ret = temp.getPenultimateNumber(); + + while (!temp.check()) + + countIn(temp.getPenultimateNumber()); + + return ret; + } + + public defaultRhymer getTemp() { + return temp; + } +} diff --git a/src/main/java/edu/kis/vh/nursery/HanoiRhymer.java b/src/main/java/edu/kis/vh/nursery/HanoiRhymer.java index 755b2d58..17d50962 100644 --- a/src/main/java/edu/kis/vh/nursery/HanoiRhymer.java +++ b/src/main/java/edu/kis/vh/nursery/HanoiRhymer.java @@ -1,17 +1,23 @@ package edu.kis.vh.nursery; -public class HanoiRhymer extends defaultCountingOutRhymer { +public class HanoiRhymer extends defaultRhymer { -int totalRejected = 0; + private int totalRejected = 0; - public int reportRejected() { + protected int RejectedReports() { return totalRejected; } - public void countIn(int in) { - if (!callCheck() && in > peekaboo()) + protected void countIn(int in) { + if (!check() && in > getLastNumber()) totalRejected++; - else - super.countIn(in); + else + super.countIn(in); } + + public int getTotalRejected() { + return totalRejected; + } + + } diff --git a/src/main/java/edu/kis/vh/nursery/defaultCountingOutRhymer.java b/src/main/java/edu/kis/vh/nursery/defaultCountingOutRhymer.java deleted file mode 100644 index 199abf6d..00000000 --- a/src/main/java/edu/kis/vh/nursery/defaultCountingOutRhymer.java +++ /dev/null @@ -1,34 +0,0 @@ -package edu.kis.vh.nursery; - -public class defaultCountingOutRhymer { - - private int[] NUMBERS = new int[12]; - - public int total = -1; - - public void countIn(int in) { - if (!isFull()) - NUMBERS[++total] = in; - } - - public boolean callCheck() { - return total == -1; - } - - public boolean isFull() { - return total == 11; - } - - protected int peekaboo() { - if (callCheck()) - return -1; - return NUMBERS[total]; - } - - public int countOut() { - if (callCheck()) - return -1; - return NUMBERS[total--]; - } - -} diff --git a/src/main/java/edu/kis/vh/nursery/defaultRhymer.java b/src/main/java/edu/kis/vh/nursery/defaultRhymer.java new file mode 100644 index 00000000..174c16e6 --- /dev/null +++ b/src/main/java/edu/kis/vh/nursery/defaultRhymer.java @@ -0,0 +1,69 @@ +package edu.kis.vh.nursery; + +public class defaultRhymer { + + private final int[] NUMBERS = new int[12]; + private final int STACK_IS_EMPTY = -1; + private int total = -1; + + public int getTotal() { + return total; + } + /** + * Adds a number to the stack if it is not full. + * + * @param in - number to be added + */ + protected void countIn(int in) { + if (!isFull()) + NUMBERS[++total] = in; + } + /** + * Checks if the stack is empty. + * + * @return true if the stack is empty, false if it's not + */ + protected boolean check() { + return total == -1; + } + + + /** + * Checks if the stack is full. + * + * @return true if the stack is full, false if it's not + */ + protected boolean isFull() { + return total == 11; + } + /** + * Returns top value of the stack. + * + * @return value at the top of stack - if stack is empty returns STACK_IS_EMPTY + */ + protected int getLastNumber() { + if (check()) + return STACK_IS_EMPTY; + return NUMBERS[total]; + } + /** + * Removes and returns the value at the top of the stack. + * + * @return value at the top of stack - if stack is empty returns STACK_IS_EMPTY + */ + protected int getPenultimateNumber() { + if (check()) + return STACK_IS_EMPTY; + return NUMBERS[total--]; + } + /** + * Returns the current stack. + * + * @return current stack + */ + public int[] getNUMBERS() { + return NUMBERS; + } + + +} diff --git a/src/main/java/edu/kis/vh/nursery/factory/DefaultRhymersFactory.java b/src/main/java/edu/kis/vh/nursery/factory/DefaultRhymersFactory.java index 60ba2a16..d97c6d5c 100644 --- a/src/main/java/edu/kis/vh/nursery/factory/DefaultRhymersFactory.java +++ b/src/main/java/edu/kis/vh/nursery/factory/DefaultRhymersFactory.java @@ -1,29 +1,28 @@ package edu.kis.vh.nursery.factory; -import edu.kis.vh.nursery.defaultCountingOutRhymer; -import edu.kis.vh.nursery.FIFORhymer; +import edu.kis.vh.nursery.defaultRhymer; +import edu.kis.vh.nursery.FIFOrhymer; import edu.kis.vh.nursery.HanoiRhymer; -import edu.kis.vh.nursery.factory.Rhymersfactory; public class DefaultRhymersFactory implements Rhymersfactory { @Override - public defaultCountingOutRhymer GetStandardRhymer() { - return new defaultCountingOutRhymer(); + public defaultRhymer getStandardRhymer() { + return new defaultRhymer(); } @Override - public defaultCountingOutRhymer GetFalseRhymer() { - return new defaultCountingOutRhymer(); + public defaultRhymer getFalseRhymer() { + return new defaultRhymer(); } @Override - public defaultCountingOutRhymer GetFIFORhymer() { - return new FIFORhymer(); + public defaultRhymer getFIFORhymer() { + return new FIFOrhymer(); } @Override - public defaultCountingOutRhymer GetHanoiRhymer() { + public defaultRhymer getHanoiRhymer() { return new HanoiRhymer(); } diff --git a/src/main/java/edu/kis/vh/nursery/factory/Rhymersfactory.java b/src/main/java/edu/kis/vh/nursery/factory/Rhymersfactory.java index 033755d0..d01013f5 100644 --- a/src/main/java/edu/kis/vh/nursery/factory/Rhymersfactory.java +++ b/src/main/java/edu/kis/vh/nursery/factory/Rhymersfactory.java @@ -1,15 +1,20 @@ package edu.kis.vh.nursery.factory; -import edu.kis.vh.nursery.defaultCountingOutRhymer; +import edu.kis.vh.nursery.defaultRhymer; public interface Rhymersfactory { - public defaultCountingOutRhymer GetStandardRhymer(); - - public defaultCountingOutRhymer GetFalseRhymer(); - - public defaultCountingOutRhymer GetFIFORhymer(); - - public defaultCountingOutRhymer GetHanoiRhymer(); - + public defaultRhymer getStandardRhymer(); + // TODO: modifier 'public' needs to be deleted - redundant for interface members + + + public defaultRhymer getFalseRhymer(); + // TODO: modifier 'public' needs to be deleted - redundant for interface members + + public defaultRhymer getFIFORhymer(); + // TODO: modifier 'public' needs to be deleted - redundant for interface members + + public defaultRhymer getHanoiRhymer(); + // TODO: modifier 'public' needs to be deleted - redundant for interface members + } diff --git a/src/main/java/edu/kis/vh/nursery/list/IntLinkedList.java b/src/main/java/edu/kis/vh/nursery/list/IntLinkedList.java index 07efc0a2..e70f9f6d 100644 --- a/src/main/java/edu/kis/vh/nursery/list/IntLinkedList.java +++ b/src/main/java/edu/kis/vh/nursery/list/IntLinkedList.java @@ -2,39 +2,67 @@ public class IntLinkedList { - Node last; - int i; - + private static final int EMPTY_VALUE = -1; + private Node last; + private int i; + // TODO: 'i' field needs to be deleted, it's never used public void push(int i) { if (last == null) last = new Node(i); else { - last.next = new Node(i); - last.next.prev = last; - last = last.next; + last.setNext(new Node(i)); + last.getNext().setPrev(last); + last = last.getNext(); } } - public boolean isEmpty() { return last == null; } - public boolean isFull() { return false; } + // TODO: method unused, needs proper implementation public int top() { if (isEmpty()) - return -1; - return last.value; + return EMPTY_VALUE; + return last.getValue(); } - public int pop() { if (isEmpty()) - return -1; - int ret = last.value; - last = last.prev; + return EMPTY_VALUE; + int ret = last.getValue(); + last = last.getPrev(); return ret; } + private class Node { + + private final int value; + private Node prev; + private Node next; + + public Node(int i) { + value = i; + } + + public int getValue() { + return value; + } + public Node getPrev() { + return prev; + } + + public void setPrev(Node prev) { + this.prev = prev; + } + + public Node getNext() { + return next; + } + + public void setNext(Node next) { + this.next = next; + } + } } diff --git a/src/main/java/edu/kis/vh/nursery/list/IntLinkedListJUnitTest.java b/src/main/java/edu/kis/vh/nursery/list/IntLinkedListJUnitTest.java new file mode 100644 index 00000000..9bd6c3b7 --- /dev/null +++ b/src/main/java/edu/kis/vh/nursery/list/IntLinkedListJUnitTest.java @@ -0,0 +1,66 @@ +package edu.kis.vh.nursery.list; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +public class IntLinkedListJUnitTest { + + private IntLinkedList list; + + @Before + public void setUp() { + list = new IntLinkedList(); + } + + @Test + public void testPushAndTop() { + Assert.assertTrue(list.isEmpty()); + list.push(10); + Assert.assertFalse(list.isEmpty()); + Assert.assertEquals(10, list.top()); + } + + @Test + public void testPushMultipleAndTop() { + for(int i = 0; i < 100; i++) { + list.push(i); + Assert.assertEquals(i, list.top()); + } + list.push(30); + Assert.assertEquals(30, list.top()); + } + + @Test + public void testTopWhenEmpty() { + Assert.assertEquals(-1, list.top()); + } + + @Test + public void testPopWhenEmpty() { + Assert.assertEquals(-1, list.pop()); + } + + @Test + public void testPopSingleElement() { + list.push(10); + Assert.assertEquals(10, list.pop()); + Assert.assertTrue(list.isEmpty()); + } + + @Test + public void testPopAndTopMultipleElements() { + list.push(100); + list.push(200); + list.push(300); + + Assert.assertEquals(300, list.pop()); + Assert.assertEquals(200, list.top()); + + Assert.assertEquals(200, list.pop()); + Assert.assertEquals(100, list.top()); + + Assert.assertEquals(100, list.pop()); + Assert.assertTrue(list.isEmpty()); + } +} diff --git a/src/main/java/edu/kis/vh/nursery/list/Node.java b/src/main/java/edu/kis/vh/nursery/list/Node.java deleted file mode 100644 index 0a2cd75e..00000000 --- a/src/main/java/edu/kis/vh/nursery/list/Node.java +++ /dev/null @@ -1,12 +0,0 @@ -package edu.kis.vh.nursery.list; - -public class Node { - - public int value; - public Node prev, next; - - public Node(int i) { - value = i; - } - -} diff --git a/src/test/java/edu/kis/vh/nursery/RhymersDemo.java b/src/test/java/edu/kis/vh/nursery/RhymersDemo.java index 05aba9fa..16122105 100644 --- a/src/test/java/edu/kis/vh/nursery/RhymersDemo.java +++ b/src/test/java/edu/kis/vh/nursery/RhymersDemo.java @@ -1,7 +1,5 @@ package edu.kis.vh.nursery; -import edu.kis.vh.nursery.defaultCountingOutRhymer; -import edu.kis.vh.nursery.HanoiRhymer; import edu.kis.vh.nursery.factory.DefaultRhymersFactory; import edu.kis.vh.nursery.factory.Rhymersfactory; @@ -9,27 +7,29 @@ class RhymersDemo { public static void main(String[] args) { Rhymersfactory factory = new DefaultRhymersFactory(); - - defaultCountingOutRhymer[] rhymers = { factory.GetStandardRhymer(), factory.GetFalseRhymer(), - factory.GetFIFORhymer(), factory.GetHanoiRhymer()}; - - for (int i = 1; i < 15; i++) - for (int j = 0; j < 3; j++) - rhymers[j].countIn(i); - - java.util.Random rn = new java.util.Random(); - for (int i = 1; i < 15; i++) - rhymers[3].countIn(rn.nextInt(20)); - - for (int i = 0; i < rhymers.length; i++) { - while (!rhymers[i].callCheck()) - System.out.print(rhymers[i].countOut() + " "); - System.out.println(); + testRhymers(factory); + } + private static void testRhymers (Rhymersfactory factory){ + defaultRhymer[] rhymers = {factory.getStandardRhymer(), factory.getFalseRhymer(), + factory.getFIFORhymer(), factory.getHanoiRhymer()}; + + for (int i = 1; i < 15; i++) + for (int j = 0; j < 3; j++) + rhymers[j].countIn(i); + + java.util.Random rn = new java.util.Random(); + for (int i = 1; i < 15; i++) + rhymers[3].countIn(rn.nextInt(20)); + + for (int i = 0; i < rhymers.length; i++) { + while (!rhymers[i].check()) + System.out.print(rhymers[i].getPenultimateNumber() + " "); + System.out.println(); + } + // TODO: Optional, can be replaced with for (DefaultRhymer rhymer : rhymers) + + System.out.println("total rejected is " + + ((HanoiRhymer) rhymers[3]).RejectedReports()); + } - - System.out.println("total rejected is " - + ((HanoiRhymer) rhymers[3]).reportRejected()); - } - -} \ No newline at end of file diff --git a/src/test/java/edu/kis/vh/nursery/RhymersJUnitTest.java b/src/test/java/edu/kis/vh/nursery/RhymersJUnitTest.java index 144906eb..bdb3be90 100644 --- a/src/test/java/edu/kis/vh/nursery/RhymersJUnitTest.java +++ b/src/test/java/edu/kis/vh/nursery/RhymersJUnitTest.java @@ -4,74 +4,82 @@ import org.junit.Test; public class RhymersJUnitTest { - + //test launched and ended successfully, process ended with exit code 0 @Test public void testCountIn() { - defaultCountingOutRhymer rhymer = new defaultCountingOutRhymer(); + defaultRhymer rhymer = new defaultRhymer(); int testValue = 4; rhymer.countIn(testValue); - int result = rhymer.peekaboo(); + int result = rhymer.getLastNumber(); Assert.assertEquals(testValue, result); } @Test public void testCallCheck() { - defaultCountingOutRhymer rhymer = new defaultCountingOutRhymer(); - boolean result = rhymer.callCheck(); + defaultRhymer rhymer = new defaultRhymer(); + boolean result = rhymer.check(); Assert.assertEquals(true, result); + // TODO: Optional, assertEquals can be replaced with assertTrue + rhymer.countIn(888); - result = rhymer.callCheck(); + result = rhymer.check(); Assert.assertEquals(false, result); } + // TODO: Optional, assertEquals can be replaced with assertFalse + @Test public void testIsFull() { - defaultCountingOutRhymer rhymer = new defaultCountingOutRhymer(); + defaultRhymer rhymer = new defaultRhymer(); final int STACK_CAPACITY = 12; for (int i = 0; i < STACK_CAPACITY; i++) { boolean result = rhymer.isFull(); Assert.assertEquals(false, result); rhymer.countIn(888); } + // TODO: Optional, assertEquals can be replaced with assertFalse + boolean result = rhymer.isFull(); Assert.assertEquals(true, result); + // TODO: Optional, assertEquals can be replaced with assertTrue + } @Test public void testPeekaboo() { - defaultCountingOutRhymer rhymer = new defaultCountingOutRhymer(); + defaultRhymer rhymer = new defaultRhymer(); final int EMPTY_STACK_VALUE = -1; - int result = rhymer.peekaboo(); + int result = rhymer.getLastNumber(); Assert.assertEquals(EMPTY_STACK_VALUE, result); int testValue = 4; rhymer.countIn(testValue); - result = rhymer.peekaboo(); + result = rhymer.getLastNumber(); Assert.assertEquals(testValue, result); - result = rhymer.peekaboo(); + result = rhymer.getLastNumber(); Assert.assertEquals(testValue, result); } @Test public void testCountOut() { - defaultCountingOutRhymer rhymer = new defaultCountingOutRhymer(); + defaultRhymer rhymer = new defaultRhymer(); final int EMPTY_STACK_VALUE = -1; - int result = rhymer.countOut(); + int result = rhymer.getPenultimateNumber(); Assert.assertEquals(EMPTY_STACK_VALUE, result); int testValue = 4; rhymer.countIn(testValue); - result = rhymer.countOut(); + result = rhymer.getPenultimateNumber(); Assert.assertEquals(testValue, result); - result = rhymer.countOut(); + result = rhymer.getPenultimateNumber(); Assert.assertEquals(EMPTY_STACK_VALUE, result); } diff --git a/target/classes/edu/kis/vh/nursery/FIFOrhymer.class b/target/classes/edu/kis/vh/nursery/FIFOrhymer.class new file mode 100644 index 00000000..003b305c Binary files /dev/null and b/target/classes/edu/kis/vh/nursery/FIFOrhymer.class differ diff --git a/target/classes/edu/kis/vh/nursery/HanoiRhymer.class b/target/classes/edu/kis/vh/nursery/HanoiRhymer.class new file mode 100644 index 00000000..15f6d275 Binary files /dev/null and b/target/classes/edu/kis/vh/nursery/HanoiRhymer.class differ diff --git a/target/classes/edu/kis/vh/nursery/defaultRhymer.class b/target/classes/edu/kis/vh/nursery/defaultRhymer.class new file mode 100644 index 00000000..5ac1d143 Binary files /dev/null and b/target/classes/edu/kis/vh/nursery/defaultRhymer.class differ diff --git a/target/classes/edu/kis/vh/nursery/factory/DefaultRhymersFactory.class b/target/classes/edu/kis/vh/nursery/factory/DefaultRhymersFactory.class new file mode 100644 index 00000000..4e139ff9 Binary files /dev/null and b/target/classes/edu/kis/vh/nursery/factory/DefaultRhymersFactory.class differ diff --git a/target/classes/edu/kis/vh/nursery/factory/Rhymersfactory.class b/target/classes/edu/kis/vh/nursery/factory/Rhymersfactory.class new file mode 100644 index 00000000..f96d9360 Binary files /dev/null and b/target/classes/edu/kis/vh/nursery/factory/Rhymersfactory.class differ diff --git a/target/classes/edu/kis/vh/nursery/list/IntLinkedList$Node.class b/target/classes/edu/kis/vh/nursery/list/IntLinkedList$Node.class new file mode 100644 index 00000000..24b7a92d Binary files /dev/null and b/target/classes/edu/kis/vh/nursery/list/IntLinkedList$Node.class differ diff --git a/target/classes/edu/kis/vh/nursery/list/IntLinkedList.class b/target/classes/edu/kis/vh/nursery/list/IntLinkedList.class new file mode 100644 index 00000000..59a6d55d Binary files /dev/null and b/target/classes/edu/kis/vh/nursery/list/IntLinkedList.class differ diff --git a/target/classes/edu/kis/vh/nursery/list/IntLinkedListJUnitTest.class b/target/classes/edu/kis/vh/nursery/list/IntLinkedListJUnitTest.class new file mode 100644 index 00000000..51503ce8 Binary files /dev/null and b/target/classes/edu/kis/vh/nursery/list/IntLinkedListJUnitTest.class differ diff --git a/target/test-classes/edu/kis/vh/nursery/RhymersDemo.class b/target/test-classes/edu/kis/vh/nursery/RhymersDemo.class new file mode 100644 index 00000000..404f3be5 Binary files /dev/null and b/target/test-classes/edu/kis/vh/nursery/RhymersDemo.class differ diff --git a/target/test-classes/edu/kis/vh/nursery/RhymersJUnitTest.class b/target/test-classes/edu/kis/vh/nursery/RhymersJUnitTest.class new file mode 100644 index 00000000..3d9ff426 Binary files /dev/null and b/target/test-classes/edu/kis/vh/nursery/RhymersJUnitTest.class differ