From 5ee26fc3f4b6386139580a09ac6d47e643840f73 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 3 May 2019 22:26:37 -0400 Subject: [PATCH] Fixed power tests --- .../world/blocks/power/PowerGraph.java | 2 +- .../src/test/java/power/PowerTestFixture.java | 10 +--- tests/src/test/java/power/PowerTests.java | 50 +------------------ 3 files changed, 4 insertions(+), 58 deletions(-) diff --git a/core/src/io/anuke/mindustry/world/blocks/power/PowerGraph.java b/core/src/io/anuke/mindustry/world/blocks/power/PowerGraph.java index e3f5bf4c64..d8ac8b05d9 100644 --- a/core/src/io/anuke/mindustry/world/blocks/power/PowerGraph.java +++ b/core/src/io/anuke/mindustry/world/blocks/power/PowerGraph.java @@ -135,7 +135,7 @@ public class PowerGraph{ if(otherConsumersAreValid(consumer, consumePower)){ consumer.entity.power.satisfaction = coverage; }else{ //invalid consumers get an estimate, if they were to activate - consumer.entity.power.satisfaction = Math.min(1, produced / (needed + consumePower.usage)); + consumer.entity.power.satisfaction = Math.min(1, produced / (needed + consumePower.usage * consumer.entity.delta())); //just in case if(Float.isNaN(consumer.entity.power.satisfaction)){ consumer.entity.power.satisfaction = 0f; diff --git a/tests/src/test/java/power/PowerTestFixture.java b/tests/src/test/java/power/PowerTestFixture.java index fd3bff5eca..c7f8f0f355 100644 --- a/tests/src/test/java/power/PowerTestFixture.java +++ b/tests/src/test/java/power/PowerTestFixture.java @@ -43,9 +43,9 @@ public class PowerTestFixture{ }}; } - protected static Battery createFakeBattery(float capacity, float ticksToFill){ + protected static Battery createFakeBattery(float capacity){ return new Battery("fakebattery"){{ - consumes.powerBuffered(capacity, ticksToFill); + consumes.powerBuffered(capacity); }}; } @@ -55,12 +55,6 @@ public class PowerTestFixture{ }}; } - protected static Block createFakeBufferedConsumer(float capacity, float ticksToFill){ - return new PowerBlock("fakebufferedconsumer"){{ - consumes.powerBuffered(capacity, ticksToFill); - }}; - } - /** * Creates a fake tile on the given location using the given block. * @param x The X coordinate. diff --git a/tests/src/test/java/power/PowerTests.java b/tests/src/test/java/power/PowerTests.java index ca833bf385..0b9ea6cb23 100644 --- a/tests/src/test/java/power/PowerTests.java +++ b/tests/src/test/java/power/PowerTests.java @@ -68,54 +68,6 @@ public class PowerTests extends PowerTestFixture{ assertEquals(expectedSatisfaction, directConsumerTile.entity.power.satisfaction, Mathf.FLOAT_ROUNDING_ERROR, parameterDescription + ": Satisfaction of direct consumer did not match"); } - /** Tests the satisfaction of a single buffered consumer after a single update of the power graph which contains a single producer. */ - @TestFactory - DynamicTest[] bufferedConsumerSatisfactionIsAsExpected(){ - return new DynamicTest[]{ - // Note: usage may not be 0 in any of the test cases. This would equal a "ticksToFill" of infinite. - // Note: Due to a fixed delta of 0.5, only half of what is defined here will in fact be produced/consumed. Keep this in mind when defining expectedSatisfaction! - dynamicTest("01", () -> simulateBufferedConsumption(0.0f, 0.0f, 0.1f, 0.0f, 0.0f, "Empty Buffer, No power anywhere")), - dynamicTest("02", () -> simulateBufferedConsumption(0.0f, 1.0f, 0.1f, 0.0f, 0.0f, "Empty Buffer, No power provided")), - dynamicTest("03", () -> simulateBufferedConsumption(1.0f, 0.0f, 0.1f, 0.0f, 0.0f, "Empty Buffer, No power requested")), - dynamicTest("04", () -> simulateBufferedConsumption(1.0f, 1.0f, 1.0f, 0.0f, 0.5f, "Empty Buffer, Stable Power, One tick to fill")), - dynamicTest("05", () -> simulateBufferedConsumption(2.0f, 1.0f, 2.0f, 0.0f, 1.0f, "Empty Buffer, Stable Power, One delta to fill")), - dynamicTest("06", () -> simulateBufferedConsumption(1.0f, 1.0f, 0.1f, 0.0f, 0.05f, "Empty Buffer, Stable Power, multiple ticks to fill")), - dynamicTest("07", () -> simulateBufferedConsumption(1.2f, 0.5f, 1.0f, 0.0f, 1.0f, "Empty Buffer, Power excess, one delta to fill")), - dynamicTest("08", () -> simulateBufferedConsumption(1.0f, 0.5f, 0.1f, 0.0f, 0.1f, "Empty Buffer, Power excess, multiple ticks to fill")), - dynamicTest("09", () -> simulateBufferedConsumption(1.0f, 1.0f, 2.0f, 0.0f, 0.5f, "Empty Buffer, Power shortage, one delta to fill")), - dynamicTest("10", () -> simulateBufferedConsumption(0.5f, 1.0f, 0.1f, 0.0f, 0.05f, "Empty Buffer, Power shortage, multiple ticks to fill")), - dynamicTest("11", () -> simulateBufferedConsumption(0.0f, 1.0f, 0.1f, 0.5f, 0.5f, "Unchanged buffer with no power produced")), - dynamicTest("12", () -> simulateBufferedConsumption(1.0f, 1.0f, 0.1f, 1.0f, 1.0f, "Unchanged buffer when already full")), - dynamicTest("13", () -> simulateBufferedConsumption(0.2f, 1.0f, 0.5f, 0.5f, 0.6f, "Half buffer, power shortage")), - dynamicTest("14", () -> simulateBufferedConsumption(1.0f, 1.0f, 0.5f, 0.9f, 1.0f, "Buffer does not get exceeded")), - dynamicTest("15", () -> simulateBufferedConsumption(2.0f, 1.0f, 1.0f, 0.5f, 1.0f, "Half buffer, filled with excess")) - }; - } - - void simulateBufferedConsumption(float producedPower, float maxBuffer, float powerConsumedPerTick, float initialSatisfaction, float expectedSatisfaction, String parameterDescription){ - Tile producerTile = createFakeTile(0, 0, createFakeProducerBlock(producedPower)); - producerTile.entity().productionEfficiency = 1f; - Tile bufferedConsumerTile = createFakeTile(0, 1, createFakeBufferedConsumer(maxBuffer, maxBuffer > 0.0f ? maxBuffer / powerConsumedPerTick : 1.0f)); - bufferedConsumerTile.entity.power.satisfaction = initialSatisfaction; - - PowerGraph powerGraph = new PowerGraph(); - powerGraph.add(producerTile); - powerGraph.add(bufferedConsumerTile); - - assertEquals(producedPower * Time.delta(), powerGraph.getPowerProduced(), Mathf.FLOAT_ROUNDING_ERROR, parameterDescription + ": Produced power did not match"); - float expectedPowerUsage; - if(initialSatisfaction == 1.0f){ - expectedPowerUsage = 0f; - }else{ - expectedPowerUsage = Math.min(maxBuffer, powerConsumedPerTick * Time.delta()); - } - assertEquals(expectedPowerUsage, powerGraph.getPowerNeeded(), Mathf.FLOAT_ROUNDING_ERROR, parameterDescription + ": Consumed power did not match"); - - // Update and check for the expected power satisfaction of the consumer - powerGraph.update(); - assertEquals(expectedSatisfaction, bufferedConsumerTile.entity.power.satisfaction, Mathf.FLOAT_ROUNDING_ERROR, parameterDescription + ": Satisfaction of buffered consumer did not match"); - } - /** * Tests the satisfaction of a single direct consumer after a single update of the power graph which contains a single producer and a single battery. * The used battery is created with a maximum capacity of 100 and receives ten power per tick. @@ -150,7 +102,7 @@ public class PowerTests extends PowerTestFixture{ powerGraph.add(directConsumerTile); } float maxCapacity = 100f; - Tile batteryTile = createFakeTile(0, 2, createFakeBattery(maxCapacity, 10)); + Tile batteryTile = createFakeTile(0, 2, createFakeBattery(maxCapacity)); batteryTile.entity.power.satisfaction = initialBatteryCapacity / maxCapacity; powerGraph.add(batteryTile);