diff options
Diffstat (limited to 'src/functionalTest/java/kubatech/test')
-rw-r--r-- | src/functionalTest/java/kubatech/test/EIGTests.java | 342 | ||||
-rw-r--r-- | src/functionalTest/java/kubatech/test/kubatechTestMod.java | 101 |
2 files changed, 0 insertions, 443 deletions
diff --git a/src/functionalTest/java/kubatech/test/EIGTests.java b/src/functionalTest/java/kubatech/test/EIGTests.java deleted file mode 100644 index 1bb88814a4..0000000000 --- a/src/functionalTest/java/kubatech/test/EIGTests.java +++ /dev/null @@ -1,342 +0,0 @@ -/* - * spotless:off - * KubaTech - Gregtech Addon - * Copyright (C) 2022 - 2024 kuba6000 - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see <https://www.gnu.org/licenses/>. - * spotless:on - */ - -package kubatech.test; - -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static kubatech.tileentity.gregtech.multiblock.GT_MetaTileEntity_ExtremeIndustrialGreenhouse.EIG_BALANCE_IC2_ACCELERATOR_TIER; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.fail; - -import java.io.File; -import java.util.Arrays; -import java.util.Comparator; -import java.util.Map; - -import net.minecraft.block.Block; -import net.minecraft.init.Blocks; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.server.MinecraftServer; -import net.minecraft.util.ChatComponentText; -import net.minecraft.world.MinecraftException; -import net.minecraft.world.World; -import net.minecraft.world.WorldProvider; -import net.minecraft.world.WorldProviderSurface; -import net.minecraft.world.WorldServer; -import net.minecraft.world.WorldSettings; -import net.minecraft.world.WorldType; -import net.minecraft.world.chunk.storage.IChunkLoader; -import net.minecraft.world.storage.IPlayerFileData; -import net.minecraft.world.storage.ISaveHandler; -import net.minecraft.world.storage.WorldInfo; -import net.minecraftforge.common.DimensionManager; - -import org.junit.jupiter.api.Test; - -import com.gtnewhorizon.gtnhlib.util.map.ItemStackMap; - -import gregtech.api.GregTech_API; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.common.blocks.GT_Item_Machines; -import ic2.api.crops.CropCard; -import ic2.api.crops.Crops; -import ic2.core.Ic2Items; -import ic2.core.crop.TileEntityCrop; -import kubatech.tileentity.gregtech.multiblock.GT_MetaTileEntity_ExtremeIndustrialGreenhouse; - -public class EIGTests { - - private static final int EIG_CONTROLLER_METADATA = 12_792; - private static final int NUMBER_OF_CROPS_PER_TEST = 90; - private static final int NUMBER_OF_TESTS_TO_DO = 30; - - static World myWorld; - - public EIGTests() { - if (!DimensionManager.isDimensionRegistered(256)) { - DimensionManager.registerProviderType(256, WorldProviderSurface.class, false); - DimensionManager.registerDimension(256, 256); - } - if (myWorld == null) { - myWorld = new WorldServer(MinecraftServer.getServer(), new ISaveHandler() { - - @Override - public WorldInfo loadWorldInfo() { - return null; - } - - @Override - public void checkSessionLock() throws MinecraftException { - - } - - @Override - public IChunkLoader getChunkLoader(WorldProvider p_75763_1_) { - return null; - } - - @Override - public void saveWorldInfoWithPlayer(WorldInfo p_75755_1_, NBTTagCompound p_75755_2_) { - - } - - @Override - public void saveWorldInfo(WorldInfo p_75761_1_) { - - } - - @Override - public IPlayerFileData getSaveHandler() { - return null; - } - - @Override - public void flush() { - - } - - @Override - public File getWorldDirectory() { - return null; - } - - @Override - public File getMapFileFromName(String p_75758_1_) { - return null; - } - - @Override - public String getWorldDirectoryName() { - return "dummy"; - } - }, - "DummyTestWorld", - 256, - new WorldSettings(256, WorldSettings.GameType.SURVIVAL, false, false, WorldType.DEFAULT), - MinecraftServer.getServer().theProfiler) { - - @Override - public File getChunkSaveLocation() { - return new File("ignoreme"); - } - - @Override - public int getBlockLightValue(int p_72957_1_, int p_72957_2_, int p_72957_3_) { - return 4; - } - }; - } - } - - private static int leftOverTicksFromRealRun = 0; - - ItemStackMap<Integer> getRealDrops(TileEntityCrop cropTile, CropCard cc, int growth, int gain, int resistance) { - cropTile.setCrop(cc); - cropTile.setGrowth((byte) growth); - cropTile.setGain((byte) gain); - cropTile.setResistance((byte) resistance); - cropTile.tick(); - - ItemStackMap<Integer> expected = new ItemStackMap<>(); - - // run for 30 minutes - for (int k = 0; k < NUMBER_OF_CROPS_PER_TEST; k++) { - cropTile.ticker = 1; - cropTile.setSize((byte) cc.maxSize()); - cropTile.setSize(cc.getSizeAfterHarvest(cropTile)); - cropTile.growthPoints = 0; - int lastHarvestedAt = 0; - int i; - for (i = 0; i < (30 * MINUTES) * (1 << EIG_BALANCE_IC2_ACCELERATOR_TIER);) { - i += TileEntityCrop.tickRate; - cropTile.tick(); - if (!cc.canGrow(cropTile)) { - lastHarvestedAt = i; - ItemStack[] stacks = cropTile.harvest_automated(false); - for (ItemStack stack : stacks) { - expected.merge(stack, stack.stackSize, Integer::sum); - } - } - } - leftOverTicksFromRealRun += i - lastHarvestedAt; - } - - return expected; - } - - ItemStackMap<Integer> getEIGDrops(GT_MetaTileEntity_ExtremeIndustrialGreenhouse EIG, ItemStack stack) { - ItemStackMap<Integer> generated = new ItemStackMap<>(); - int imax = (30 * MINUTES) / (5 * SECONDS); - double ticks_to_ignore_per_operation = Math - .ceil((double) leftOverTicksFromRealRun / (NUMBER_OF_CROPS_PER_TEST * imax)); - for (int j = 0; j < NUMBER_OF_CROPS_PER_TEST; j++) { - GT_MetaTileEntity_ExtremeIndustrialGreenhouse.GreenHouseSlot slot = new GT_MetaTileEntity_ExtremeIndustrialGreenhouse.GreenHouseSlot( - EIG, - stack.copy(), - true, - false); - if (slot.isValid) { - for (int i = 0; i < imax; i++) { - int ticks_to_ignore = (int) Math.min(ticks_to_ignore_per_operation, leftOverTicksFromRealRun); - leftOverTicksFromRealRun -= ticks_to_ignore; - for (ItemStack ic2Drop : slot.getIC2Drops( - EIG, - (5 * SECONDS * (1 << EIG_BALANCE_IC2_ACCELERATOR_TIER)) - (double) ticks_to_ignore)) { - generated.merge(ic2Drop, ic2Drop.stackSize, Integer::sum); - } - } - } - } - - return generated; - } - - @Test - void EIGDrops() { - - myWorld.setBlock(10, 80, 0, Blocks.farmland, 0, 0); - myWorld.setBlock(10, 81, 0, Block.getBlockFromItem(Ic2Items.crop.getItem()), 0, 0); - CropCard cc = Crops.instance.getCropCard("gregtech", "Indigo"); - TileEntityCrop cropTile = (TileEntityCrop) myWorld.getTileEntity(10, 81, 0); - ItemStack ccStack = cropTile.generateSeeds(cc, (byte) 10, (byte) 10, (byte) 10, (byte) 1); - for (int i = 0; i < TileEntityCrop.tickRate; i++) { - cropTile.waterStorage = 200; - cropTile.updateEntity(); - } - - GT_Item_Machines itemMachines = (GT_Item_Machines) Item.getItemFromBlock(GregTech_API.sBlockMachines); - itemMachines.placeBlockAt( - new ItemStack(itemMachines, 1, EIG_CONTROLLER_METADATA), - null, - myWorld, - 0, - 81, - 0, - 2, - 0, - 0, - 0, - EIG_CONTROLLER_METADATA); - IGregTechTileEntity te = (IGregTechTileEntity) myWorld.getTileEntity(0, 81, 0); - GT_MetaTileEntity_ExtremeIndustrialGreenhouse EIG = (GT_MetaTileEntity_ExtremeIndustrialGreenhouse) te - .getMetaTileEntity(); - - int[] abc = new int[] { 0, -2, 3 }; - int[] xyz = new int[] { 0, 0, 0 }; - EIG.getExtendedFacing() - .getWorldOffset(abc, xyz); - xyz[0] += te.getXCoord(); - xyz[1] += te.getYCoord(); - xyz[2] += te.getZCoord(); - - myWorld.setBlock(xyz[0], xyz[1] - 2, xyz[2], GregTech_API.sBlockCasings4, 1, 0); - myWorld.setBlock(xyz[0], xyz[1] - 1, xyz[2], Blocks.farmland, 0, 0); - - ItemStack stackToTest = null; - - for (int n = 0; n < 5; n++) { - - int[] x = new int[NUMBER_OF_TESTS_TO_DO]; - int[] y = new int[NUMBER_OF_TESTS_TO_DO]; - - // MinecraftServer.getServer() - // .addChatMessage(new ChatComponentText("[EIGTest results]")); - - for (int i = 0; i < NUMBER_OF_TESTS_TO_DO; i++) { - leftOverTicksFromRealRun = 0; - ItemStackMap<Integer> expected = getRealDrops(cropTile, cc, 10, 10, 10); - ItemStackMap<Integer> generated = getEIGDrops(EIG, ccStack); - - // MinecraftServer.getServer() - // .addChatMessage(new ChatComponentText("[TEST" + i + "]Real crop drops:")); - // for (Map.Entry<ItemStack, Integer> entry : expected.entrySet()) { - // MinecraftServer.getServer() - // .addChatMessage(new ChatComponentText("- " + entry.getKey().getDisplayName() + " x" + - // entry.getValue())); - // } - - // MinecraftServer.getServer() - // .addChatMessage(new ChatComponentText("[TEST" + i + "]EIG crop drops:")); - // for (Map.Entry<ItemStack, Integer> entry : generated.entrySet()) { - // MinecraftServer.getServer() - // .addChatMessage(new ChatComponentText("- " + entry.getKey().getDisplayName() + " x" + - // entry.getValue())); - // } - - // we are only comparing one item from drops - if (stackToTest == null) { - stackToTest = expected.entrySet() - .stream() - .max(Comparator.comparingInt(Map.Entry::getValue)) - .get() - .getKey(); - } - - int expectedValue = expected.getOrDefault(stackToTest, 0); - int generatedValue = generated.getOrDefault(stackToTest, 0); - - x[i] = expectedValue; - y[i] = generatedValue; - } - - double real_average = Arrays.stream(x) - .average() - .getAsDouble(); - double eig_average = Arrays.stream(y) - .average() - .getAsDouble(); - - double real_variance = 0d; - double a = 0d; - for (int i : x) { - a += (i - real_average) * (i - real_average); - } - a /= NUMBER_OF_TESTS_TO_DO; - real_variance = a; - - double eig_variance = 0d; - a = 0d; - for (int i : y) { - a += (i - eig_average) * (i - eig_average); - } - a /= NUMBER_OF_TESTS_TO_DO; - eig_variance = a; - - double u = (real_average - eig_average) - / Math.sqrt((real_variance / NUMBER_OF_TESTS_TO_DO) + (eig_variance / NUMBER_OF_TESTS_TO_DO)); - MinecraftServer.getServer() - .addChatMessage( - new ChatComponentText( - "real average = " + Math - .round(real_average) + " eig average = " + Math.round(eig_average) + " u = " + u)); - double test_critical_value = 1.959964d; - boolean passed = Math.abs(u) < test_critical_value; - boolean instafail = Math.abs(u) > test_critical_value * 2; - if (passed) return; - assertFalse(instafail); - } - fail(); - - } - -} diff --git a/src/functionalTest/java/kubatech/test/kubatechTestMod.java b/src/functionalTest/java/kubatech/test/kubatechTestMod.java deleted file mode 100644 index bc68d3f203..0000000000 --- a/src/functionalTest/java/kubatech/test/kubatechTestMod.java +++ /dev/null @@ -1,101 +0,0 @@ -package kubatech.test; - -import java.io.File; -import java.io.PrintWriter; -import java.nio.file.FileSystems; -import java.nio.file.Path; - -import net.minecraft.server.MinecraftServer; -import net.minecraft.util.ChatComponentText; - -import org.apache.commons.io.output.CloseShieldOutputStream; -import org.junit.platform.engine.discovery.DiscoverySelectors; -import org.junit.platform.launcher.Launcher; -import org.junit.platform.launcher.LauncherDiscoveryRequest; -import org.junit.platform.launcher.LauncherSession; -import org.junit.platform.launcher.TestPlan; -import org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder; -import org.junit.platform.launcher.core.LauncherFactory; -import org.junit.platform.launcher.listeners.SummaryGeneratingListener; -import org.junit.platform.launcher.listeners.TestExecutionSummary; -import org.junit.platform.reporting.legacy.xml.LegacyXmlReportGeneratingListener; - -import cpw.mods.fml.common.FMLCommonHandler; -import cpw.mods.fml.common.Mod; -import cpw.mods.fml.common.Mod.EventHandler; -import cpw.mods.fml.common.event.FMLPreInitializationEvent; -import cpw.mods.fml.common.event.FMLServerStartedEvent; -import gregtech.GT_Mod; - -@Mod( - modid = "kubatech-tests", - name = "KubaTech Dev Tests", - version = "1.0", - dependencies = "required-after:kubatech;required-after:gregtech;after:berriespp;") -public class kubatechTestMod { - - @EventHandler - public void preInit(FMLPreInitializationEvent ev) { - // Disable GT5u messing with vanilla recipes for unit tests - GT_Mod.gregtechproxy.mNerfedWoodPlank = false; - GT_Mod.gregtechproxy.mNerfedVanillaTools = false; - } - - @EventHandler - public void onServerStarted(FMLServerStartedEvent startedEv) { - MinecraftServer.getServer() - .addChatMessage(new ChatComponentText("Running KT unit tests...")); - runTests(); - MinecraftServer.getServer() - .addChatMessage(new ChatComponentText("Running KT unit tests finished")); - } - - public void runTests() { - // https://junit.org/junit5/docs/current/user-guide/#launcher-api - System.setProperty("junit.platform.reporting.open.xml.enabled", "false"); - final Path testsXmlOutDir = FileSystems.getDefault() - .getPath("./junit-out/") - .toAbsolutePath(); - final File testsXmlOutDirFile = testsXmlOutDir.toFile(); - testsXmlOutDirFile.mkdirs(); - { - File[] fileList = testsXmlOutDirFile.listFiles(); - if (fileList != null) { - for (File child : fileList) { - if (child.isFile() && child.getName() - .endsWith(".xml")) { - child.delete(); - } - } - } - } - final LauncherDiscoveryRequest discovery = LauncherDiscoveryRequestBuilder.request() - .selectors(DiscoverySelectors.selectPackage("kubatech.test")) - .build(); - final SummaryGeneratingListener summaryGenerator = new SummaryGeneratingListener(); - final TestExecutionSummary summary; - try (PrintWriter stderrWriter = new PrintWriter(new CloseShieldOutputStream(System.err), true)) { - final LegacyXmlReportGeneratingListener xmlGenerator = new LegacyXmlReportGeneratingListener( - testsXmlOutDir, - stderrWriter); - try (LauncherSession session = LauncherFactory.openSession()) { - final Launcher launcher = session.getLauncher(); - final TestPlan plan = launcher.discover(discovery); - launcher.registerTestExecutionListeners(summaryGenerator, xmlGenerator); - launcher.execute(plan); - } - summary = summaryGenerator.getSummary(); - - summary.printFailuresTo(stderrWriter, 32); - summary.printTo(stderrWriter); - stderrWriter.flush(); - } - // Throw an exception if running via `runServer` - if (summary.getTotalFailureCount() > 0 && FMLCommonHandler.instance() - .getSide() - .isServer()) { - throw new RuntimeException("Some of the unit tests failed to execute, check the log for details"); - } - } - -} |