From 261ab9c4f4d6ee7e34078c455af5e593be59e3ea Mon Sep 17 00:00:00 2001 From: clemens Date: Tue, 5 Jul 2022 13:51:24 +0200 Subject: [PATCH 1/3] add test case for #1 Values are calculated, however not present in plot. Further research needed --- src/main/java/satisfactory/Test.java | 4 ++-- .../java/satisfactory/items/Production.java | 6 +++--- src/main/java/satisfactory/items/Recipe.java | 2 +- src/test/java/satisfactory/items/ItemTest.java | 17 +++++++++++++++++ 4 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/main/java/satisfactory/Test.java b/src/main/java/satisfactory/Test.java index 5f50eba..5057658 100644 --- a/src/main/java/satisfactory/Test.java +++ b/src/main/java/satisfactory/Test.java @@ -122,10 +122,10 @@ public class Test { planFor(Database.UraniumFuelRod, 1, "fuelrod"); planFor(Database.FusedModularFrame, 100, "fusedFrame"); - planFor(Database.SteelIngot, 100, "steelIngot"); + planFor(Database.SteelIngot, 81.75, "steelIngot"); } - private static void planFor(Item item, int amount, String name) { + private static void planFor(Item item, double amount, String name) { SumResult plan = SumResult.sum(new Production(item, amount)); plot2(plan.getProduction(), name); javaPlot(name); diff --git a/src/main/java/satisfactory/items/Production.java b/src/main/java/satisfactory/items/Production.java index 15f518b..798ad74 100644 --- a/src/main/java/satisfactory/items/Production.java +++ b/src/main/java/satisfactory/items/Production.java @@ -2,9 +2,9 @@ package satisfactory.items; public class Production { private final Item item; - private final int amount; + private final double amount; - public Production(Item item, int amount) { + public Production(Item item, double amount) { this.item = item; this.amount = amount; } @@ -13,7 +13,7 @@ public class Production { return item; } - public int getAmount() { + public double getAmount() { return amount; } } diff --git a/src/main/java/satisfactory/items/Recipe.java b/src/main/java/satisfactory/items/Recipe.java index 65eca02..8138704 100644 --- a/src/main/java/satisfactory/items/Recipe.java +++ b/src/main/java/satisfactory/items/Recipe.java @@ -176,7 +176,7 @@ public class Recipe { return product.getRecipe().outputs.get(product) * runs; } - public SumResult sum(Item target, int prodPerMinute) { + public SumResult sum(Item target, double prodPerMinute) { Graph buildGraph = buildGraph(target); Graph production = new DefaultDirectedWeightedGraph<>(ProductionEdge.class); Map map = new HashMap<>(); diff --git a/src/test/java/satisfactory/items/ItemTest.java b/src/test/java/satisfactory/items/ItemTest.java index 1c66e62..d637a14 100644 --- a/src/test/java/satisfactory/items/ItemTest.java +++ b/src/test/java/satisfactory/items/ItemTest.java @@ -99,4 +99,21 @@ class ItemTest { assertEquals(amount, calculations.get(item), 0.01, item.getName()); }); } + @Test + void uraniumFuelRodWithSteelIngotParents(){ + Map ref = new HashMap<>(); + ref.put(Database.SteelIngot, 81.75); + ref.put(Database.IronOre, 81.75); + ref.put(Database.Coal, 81.75); + compareProductions(Database.UraniumFuelRod, 1, ref); + } + + private void compareProductions(Item targetItem, int amount, Map ref) { + Map sum = SumResult.sum(new Production(targetItem, amount)).getMap(); + + ref.forEach((item, aDouble) -> { + assertTrue(sum.containsKey(item)); + assertEquals(aDouble, sum.get(item)); + }); + } } \ No newline at end of file From 6bb38066d635afb993dd8aba823e38094e53a936 Mon Sep 17 00:00:00 2001 From: clemens Date: Tue, 5 Jul 2022 15:15:58 +0200 Subject: [PATCH 2/3] add test helper --- .../java/satisfactory/items/ItemTest.java | 176 +++++++++--------- 1 file changed, 93 insertions(+), 83 deletions(-) diff --git a/src/test/java/satisfactory/items/ItemTest.java b/src/test/java/satisfactory/items/ItemTest.java index d637a14..03ee9f5 100644 --- a/src/test/java/satisfactory/items/ItemTest.java +++ b/src/test/java/satisfactory/items/ItemTest.java @@ -1,11 +1,10 @@ package satisfactory.items; -import org.jgrapht.Graph; import org.junit.jupiter.api.Test; import satisfactory.Database; -import satisfactory.Utils; -import java.util.HashMap; +import java.util.Arrays; +import java.util.Collection; import java.util.Map; import static org.junit.jupiter.api.Assertions.*; @@ -14,36 +13,28 @@ class ItemTest { @Test void productionScrews() { - /*Map production = Database.Screw.production(100); - assertEquals(100, production.get(Database.Screw), "Screws (output)"); - assertEquals(25, production.get(Database.IronRod), "IronRod"); - assertEquals(25, production.get(Database.IronIngot), "IronIngot"); - assertEquals(25, production.get(Database.IronOre), "IronOre");*/ - fail(); - } - - @Test - void productionScrews2() { - /*Map production = Database.Screw.getRecipe().sum(Database.Screw, 100); - assertEquals(100, production.get(Database.Screw), "Screws (output)"); - assertEquals(25, production.get(Database.IronRod), "IronRod"); - assertEquals(25, production.get(Database.IronIngot), "IronIngot"); - assertEquals(25, production.get(Database.IronOre), "IronOre"); - - */ - fail("TODO: migrate"); + Collection ref = Arrays.asList( + new Ref(Database.Screw, 100.0), + new Ref(Database.IronRod, 25.0), + new Ref(Database.IronIngot, 25.0), + new Ref(Database.IronOre, 25.0) + ); + SumResult sum = SumResult.sum(new Production(Database.Screw, 100.0)); + compareProductions(sum, ref); } @Test void productionReinforcedIronPlates() { - /*Map production = Database.ReinforcedIronPlate.production(100); - assertEquals(100, production.get(Database.ReinforcedIronPlate), "output"); - assertEquals(1200, production.get(Database.Screw), "Screws"); - assertEquals(300, production.get(Database.IronRod), "IronRod"); - assertEquals(1200, production.get(Database.IronIngot), "IronIngot"); - assertEquals(1200, production.get(Database.IronOre), "IronOre"); - assertEquals(600, production.get(Database.IronPlate), "IronPlate");*/ - fail(); + Collection ref = Arrays.asList( + new Ref(Database.ReinforcedIronPlate, 100.0, "output"), + new Ref(Database.Screw, 1200.0), + new Ref(Database.IronRod, 300.0), + new Ref(Database.IronIngot, 1200.0), + new Ref(Database.IronOre, 1200.0), + new Ref(Database.IronPlate, 600.0) + ); + SumResult sum = SumResult.sum(new Production(Database.ReinforcedIronPlate, 100.0)); + compareProductions(sum, ref); } @Test @@ -55,65 +46,84 @@ class ItemTest { @Test void testPhase3_ME_ACU() { // references - Map ref = new HashMap<>(); - ref.put(Database.CircuitBoard, 15.0); - ref.put(Database.Computer, 1.0); - ref.put(Database.Limestone,75.0); - ref.put(Database.Concrete,25.0); - ref.put(Database.SteelBeam,20.0); - ref.put(Database.EncasedIndustrialBeam, 5.0); - ref.put(Database.ModularFrame,5.0); - ref.put(Database.HeavyModularFrame,1.0); - ref.put(Database.Plastic, 78.0); - ref.put(Database.CopperSheet, 30.0); - ref.put(Database.Coal,226.25); - ref.put(Database.Cable,159.0); - ref.put(Database.CopperOre,329.0); - ref.put(Database.AutomatedWiring, 7.5); - ref.put(Database.AdaptiveControlUnit, 1.0); - ref.put(Database.CrudeOil, 229.5); - ref.put(Database.ReinforcedIronPlate, 17.5); - ref.put(Database.CopperIngot, 329.0); - ref.put(Database.SteelIngot, 226.25); - ref.put(Database.IronPlate, 105.0); - ref.put(Database.SmartPlating, 10.0); - //ref.put(Database.HeavyOilResidue, 114.0); // TODO: implement calculation - ref.put(Database.Rubber, 75.0); - ref.put(Database.Wire, 538.0); - ref.put(Database.SteelPipe, 97.5); - ref.put(Database.Stator, 27.5); - ref.put(Database.Screw, 1112.0); - ref.put(Database.IronOre, 841.75); - ref.put(Database.IronIngot, 615.5); - ref.put(Database.IronRod, 458.0); - ref.put(Database.Rotor, 30.0); - ref.put(Database.Motor, 10.0); - ref.put(Database.ModularEngine, 5.0); + Collection ref = Arrays.asList( + new Ref(Database.CircuitBoard, 15.0), + new Ref(Database.Computer, 1.0), + new Ref(Database.Limestone, 75.0), + new Ref(Database.Concrete, 25.0), + new Ref(Database.SteelBeam, 20.0), + new Ref(Database.EncasedIndustrialBeam, 5.0), + new Ref(Database.ModularFrame, 5.0), + new Ref(Database.HeavyModularFrame, 1.0), + new Ref(Database.Plastic, 78.0), + new Ref(Database.CopperSheet, 30.0), + new Ref(Database.Coal, 226.25), + new Ref(Database.Cable, 159.0), + new Ref(Database.CopperOre, 329.0), + new Ref(Database.AutomatedWiring, 7.5), + new Ref(Database.AdaptiveControlUnit, 1.0), + new Ref(Database.CrudeOil, 229.5), + new Ref(Database.ReinforcedIronPlate, 17.5), + new Ref(Database.CopperIngot, 329.0), + new Ref(Database.SteelIngot, 226.25), + new Ref(Database.IronPlate, 105.0), + new Ref(Database.SmartPlating, 10.0), + //new Ref(Database.HeavyOilResidue, 114.0), // TODO: implement calculation + new Ref(Database.Rubber, 75.0), + new Ref(Database.Wire, 538.0), + new Ref(Database.SteelPipe, 97.5), + new Ref(Database.Stator, 27.5), + new Ref(Database.Screw, 1112.0), + new Ref(Database.IronOre, 841.75), + new Ref(Database.IronIngot, 615.5), + new Ref(Database.IronRod, 458.0), + new Ref(Database.Rotor, 30.0), + new Ref(Database.Motor, 10.0), + new Ref(Database.ModularEngine, 5.0) + ); - // calculate - Map calculations = SumResult.sum(new Production(Database.ModularEngine, 5), new Production(Database.AdaptiveControlUnit, 1)).getMap(); + // calculate + SumResult sum = SumResult.sum(new Production(Database.ModularEngine, 5), new Production(Database.AdaptiveControlUnit, 1)); // assert - ref.forEach((item, amount) -> { - assertTrue(calculations.containsKey(item), "exists? " + item.getName()); - assertEquals(amount, calculations.get(item), 0.01, item.getName()); + compareProductions(sum, ref); + fail("Something heavy oil residue"); + } + + @Test + void uraniumFuelRodWithSteelIngotParents() { + Collection refs = Arrays.asList( + new Ref(Database.SteelIngot, 81.75), + new Ref(Database.IronOre, 81.75), + new Ref(Database.Coal, 81.75) + ); + SumResult sums = SumResult.sum(new Production(Database.UraniumFuelRod, 1.0)); + compareProductions(sums, refs); + } + + private void compareProductions(SumResult sum, Collection references) { + Map inputs = sum.getMap(); + references.forEach(ref -> { + assertTrue(inputs.containsKey(ref.item), ref.note); + assertEquals(ref.amount, inputs.get(ref.item), ref.note); }); } - @Test - void uraniumFuelRodWithSteelIngotParents(){ - Map ref = new HashMap<>(); - ref.put(Database.SteelIngot, 81.75); - ref.put(Database.IronOre, 81.75); - ref.put(Database.Coal, 81.75); - compareProductions(Database.UraniumFuelRod, 1, ref); - } +} - private void compareProductions(Item targetItem, int amount, Map ref) { - Map sum = SumResult.sum(new Production(targetItem, amount)).getMap(); +class Ref { + Item item; + double amount; + String note; - ref.forEach((item, aDouble) -> { - assertTrue(sum.containsKey(item)); - assertEquals(aDouble, sum.get(item)); - }); - } + public Ref(Item item, double amount, String note) { + this.item = item; + this.amount = amount; + this.note = note; + } + + public Ref(Item item, double amount) { + this.item = item; + this.amount = amount; + note = item.getName(); + } } \ No newline at end of file From ea30ec2b6bf4c91962669cfe527d8f953faaa6a5 Mon Sep 17 00:00:00 2001 From: clemens Date: Tue, 5 Jul 2022 15:23:05 +0200 Subject: [PATCH 3/3] reformat & code cleanup --- build.gradle | 10 +-- src/main/java/satisfactory/Database.java | 62 ++++++++--------- src/main/java/satisfactory/Test.java | 6 +- src/main/java/satisfactory/Utils.java | 9 +-- src/main/java/satisfactory/items/Item.java | 4 +- src/main/java/satisfactory/items/Recipe.java | 24 ++++--- .../java/satisfactory/items/SumResult.java | 9 ++- .../items/requirements/Accumulator.java | 66 +++++++++---------- .../items/requirements/RateAccumulator.java | 40 +++++------ .../requirements/RequirementAccumulator.java | 4 +- .../items/requirements/TotalAccumulator.java | 32 ++++----- .../java/satisfactory/items/type/Fluid.java | 12 ++-- .../java/satisfactory/items/type/Gas.java | 16 ++--- .../java/satisfactory/items/type/Ingot.java | 12 ++-- .../java/satisfactory/items/type/Ore.java | 16 ++--- .../java/satisfactory/items/type/Part.java | 12 ++-- .../java/satisfactory/items/type/Pickup.java | 16 ++--- .../items/type/ProcessedFluid.java | 12 ++-- .../satisfactory/items/type/RawFluid.java | 16 ++--- .../java/satisfactory/items/type/Tool.java | 12 ++-- .../java/satisfactory/items/DatabaseTest.java | 3 +- 21 files changed, 192 insertions(+), 201 deletions(-) diff --git a/build.gradle b/build.gradle index 9380435..7c36ea0 100644 --- a/build.gradle +++ b/build.gradle @@ -10,13 +10,13 @@ repositories { } dependencies { - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0' - implementation 'com.fasterxml.jackson.core:jackson-databind:2.12.2' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2' + implementation 'com.fasterxml.jackson.core:jackson-databind:2.13.3' implementation 'org.jgrapht:jgrapht-io:1.5.1' implementation 'guru.nidi:graphviz-java:0.18.1' - implementation 'org.graalvm.js:js:20.0.0' - implementation 'org.apache.logging.log4j:log4j-slf4j-impl:2.13.0' + implementation 'org.graalvm.js:js:22.1.0.1' + implementation 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.2' } test { diff --git a/src/main/java/satisfactory/Database.java b/src/main/java/satisfactory/Database.java index 5048c00..0b4ca27 100644 --- a/src/main/java/satisfactory/Database.java +++ b/src/main/java/satisfactory/Database.java @@ -140,7 +140,7 @@ public class Database { Water.setPreference(water); // gases - NitrogenGas.add(new Recipe(1,"pressure thingy", false, ResourceWellExtractor.class)); + NitrogenGas.add(new Recipe(1, "pressure thingy", false, ResourceWellExtractor.class)); } { // Steel Ingot @@ -496,72 +496,72 @@ public class Database { } { Recipe recipe = new Recipe(6, Refinery.class); - recipe.addInput(Sulfur,5); - recipe.addInput(Water,5); + recipe.addInput(Sulfur, 5); + recipe.addInput(Water, 5); recipe.addOutput(SulfuricAcid, 5); } { - Recipe recipe = new Recipe(150,Manufacturer.class); + Recipe recipe = new Recipe(150, Manufacturer.class); recipe.addInput(EncasedUraniumCell, 50); - recipe.addInput(EncasedIndustrialBeam,3); + recipe.addInput(EncasedIndustrialBeam, 3); recipe.addInput(ElectromagneticControlRod, 5); - recipe.addOutput(UraniumFuelRod,1); + recipe.addOutput(UraniumFuelRod, 1); } { Recipe recipe = new Recipe(12, Blender.class); recipe.addInput(Uranium, 10); - recipe.addInput(Concrete,3); + recipe.addInput(Concrete, 3); recipe.addInput(SulfuricAcid, 8); recipe.addOutput(EncasedUraniumCell, 5); recipe.addOutput(SulfuricAcid, 2); } { - Recipe recipe = new Recipe(120,Manufacturer.class); - recipe.addInput(VersatileFrameWork,5); + Recipe recipe = new Recipe(120, Manufacturer.class); + recipe.addInput(VersatileFrameWork, 5); recipe.addInput(ElectromagneticControlRod, 5); recipe.addInput(Battery, 10); - recipe.addOutput(MagneticFieldGenerator,2); + recipe.addOutput(MagneticFieldGenerator, 2); } { Recipe recipe = new Recipe(3, Blender.class); - recipe.addInput(SulfuricAcid,2.5); - recipe.addInput(AluminaSolution,2); - recipe.addInput(AluminumCasing,1); + recipe.addInput(SulfuricAcid, 2.5); + recipe.addInput(AluminaSolution, 2); + recipe.addInput(AluminumCasing, 1); recipe.addOutput(Battery, 1); recipe.addOutput(Water, 1.5); } { Recipe recipe = new Recipe(8, Assembler.class); - recipe.addInput(AlcladAluminumSheet,5); - recipe.addInput(CopperSheet,3); + recipe.addInput(AlcladAluminumSheet, 5); + recipe.addInput(CopperSheet, 3); recipe.addOutput(HeatSink, 1); } { Recipe recipe = new Recipe(80, Assembler.class); - recipe.addInput(AdaptiveControlUnit,2); - recipe.addInput(SuperComputer,1); - recipe.addOutput(AssemblyDirectorSystem,1); + recipe.addInput(AdaptiveControlUnit, 2); + recipe.addInput(SuperComputer, 1); + recipe.addOutput(AssemblyDirectorSystem, 1); } { - Recipe recipe = new Recipe(30,Assembler.class); - recipe.addInput(Stator,3); - recipe.addInput(AILimiter,2); - recipe.addOutput(ElectromagneticControlRod,2); + Recipe recipe = new Recipe(30, Assembler.class); + recipe.addInput(Stator, 3); + recipe.addInput(AILimiter, 2); + recipe.addOutput(ElectromagneticControlRod, 2); } { Recipe recipe = new Recipe(10, Blender.class); - recipe.addInput(HeatSink,2); - recipe.addInput(Rubber,2); - recipe.addInput(Water,5); - recipe.addInput(NitrogenGas,25); - recipe.addOutput(CoolingSystem,1); + recipe.addInput(HeatSink, 2); + recipe.addInput(Rubber, 2); + recipe.addInput(Water, 5); + recipe.addInput(NitrogenGas, 25); + recipe.addOutput(CoolingSystem, 1); } { Recipe recipe = new Recipe(40, Blender.class); - recipe.addInput(HeavyModularFrame,1); - recipe.addInput(AluminumCasing,50); - recipe.addInput(NitrogenGas,25); - recipe.addOutput(FusedModularFrame,1); + recipe.addInput(HeavyModularFrame, 1); + recipe.addInput(AluminumCasing, 50); + recipe.addInput(NitrogenGas, 25); + recipe.addOutput(FusedModularFrame, 1); } } diff --git a/src/main/java/satisfactory/Test.java b/src/main/java/satisfactory/Test.java index 5057658..3c6861b 100644 --- a/src/main/java/satisfactory/Test.java +++ b/src/main/java/satisfactory/Test.java @@ -3,8 +3,6 @@ package satisfactory; import com.fasterxml.jackson.core.JsonProcessingException; import guru.nidi.graphviz.engine.Format; import guru.nidi.graphviz.engine.Graphviz; -import guru.nidi.graphviz.engine.GraphvizCmdLineEngine; -import guru.nidi.graphviz.engine.GraphvizJdkEngine; import guru.nidi.graphviz.model.MutableGraph; import guru.nidi.graphviz.parse.Parser; import org.jgrapht.Graph; @@ -141,9 +139,7 @@ public class Test { }); de.exportGraph(screws, new File(PLOTS + name + ".dot")); System.out.println(name); - Item.production(screws).forEach((item, rate) -> { - System.out.println("\t" + item.getName() + "\t" + rate); - }); + Item.production(screws).forEach((item, rate) -> System.out.println("\t" + item.getName() + "\t" + rate)); } private static void javaPlot(String name) { diff --git a/src/main/java/satisfactory/Utils.java b/src/main/java/satisfactory/Utils.java index fa81cef..4e11e6a 100644 --- a/src/main/java/satisfactory/Utils.java +++ b/src/main/java/satisfactory/Utils.java @@ -5,7 +5,6 @@ import org.jgrapht.event.ConnectedComponentTraversalEvent; import org.jgrapht.event.EdgeTraversalEvent; import org.jgrapht.event.TraversalListener; import org.jgrapht.event.VertexTraversalEvent; -import org.jgrapht.graph.DefaultDirectedWeightedGraph; import org.jgrapht.graph.DefaultWeightedEdge; import org.jgrapht.graph.EdgeReversedGraph; import org.jgrapht.nio.Attribute; @@ -15,11 +14,9 @@ import org.jgrapht.traverse.DepthFirstIterator; import org.jgrapht.traverse.GraphIterator; import satisfactory.items.Item; import satisfactory.items.ProductionEdge; -import satisfactory.items.SumResult; import java.io.File; import java.util.HashMap; -import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -29,7 +26,7 @@ public class Utils { public static Map getRawOnly(Map totals) { Map raws = new HashMap<>(); - for (Item item : totals.keySet().stream().filter(Item::isRaw).collect(Collectors.toList())) { + for (Item item : totals.keySet().stream().filter(Item::isRaw).toList()) { raws.put(item, totals.get(item)); } return raws; @@ -52,7 +49,7 @@ public class Utils { EdgeReversedGraph inverse = new EdgeReversedGraph<>(graph); GraphIterator iterator = new DepthFirstIterator<>(inverse, target); - iterator.addTraversalListener(new TraversalListener() { + iterator.addTraversalListener(new TraversalListener<>() { @Override public void connectedComponentFinished(ConnectedComponentTraversalEvent e) { System.out.println("\tconnectedComponentFinished: " + e); @@ -105,7 +102,7 @@ public class Utils { m.put("label", DefaultAttribute.createAttribute(label)); return m; }); - de.exportGraph(sum, new File(PLOTS +filename + ".dot")); + de.exportGraph(sum, new File(PLOTS + filename + ".dot")); } } diff --git a/src/main/java/satisfactory/items/Item.java b/src/main/java/satisfactory/items/Item.java index ba26bf2..170bb90 100644 --- a/src/main/java/satisfactory/items/Item.java +++ b/src/main/java/satisfactory/items/Item.java @@ -9,8 +9,8 @@ import java.util.*; public abstract class Item { protected boolean isRaw = false; - private String name; - private Set recipes; + private final String name; + private final Set recipes; private Recipe preference = null; public int sum = 0; diff --git a/src/main/java/satisfactory/items/Recipe.java b/src/main/java/satisfactory/items/Recipe.java index 8138704..49debba 100644 --- a/src/main/java/satisfactory/items/Recipe.java +++ b/src/main/java/satisfactory/items/Recipe.java @@ -5,7 +5,6 @@ import org.jgrapht.Graphs; import org.jgrapht.graph.DefaultDirectedWeightedGraph; import org.jgrapht.graph.DefaultWeightedEdge; import satisfactory.buildings.Building; -import satisfactory.buildings.production.Assembler; import satisfactory.items.requirements.RateAccumulator; import satisfactory.items.requirements.TotalAccumulator; @@ -124,18 +123,19 @@ public class Recipe { return inputs; } - public Map getByProducts(Item reference){ - if (!outputs.containsKey(reference)){ + public Map getByProducts(Item reference) { + if (!outputs.containsKey(reference)) { return null; } return outputs.entrySet().stream().filter(itemIntegerEntry -> isByProduct(reference, itemIntegerEntry.getKey())).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); } - public boolean isByProduct(Item reference, Item test){ + + public boolean isByProduct(Item reference, Item test) { return !reference.equals(test) && outputs.containsKey(reference) && outputs.containsKey(test); } public Graph buildGraph(Item target) { - System.out.println("buildGraph(" + target.getName() + ") @ "+ name); + System.out.println("buildGraph(" + target.getName() + ") @ " + name); Graph graph = new DefaultDirectedWeightedGraph<>(DefaultWeightedEdge.class); graph.addVertex(target); target.sum += 1; @@ -171,7 +171,7 @@ public class Recipe { return productWantedPerMinute / productPerProcess; } - private double getByproductRate(Item main, Item product, double production){ + private double getByproductRate(Item main, Item product, double production) { double runs = getRequiredProcessRuns(main, production); return product.getRecipe().outputs.get(product) * runs; } @@ -182,14 +182,14 @@ public class Recipe { Map map = new HashMap<>(); Queue queue = new LinkedList<>(); queue.add(target); - map.put(target, (double) prodPerMinute); + map.put(target, prodPerMinute); production.addVertex(target); production.addEdge(target, target, new ProductionEdge(target, target, prodPerMinute, processesNeeded(target, prodPerMinute))); Set visited = new HashSet<>(); while (!queue.isEmpty()) { Item item = queue.remove(); - if (visited.contains(item)){ - System.out.println("hint: already processed " + item.getName()+ "! Skip!"); + if (visited.contains(item)) { + System.out.println("hint: already processed " + item.getName() + "! Skip!"); //continue; } else { // next items @@ -207,7 +207,7 @@ public class Recipe { System.out.println(item.getName()); if (item.getRecipe().outputs.containsKey(product)) { // TODO: method isByProduct // product is by-product, no forward dependency - System.out.println("BY-PRODUCT " + item.getName() + " -> " + product.getName() + "... "+ queue); + System.out.println("BY-PRODUCT " + item.getName() + " -> " + product.getName() + "... " + queue); byProducts.add(product); continue; } @@ -237,9 +237,7 @@ public class Recipe { } visited.add(item); } - map.forEach((item, aDouble) -> { - System.out.println(item.getName() + ": " + aDouble); - }); + map.forEach((item, aDouble) -> System.out.println(item.getName() + ": " + aDouble)); return new SumResult(production, map); } diff --git a/src/main/java/satisfactory/items/SumResult.java b/src/main/java/satisfactory/items/SumResult.java index 111768e..e20ccb6 100644 --- a/src/main/java/satisfactory/items/SumResult.java +++ b/src/main/java/satisfactory/items/SumResult.java @@ -31,10 +31,10 @@ public class SumResult { return map; } - public SumResult merge(SumResult other){ + public SumResult merge(SumResult other) { HashMap map = new HashMap<>(); - this.map.forEach(map::put); - other.map.forEach((item, aDouble) -> map.merge(item,aDouble,Double::sum)); + map.putAll(this.map); + other.map.forEach((item, aDouble) -> map.merge(item, aDouble, Double::sum)); return new SumResult(merge(production, other.getProduction()), map); } @@ -58,8 +58,7 @@ public class SumResult { graph1.vertexSet().forEach(result::addVertex); graph1.edgeSet().forEach(productionEdge -> { List collect = result.edgeSet().stream() - .filter(productionEdge1 -> productionEdge1.hasSource(productionEdge.getSource())) - .collect(Collectors.toList()); + .filter(productionEdge1 -> productionEdge1.hasSource(productionEdge.getSource())).toList(); collect.forEach(edge -> { Item src = result.getEdgeSource(edge); Item target = result.getEdgeTarget(edge); diff --git a/src/main/java/satisfactory/items/requirements/Accumulator.java b/src/main/java/satisfactory/items/requirements/Accumulator.java index 9654769..d2f9171 100644 --- a/src/main/java/satisfactory/items/requirements/Accumulator.java +++ b/src/main/java/satisfactory/items/requirements/Accumulator.java @@ -6,43 +6,43 @@ import satisfactory.items.Recipe; import java.util.HashMap; import java.util.Map; -public abstract class Accumulator implements RequirementAccumulator{ - protected Map inputs; +public abstract class Accumulator implements RequirementAccumulator { + protected Map inputs; - public Accumulator(Map inputs) { - this.inputs = inputs; - } + public Accumulator(Map inputs) { + this.inputs = inputs; + } - protected abstract E calculate(Item i, E subAmount, E amount, Map total); + protected abstract E calculate(Item i, E subAmount, E amount, Map total); - protected abstract E dequeue(Item item, E amount, Map totals); + protected abstract E dequeue(Item item, E amount, Map totals); - @Override - public Map accumulate() { - Map total = new HashMap<>(); - Map queue = new HashMap<>(); - for (Item i : inputs.keySet()) { - queue.put(i, inputs.get(i)); - } - while (!queue.isEmpty()) { - Item i = queue.keySet().iterator().next(); - E amount = queue.remove(i); - E newTotal = dequeue(i, amount, total); - total.put(i,newTotal); - if (i.getRecipes().isEmpty()) { - continue; - } - Recipe r = i.getRecipes().iterator().next(); - Map subRequirements = getRequirements(r, i); - for (Item subItem : subRequirements.keySet()) { - E subAmount = subRequirements.get(subItem); - E newSubTotal = calculate(subItem, subAmount, amount, total); - total.put(subItem, newSubTotal); - } - } - return total; - } + @Override + public Map accumulate() { + Map total = new HashMap<>(); + Map queue = new HashMap<>(); + for (Item i : inputs.keySet()) { + queue.put(i, inputs.get(i)); + } + while (!queue.isEmpty()) { + Item i = queue.keySet().iterator().next(); + E amount = queue.remove(i); + E newTotal = dequeue(i, amount, total); + total.put(i, newTotal); + if (i.getRecipes().isEmpty()) { + continue; + } + Recipe r = i.getRecipes().iterator().next(); + Map subRequirements = getRequirements(r, i); + for (Item subItem : subRequirements.keySet()) { + E subAmount = subRequirements.get(subItem); + E newSubTotal = calculate(subItem, subAmount, amount, total); + total.put(subItem, newSubTotal); + } + } + return total; + } - protected abstract Map getRequirements(Recipe r, Item i);// r.getTotalRequirements() + protected abstract Map getRequirements(Recipe r, Item i);// r.getTotalRequirements() } diff --git a/src/main/java/satisfactory/items/requirements/RateAccumulator.java b/src/main/java/satisfactory/items/requirements/RateAccumulator.java index e2f5b54..4b5b362 100644 --- a/src/main/java/satisfactory/items/requirements/RateAccumulator.java +++ b/src/main/java/satisfactory/items/requirements/RateAccumulator.java @@ -7,28 +7,28 @@ import java.util.HashMap; import java.util.Map; public class RateAccumulator extends Accumulator { - private Item item; + private final Item item; - public RateAccumulator(Recipe recipe, Item item) { - super(new HashMap<>()); - recipe.getInputs().forEach((item1, integer) -> inputs.put(item1, integer)); - this.item = item; - } + public RateAccumulator(Recipe recipe, Item item) { + super(new HashMap<>()); + inputs.putAll(recipe.getInputs()); + this.item = item; + } - @Override - protected Double calculate(Item i, Double subAmount, Double amount, Map total) { - Double base = total.getOrDefault(i, 0.0); - double additional = subAmount * amount * i.getProductionRate(); - return base + additional; - } + @Override + protected Double calculate(Item i, Double subAmount, Double amount, Map total) { + Double base = total.getOrDefault(i, 0.0); + double additional = subAmount * amount * i.getProductionRate(); + return base + additional; + } - @Override - protected Double dequeue(Item item, Double amount, Map totals) { - return totals.getOrDefault(item, 0.0) + amount; - } + @Override + protected Double dequeue(Item item, Double amount, Map totals) { + return totals.getOrDefault(item, 0.0) + amount; + } - @Override - protected Map getRequirements(Recipe r, Item i) { - return r.getRequirementRates(i); - } + @Override + protected Map getRequirements(Recipe r, Item i) { + return r.getRequirementRates(i); + } } diff --git a/src/main/java/satisfactory/items/requirements/RequirementAccumulator.java b/src/main/java/satisfactory/items/requirements/RequirementAccumulator.java index 89e5ad5..df1f218 100644 --- a/src/main/java/satisfactory/items/requirements/RequirementAccumulator.java +++ b/src/main/java/satisfactory/items/requirements/RequirementAccumulator.java @@ -4,6 +4,6 @@ import satisfactory.items.Item; import java.util.Map; -public interface RequirementAccumulator { - Map accumulate(); +public interface RequirementAccumulator { + Map accumulate(); } diff --git a/src/main/java/satisfactory/items/requirements/TotalAccumulator.java b/src/main/java/satisfactory/items/requirements/TotalAccumulator.java index 51d704e..70b2aad 100644 --- a/src/main/java/satisfactory/items/requirements/TotalAccumulator.java +++ b/src/main/java/satisfactory/items/requirements/TotalAccumulator.java @@ -5,25 +5,25 @@ import satisfactory.items.Recipe; import java.util.Map; -public class TotalAccumulator extends Accumulator{ +public class TotalAccumulator extends Accumulator { - public TotalAccumulator(Map inputs) { - super(inputs); - } + public TotalAccumulator(Map inputs) { + super(inputs); + } - @Override - protected Double calculate(Item i, Double subAmount, Double amount, Map total) { - return total.getOrDefault(i, 0.0) + subAmount * amount; - } + @Override + protected Double calculate(Item i, Double subAmount, Double amount, Map total) { + return total.getOrDefault(i, 0.0) + subAmount * amount; + } - @Override - protected Double dequeue(Item item, Double amount, Map totals) { - return totals.getOrDefault(item, 0.0) + amount; - } + @Override + protected Double dequeue(Item item, Double amount, Map totals) { + return totals.getOrDefault(item, 0.0) + amount; + } - @Override - protected Map getRequirements(Recipe r, Item i) { - return r.getTotalRequirements(); - } + @Override + protected Map getRequirements(Recipe r, Item i) { + return r.getTotalRequirements(); + } } diff --git a/src/main/java/satisfactory/items/type/Fluid.java b/src/main/java/satisfactory/items/type/Fluid.java index 5c504f6..90f8bfe 100644 --- a/src/main/java/satisfactory/items/type/Fluid.java +++ b/src/main/java/satisfactory/items/type/Fluid.java @@ -5,11 +5,11 @@ import satisfactory.items.Recipe; public abstract class Fluid extends Item { - public Fluid(String name, Recipe... recipes) { - super(name, recipes); - } + public Fluid(String name, Recipe... recipes) { + super(name, recipes); + } - public Fluid(String name) { - super(name); - } + public Fluid(String name) { + super(name); + } } diff --git a/src/main/java/satisfactory/items/type/Gas.java b/src/main/java/satisfactory/items/type/Gas.java index 4716c5e..f5bc08d 100644 --- a/src/main/java/satisfactory/items/type/Gas.java +++ b/src/main/java/satisfactory/items/type/Gas.java @@ -5,14 +5,14 @@ import satisfactory.items.Recipe; public class Gas extends Item { - public Gas(String name, Recipe... recipes) { - super(name, recipes); - setIsRaw(); - } + public Gas(String name, Recipe... recipes) { + super(name, recipes); + setIsRaw(); + } - public Gas(String name) { - super(name); - setIsRaw(); - } + public Gas(String name) { + super(name); + setIsRaw(); + } } diff --git a/src/main/java/satisfactory/items/type/Ingot.java b/src/main/java/satisfactory/items/type/Ingot.java index 0acd7ed..5c81f9e 100644 --- a/src/main/java/satisfactory/items/type/Ingot.java +++ b/src/main/java/satisfactory/items/type/Ingot.java @@ -5,11 +5,11 @@ import satisfactory.items.Recipe; public class Ingot extends Item { - public Ingot(String name, Recipe... recipes) { - super(name, recipes); - } + public Ingot(String name, Recipe... recipes) { + super(name, recipes); + } - public Ingot(String name) { - super(name); - } + public Ingot(String name) { + super(name); + } } diff --git a/src/main/java/satisfactory/items/type/Ore.java b/src/main/java/satisfactory/items/type/Ore.java index b3a928f..157b21d 100644 --- a/src/main/java/satisfactory/items/type/Ore.java +++ b/src/main/java/satisfactory/items/type/Ore.java @@ -5,14 +5,14 @@ import satisfactory.items.Recipe; public class Ore extends Item { - public Ore(String name, Recipe... recipes) { - super(name, recipes); - setIsRaw(); - } + public Ore(String name, Recipe... recipes) { + super(name, recipes); + setIsRaw(); + } - public Ore(String name) { - super(name); - setIsRaw(); - } + public Ore(String name) { + super(name); + setIsRaw(); + } } diff --git a/src/main/java/satisfactory/items/type/Part.java b/src/main/java/satisfactory/items/type/Part.java index 4029797..5507d7a 100644 --- a/src/main/java/satisfactory/items/type/Part.java +++ b/src/main/java/satisfactory/items/type/Part.java @@ -5,11 +5,11 @@ import satisfactory.items.Recipe; public class Part extends Item { - public Part(String name, Recipe... recipes) { - super(name, recipes); - } + public Part(String name, Recipe... recipes) { + super(name, recipes); + } - public Part(String name) { - super(name); - } + public Part(String name) { + super(name); + } } diff --git a/src/main/java/satisfactory/items/type/Pickup.java b/src/main/java/satisfactory/items/type/Pickup.java index f24833b..3ff91d7 100644 --- a/src/main/java/satisfactory/items/type/Pickup.java +++ b/src/main/java/satisfactory/items/type/Pickup.java @@ -5,13 +5,13 @@ import satisfactory.items.Recipe; public class Pickup extends Item { - public Pickup(String name, Recipe... recipes) { - super(name, recipes); - setIsRaw(); - } + public Pickup(String name, Recipe... recipes) { + super(name, recipes); + setIsRaw(); + } - public Pickup(String name) { - super(name); - setIsRaw(); - } + public Pickup(String name) { + super(name); + setIsRaw(); + } } diff --git a/src/main/java/satisfactory/items/type/ProcessedFluid.java b/src/main/java/satisfactory/items/type/ProcessedFluid.java index f5b9209..0f27f8e 100644 --- a/src/main/java/satisfactory/items/type/ProcessedFluid.java +++ b/src/main/java/satisfactory/items/type/ProcessedFluid.java @@ -4,11 +4,11 @@ import satisfactory.items.Recipe; public class ProcessedFluid extends Fluid { - public ProcessedFluid(String name, Recipe... recipes) { - super(name, recipes); - } + public ProcessedFluid(String name, Recipe... recipes) { + super(name, recipes); + } - public ProcessedFluid(String name) { - super(name); - } + public ProcessedFluid(String name) { + super(name); + } } diff --git a/src/main/java/satisfactory/items/type/RawFluid.java b/src/main/java/satisfactory/items/type/RawFluid.java index 4e89e78..15f481f 100644 --- a/src/main/java/satisfactory/items/type/RawFluid.java +++ b/src/main/java/satisfactory/items/type/RawFluid.java @@ -4,13 +4,13 @@ import satisfactory.items.Recipe; public class RawFluid extends Fluid { - public RawFluid(String name, Recipe... recipes) { - super(name, recipes); - setIsRaw(); - } + public RawFluid(String name, Recipe... recipes) { + super(name, recipes); + setIsRaw(); + } - public RawFluid(String name) { - super(name); - setIsRaw(); - } + public RawFluid(String name) { + super(name); + setIsRaw(); + } } diff --git a/src/main/java/satisfactory/items/type/Tool.java b/src/main/java/satisfactory/items/type/Tool.java index c1a4f4f..4107f18 100644 --- a/src/main/java/satisfactory/items/type/Tool.java +++ b/src/main/java/satisfactory/items/type/Tool.java @@ -5,11 +5,11 @@ import satisfactory.items.Recipe; public class Tool extends Item { - public Tool(String name, Recipe... recipes) { - super(name, recipes); - } + public Tool(String name, Recipe... recipes) { + super(name, recipes); + } - public Tool(String name) { - super(name); - } + public Tool(String name) { + super(name); + } } diff --git a/src/test/java/satisfactory/items/DatabaseTest.java b/src/test/java/satisfactory/items/DatabaseTest.java index c27ef0f..9a5c2f4 100644 --- a/src/test/java/satisfactory/items/DatabaseTest.java +++ b/src/test/java/satisfactory/items/DatabaseTest.java @@ -2,6 +2,7 @@ package satisfactory.items; import org.junit.jupiter.api.Test; import satisfactory.Database; + import static org.junit.jupiter.api.Assertions.*; public class DatabaseTest { @@ -9,7 +10,7 @@ public class DatabaseTest { void testWaterPreference() { Item i = Database.Water; assertSame(i.getPreference(), i.getRecipe()); - assertTrue(i.getPreference() == i.getRecipe()); + assertSame(i.getPreference(), i.getRecipe()); assertTrue(i.getRecipe().toString().contains("water pump thingy")); } }