Welcome to the Treehouse Community
Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.
Looking to learn something new?
Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.
Start your free trialKeyur Golani
6,703 PointsThe GameTest is taking forever and then going into OutOfMemory error. I'm not sure what is it that I'm doing wrong.
The GameTest is taking forever and then going into OutOfMemory error. I'm not sure what is it that I'm doing wrong. May be the 10000 iterations is a lot.
The whole error looks like this. java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:3181)
at java.util.ArrayList.grow(ArrayList.java:261)
at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:235)
at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:227)
at java.util.ArrayList.addAll(ArrayList.java:579)
at TableauPile.addCards(TableauPile.kt:14)
at GameModel.playCard(GameModel.kt:84)
at GameModel.playCards(GameModel.kt:66)
at GameModel.onTableauTap(GameModel.kt:58)
at GamePresenter.onTableauTap(GamePresenter.kt:28)
at GameTest.kingInFirstFoundationPile(GameTest.kt:21)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:51)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
And the Game looks exactly the same as taught in the videos. The GameTest class looks like this.
class GameTest {
@Test
fun kingInFirstFoundationPile() {
// arrange
var numGames = 0
val maxGames = 10000
// act
for (i in 1..maxGames) {
numGames++
GameModel.resetGame()
for (j in 1..100) {
GamePresenter.onDeckTap()
GamePresenter.onWasteTap()
GameModel.tableauPiles.forEachIndexed { index, tableauPile ->
GamePresenter.onTableauTap(index, tableauPile.cards.lastIndex)
}
}
if (GameModel.foundationPiles[0].cards.size == 13) {
break
}
}
// assert
GameModel.debugPrint()
println("# Games: $numGames")
assert(numGames < maxGames)
}
}
Keyur Golani
6,703 PointsOk. Put it on the Github. Check this link out.
1 Answer
Ben Deitch
Treehouse TeacherFound it!
On lines 14 and 18 of TableauPile.kt you've got:
cards.addAll(cards)
and it needs to be:
cards.addAll(newCards)
Hope that helps!
Ben Deitch
Treehouse TeacherBen Deitch
Treehouse TeacherHmm. What happens if you change maxGames to something like 1000? Also, if you upload your project to GitHub I can run it and see if I get the same issue.