import org.junit.*;
import org.junit.runner.*;
import org.junit.Assert.*;
public class RlistTest {
@Test
public String testadd() {
Rlist<String> rlist = new Rlist<String>();
rlist.add("World");
rlist.add("Hello");
return rlist.toString();
};
Assert.assertTrue( "False", rlist.toString() == "<Hello, World>" );
}
public static void main(String[] args) {
JUnitCore junit = new JUnitCore();
junit.addListener( new PI1TestRunListener() );
junit.run( RlistTest.class );
}
}
import org.junit.*;
import org.junit.runner.*;
import org.junit.Assert.*;
public class RlistTest {
@Test
public String testadd() {
Rlist<String> rlist = new Rlist<String>(){
return rlist.toString();
};
Assert.assertTrue("False!", rlist.add("Hello").toString() == "<Hello>");
}
public static void main(String[] args) {
JUnitCore junit = new JUnitCore();
junit.addListener( new PI1TestRunListener() );
junit.run( RlistTest.class );
}
}
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.JUnitCore;
public class RlistTest<T extends Comparable<T>> {
@Test
public void testadd() {
Rlist<String> rlist = new Rlist<String>();
Assert.assertTrue("False!", rlist.add("Hello").toString() == "<Hello>");
}
public static void main(String[] args) {
JUnitCore junit = new JUnitCore();
junit.addListener( new PI1TestRunListener() );
junit.run( RlistTest.class );
}
}
Import vergessen?Rlist cannot be resolved to a type
rlist.add("Hello").toString() == "<Hello>"
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.JUnitCore;
public class RlistTest<T> {
@Test
public void testadd01() {
/**
* @test
* <br><b>tag</b> T01
* <br><b>condition</b>
* <br><b>event</b> Aufruf add(String) auf leere Liste
* implizit: Aufruf toString()
* <br><b>expected</b> PASS
*/
Rlist<String> rlist = new Rlist<String>();
rlist.add("Hello");
Assert.assertTrue("False!", rlist.toString().equals("<Hello>") );
}
@Test
public void testadd02() {
/**
* @test
* <br><b>tag</b> T02
* <br><b>condition</b>
* <br><b>event</b> Aufruf add(String) auf Liste mit 1 Element
* auf Ankerlement,
* implizit: Aufruf next(),
* implizit: Aufruf toString()
* <br><b>expected</b> PASS
*/
Rlist<String> rlist = new Rlist<String>();
rlist.add("Hello");
rlist.add("World");
Assert.assertTrue("False!", rlist.toString().equals("<World, Hello>") );
}
@Test
public void testadd03() {
/**
* @test
* <br><b>tag</b> T03
* <br><b>condition</b>
* <br><b>event</b> Aufruf add(String) auf Liste mit 1 Element
* auf Ankerlement,
* implizit: Aufruf next(),
* implizit: Aufruf toString()
* <br><b>expected</b> FAIL
*/
Rlist<String> rlist = new Rlist<String>();
rlist.add("Hello");
rlist.add("World");
Assert.assertTrue("False!", rlist.toString().equals("<Hello, World>") );
}
@Test
public void testadd04() {
/**
* @test
* <br><b>tag</b> T04
* <br><b>condition</b>
* <br><b>event</b> Aufruf add(String) auf Liste mit 1 Element
* auf Nicht-Ankerlement,
* implizit: Aufruf next(),
* implizit: Aufruf toString()
* <br><b>expected</b> PASS
*/
Rlist<String> rlist = new Rlist<String>();
rlist.add("Hello");
Rlist<String> rlist2 = rlist.next();
rlist2.add("World");
Assert.assertTrue("False!", rlist.toString().equals("<Hello, World>") );
}
@Test
public void testadd05() {
/**
* @test
* <br><b>tag</b> T05
* <br><b>condition</b>
* <br><b>event</b> Aufruf add(String) auf Liste mit 1 Element
* auf Nicht-Ankerlement,
* implizit: Aufruf next(),
* implizit: Aufruf toString()
* <br><b>expected</b> PASS
*/
Rlist<String> rlist = new Rlist<String>();
rlist.add("Hello");
Rlist<String> rlist2 = rlist.next();
rlist2.add("World");
Rlist<String> rlist3 = rlist.next().next();
rlist3.add("this");
Rlist<String> rlist4 = rlist.next().next().next();
rlist4.add("me!");
Rlist<String> rlist5 = rlist.next().next().next();
rlist5.add("is");
Assert.assertTrue("False!", rlist.toString().equals("<Hello, World, this, is, me!>") );
}
public static void main(String[] args) {
JUnitCore junit = new JUnitCore();
junit.addListener( new PI1TestRunListener() );
junit.run( RlistTest.class );
}
}
import static org.junit.Assert.*;
/**
* Methode addSorted() fügt das Element d in die Liste
* ein, so dass eine vorher aufsteigend sortierte Liste
* nach Ausführung von addSorted() immer noch aufsteigend
* sortiert ist.
* Diese Methode darf nur auf das Ankerelement aufgerufen
* werden.
*
* @param d Das einzufügende Element.
*
* @note Nutzdaten werden mit der Funktion compareTo() verglichen.
*/
public void addSorted(T d) {
Rlist<T> m = new Rlist<T>();
m.data = d;
if( this.isEmpty() ) {
m.p = this;
m.n = this;
this.n = m;
this.p = m;
}
Rlist<T> prev = this.next();
for( Rlist<T> l = this.next().next(); l != this; l = l.next(), prev = prev.next() ){
if( l.get().compareTo(m.data) >= 0 && prev.get().compareTo(m.data)<=0 ){
m.n = l;
m.p = prev;
prev.n = m;
l.p = m;
}
}
m.p = this.n;
m.n = this;
this.p.n = m;
}
Rlist<T> m = new Rlist<T>();
m.data = d;
m.n = l;
m.p = prev;
prev.n = m;
l.p = m;
m.n = l;
m.p = prev;
prev.n = m;
l.p = m;
Rlist<T> m = new Rlist<T>();
m.data = d;
m.n = this.n;
this.n.p = m;
this.n = m;
m.p = this;
@Test
public void testaddSorted01() {
/**
* @test
* <br><b>tag</b> T21
* <br><b>condition</b>
* <br><b>event</b> Aufruf addSorted(String) auf Liste mit 2 Elementen,
* die lexikalisch geordnet ist.
*
* <br><b>expected</b> PASS
*/
Rlist<String> rlist = new Rlist<String>();
rlist.insert("Hello");
rlist.insert("World");
rlist.addSorted("this");
Assert.assertTrue("False!", rlist.toString().equals("<Hello, this, World>"));
}
@Test
public void testaddSorted01() {
/**
* @test
* <br><b>tag</b> T21
* <br><b>condition</b>
* <br><b>event</b> Aufruf addSorted(String) auf Liste mit 2 Elementen,
* die lexikalisch geordnet ist.
*
* <br><b>expected</b> PASS
*/
Rlist<String> rlist = new Rlist<String>();
rlist.insert("Affe");
rlist.insert("Zebra");
rlist.addSorted("Katze");
Assert.assertTrue("False!", rlist.toString().equals("<Affe, Katze, Zebra>"));
}
public void addSorted(T d) {
Rlist<T> m = new Rlist<T>();
m.data = d;
if( this.isEmpty() ) {
m.p = this;
m.n = this;
this.n = m;
this.p = m;
}
Rlist<T> prev = this.next();
for( Rlist<T> l = this.next().next(); l != this; l = l.next(), prev = prev.next() ){
if( l.get().compareTo(m.data) >= 0 && prev.get().compareTo(m.data)<=0 ){
prev.add(m.data);
break;
}
}
this.p.add(m.data);
}
Anstatt Assert.assertTrue(... bla.equals(blubb) ...)
kannst du auch Assert.assertEquals(expected , actual) verwenden, falls du dazu gerne noch eigene Fehlermeldungen hättest geht auch Assert.assertEquals(message, expected, actual).
Wenn du die Funktionen statisch importierst (entweder per wildcard wie unten, oder sauber einzeln falls du nicht mehr von Assert verwendest)
- deine insert-Aufrufe erhalten zwar netterweise die sortierbarkeit, aber du läufst hier in die Gefahr, dass du vorher die sortiertheit der Liste zerstörst und damit keinen konsistenten Methodenausgang bei addSorted() mehr garantieren kannst.so dass eine vorher aufsteigend sortierte Liste nach Ausführung von addSorted() immer noch aufsteigend sortiert ist
public static void main( String[] args )
{
ArrayList<String> list = new ArrayList<String>();
list.add( "this" );
list.add("Hello");
list.add("World");
list.add("A");
list.add("a");
Collections.sort( list );
System.out.println(list);
}
(Collections.sort() benutzt intern ebenfalls compareTo() aus dem Interface Comparable)[A, Hello, World, a, this]
Assert.assertTrue("False!", rlist.toString().equals("<Hello, this, World>"));
assertEquals("<Hello, World, this>" , rlist.toString() )
public void addSorted( T d )
{
Rlist<T> m = new Rlist<T>();
m.data = d;
if ( this.isEmpty() )
{
m.p = this;
m.n = this;
this.n = m;
this.p = m;
}
System.out.println( "Stelle 1 " + this );
Rlist<T> prev = this.next();
for ( Rlist<T> l = this.next().next(); l != this; l = l.next(), prev = prev.next() )
{
if ( l.get().compareTo( m.data ) >= 0 && prev.get().compareTo( m.data ) <= 0 )
{
prev.add( m.data );
break;
}
}
System.out.println( "Stelle 2 " + this );
this.p.add( m.data );
System.out.println( "Stelle 3 " + this);
}
public static void main( String[] args )
{
Rlist<String> rlist = new Rlist<String>();
rlist.addSorted( "Banane" );
rlist.addSorted( "Affe" );
rlist.addSorted( "Kuchen" );
}
Stelle 1 <Banane>
Stelle 2 <Banane>
Stelle 3 <Banane, Banane>
Stelle 1 <Banane, Banane>
Stelle 2 <Banane, Banane>
Stelle 3 <Banane, Banane, Affe>
Stelle 1 <Banane, Banane, Affe>
Stelle 2 <Banane, Banane, Affe>
Stelle 3 <Banane, Banane, Affe, Kuchen>
<Affe, Banane, Kuchen>
Für Strings ist dir sortiertheit übrigens korrekt, compare ist case-sensitive.
Ausgabe:Java:public static void main( String[] args ) { ArrayList<String> list = new ArrayList<String>(); list.add( "this" ); list.add("Hello"); list.add("World"); list.add("A"); list.add("a"); Collections.sort( list ); System.out.println(list); }
(Collections.sort() benutzt intern ebenfalls compareTo() aus dem Interface Comparable)[A, Hello, World, a, this]
wenn liste leer (also das nächste element wieder das aktuelle ist)
einfach anhängen (add)
wenn liste leer (also das nächste element wieder das aktuelle ist)
einfach anhängen (add)
ansonsten: Hinter dem aktuellem Element ist also ein anderes Element.
wenn liste leer (also das nächste element wieder das aktuelle ist)
einfach anhängen (add)
ansonsten: Hinter dem aktuellem Element ist also ein anderes Element.
ist es wieder der anker:
einfügen
ansonsten:
wenn liste leer (also das nächste element wieder das aktuelle ist)
einfach anhängen (add)
ansonsten: Hinter dem aktuellem Element ist also ein anderes Element.
ist es wieder der anker:
einfügen
ansonsten:
falls das nächste Element größer bzw gleich ist -> einfügen und abbrechen
falls es kleiner ist (else) -> eins weitergehen
public void addSorted(T d) {
Rlist<T> m = new Rlist<T>();
m.data = d;
if( this.isEmpty() ) {
this.add(m.data);
}
else{
Rlist<T> prev = this;
for( Rlist<T> l = this.next(); l != this; l = l.next(), prev = prev.next() ){
if(l == prev){l.add(m.data);}
else {if( l.get().compareTo(m.data) >= 0 ){
prev.add(m.data);
break;
}
}
}
}
public void addSorted( T d )
{
Rlist<T> actualElement = this;
boolean elementAdded = false;
while ( !elementAdded ) //Solange das Element nicht eingefügt wurde
{
if ( actualElement.next() == this ) //Wenn Liste leer
{
actualElement.add( d ); //Einfach anhängen
elementAdded = true;
}
else //Ansonsten: hinter dem aktuellem Element ist ein anderes Element
{
if ( actualElement.next().get().compareTo( d ) >= 0 ) //Ist das nächste Element größer bzw gleich dem einzufügendem
{
actualElement.add( d ); //Einfügen
elementAdded = true;
}
else //Falls es kleiner ist (else)
{
actualElement = actualElement.n; //Eins weitergehen
}
}
}
}
@Test
public void addSortedDoesNotChangeIsSorted()
{
Rlist<Integer> rlist = new Rlist<Integer>();
int[] testNumbers = new int[] { 5, 2, 3, 42, 0, -1, 13, 7, 12, 15, 12 };
for ( int i = 0; i < testNumbers.length; i++ )
{
rlist.addSorted( testNumbers[i] );
assertTrue( "AddSorted führte dazu, dass isSorted() false zurücklieferte", rlist.isSorted() );
}
}
publich boolean check(Rlist<T> list){
Rlist<T> actualElement=this;
boolean onlyOneAnchorElement=true;
if(this.isEmpty()) return true;
while(onlyOneAnchorElement){
if(actualElement.next().get() == null) || (actualElement.n=null || actualElement.p==null) ){
onlyOneAnchorElement=false;
return false;
}
else actualElement=actualElement.n;
}
return true;
}
public boolean check(Rlist<T> list){
int counter = 0;
Rlist<T> l;
for(l=this.next() ; l ! = this ; l=l.next() ){
if(l.get() == null) counter++;
}
if(counter>1) return false;
}
public boolean check(Rlist<T> list){
int counter = 1 ;
for(Rlist<T> l.next = list; l != this; l=l.next() ){
if(l.data==null) counter++;
}
if(counter>1) return false;
else [...]
}
//Hier soll das mit der Ringverkettung folgen...
public boolean equals(Object o) {
if( ! (o instanceof Rlist)) return false;
Rlist lAux = (Rlist)o;
Rlist l;
if( this.size() != lAux.size() ) return false;
for(l=this.next(); l != this; l=l.next(), lAux=lAux.next()){
if( ! l.get().equals(lAux.get()) ) return false;
}
return true;
}
* Diese Methode darf nur auf das Ankerelement aufgerufen
* werden.
*
* @param o Referenz auf Ankerelement der zweiten Liste.
* Die Liste darf leer sein.
Rlist lAux = (Rlist)o;
l=this.next()
if( ! l.get().equals(lAux.get()) ) return false;