diff --git a/build.gradle b/build.gradle index 1870305..5887369 100644 --- a/build.gradle +++ b/build.gradle @@ -6,6 +6,9 @@ repositories { mavenLocal() maven { url = 'https://repo.runelite.net' + content { + includeGroupByRegex("net\\.runelite.*") + } } mavenCentral() } @@ -24,9 +27,36 @@ dependencies { } group = 'com.toofifty' -version = '1.0.7' +version = '1.0.8' -tasks.withType(JavaCompile) { +tasks.withType(JavaCompile).configureEach { options.encoding = 'UTF-8' - options.release.set(11) + options.release.set(11) } + +tasks.register('shadowJar', Jar) { + dependsOn configurations.testRuntimeClasspath + manifest { + attributes('Main-Class': 'com.toofifty.easygiantsfoundry.EasyGiantsFoundryPluginTest', 'Multi-Release': true) + } + + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + from sourceSets.main.output + from sourceSets.test.output + from { + configurations.testRuntimeClasspath.collect { file -> + file.isDirectory() ? file : zipTree(file) + } + } + + exclude 'META-INF/INDEX.LIST' + exclude 'META-INF/*.SF' + exclude 'META-INF/*.DSA' + exclude 'META-INF/*.RSA' + exclude '**/module-info.class' + + group = BasePlugin.BUILD_GROUP + archiveClassifier.set('shadow') + archiveFileName.set("${rootProject.name}-${project.version}-all.jar") +} + diff --git a/runelite-plugin.properties b/runelite-plugin.properties index 0ef3afd..85e48c7 100644 --- a/runelite-plugin.properties +++ b/runelite-plugin.properties @@ -2,5 +2,5 @@ displayName=Easy Giant's Foundry author=Toofifty support=https://github.com/Toofifty/easy-giantsfoundry description=Helpful overlays for the Giant's Foundry minigame -tags=smithing,giant,foundry,giantsfoundry,minigame +tags=smithing,giant,foundry,giantsfoundry,minigame,ez,easy,smith plugins=com.toofifty.easygiantsfoundry.EasyGiantsFoundryPlugin \ No newline at end of file diff --git a/src/main/java/com/toofifty/easygiantsfoundry/EasyGiantsFoundryConfig.java b/src/main/java/com/toofifty/easygiantsfoundry/EasyGiantsFoundryConfig.java index ae7402c..b5006eb 100644 --- a/src/main/java/com/toofifty/easygiantsfoundry/EasyGiantsFoundryConfig.java +++ b/src/main/java/com/toofifty/easygiantsfoundry/EasyGiantsFoundryConfig.java @@ -504,15 +504,4 @@ public interface EasyGiantsFoundryConfig extends Config ) String generalSettings = "generalSettings"; - @ConfigItem( - keyName = "heatingCoolingMarginOfError", - name = "Heating/Cooling Margin of Error", - description = "The margin of error for lava/waterfall calculations to compensate for decay and overshooting.", - position = 0, - section = generalSettings - ) - default int heatingCoolingBuffer() - { - return 20; - } } diff --git a/src/main/java/com/toofifty/easygiantsfoundry/EasyGiantsFoundryPlugin.java b/src/main/java/com/toofifty/easygiantsfoundry/EasyGiantsFoundryPlugin.java index 2c57b72..2b7e404 100644 --- a/src/main/java/com/toofifty/easygiantsfoundry/EasyGiantsFoundryPlugin.java +++ b/src/main/java/com/toofifty/easygiantsfoundry/EasyGiantsFoundryPlugin.java @@ -1,6 +1,8 @@ package com.toofifty.easygiantsfoundry; import com.google.inject.Provides; + +import static com.toofifty.easygiantsfoundry.EasyGiantsFoundryClientIDs.VARBIT_GAME_STAGE; import static com.toofifty.easygiantsfoundry.EasyGiantsFoundryClientIDs.VARBIT_HEAT; import com.toofifty.easygiantsfoundry.enums.Stage; @@ -27,6 +29,7 @@ import net.runelite.api.events.NpcSpawned; import net.runelite.api.events.ScriptPostFired; import net.runelite.api.events.StatChanged; import net.runelite.api.events.VarbitChanged; +import net.runelite.api.widgets.Widget; import net.runelite.client.Notifier; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; @@ -36,6 +39,7 @@ import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.overlay.OverlayManager; +import java.util.Objects; import java.util.Set; @Slf4j @@ -273,8 +277,12 @@ public class EasyGiantsFoundryPlugin extends Plugin { if (event.getMenuOption().equals("Pour")) { + if (client.getVarbitValue(VARBIT_GAME_STAGE) == 1) + { + state.setLastKnownCrucibleScore((int) state.getCrucibleScore()); + } // add persistent game message of the alloy value so user can reference later. - client.addChatMessage(ChatMessageType.GAMEMESSAGE, "", "The quality of the alloy poured is " + (int) state.getCrucibleQuality(), null); + client.addChatMessage(ChatMessageType.GAMEMESSAGE, "", "The score of the preform is " + ((int) state.getCrucibleScore() + state.getMouldScore()), null); } } @@ -315,6 +323,23 @@ public class EasyGiantsFoundryPlugin extends Plugin || event.getScriptId() == MouldHelper.RESET_MOULD_SCRIPT) { mouldHelper.selectBest(event.getScriptId()); + updateMouldScore(); + } + } + + private void updateMouldScore() { + + state.setMouldScore(mouldHelper.getTotalScore()); + + // show mould score on Mould UI Title + Widget mouldParent = client.getWidget(47054850); + Integer mouldScore = state.getMouldScore(); + if (mouldParent != null && mouldScore != null) + { + Widget title = Objects.requireNonNull(mouldParent.getChild(1)); + + // not sure why, the ":" character turns into ": ," when rendered; omitting it. + title.setText("Giants' Foundry Mould Setup (Score " + mouldScore + ")"); } } @@ -329,6 +354,14 @@ public class EasyGiantsFoundryPlugin extends Plugin reputation = client.getVarpValue(REPUTATION_VARBIT); } + // STAGE becomes 0 again after player picks up the preform + if (event.getVarbitId() == VARBIT_GAME_STAGE && event.getValue() == 0) + { + // clear out the current and soon to be previous scores. + state.setLastKnownCrucibleScore(-1); + state.setMouldScore(-1); + } + // start the heating state-machine when the varbit updates // if heat varbit updated and the user clicked, start the state-machine if (event.getVarbitId() == VARBIT_HEAT && state.heatingCoolingState.getActionName() != null) @@ -344,8 +377,8 @@ public class EasyGiantsFoundryPlugin extends Plugin state.heatingCoolingState.onTick(); } - previousHeat = event.getValue(); } + previousHeat = event.getValue(); } @Subscribe diff --git a/src/main/java/com/toofifty/easygiantsfoundry/EasyGiantsFoundryState.java b/src/main/java/com/toofifty/easygiantsfoundry/EasyGiantsFoundryState.java index d2dac92..45c6bf6 100644 --- a/src/main/java/com/toofifty/easygiantsfoundry/EasyGiantsFoundryState.java +++ b/src/main/java/com/toofifty/easygiantsfoundry/EasyGiantsFoundryState.java @@ -8,6 +8,7 @@ import com.toofifty.easygiantsfoundry.enums.Stage; import static com.toofifty.easygiantsfoundry.enums.Stage.GRINDSTONE; import static com.toofifty.easygiantsfoundry.enums.Stage.POLISHING_WHEEL; import static com.toofifty.easygiantsfoundry.enums.Stage.TRIP_HAMMER; + import lombok.Getter; import lombok.Setter; import net.runelite.api.Client; @@ -16,6 +17,8 @@ import net.runelite.api.widgets.Widget; import javax.inject.Inject; import javax.inject.Singleton; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.List; @Singleton @@ -35,6 +38,14 @@ public class EasyGiantsFoundryState @Setter private int smithsOutfitPieces; + @Setter + @Getter + private int mouldScore = -1; // starts -1 because mould score is unknown + + @Setter + @Getter + private int lastKnownCrucibleScore = -1; // will be set when "Pour"ed + private final List stages = new ArrayList<>(); private double heatRangeRatio = 0; @@ -218,16 +229,11 @@ public class EasyGiantsFoundryState return bronze + iron + steel + mithril + adamant + rune; } - public double getCrucibleQuality() + public double getCrucibleScore() { - if (getCrucibleCount() == 0) return 0; + // https://oldschool.runescape.wiki/w/Giants%27_Foundry#Metal_score - int bronze = client.getVarbitValue(VARBIT_BRONZE_COUNT); - int iron = client.getVarbitValue(VARBIT_IRON_COUNT); - int steel = client.getVarbitValue(VARBIT_STEEL_COUNT); - int mithril = client.getVarbitValue(VARBIT_MITHRIL_COUNT); - int adamant = client.getVarbitValue(VARBIT_ADAMANT_COUNT); - int rune = client.getVarbitValue(VARBIT_RUNE_COUNT); + if (getCrucibleCount() == 0) return 0; final int BRONZE_VALUE = 1; final int IRON_VALUE = 2; @@ -236,16 +242,35 @@ public class EasyGiantsFoundryState final int ADAMANT_VALUE = 5; final int RUNE_VALUE = 6; - final double vB = (10 * BRONZE_VALUE * bronze) / 28.0; - final double vI = (10 * IRON_VALUE * iron) / 28.0; - final double vS = (10 * STEEL_VALUE * steel) / 28.0; - final double vM = (10 * MITHRIL_VALUE * mithril) / 28.0; - final double vA = (10 * ADAMANT_VALUE * adamant) / 28.0; - final double vR = (10 * RUNE_VALUE * rune) / 28.0; + + final int bronzeNum = client.getVarbitValue(VARBIT_BRONZE_COUNT); + final int ironNum = client.getVarbitValue(VARBIT_IRON_COUNT); + final int steelNum = client.getVarbitValue(VARBIT_STEEL_COUNT); + final int mithrilNum = client.getVarbitValue(VARBIT_MITHRIL_COUNT); + final int adamantNum = client.getVarbitValue(VARBIT_ADAMANT_COUNT); + final int runeNum = client.getVarbitValue(VARBIT_RUNE_COUNT); + + final double bronzeVal = (10 * BRONZE_VALUE * bronzeNum) / 28.0; + final double ironVal = (10 * IRON_VALUE * ironNum) / 28.0; + final double steelVal = (10 * STEEL_VALUE * steelNum) / 28.0; + final double mithrilVal = (10 * MITHRIL_VALUE * mithrilNum) / 28.0; + final double adamantVal = (10 * ADAMANT_VALUE * adamantNum) / 28.0; + final double runeVal = (10 * RUNE_VALUE * runeNum) / 28.0; + + Double[] metals = new Double[] { + bronzeVal, + ironVal, + steelVal, + mithrilVal, + adamantVal, + runeVal + }; + + // Descending order + Arrays.sort(metals, Collections.reverseOrder()); return - (10 * (vB + vI + vS + vM + vA + vR) - + (max1(vB) * max1(vI) * max1(vS) * max1(vM) * max1(vA) * max1(vR))) / 10.0; + ((10 * metals[0] + 10 * metals[1]) + max1(metals[0]) * max1(metals[1])) / 10.0; } /** diff --git a/src/main/java/com/toofifty/easygiantsfoundry/FoundryOverlay3D.java b/src/main/java/com/toofifty/easygiantsfoundry/FoundryOverlay3D.java index 781bb02..d93101d 100644 --- a/src/main/java/com/toofifty/easygiantsfoundry/FoundryOverlay3D.java +++ b/src/main/java/com/toofifty/easygiantsfoundry/FoundryOverlay3D.java @@ -120,6 +120,13 @@ public class FoundryOverlay3D extends Overlay { drawCrucibleIfMouldSet(graphics); } + if (config.drawMouldInfoOverlay()) + { + drawMouldScoreIfMouldSet(graphics); + drawPreformScoreIfPoured(graphics); + } + + return null; } @@ -130,7 +137,7 @@ public class FoundryOverlay3D extends Overlay return null; } - drawHeatingActionOverlay(graphics, stageObject); + drawActionOverlay(graphics, stageObject); Heat heat = state.getCurrentHeat(); Color color = getObjectColor(stage, heat); @@ -151,11 +158,11 @@ public class FoundryOverlay3D extends Overlay if (state.heatingCoolingState.isCooling()) { - drawHeatingActionOverlay(graphics, waterfall, false); + drawHeatingCoolingOverlay(graphics, waterfall); } if (state.heatingCoolingState.isHeating()) { - drawHeatingActionOverlay(graphics, lavaPool, true); + drawHeatingCoolingOverlay(graphics, lavaPool); } @@ -188,10 +195,10 @@ public class FoundryOverlay3D extends Overlay modelOutlineRenderer.drawOutline(stageObject, config.borderThickness(), _color, config.borderFeather()); } - private void drawHeatingActionOverlay( + private void drawHeatingCoolingOverlay( Graphics2D graphics, - GameObject stageObject, - boolean isLava /* and not cooling */) + GameObject stageObject + ) { if (!config.drawLavaWaterInfoOverlay()) { @@ -204,22 +211,10 @@ public class FoundryOverlay3D extends Overlay } String text; - if (isLava) - { - // %d heats or %d dunks - text = String.format("%d %s", - state.heatingCoolingState.getRemainingDuration(), - state.heatingCoolingState.getActionName() - ); - } - else - { - // %d cools - text = String.format("%d %s", - state.heatingCoolingState.getRemainingDuration(), - state.heatingCoolingState.getActionName() - ); - } + text = String.format("%d %s", + state.heatingCoolingState.getRemainingDuration(), + state.heatingCoolingState.getActionName() + ); LocalPoint stageLoc = stageObject.getLocalLocation(); stageLoc = new LocalPoint(stageLoc.getX(), stageLoc.getY()); @@ -269,7 +264,7 @@ public class FoundryOverlay3D extends Overlay { return; } - String text = String.format("%d/%d quality: %d", state.getCrucibleCount(), CRUCIBLE_CAPACITY, (int)state.getCrucibleQuality()); + String text = String.format("%d/%d score: %d", state.getCrucibleCount(), CRUCIBLE_CAPACITY, (int)state.getCrucibleScore()); LocalPoint crucibleLoc = crucible.getLocalLocation(); crucibleLoc = new LocalPoint(crucibleLoc.getX() - 100, crucibleLoc.getY()); @@ -287,6 +282,48 @@ public class FoundryOverlay3D extends Overlay OverlayUtil.renderTextLocation(graphics, pos, text, color); } + private void drawMouldScoreIfMouldSet(Graphics2D graphics) { + if (client.getVarbitValue(SWORD_TYPE_1_VARBIT) == 0) + { + return; + } + if (client.getVarbitValue(VARBIT_GAME_STAGE) != 1) + { + return; + } + + if (state.getMouldScore() < 0) + { + return; + } + + String text = String.format("score: %d", state.getMouldScore()); + LocalPoint mouldLoc = mouldJig.getLocalLocation(); + Point pos = Perspective.getCanvasTextLocation(client, graphics, mouldLoc, text, 115); + Color color = config.generalHighlight(); + + OverlayUtil.renderTextLocation(graphics, pos, text, color); + } + private void drawPreformScoreIfPoured(Graphics2D graphics) { + if (client.getVarbitValue(VARBIT_GAME_STAGE) != 2) + { + return; + } + + if (state.getMouldScore() < 0 || state.getLastKnownCrucibleScore() < 0) + { + return; + } + + int preformScore = state.getLastKnownCrucibleScore() + state.getMouldScore(); + String text = String.format("score: %d", preformScore); + LocalPoint mouldLoc = mouldJig.getLocalLocation(); + Point pos = Perspective.getCanvasTextLocation(client, graphics, mouldLoc, text, 115); + + Color color = config.generalHighlight(); + + OverlayUtil.renderTextLocation(graphics, pos, text, color); + } private void drawCrucibleIfMouldSet(Graphics2D graphics) { @@ -391,7 +428,7 @@ public class FoundryOverlay3D extends Overlay } } - private void drawHeatingActionOverlay(Graphics2D graphics, GameObject gameObject) + private void drawActionOverlay(Graphics2D graphics, GameObject gameObject) { int actionsLeft = state.getActionsLeftInStage(); int heatLeft = state.getActionsForHeatLevel(); diff --git a/src/main/java/com/toofifty/easygiantsfoundry/HeatActionSolver.java b/src/main/java/com/toofifty/easygiantsfoundry/HeatActionSolver.java index 6c534e6..e500b9d 100644 --- a/src/main/java/com/toofifty/easygiantsfoundry/HeatActionSolver.java +++ b/src/main/java/com/toofifty/easygiantsfoundry/HeatActionSolver.java @@ -78,6 +78,13 @@ public class HeatActionSolver { /** + * Warning: this method prefers overshooting goal. For example, if goal is 957, + * it will return index that reaches >957.
+ * This may be desirable if we're aiming to heat over range minimum, + * but undesirable when cooling below range maximum; make sure to -1 the index if so. + * + * + * * @param goal the desired heat destination * @param init_dx1 initial speed of heating/cooling. currently 7 for heat/cool, 27 for dunk/quench. * @param dx2_offset bonus acceleration. currently, 0 for heat/cool, 2 for dunk/quench. diff --git a/src/main/java/com/toofifty/easygiantsfoundry/HeatActionStateMachine.java b/src/main/java/com/toofifty/easygiantsfoundry/HeatActionStateMachine.java index edb2cbf..00e0da6 100644 --- a/src/main/java/com/toofifty/easygiantsfoundry/HeatActionStateMachine.java +++ b/src/main/java/com/toofifty/easygiantsfoundry/HeatActionStateMachine.java @@ -113,26 +113,32 @@ public class HeatActionStateMachine */ public void calculateEstimates() { + // 0: left/min 1: right/max int[] range = State.getCurrentHeatRange(); + int stageMin = range[0]; + int stageMax = range[1]; + Stage stage = State.getCurrentStage(); int actionsLeft = State.getActionsLeftInStage(); - int actionsLeft_DeltaHeat = actionsLeft * stage.getHeatChange(); + int actionsLeft_DeltaHeat = (actionsLeft+1) * stage.getHeatChange(); if (isHeating()) { if (stage.isHeating()) { - GoalHeat = Math.max(range[0] + Config.heatingCoolingBuffer(), range[1] - actionsLeft_DeltaHeat); + GoalHeat = Math.max(stageMin, stageMax - actionsLeft_DeltaHeat); if (StartingHeat < GoalHeat) { - EstimatedDuration = HeatActionSolver.findDx0Index( + int duration = HeatActionSolver.findDx0Index( GoalHeat - StartingHeat, - Velocity, AccelerationBonus); + Velocity, AccelerationBonus + ); - GoalHeat += EstimatedDuration / 2; // compensate for decay during heating + GoalHeat += duration / 2; EstimatedDuration = HeatActionSolver.findDx0Index( GoalHeat - StartingHeat, - Velocity, AccelerationBonus); + Velocity, AccelerationBonus + ); } else // overheating { @@ -141,13 +147,21 @@ public class HeatActionStateMachine } else // is cooling { - GoalHeat = Math.min(range[1] - Config.heatingCoolingBuffer(), range[0] - actionsLeft_DeltaHeat); + // actionsLeft_DeltaHeat is negative here + GoalHeat = Math.min(stageMax, stageMin - actionsLeft_DeltaHeat); if (StartingHeat < GoalHeat) { + int duration = HeatActionSolver.findDx0Index( + GoalHeat - StartingHeat, + Velocity, AccelerationBonus + ) - 1; + + GoalHeat -= duration / 2; + EstimatedDuration = HeatActionSolver.findDx0Index( GoalHeat - StartingHeat, Velocity, AccelerationBonus - ); + ) - 1; } else // cold enough { @@ -157,11 +171,39 @@ public class HeatActionStateMachine } else if (isCooling()) { - if (stage.isCooling()) - { - GoalHeat = Math.max(range[1] - Config.heatingCoolingBuffer(), range[0] + actionsLeft_DeltaHeat); + if (stage.isHeating()) { + GoalHeat = Math.max(stageMin, stageMax - actionsLeft_DeltaHeat); + if (StartingHeat > GoalHeat) + { + int duration = HeatActionSolver.findDx0Index( + StartingHeat - GoalHeat, + Math.abs(Velocity), Math.abs(AccelerationBonus) + ) - 1; + + GoalHeat += duration / 2; + + EstimatedDuration = HeatActionSolver.findDx0Index( + (StartingHeat - GoalHeat), + Math.abs(Velocity), Math.abs(AccelerationBonus) + ) - 1; + } + else + { + EstimatedDuration = 0; + } + } + // Heating Stage + else { + GoalHeat = Math.max(stageMax, stageMin + actionsLeft_DeltaHeat); if (StartingHeat > GoalHeat) // too hot { + int duration = HeatActionSolver.findDx0Index( + StartingHeat - GoalHeat, + Math.abs(Velocity), Math.abs(AccelerationBonus) + ); + + GoalHeat -= duration / 2; + EstimatedDuration = HeatActionSolver.findDx0Index( StartingHeat - GoalHeat, Math.abs(Velocity), Math.abs(AccelerationBonus) @@ -172,21 +214,7 @@ public class HeatActionStateMachine EstimatedDuration = 0; } } - else // Heating Stage - { - GoalHeat = Math.max(range[0] + Config.heatingCoolingBuffer(), range[1] - actionsLeft_DeltaHeat); - if (StartingHeat > GoalHeat) - { - EstimatedDuration = HeatActionSolver.findDx0Index( - (StartingHeat - GoalHeat), - Math.abs(Velocity), Math.abs(AccelerationBonus) - ); - } - else - { - EstimatedDuration = 0; - } - } + } } diff --git a/src/main/java/com/toofifty/easygiantsfoundry/MouldHelper.java b/src/main/java/com/toofifty/easygiantsfoundry/MouldHelper.java index a6b8b9e..5b14081 100644 --- a/src/main/java/com/toofifty/easygiantsfoundry/MouldHelper.java +++ b/src/main/java/com/toofifty/easygiantsfoundry/MouldHelper.java @@ -23,6 +23,9 @@ public class MouldHelper static final int SWORD_TYPE_2_VARBIT = 13908; // 3=Flat private static final int DISABLED_TEXT_COLOR = 0x9f9f9f; + private static final int SCORE_TYPE1_SCORE_WIDGET = 47054876; + private static final int SCORE_TYPE2_SCORE_WIDGET = 47054878; + @Inject private Client client; @@ -32,6 +35,47 @@ public class MouldHelper @Inject private EasyGiantsFoundryConfig config; + public Integer getTotalScore() + { + Widget type1Widget = client.getWidget(SCORE_TYPE1_SCORE_WIDGET); + Widget type2Widget = client.getWidget(SCORE_TYPE2_SCORE_WIDGET); + if (type1Widget == null || type2Widget == null) + { + return null; + } + + String type1Str = type1Widget.getText(); + String type2Str = type2Widget.getText(); + + // (+6) 6 + // ^ space seperated + // or + // 6 + if (type1Str.contains(" ")) + { + type1Str = type1Str.substring(type1Str.lastIndexOf(' ') + 1); + } + + if (type2Str.contains(" ")) + { + type2Str = type2Str.substring(type2Str.lastIndexOf(' ') + 1); + } + + + int type1Score; + int type2Score; + + try + { + type1Score = Integer.parseInt(type1Str); + type2Score = Integer.parseInt(type2Str); + } catch (NumberFormatException e) + { + return null; + } + + return type1Score + type2Score; + } public void selectBest(int scriptId) { Widget parent = client.getWidget(MOULD_LIST_PARENT); diff --git a/src/test/java/com/toofifty/easygiantsfoundry/HeatSolverTest.java b/src/test/java/com/toofifty/easygiantsfoundry/HeatSolverTest.java index 69cac3c..f5fb53b 100644 --- a/src/test/java/com/toofifty/easygiantsfoundry/HeatSolverTest.java +++ b/src/test/java/com/toofifty/easygiantsfoundry/HeatSolverTest.java @@ -90,7 +90,7 @@ public class HeatSolverTest for (int i = 0; i < answer_dx1.length; i++) { - TestHeatSolver_Dx0_Helper(answer_dx0.get(i), answer_dx0.get(0), i + 1); + TestHeatSolver_Dx0_Helper(answer_dx0.get(i), answer_dx0.get(0), i); } } @@ -131,7 +131,9 @@ public class HeatSolverTest // System.err.println( // HeatSolver.findDx0IndexContinue(1000, 7, 0)); System.err.println( - HeatActionSolver.findDx0Index(1000, 7, 1)); + HeatActionSolver.findDx0Index(957, 27, 2)); +// System.err.println( +// HeatActionSolver.findDx0Index(1000, 7, 1)); } public void TestHeatSolver_Dx0_Helper(int dx0, int constant, int answer_index) @@ -139,7 +141,7 @@ public class HeatSolverTest System.err.print(dx0 + "->" + HeatActionSolver.findDx0Index(dx0, constant, 0) + ","); // test calcDx0Index - assertEquals("Asserting dx0 index for " + answer_index, + assertEquals("Asserting dx0 for index " + answer_index, answer_index, HeatActionSolver.findDx0Index(dx0, constant, 0)); }