JUnit5 JAVA. Need help to make a unit test of my GenericStack.java code below. Feel free to change the code below to fit the task better. thanks :) Assigment Create a new version of GenericStack (Have started on the code below) that uses an array instead of an ArrayList (this version should also be generic). Be sure to check the size of the array before adding a new item; - if the array becomes full, double the size of the array, and you must copy elements from the old array to the new one.
Note that one cannot use the new operator on a generic type, new E is not allowed.
In order to create the array of the generic type, one must cast:
private E [] elements = (E[]) new Object[100];
Important that push checks that there is enough space, if not you have to double the stack size before push. Pushes should also not allow zero values as arguments, because now they should only be ignored.
Tips: System.arraycopy (...); Public interface for the class is known, but start writing the tests first.
JUnit5(Unit test) Write tests: The tests will cover all scenarios (all possible ways you can use a stack). Since this is a generic class, test it for at least two different types (What if someone uses pop or peek on a blank stack?). Remember to include a test where the stack must be doubled to accommodate a new push (). Feel free to introduce a new public method capacity () that responds to the stack's current capacity. Also, create (if you haven't done) a constructor for the stack that takes in startup capacity (before you have one that creates a default capacity).
public class GenericStack {
private E[] list = (E[])new Object[100];
private int size = 0;
/** Return the number of elements in the stack */
public int getSize() {
return size;
}
/** Return the top element from the stack */
public E peek() {
return list[size - 1];
}
/** Push a new element to the top of the stack */
public void push(E o) {
if (size >= list.length) {
doubleList();
}
list[size++] = o;
}
/** Return and remove the top element from the stack */
public E pop() {
E o = list[--size];
return o;
}
/** Test whether the stack is empty */
public boolean isEmpty() {
return size == 0;
}
/** Create a new array that is double the current array size
* and copy the elements from the current array to the new array */
private void doubleList() {
E[] tempList = (E[])new Object[list.length * 2];
System.arraycopy(list, 0, tempList, 0, list.length);
list = tempList;
}
@Override // Override the toString array in the Object class
public String toString() {
return "stack: " + list.toString();
}
}Hi. I have answered this question before. Here is the completed code for this problem including modified GenericStack class. Comments are included, go through it, learn how things work and let me know if you have any doubts or if you need anything to change. If you are satisfied with the solution, please rate the answer. Thanks
Note: The JUnit test class is completely implemented. It will thoroughly test GenericStack objects of two types – Integer and String
// GenericStack.java
public class GenericStack<E> {
// array
private E[] array;
// current size
private int size;
// initial capacity
private final int DEFAULT_CAPACITY = 10;
// constructor initializes an array of default capacity
public GenericStack() {
array = (E[]) new Object[DEFAULT_CAPACITY];
// initializing size to 0
size = 0;
}
// returns the size
public int size() {
return size;
}
// returns top element; or null if empty
public E peek() {
if (isEmpty()) {
// empty
return null;
}
// returning current top element
return array[size - 1];
}
// adds an element to the top
public void push(E o) {
// preventing addition of null values
if (o != null) {
// if array is full, doubling it
if (size == array.length) {
// creating new array of twice capacity
E[] newArr = (E[]) new Object[size * 2];
// copying array to newArr
System.arraycopy(array, 0, newArr, 0, array.length);
// replacing old array with new one
array = newArr;
}
// adding to index
array[size] = o;
// updating index
size++;
}
}
// removes and returns the top element from stack, or null if empty
public E pop() {
if (isEmpty()) {
// empty stack
return null;
}
// getting element at top
E element = array[size - 1];
// updating size
size--;
// returning removed element
return element;
}
// returns true if stack is empty
public boolean isEmpty() {
return size == 0;
}
@Override
public String toString() {
String str = "stack: [";
// appending all elements of stack to a String
for (int i = 0; i < size; i++) {
str += array[i];
if (i != size - 1) {
// appending a comma and space if this is not last element
str += ", ";
}
}
str += "]";
return str;
}
}
//modified TestGenericStack class to include more tests
public class TestGenericStack {
public static void main(String[] args) {
GenericStack<String> gsString = new GenericStack<String>();
System.out.println("Current top element: " + gsString.peek());
gsString.push("one");
gsString.push("two");
gsString.push(null); // will not be added since element is null
gsString.push("three");
System.out.println("Current top element: " + gsString.peek());
System.out.println("popping until empty");
while (!(gsString.isEmpty())) {
System.out.println(gsString.pop());
}
// attempting to pop an empty stack, should display null
System.out.println("pop on empty stack: " + gsString.pop());
GenericStack<Integer> gsInteger = new GenericStack<Integer>();
System.out.println("Current top element: " + gsInteger.peek());
// adding numbers from 1 to 20 to integer stack
for (int i = 1; i <= 20; i++) {
gsInteger.push(i);
}
gsInteger.push(null); // will not be added since element is null
System.out.println("Current top element: " + gsInteger.peek());
while (!(gsInteger.isEmpty())) {
System.out.println(gsInteger.pop());
}
// attempting to pop an empty stack, should display null
System.out.println("pop on empty stack: " + gsInteger.pop());
}
}
// GenericStackTest.java (JUnit test)
import static org.junit.Assert.*;
import org.junit.Test;
public class GenericStackTest {
// two GenericStack objects, one of Integer type and another of String type
private GenericStack<Integer> intStack;
private GenericStack<String> stringStack;
@Test
public void testGenericStackConstructor() {
// ensuring that constructor creates an empty intStack
intStack = new GenericStack<Integer>();
assertEquals(intStack.size(), 0);
assertEquals(intStack.isEmpty(), true);
assertEquals(intStack.toString(), "stack: []");
// doing the same for stringStack
stringStack = new GenericStack<String>();
assertEquals(stringStack.size(), 0);
assertEquals(stringStack.isEmpty(), true);
assertEquals(stringStack.toString(), "stack: []");
}
@Test
public void testSize() {
// ensuring that intStack size is 0 initially and increments after every
// push operation
intStack = new GenericStack<Integer>();
assertEquals(intStack.size(), 0);
intStack.push(1);
assertEquals(intStack.size(), 1);
for (int i = 1; i < 100; i++) {
intStack.push(i);
}
// after 100 valid push(), ensuring that size is 100
assertEquals(intStack.size(), 100);
// doing similar test for stringStack
stringStack = new GenericStack<String>();
assertEquals(stringStack.size(), 0);
stringStack.push("1");
assertEquals(stringStack.size(), 1);
for (int i = 1; i < 100; i++) {
stringStack.push("" + i);
}
// after 100 valid push(), ensuring that size is 100
assertEquals(stringStack.size(), 100);
}
@Test
public void testPeek() {
// ensuring that peek method always return top value, or null if
// intStack
// is empty
intStack = new GenericStack<Integer>();
assertEquals(intStack.peek(), null);
intStack.push(1);
assertEquals(intStack.peek(), (Integer) 1);
intStack.push(999);
assertEquals(intStack.peek(), (Integer) 999);
// doing similar test for stringStack
stringStack = new GenericStack<String>();
assertEquals(stringStack.peek(), null);
stringStack.push("1");
assertEquals(stringStack.peek(), "1");
stringStack.push("abc");
assertEquals(stringStack.peek(), "abc");
}
@Test
public void testPush() {
// ensuring that push method always add elements to the top
intStack = new GenericStack<Integer>();
for (int i = 0; i < 100; i++) {
intStack.push(i);
assertEquals(intStack.peek(), (Integer) i);
}
// doing similar test for stringStack
stringStack = new GenericStack<String>();
for (int i = 0; i < 100; i++) {
stringStack.push(i + "");
assertEquals(stringStack.peek(), "" + i);
}
}
@Test
public void testPop() {
intStack = new GenericStack<Integer>();
// adding elements from 0 to 100 to intStack
for (int i = 0; i <= 100; i++) {
intStack.push(i);
}
// ensuring that elements are popped in reverse order
for (int i = 100; i >= 0; i--) {
assertEquals(intStack.pop(), (Integer) i);
}
// doing similar test for stringStack
stringStack = new GenericStack<String>();
for (int i = 0; i <= 100; i++) {
stringStack.push(i + "");
}
// ensuring that elements are popped in reverse order
for (int i = 100; i >= 0; i--) {
assertEquals(stringStack.pop(), "" + i);
}
}
@Test
public void testIsEmpty() {
// ensuring that isEmpty works as needed
intStack = new GenericStack<Integer>();
assertEquals(intStack.isEmpty(), true);
intStack.push(1234);
assertEquals(intStack.isEmpty(), false);
intStack.pop();
assertEquals(intStack.isEmpty(), true);
// doing similar test for stringStack
stringStack = new GenericStack<String>();
assertEquals(stringStack.isEmpty(), true);
stringStack.push("java");
assertEquals(stringStack.isEmpty(), false);
stringStack.pop();
assertEquals(stringStack.isEmpty(), true);
}
@Test
public void testToString() {
// thoroughly testing toString method of the intStack
intStack = new GenericStack<Integer>();
assertEquals(intStack.toString(), "stack: []");
intStack.push(1234);
assertEquals(intStack.toString(), "stack: [1234]");
intStack.push(999);
assertEquals(intStack.toString(), "stack: [1234, 999]");
intStack.push(0);
assertEquals(intStack.toString(), "stack: [1234, 999, 0]");
intStack.pop();
assertEquals(intStack.toString(), "stack: [1234, 999]");
intStack.pop();
assertEquals(intStack.toString(), "stack: [1234]");
intStack.pop();
assertEquals(intStack.toString(), "stack: []");
// doing similar test for stringStack
stringStack = new GenericStack<String>();
assertEquals(stringStack.toString(), "stack: []");
stringStack.push("a");
assertEquals(stringStack.toString(), "stack: [a]");
stringStack.push("bb");
assertEquals(stringStack.toString(), "stack: [a, bb]");
stringStack.push("ccc");
assertEquals(stringStack.toString(), "stack: [a, bb, ccc]");
stringStack.pop();
assertEquals(stringStack.toString(), "stack: [a, bb]");
stringStack.pop();
assertEquals(stringStack.toString(), "stack: [a]");
stringStack.pop();
assertEquals(stringStack.toString(), "stack: []");
}
}
JUnit5 JAVA. Need help to make a unit test of my GenericStack.java code below. Feel free...
Write a Client class with a main method that tests the data structures as follows: For the ArrayStack, LinkedStack, ArrayQueue and LinkedQueue: Perform a timing test for each of these data structures. Each timing test should measure in nanoseconds how long it takes to add N Integers to the structure and how long it takes to remove N Integers from the structure. N should vary from 10 to 100,000,000 increasing N by a factor of 10 for each test. Depending...
JAVA: Already completed: MyList.java, MyAbstractList.java, MyArrayList.java, MyLinkedLink.java, MyStack.java, MyQueue.java. Need to complete: ReversePoem.java. This program has you display a pessimistic poem from a list of phrases. Next, this program has you reverse the phrases to find another more optimistic poem. Use the following algorithm. 1. You are given a list of phrases each ending with a pound sign: ‘#’. 2. Create a single String object from this list. 3. Then, split the String of phrases into an array of phrases...
JAVA Lab Create a class called ArrayBasedStack. Declare the following variables: • data: references an array storing elements in the list • topOfStack: an int value representing the location of the stack top in the array • INITIAL_CAPACITY: the default capacity of the stack public class ArrayBasedStack <E> { private E[] data; private int topOfStack; private static final int INITIAL_CAPACITY = 5; } Add a constructor that will initialize the stack with a user-defined initial capacity. The top of the...
Complete StackArray.java code below. Use StackArrayDemo.java to test your implementation of StackArray.java. StackArray.java below. public class StackArray <T> { public static int CAPACITY = 100; private final T[] elements; private int topIndex; // Constructor public StackArray() { // Initialize elements // Initialize topIndex to -1 } public T peek() { // If topIndex is less than zero, return null. // Otherwise, return element from top of the stack. } public T pop() { // If topIndex is less than zero,...
In Java. What would the methods of this class look like?
StackADT.java
public interface StackADT<T>
{
/** Adds one element to the top of this stack.
* @param element element to be pushed onto stack
*/
public void push (T element);
/** Removes and returns the top element from this stack.
* @return T element removed from the top of the stack
*/
public T pop();
/** Returns without removing the top element of this
stack.
* @return T...
Java/Queues ** Task: Write a JUnit test that shows a failure in some part of the ADT -----ArrayQueue.java------- public class ArrayQueue { private static final int INITIAL_CAPACITY = 2; // to permit easier testing private Object[] contents; private int front, rear; /** * Create an empty queue with an initial capacity. */ public ArrayQueue() { contents = new Object[INITIAL_CAPACITY]; } /** * Add an element to...
Java.
Must not use Java API java.util.Stack
/**
A class of stacks whose entries are stored in an array.
Implement all methods in ArrayStack class using resizable
array strategy, i.e. usedoubleArray()
Must throw StackException during exception events in methods:
peek(), pop(), ArrayStack(int initialCapacity)
Do not change or add data fields
Do not add new methods
*/
import java.util.Arrays; public class Arraystack«Т> implements Stack!nterface«T> private TI stack;// Array of stack entries private int topIndex; /7 Index of top entry private static...
I need to implement a stack array but the top of the stack has to be Initialize as the index of the last location in the array. //Array implementation of stacks. import java.util.Arrays; public class ArrayStack implements Stack { //Declare a class constant called DEFAULT_STACK_SIZE with the value 10. private static final int DEFAULT_STACK_SIZE = 10; /* Declare two instance variables: 1. An integer called...
JAVA --Design a class named StackOfStrings that contains: a. A private array elements to store strings in the stack b. A private data field size to store the number of strings in the stack c. A constructor to construct an empty stack with a default capacity of 4 d. A constructor to construct an empty stack with a specified capacity e. A method empty() that returns true if the stack is empty f. A method push(String value) that stores value...
Java.
Must not use Java API java.util.Stack
/**
A class of stacks whose entries are stored in an array.
Implement all methods in ArrayStack class using resizable
array strategy, i.e. usedoubleArray()
Must throw StackException during exception events in methods:
peek(), pop(), ArrayStack(int initialCapacity)
Do not change or add data fields
Do not add new methods
*/
import java.util.Arrays; public class Arraystack«Т> implements Stack!nterface«T> private TI stack;// Array of stack entries private int topIndex; /7 Index of top entry private...