maximiliananzinger / pgdp2223-tests Goto Github PK
View Code? Open in Web Editor NEWCollection of JUnit Tests for PGdP exercises at TUM in WS22/23
License: MIT License
Collection of JUnit Tests for PGdP exercises at TUM in WS22/23
License: MIT License
Der Test 06 erwartet, dass der zweite Spieler auf das Feld 2,1 einen beliebigen Stein platziert. Platziert er allerdings auf Feld 1,2 einen Stein mit Wert 6, so hat er direkt gewonnen.
Hi,
in this test, after a thread ShuttleProcessor is started, a task is added into its task queue with help of Reflection. This action is completely silent.
@Test
@DisplayName("Should wait until current task has finished evaluating when shut down")
public void shutDownTest() throws InterruptedException, NoSuchFieldException, IllegalAccessException {
var taskchecker = new TaskChecker(null, null);
var sp = new ShuttleProcessor(taskchecker);
var taskGen = new TestTaskGenerator(0, 5, 0);
sp.start();
getTaskQueue(sp).add(taskGen.generateSlowTask()); // slow task takes 50ms to evaluate
Thread.sleep(10);
sp.shutDown();
Thread.sleep(10);
assertEquals("ShuttleProcessor shutting down.\n", out.toString());
assertTrue(sp.isAlive(), "Should have waited for slow task to finish evaluating.");
Thread.sleep(35); //enough time to finish evaluating slow task
assertFalse(sp.isAlive(), "Slow task finished, the thread should have shut down by now.");
}
In my opinion, one of the following three changes would make sence:
add the task into taskQueue via Reflection before starting the thread, as following:
getTaskQueue(sp).add(taskGen.generateSlowTask()); // slow task takes 50ms to evaluate
sp.start();
I noticed that in test testEvaluatePriority()
it was done this way.
call notify()
after adding task into the taskQueue via Reflection, as following:
sp.start();
getTaskQueue(sp).add(taskGen.generateSlowTask()); // slow task takes 50ms to evaluate
synchronized (sp) {
sp.notify();
}
In testAddTaskWhileRunning()
and waitNotifyTest()
it is done this way.
call ShuttleProcessor.addTask()
instead of using Reflection, as following:
sp.start();
sp.addTask(taskGen.generateSlowTask()); // slow task takes 50ms to evaluate
As same as that in interruptTest()
.
Please correct me if I'm misunderstanding this test. Thanks for viewing :D
void popShouldReturnCorrectValues() {
final var value = 10;
final var value2 = 20;
final var value3 = 30;
final var value4 = 40;
stack.push(value);
assertEquals(value, stack.pop());
stack.push(value2);
stack.push(value3);
assertEquals(value3, stack.pop());
assertArrayEquals(array(value2), getMem(getHead()));
stack.push(value4);
stack.push(value3);
assertEquals(value3, stack.pop());
assertEquals(value4, stack.pop());
assertEquals(value2, stack.pop());
assertArrayEquals(array(0), getMem(getHead()));
}
Why do we need the last assertArrayEquals
?
I suggest changing it to ^(\[W[0-9]{2}(B|H)0[1-3]\][ ]|\[\*\][ ])
this should allow both a H and B instead of only H.
According to my understanding the parameters x
and y
being passed to eat()
are supposed to be the coordinates of the MovingCell
eat()
gets called on.
If I understand correctly the herbivoreBehaviour()
test implementation does not adhere to this convention.
Hello,
I belive that the tests of UnitTest of w13h03 expect the wrong order of inputs, e.g. for the code
const 2
const 4
div
write
halt
They would expect 4/2=2 instead of 2/4=0 . However I may be mistaken. Thanks for writing the tests and have a good day.
Im commit #55 wird ein Test hinzugefügt, der die combineHulls Methode auf folgende Inputs testet:
(Hab den code ein wenig formatiert, damit das Bild nicht zu groß wird)
Auf Artemis steht jedoch, dass "davon ausgegangen werden darf, dass der Endpunkt firstHull[firstHull.length - 1]
der ersten gleich dem Startpunkt secondHull[0]
der zweiten ist."
Tests auf Inputs wie firstHull = {}
und secondHull = {{1, 2}, {2, 3}}
sind daher denke nicht nötig.
Ich könnte es mit einer PR abändern, da ich sowieso noch Tests hinzufügen wollte.
Just out of interest: Why is the README
not a typical .md
file because this normally the standard for README
files on GitHub 🤔
DenseGraphCapabilityTest und SparseGraphCapabilityTest vergleichen den output von getAdj() mit eine sortierten Array, was aber laut Aufgabenstellung nicht verlangt ist. Man könnte daher den Output array vor dem Vergleichen sortieren.
z.B. anstatt von:
Assertions.assertArrayEquals(res, denseGraph.getAdj(1));
so:
int[] actRes = denseGraph.getAdj(1);
Arrays.sort(actRes);
Assertions.assertArrayEquals(res, actRes);
nvmd
The tests cant access the private attribute 'frameStream' in class VideoContainer.java
Hey, I did not want to make an extra PR for this, just wanted to point out that there's a typo in the readme in this section
Furthermore, there is no guarantee of the correctness of the tests. Neither the Übungsleitung nor any of the other tutors will contribute own tests. We (Maximilian Anzinger, Johannes Stöhr, Georg Henning, Konrad Gößmann, Robin Marchart, Oliver Specht, and Anton Kluge) will just make shure that there are no tests that reveal the solution. It is your own responsibility to validate the correctness and if necessary report bugs or even provide/contribute a fix for your fellow student.
under 1. Legal Status
In the second sentence you say
We (...) will just make shure that..
https://dictionary.cambridge.org/de/worterbuch/englisch-deutsch/make-sure
As far as I am concerned there should be no h in the word sure.
In den aktuellen Tests zu W04H02 in der Datei MergeTest.java in Zeile 120 werden Werte getestet, bei denen to größer ist als die Array länge.
Diese tests sollten zumindest als Optional markiert werden, da sie nicht von Relevanz sind wie Georg Henning auf Zulip beantwortet hat:
https://zulip.in.tum.de/#narrow/stream/1450-PGdP-W04H02/topic/.E2.9C.94.20Sinnvolle.20Indizes
import java.util.ArrayList; is missing
Test are supposed to be structured like this:
./task
└───test
└───some
└───package
├───AbcTest.java
├───DefTest.java
└───...
This is clearly stated under how to contribute and should get fixed since some automation scripts rely on this structure.
The test expects username and password fields to be null after failure to login despite the specification stating that these fields are supposed to get set as soon as the token request succeeds.
@simonsmd please rewrite or revert mergeOrder
popShouldReturnCorrectValues()
prüft den Stack auf Gleichheit mit dem Array int[]{0}
, nachdem das letzte verbleibende Wert aus dem Stack gepop()
ed wurde:
pop()
ed Zellen aber egal:top
-Pointer gleich -1
ist (und evtl, dass nach dem Ersten Stack keine weiteren mehr sind):
int getTopPointer(Stack s) {
try {
final var field = s.getClass().getDeclaredField("top");
field.setAccessible(true);
return (int) field.get(s);
catch (IllegalAccessException | NoSuchFieldException e) {
throw new RuntimeException(e);
}
}
und in popShouldReturnCorrectValues()
:
assertEquals(-1, getTopPointer(getHead()));
Der Test picture1 geht davon aus, dass der zweidimensionale Array int[4][3] die Höhe 4 und die Länge drei hat.
Allerdings glaube ich, dass es umgekehrt ist. Der Array hat die Breite 4 und Höhe 3.
There might be an error in the test "Test DG 26 Encode neues BufferedImage 7x7 mit Buchstabe e".
In DGTest.java the line 2005 is:
Assertions.assertEquals(Color.YELLOW.getRGB(), output.getPixels().getRGB(i,output.getHeight()-1));
but should be:
Assertions.assertEquals(colorsE[i],output.getPixels().getRGB(i,output.getHeight()-1));
Artemis erwartet hir am ende noch ein zeilenumbruch.
See #279.
The image.getGraphics() causes a segmentation fault with Zulu JDK 17 on an M1 Macbook Pro running 12.6. The native ImageIO.framework tries to access an invalid memory location. The image is correctly loaded into the BufferedImage object. Might be a deeply-nested bug.
Here the core dump:
hs_err_pid7400.log
Der Test findPath schlägt bei mir mit dem 5. Parameter fehl. Es kommt folgende Ausgabe:
digraph {
b -> t [label="0/1"];
b -> c [label="0/1"];
s -> a [label="0/1"];
a -> b [label="0/1"];
a -> t [label="0/1"];
c -> t [label="0/1"];
c -> a [label="0/1"];
}
Your path was: s -> a -> b -> t
Auf Artemis passen die Tests jedoch.
My IDE did not include this in the build.gradle:
test {
java {
srcDirs = ['test']
}
}
and it took hours for me to find out how to get the tests to run. So maybe you could add an example screenshot in the Readme of a correct file structure and add, that this line has to be added to the build.gradle?
Meine Tests bei der Aufgabe sind (zurecht) gefailt. Allerdings war bei der Konsolenausgabe Actual und Expected vertauscht.
Hat mich anfangs sehr verwirrt.
Der hier gefailte Test ist in Zeile 111, es gilt aber auch für andere Tests. Vermutlich wurde einfach die Reihenfolge der Parameter von AssertArrayEquals vertauscht.
I'm getting the following error message when I'm executing one of the tests:
java.lang.NoClassDefFoundError: org/junit/platform/engine/ConfigurationParameters
at org.eclipse.jdt.internal.junit5.runner.JUnit5TestLoader.<init>(JUnit5TestLoader.java:37)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
NativeConstructorAccessorImpl.java:77
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
DelegatingConstructorAccessorImpl.java:45
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
Constructor.java:499
at java.base/java.lang.reflect.ReflectAccess.newInstance(ReflectAccess.java:128)
ReflectAccess.java:128
at java.base/jdk.internal.reflect.ReflectionFactory.newInstance(ReflectionFactory.java:347)
ReflectionFactory.java:347
at java.base/java.lang.Class.newInstance(Class.java:645)
Class.java:645
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.createRawTestLoader(RemoteTestRunner.java:371)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.createLoader(RemoteTestRunner.java:366)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.defaultInit(RemoteTestRunner.java:310)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.init(RemoteTestRunner.java:225)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209)
Caused by: java.lang.ClassNotFoundException: org.junit.platform.engine.ConfigurationParameters
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
BuiltinClassLoader.java:641
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
ClassLoaders.java:188
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
ClassLoader.java:520
... 13 more
Bei AITests erwarten tests 37 bis 66 alle, dass der gegnerische Gewinnzug mit den werten 7 oder 8 blockiert werden. Das muss allerdings nicht der Fall sein um den Sieg zu blockieren.
Die Tests 60, 56, 54 sind komplett falsch, da es bei ihnen keine Möglichkeit gibt den sieg des Gegners zu verhindern. Also ist der nächste zug undefiniert. Evtl. gibt es noch mehr problematische tests. Bitte noch einmal drüber gucken.
See this point in the description:
But for these tests to pass, the game has to end when no one can make a move anymore and not when all players played all pieces.
@felixhauptmann you are the first person I can tag, I can't tag yannic
In SeamCarvingTest.java, starting on line 163, the following is given as gradientMagnitude for the test.
new int[]{
Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE,
1, 1, 1, 1, 1, 1,
69, 420, 42, 42, 42, 1337,
100, 10, 666, 20, 3, 10,
Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE
}
why does this not have Integer.MAX_VALUE on the right and left sides as well?
This causes both testing_build_seams_seamWeights tests to fail for me.
I believe it should look like this:
new int[]{
Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE,
Integer.MAX_VALUE, 1, 1, 1, 1, Integer.MAX_VALUE,
Integer.MAX_VALUE, 420, 42, 42, 42, Integer.MAX_VALUE,
Integer.MAX_VALUE, 10, 666, 20, 3, Integer.MAX_VALUE,
Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE
}
Have I misunderstood something or shall I adjust the test?
@Test
@DisplayName("DG Test 53 mehrere gewinne verhindern erster spieler spalte und zeile test 1")
public void test53() {
this.board = new Field[][]{
{null, new Field(0, false), new Field(1, false)},
{new Field(2, false), null, null},
{new Field(3, false), null, null}};
this.firstPlayedMoves = new boolean[]{
false, false, false,
false, false, false,
false, false, false};
this.secondPlayedMoves = new boolean[]{
true, true, true,
true, false, false,
false, false, false};
Move move = this.ai.makeMove(this.board, true, this.firstPlayedMoves, this.secondPlayedMoves);
Assertions.assertEquals(0, move.x());
Assertions.assertEquals(0, move.y());
Assertions.assertEquals(8, move.value());
}
Please correct me if I'm wrong, but this test doesn't make sense to me, and I think it should be removed. It's expected to place a piece in the upper left corner 0,0 but the opponent would still win if they place a piece in the center of the board at 1,1. There is no move to win in this scenario, so I don't think it makes sense to test for a specific move.
The same is true for test 57
https://github.com/MaximilianAnzinger/pgdp2223-tests/blob/main/w09b01/pgdp/AITests.java#L1383-L1404
and 61
https://github.com/MaximilianAnzinger/pgdp2223-tests/blob/main/w09b01/pgdp/AITests.java#L1455-L1476
and 63
In "ClosedConvexHullExample" sind die ersten drei Punkte der expectedHull auf einer Geraden, damit ist es auch korrekt, den Punkt {-2, 1} weg zu lassen. Methoden, die die Hülle ohne diesen Punkt zurückgeben, werden als falsch markiert, obwohl sie auch den Anforderungen der Aufgabenstellung entsprechen.
Es nervt ein bisschen, dass es teilweise mehrere Tage dauert bis pull requests gemerget werden. Vor allem wenn die deadline kurz bevor steht.
The test "Eigenes Beispiel" for "Aufgabe 1 - Rekursive Pinguin Reihe" is testing for n=-122 and n is defined to be greater than that.
@julian-hartl Mehrere Leute hatten jetzt Probleme mit den Line endings, weil Windows \r\n statt normalem \n nutzt.
Tools wie IntelliJ ersetzen das, auch auf Windows, dann failt aber System.lineSeparator(). Deswegen Vorschlag:
Im output alle \r\n durch \n ersetzen und expected mit \n schreiben.
@Test
@DisplayName("[OPTIONAL] UserArray.addUser")
public void testUserArrayAddUser1() {
UserArray ua = new UserArray(3);
User alice = new User(5, "Alice", null);
ua.addUser(alice);
ua.addUser(alice);
Assertions.assertArrayEquals(new User[] {alice, alice, null}, getUsers(ua), "Wrong Users");
}
@Test
@DisplayName("[OPTIONAL] Add two same users to the array")
void addSameUsers() {
UserArray userArray = new UserArray(4);
userArray.addUser(Mike);
userArray.addUser(Emily);
userArray.addUser(Mike);
userArray.addUser(Susan);
Assertions.assertEquals(3, userArray.size(), "Wrong number of the users in the UserArray. Expected 2, but got " + userArray.size() + " instead");
Assertions.assertArrayEquals(new User[]{Mike, Emily, Susan, null}, userArray.getUsers(), "Wrong list of users in the UserArray");
}
Entweder es können Personen doppelt eingefügt werden, oder eben nicht. Wobei es eher mehr Sinn ergibt, wenn ein Benutzer nur einmal eingefügt werden kann. Daher würde ich den Test aus UserArrayBehaviourTest bevorzugen. Allerdings ist dieser Testcase (wie ich es sehe) nicht in der Aufgabenstellung definiert. Daher wäre vielleicht der Test aus MessengerTests eher für die Aufgabenstellung geeignet. Sonst wäre es aber auch vielleicht möglich beide Tests zu entfernen.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.