I'm testing my code using JUnit4 to see if an insertion sort of an array of objects (Word(String a, int b)
) is correctly sorting the array. The problem I'm having is that when I run JUnit it fails, giving me an error: "expected {One, 1} but was {One, 1}." If I print out both values I'm comparing before I run the test they are also the same. The code is:
package sort;
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class InsertionTest {
private Word word1;
private Word word2;
private Word word3;
private Word word4;
private Word wordExpected1;
private Word wordExpected2;
private Word wordExpected3;
private Word wordExpected4;
@Before
public void setUp() throws Exception {
word1 = new Word("One", 1);
word2 = new Word("Two", 2);
word3 = new Word("Three", 3);
word4 = new Word("Four", 4);
wordExpected1 = new Word("One", 1);
wordExpected2 = new Word("Two", 2);
wordExpected3 = new Word("Three", 3);
wordExpected4 = new Word("Four", 4);
}
@After
public void tearDown() throws Exception {
}
@SuppressWarnings("deprecation")
@Test
public void test() {
Word[] wordList = { word3, word2, word4, word1 };
Word[] expected = { wordExpected1, wordExpected2, wordExpected3, wordExpected4 };
Insertion.sortInsert(wordList);
assertEquals(expected, wordList);
}
}
The code for the insertionsort:
package sort;
public class Insertion {
/**
* regular insertion sort
* @param x - the input array containing scores of words that need to be sorted.
*/
public static void sortInsert ( Word[] x) {
int N = x.length;
for (int i = 1; i < N; i++){
int tempScore = x[i].getScore();
String tempWord = x[i].getWord();
int j;
for (j = (i - 1); j >= 0 && tempScore < x[j].getScore(); j--){
x[j + 1].setScore(x[j].getScore());
x[j + 1].setWord(x[j].getWord());
}
x[j + 1].setScore(tempScore);
x[j + 1].setWord(tempWord);
}
}
}
The code for the ADT:
package sort;
public class Word implements Comparable<Word>{
private String word;
private int score;
public Word(String w, int s){
this.word = w;
this.score = s;
}
public int getScore(){
return score;
}
public void setScore(int s){
score = s;
}
public String getWord(){
return word;
}
public void setWord(String w){
word = w;
}
@Override
public int compareTo(Word w){
if ((this.score) > (w.score)) { return 1; }
else if ((this.score) < (w.score)) { return -1; }
return 0;
}
public String toString(){
return ("{" + this.word + "," + this.score + "}");
}
}
Any help would be appreciated, thank you!