package org.openlca.core.math; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.openlca.core.TestProcess; import org.openlca.core.TestSystem; import org.openlca.core.Tests; import org.openlca.core.model.Process; import org.openlca.core.model.ProductSystem; import org.openlca.core.model.descriptors.FlowDescriptor; import org.openlca.core.model.descriptors.ProcessDescriptor; import org.openlca.core.results.FullResultProvider; public class SelfLoopAnalysisTest { private FullResultProvider result; @Before public void setUp() { Process p1 = TestProcess .forOutput("p1", 1, "kg") .prodIn("p2", 1, "kg") .elemIn("f1", 1, "kg") .elemOut("f2", 2, "kg") .get(); Process p2 = TestProcess .forOutput("p2", 1, "kg") .prodIn("p1", 0.5, "kg") .elemIn("f1", 2, "kg") .elemOut("f2", 1, "kg") .get(); ProductSystem system = TestSystem.of(p1).link(p2).get(); system.setTargetAmount(2); system = Tests.update(system); result = TestSystem.calculate(system); } @Test public void testTotalRequirements() { double[] tr = result.result.totalRequirements; Assert.assertEquals(4, tr[0], 1e-10); Assert.assertEquals(4, tr[1], 1e-10); } @Test public void testScalingVector() { double[] s = result.result.scalingFactors; Assert.assertEquals(4, s[0], 1e-10); Assert.assertEquals(4, s[1], 1e-10); } @Test public void testUpstreamResults() { Assert.assertEquals(12, upstream("p1", "f1"), 1e-10); Assert.assertEquals(12, upstream("p1", "f2"), 1e-10); Assert.assertEquals(10, upstream("p2", "f1"), 1e-10); Assert.assertEquals(8, upstream("p2", "f2"), 1e-10); } @Test public void testDirectResults() { Assert.assertEquals(4, direct("p1", "f1"), 1e-10); Assert.assertEquals(8, direct("p1", "f2"), 1e-10); Assert.assertEquals(8, direct("p2", "f1"), 1e-10); Assert.assertEquals(4, direct("p2", "f2"), 1e-10); } private double direct(String processName, String flowName) { return result.getSingleFlowResult(process(processName), flow(flowName)).value; } private double upstream(String processName, String flowName) { return result.getUpstreamFlowResult( process(processName), flow(flowName)).value; } private FlowDescriptor flow(String name) { for (FlowDescriptor f : result.getFlowDescriptors()) { if (name.equals(f.getName())) return f; } return null; } private ProcessDescriptor process(String name) { for (ProcessDescriptor p : result.getProcessDescriptors()) { if (name.equals(p.getName())) return p; } return null; } }