Question: I need help writing the junit test for the ResizableArrayBag class which implements the BagInterface. It must be the junit test class, I already have

I need help writing the junit test for the ResizableArrayBag class which implements the BagInterface.

It must be the junit test class, I already have a regular test class written.

// BagInterface.java

/**

* An interface that describes the operations of a bag of objects.

*

* @author Frank M. Carrano

* @version 4.0

*/

public interface BagInterface

{

/**

* Gets the current number of entries in this bag.

*

* @return The integer number of entries currently in the bag.

*/

public int getCurrentSize();

/**

* Sees whether this bag is empty.

*

* @return True if the bag is empty, or false if not.

*/

public boolean isEmpty();

/**

* Adds a new entry to this bag.

*

* @param newEntry

* The object to be added as a new entry.

* @return True if the addition is successful, or false if not.

*/

public boolean add(T newEntry);

/**

* Removes one unspecified entry from this bag, if possible.

*

* @return Either the removed entry, if the removal.

*

* was successful, or null.

*/

public T remove();

/**

* Removes one occurrence of a given entry from this bag.

*

* @param anEntry

* The entry to be removed.

* @return True if the removal was successful, or false if not.

*/

public boolean remove(T anEntry);

/** Removes all entries from this bag. */

public void clear();

/**

* Counts the number of times a given entry appears in this bag.

*

* @param anEntry

* The entry to be counted.

* @return The number of times anEntry appears in the bag.

*/

public int getFrequencyOf(T anEntry);

/**

* Tests whether this bag contains a given entry.

*

* @param anEntry

* The entry to locate.

* @return True if the bag contains anEntry, or false if not.

*/

public boolean contains(T anEntry);

/**

* Retrieves all entries that are in this bag.

*

* @return A newly allocated array of all the entries in the bag.

*

* Note: If the bag is empty, the returned array is empty.

*/

public T[] toArray();

// newly added methods

/**

* returns a new bag- the union of the bag receiving the call to the method

* and the bag that is the method's one argument

*/

public BagInterface union(BagInterface otherBag);

/**

*

* @return a new bag the intersection of the bag receiving the call to the

* method and the bag that is the method's one argument

*/

public BagInterface intersection(BagInterface otherBag);

/**

* @return the difference of the bag receiving the call to the method and

* the bag that is the method's one argument

*

*/

public BagInterface difference(BagInterface otherBag);

} // end BagInterface

// ResizableArrayBag.java

import java.util.Arrays;

import java.util.Random;

/**

* A class that implements a bag of objects by using an array.

*

* The bag is never full.

*

* @author Frank M. Carrano

* @version 4.0

*/

public final class ResizableArrayBag implements BagInterface

{

private T[] bag; // Cannot be final due to doubling

private int numberOfEntries;

private boolean initialized = false;

private static final int DEFAULT_CAPACITY = 25; // Initial capacity of bag

private static final int MAX_CAPACITY = 10000;

/** Creates an empty bag whose initial capacity is 25. */

public ResizableArrayBag()

{

this(DEFAULT_CAPACITY);

} // end default constructor

/**

* Creates an empty bag having a given initial capacity.

*

* @param initialCapacity

* The integer capacity desired.

*/

public ResizableArrayBag(int initialCapacity)

{

checkCapacity(initialCapacity);

// The cast is safe because the new array contains null entries

@SuppressWarnings("unchecked")

T[] tempBag = (T[]) new Object[initialCapacity]; // Unchecked cast

bag = tempBag;

numberOfEntries = 0;

initialized = true;

} // end constructor

/**

* Creates a bag containing given entries.

*

* @param contents

* An array of objects.

*/

public ResizableArrayBag(T[] contents)

{

checkCapacity(contents.length);

bag = Arrays.copyOf(contents, contents.length);

numberOfEntries = contents.length;

initialized = true;

} // end constructor

/**

* Adds a new entry to this bag.

*

* @param newEntry

* The object to be added as a new entry.

* @return True.

*/

public boolean add(T newEntry)

{

checkInitialization();

if (isArrayFull())

{

doubleCapacity();

} // end if

bag[numberOfEntries] = newEntry;

numberOfEntries++;

return true;

} // end add

/**

* Retrieves all entries that are in this bag.

*

* @return A newly allocated array of all the entries in this bag.

*/

public T[] toArray()

{

checkInitialization();

// The cast is safe because the new array contains null entries.

@SuppressWarnings("unchecked")

T[] result = (T[]) new Object[numberOfEntries]; // Unchecked cast

for (int index = 0; index < numberOfEntries; index++)

{

result[index] = bag[index];

} // end for

return result;

} // end toArray

/**

* Sees whether this bag is empty.

*

* @return True if this bag is empty, or false if not.

*/

public boolean isEmpty()

{

return numberOfEntries == 0;

} // end isEmpty

/**

* Gets the current number of entries in this bag.

*

* @return The integer number of entries currently in this bag.

*/

public int getCurrentSize()

{

return numberOfEntries;

} // end getCurrentSize

/**

* Counts the number of times a given entry appears in this bag.

*

* @param anEntry

* The entry to be counted.

* @return The number of times anEntry appears in this ba.

*/

public int getFrequencyOf(T anEntry)

{

checkInitialization();

int counter = 0;

for (int index = 0; index < numberOfEntries; index++)

{

if (anEntry.equals(bag[index]))

{

counter++;

} // end if

} // end for

return counter;

} // end getFrequencyOf

/**

* Tests whether this bag contains a given entry.

*

* @param anEntry

* The entry to locate.

* @return True if this bag contains anEntry, or false otherwise.

*/

public boolean contains(T anEntry)

{

checkInitialization();

return getIndexOf(anEntry) > -1; // or >= 0

} // end contains

/** Removes all entries from this bag. */

public void clear()

{

while (!isEmpty())

remove();

} // end clear

/**

* Removes one unspecified entry from this bag, if possible.

*

* @return Either the removed entry, if the removal

*

* was successful, or null.

*/

public T remove()

{

checkInitialization();

T result = removeEntry(numberOfEntries - 1);

return result;

} // end remove

/**

* Removes one occurrence of a given entry from this bag.

*

* @param anEntry

* The entry to be removed.

* @return True if the removal was successful, or false if not.

*/

public boolean remove(T anEntry)

{

checkInitialization();

int index = getIndexOf(anEntry);

T result = removeEntry(index);

// Resizing the array if too big

if (isTooBig()) {

reduceArray();

}

return anEntry.equals(result);

} // end remove

// Locates a given entry within the array bag.

// Returns the index of the entry, if located,

// or -1 otherwise.

// Precondition: checkInitialization has been called.

private int getIndexOf(T anEntry)

{

int where = -1;

boolean found = false;

int index = 0;

while (!found && (index < numberOfEntries))

{

if (anEntry.equals(bag[index]))

{

found = true;

where = index;

} // end if

index++;

} // end while

// Assertion: If where > -1, anEntry is in the array bag, and it

// equals bag[where]; otherwise, anEntry is not in the array.

return where;

} // end getIndexOf

// Removes and returns the entry at a given index within the array.

// If no such entry exists, returns null.

// Precondition: 0 <= givenIndex < numberOfEntries.

// Precondition: checkInitialization has been called.

private T removeEntry(int givenIndex)

{

T result = null;

if (!isEmpty() && (givenIndex >= 0))

{

result = bag[givenIndex]; // Entry to remove

int lastIndex = numberOfEntries - 1;

bag[givenIndex] = bag[lastIndex]; // Replace entry to remove with

// last entry

bag[lastIndex] = null; // Remove reference to last entry

numberOfEntries--;

} // end if

// Resizing the array if too big

if (isTooBig()) {

reduceArray();

}

return result;

} // end removeEntry

// Returns true if the array bag is full, or false if not.

private boolean isArrayFull()

{

return numberOfEntries >= bag.length;

} // end isArrayFull

// Doubles the size of the array bag.

// Precondition: checkInitialization has been called.

private void doubleCapacity()

{

int newLength = 2 * bag.length;

checkCapacity(newLength);

bag = Arrays.copyOf(bag, newLength);

} // end doubleCapacity

// Throws an exception if the client requests a capacity that is too large.

private void checkCapacity(int capacity)

{

if (capacity > MAX_CAPACITY)

throw new IllegalStateException(

"Attempt to create a bag whose capacity exceeds " +

"allowed maximum of " + MAX_CAPACITY);

} // end checkCapacity

// Throws an exception if receiving object is not initialized.

private void checkInitialization()

{

if (!initialized)

throw new SecurityException("Uninitialized object used " +

"to call an ArrayBag method.");

} // end checkInitialization

public T replace(T replacement) {

/**

* Replacing a random object and returning the removed object

*/

int randomIndex = new Random().nextInt(numberOfEntries);

T originalData = bag[randomIndex];

bag[randomIndex] = replacement;

return originalData;

}

//newly added methods

/**

* method to remove all occurrences of an entry

* @param anEntry

*/

public void removeEntry(T anEntry) {

while (getIndexOf(anEntry) != -1) {

removeEntry(getIndexOf(anEntry));

}

}

/**

* method to check if two bags are equal

*/

@Override

public boolean equals(Object o) {

if (o instanceof ResizableArrayBag) {

ResizableArrayBag otherBag = (ResizableArrayBag) o;

if (getCurrentSize() == otherBag.getCurrentSize()) {

for (int i = 0; i < numberOfEntries; i++) {

if (getFrequencyOf(bag[i]) != otherBag

.getFrequencyOf(bag[i])) {

return false;

}

return true;

}

}

}

return false;

}

/**

*

* @return true if number of entries in the bag is less than half of the size, and size>20

*/

private boolean isTooBig() {

if (numberOfEntries < bag.length / 2 && bag.length > 20) {

return true;

}

return false;

}

/**

* resizes the bag array to 3/4th of the original array

*/

private void reduceArray() {

int newSize = (int) ((3.0 / 4.0) * bag.length);

bag = Arrays.copyOf(bag, newSize);

}

@Override

public BagInterface union(BagInterface otherBag) {

/**

* creating a new ResizableArrayBag with all elements of this bag

*/

ResizableArrayBag newBag = new ResizableArrayBag(toArray());

/**

* getting all contents of other bag and adding to the new bag

*/

T otherBagContents[] = otherBag.toArray();

if (otherBag != null) {

for (T content : otherBagContents) {

newBag.add(content);

}

}

return newBag;

}

@Override

public BagInterface intersection(BagInterface otherBag) {

/**

* creating a new ResizableArrayBag

*/

ResizableArrayBag newBag = new ResizableArrayBag();

/**

* looping through all elements of this bag

*/

for (int i = 0; i < numberOfEntries; i++) {

T item = bag[i];

/**

* checking if other bag contains the current item and not already

* added to the new bag

*/

if (otherBag.contains(item) && !newBag.contains(item)) {

// checking count of the item in two bags

int count1 = getFrequencyOf(item);

int count2 = otherBag.getFrequencyOf(item);

// finding the minimum count

int commonFrequency = Math.min(count1, count2);

// adding to the new bag specified number of times

for (int j = 0; j < commonFrequency; j++) {

newBag.add(item);

}

}

}

return newBag;

}

@Override

public BagInterface difference(BagInterface otherBag) {

/**

* creating a new ResizableArrayBag

*/

ResizableArrayBag newBag = new ResizableArrayBag();

/**

* looping through all elements of this bag

*/

for (int i = 0; i < numberOfEntries; i++) {

T item = bag[i];

/**

* checking if the item is already added

*/

if (!newBag.contains(item)) {

// checking count of the item in two bags

int count1 = getFrequencyOf(item);

int count2 = otherBag.getFrequencyOf(item);

// finding the difference

int difference=count1-count2;

// adding to the new bag specified number of times

for (int j = 0; j < difference; j++) {

newBag.add(item);

}

}

}

return newBag;

}

} // end ResizableArrayBag

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!