Commit 43248a84 authored by Kai-Holger Brassel's avatar Kai-Holger Brassel
Browse files

Added units for carbon emissions correctly

parent 8c7a07e5
Pipeline #4042 passed with stage
in 2 minutes and 54 seconds
package de.hftstuttgart.cityunits.model;
import javax.measure.Quantity;
/**
* This interface represents total amounts of Carbon.
*/
public interface CarbonEmission extends Quantity<CarbonEmission>
{
}
\ No newline at end of file
......@@ -20,6 +20,10 @@ import tech.units.indriya.unit.TransformedUnit;
import tech.units.indriya.unit.UnitDimension;
import tech.units.indriya.unit.Units;
/**
* See https://www.openhab.org/docs/concepts/units-of-measurement.html and
* https://github.com/unitsofmeasurement/uom-demos/blob/master/domain/energy/src/main/java/tech/uom/demo/energy/
*/
public class UrbanSimulationUnits extends AbstractSystemOfUnits {
private static final UrbanSimulationUnits INSTANCE = new UrbanSimulationUnits();
......@@ -28,8 +32,11 @@ public class UrbanSimulationUnits extends AbstractSystemOfUnits {
return getClass().getSimpleName();
}
public static final Unit<Dimensionless> CO2EQ = addUnit(AbstractUnit.ONE);
public static final Unit<Mass> TON = addUnit(Units.KILOGRAM.multiply(1000));
public static final Unit<CarbonEmission> GRAM_CO2_EQUIVALENT = Units.GRAM.asType(CarbonEmission.class);
public static final Unit<CarbonEmission> KILOGRAM_CO2_EQUIVALENT = Units.KILOGRAM.asType(CarbonEmission.class);
public static final Unit<CarbonEmission> TON_CO2_EQUIVALENT = TON.asType(CarbonEmission.class);
public static final Unit<Dimensionless> PARTS_PER_MILLION = addUnit(new TransformedUnit<>(AbstractUnit.ONE,
MultiplyConverter.ofRational(BigInteger.ONE, BigInteger.valueOf(1000000))));
public static final Unit<Dimensionless> DECIBEL = addUnit(AbstractUnit.ONE.transform(
......@@ -38,16 +45,16 @@ public class UrbanSimulationUnits extends AbstractSystemOfUnits {
new AlternateUnit<Intensity>(Units.WATT.divide(Units.SQUARE_METRE), "W/m²"));
// To model costs I added monetary units quick and dirty as SI base units.
// According to JavaDoc of AbstractUnit,
// monetary units should rather be implemented in an extra type hierarchy below
// ComparableUnit.
// According to JavaDoc of AbstractUnit, monetary units should rather be implemented in an extra type hierarchy
// below ComparableUnit.
public final static Dimension MONEY_DIMENSION = UnitDimension.parse('M');
public final static Unit<Euro> EURO = new BaseUnit<Euro>("€", MONEY_DIMENSION);
public final static Unit<Dollar> DOLLAR = new BaseUnit<Dollar>("$", MONEY_DIMENSION);
static {
SimpleUnitFormat.getInstance().label(CO2EQ, "CO₂eq");
SimpleUnitFormat.getInstance().label(TON, "t");
SimpleUnitFormat.getInstance().label(KILOGRAM_CO2_EQUIVALENT, "kg CO₂eq");
SimpleUnitFormat.getInstance().label(TON_CO2_EQUIVALENT, "t CO₂eq");
SimpleUnitFormat.getInstance().label(DECIBEL, "dB");
SimpleUnitFormat.getInstance().label(PARTS_PER_MILLION, "ppm");
SimpleUnitFormat.getInstance().label(EURO, "€");
......
......@@ -13,6 +13,7 @@ import javax.measure.quantity.Mass;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import de.hftstuttgart.cityunits.model.CarbonEmission;
import de.hftstuttgart.cityunits.model.UrbanSimulationUnits;
import tech.units.indriya.quantity.Quantities;
import tech.units.indriya.unit.Units;
......@@ -68,10 +69,12 @@ class QuantityTest {
@Test
void testCO2eq() {
Quantity<Mass> q = Quantities.getQuantity((String) "5200.5 kg·CO₂eq").asType(Mass.class);
Quantity<CarbonEmission> q = Quantities.getQuantity((String) "5200.7 kg CO₂eq").asType(CarbonEmission.class);
assertEquals("[M]", q.getUnit().getDimension().toString(), "Wrong dimension!");
assertTrue(q.isEquivalentTo(Quantities.getQuantity((String) "5.2005 t·CO₂eq").asType(Mass.class)),
assertTrue(q.isEquivalentTo(Quantities.getQuantity((String) "5.2007 t CO₂eq").asType(CarbonEmission.class)),
"Wrong conversion from kg of CO₂eq to ton of CO₂eq!");
assertTrue(q.isEquivalentTo(Quantities.getQuantity((String) "5200700 g CO₂eq").asType(CarbonEmission.class)),
"Wrong conversion from kg of CO₂eq to gram of CO₂eq!");
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment