junit Nodes

julia123

Erfahrenes Mitglied
hi,
mein Junit der vorgegeben ist fällt durch. Hier im Quellcode hab ich in Kommentar meine Lage beschrieben.


Java:
@Test
	public void testShouldPollHighestPriorityWithComparator() {
		Vektor actual[] = { new Vektor(1, 2), new Vektor(1, 1),
				new Vektor(2, 2), new Vektor(2, 1), new Vektor(0, 1),
				new Vektor(0, 2), new Vektor(0, 1), new Vektor(0, 2),
				new Vektor(0, 0) };

		MyPriorityQueue<Vektor> mpq = new MyPriorityQueue<Vektor>(
				actual.length, new VektorLengthComparator());

		for (int i = 0; i < actual.length; i++) {
			mpq.offer(actual[i]);
		}

		try {
			// assertEquals fuer vergleich von "double" benoetigt als dritten
			// Parameter einen "Unschaerfefaktor" fuer Rundungsfehler bei
			// Nachkommastellen
			assertEquals(new Vektor(0, 0).length(), mpq.poll().length(), 0.001); // // funktioniert nicht******! expected 0,0 wars 1,0
			assertEquals(new Vektor(0, 1).length(), mpq.poll().length(), 0.001);// funktioniert 
			assertEquals(new Vektor(0, 1).length(), mpq.poll().length(), 0.001);// funktioniert
			assertEquals(new Vektor(1, 1).length(), mpq.poll().length(), 0.001);// funktioniert
			assertEquals(new Vektor(0, 2).length(), mpq.poll().length(), 0.001);// funktioniert
			assertEquals(new Vektor(0, 2).length(), mpq.poll().length(), 0.001);// funktioniert
			assertEquals(new Vektor(2, 1).length(), mpq.poll().length(), 0.001);// funktioniert
			assertEquals(new Vektor(1, 2).length(), mpq.poll().length(), 0.001);// funktioniert
			assertEquals(new Vektor(2, 2).length(), mpq.poll().length(), 0.001);// funktioniert
		} catch (NoSuchElementException e) {
			fail("Iterator does not work!");
		}
	}


// dieserhier läuft ohne Problemen:
	@Test
	public void testShouldPollHighestPriorityWithoutComparator() {
		Vektor actual[] = { new Vektor(1, 2), new Vektor(1, 1),
				new Vektor(2, 2), new Vektor(2, 1), new Vektor(0, 1),
				new Vektor(0, 2), new Vektor(0, 1), new Vektor(0, 2),
				new Vektor(0, 0) };

		MyPriorityQueue<Vektor> mpq = new MyPriorityQueue<Vektor>(
				actual.length, null);

		for (int i = 0; i < actual.length; i++) {
			mpq.add(actual[i]);
		}

		try {
			// assertEquals fuer vergleich von "double" benoetigt als dritten
			// Parameter einen "Unschaerfefaktor" fuer Rundungsfehler bei
			// Nachkommastellen
			assertEquals(new Vektor(0, 0).length(), mpq.poll().length(), 0.001);
			assertEquals(new Vektor(0, 1).length(), mpq.poll().length(), 0.001);
			assertEquals(new Vektor(0, 1).length(), mpq.poll().length(), 0.001);
			assertEquals(new Vektor(1, 1).length(), mpq.poll().length(), 0.001);
			assertEquals(new Vektor(0, 2).length(), mpq.poll().length(), 0.001);
			assertEquals(new Vektor(0, 2).length(), mpq.poll().length(), 0.001);
			assertEquals(new Vektor(2, 1).length(), mpq.poll().length(), 0.001);
			assertEquals(new Vektor(1, 2).length(), mpq.poll().length(), 0.001);
			assertEquals(new Vektor(2, 2).length(), mpq.poll().length(), 0.001);
		} catch (NoSuchElementException e) {
			fail("Iterator does not work!");
		}
	}


Hier die anderen relevanten Klassen:

Java:
public class Vektor implements Comparable<Vektor> {

	private int x, y;

	public Vektor(int x, int y) {
		this.x = x;
		this.y = y;
	}

	public double length() {
		return Math.sqrt(x * x + y * y);
	}

	@Override
	public int compareTo(Vektor o) {
		if (this.length() < o.length()) {
			return -1;
		} else if (this.length() > o.length()) {
			return 1;
		} else {
			return 0;
		}
	}

	@Override
	public String toString() {
		return "Vektor [x=" + x + ", y=" + y + "]";
	}

	@Override
	public boolean equals(Object o){
		if(o instanceof Vektor){
			Vektor v = (Vektor) o;
			return this.x==v.x && this.y==v.y;
		}
		return false;
		
		
	}
}


public class VektorLengthComparator implements Comparator<Vektor> {

	@Override
	public int compare(Vektor o1, Vektor o2) {
		if (o1.length() == o2.length()) {
			return 0;
		}
		return o1.length() > o2.length() ? 1 : -1;
	}

}

Java:
@Override
	public E poll() throws NoSuchElementException {
		// first==null
		if (first == null) {
			throw new NoSuchElementException();
		} else {
			E temp = first.element;
			first = first.next;
			
			size--;

			return temp;
		}

	}

Was ich nur verstanden hab das meine Queue falsch sortieren würde. 1,0 vor 0,0 setzen.