package de.hftstuttgart.cityunits.tests; import static org.junit.jupiter.api.Assertions.*; import java.util.Locale; import java.util.Locale.Category; import javax.measure.Quantity; import javax.measure.Unit; import javax.measure.quantity.Area; import javax.measure.quantity.Length; 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; // Quantities.getQuantity("1.50 €"); does not compile in Maven without cast to String ??? class QuantityTest { @BeforeAll static void init() { // Initialize additional units like metric ton, $ and € with their labels UrbanSimulationUnits.getInstance(); // Ensure US number format (interpret '.' as decimal point) Locale.setDefault(Category.FORMAT, Locale.US); } @Test void testTemperature() { Quantity q = Quantities.getQuantity((String) "5 °C"); assertEquals("[Θ]", q.getUnit().getDimension().toString(), "Wrong dimension!"); assertEquals("278.15 K", q.toSystemUnit().toString(), "Wrong calculation of Celsius to Kelvin!"); } @Test void testMetreAndArea() { Unit sqm = Units.METRE.multiply(Units.METRE).asType(Area.class); Quantity line = Quantities.getQuantity(2, Units.METRE); Quantity area = line.multiply(line).asType(Area.class); assertEquals(sqm, area.getUnit(), "Wrong unit computation!"); assertEquals(4, area.getValue(), "Wrong calculation of area!"); } @Test void testUrbanSimulationUnitMoney() { Quantity cost = Quantities.getQuantity((String) "1.50 €"); assertEquals(cost.getUnit(), UrbanSimulationUnits.EURO, "Wrong currency!"); } @Test void testUrbanSimulationUnitPPMAndTon() { Quantity q = Quantities.getQuantity((String) "20 ppm").multiply(Quantities.getQuantity((String) "10 t")); assertEquals("[M]", q.getUnit().getDimension().toString()); assertEquals(UrbanSimulationUnits.PARTS_PER_MILLION.multiply(UrbanSimulationUnits.TON), q.getUnit()); assertEquals(200, q.getValue()); } @Test void testkWhPerCubicMeter() { Quantity q = Quantities.getQuantity((String) "5.2 kW*h/m³"); assertEquals("[M]/([L]·[T]²)", q.getUnit().getDimension().toString(), "Wrong dimension!"); assertEquals("18720000 W·s/m³", q.toSystemUnit().toString()); } @Test void testCO2eq() { Quantity 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.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!"); } }