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 javax.measure.quantity.Mass;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
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("5200.5 kg·CO₂eq").asType(Mass.class);
assertEquals("[M]", q.getUnit().getDimension().toString(), "Wrong dimension!");
assertTrue(q.isEquivalentTo(Quantities.getQuantity("5.2005 t·CO₂eq").asType(Mass.class)),
"Wrong conversion from kg of CO₂eq to ton of CO₂eq!");
}
}