QuantityTest.java 2.94 KB
Newer Older
1
2
package de.hftstuttgart.cityunits.tests;

3
import static org.junit.jupiter.api.Assertions.*;
4
5
6
7

import java.util.Locale;
import java.util.Locale.Category;

8
9
10
11
12
13
14
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;

15
import de.hftstuttgart.cityunits.model.CarbonEmission;
16
17
18
19
import de.hftstuttgart.cityunits.model.UrbanSimulationUnits;
import tech.units.indriya.quantity.Quantities;
import tech.units.indriya.unit.Units;

20
// Quantities.getQuantity("1.50 €"); does not compile in Maven without cast to String ???
21
class QuantityTest {
22
23
24
25
	@BeforeAll
	static void init() {
		// Initialize additional units like metric ton, $ and € with their labels
		UrbanSimulationUnits.getInstance();
26
27
		// Ensure US number format (interpret '.' as decimal point)
		Locale.setDefault(Category.FORMAT, Locale.US);
28
29
30
31
	}

	@Test
	void testTemperature() {
32
		Quantity<?> q = Quantities.getQuantity((String) "5 °C");
33
34
35
36

		assertEquals("[Θ]", q.getUnit().getDimension().toString(), "Wrong dimension!");
		assertEquals("278.15 K", q.toSystemUnit().toString(), "Wrong calculation of Celsius to Kelvin!");
	}
37

38
39
40
41
42
	@Test
	void testMetreAndArea() {
		Unit<Area> sqm = Units.METRE.multiply(Units.METRE).asType(Area.class);
		Quantity<Length> line = Quantities.getQuantity(2, Units.METRE);
		Quantity<Area> area = line.multiply(line).asType(Area.class);
43

44
45
46
47
48
49
		assertEquals(sqm, area.getUnit(), "Wrong unit computation!");
		assertEquals(4, area.getValue(), "Wrong calculation of area!");
	}

	@Test
	void testUrbanSimulationUnitMoney() {
50
		Quantity<?> cost = Quantities.getQuantity((String) "1.50 €");
51
52
53
54
55
		assertEquals(cost.getUnit(), UrbanSimulationUnits.EURO, "Wrong currency!");
	}

	@Test
	void testUrbanSimulationUnitPPMAndTon() {
56
		Quantity<?> q = Quantities.getQuantity((String) "20 ppm").multiply(Quantities.getQuantity((String) "10 t"));
57
58
59
60
61
62
63
		assertEquals("[M]", q.getUnit().getDimension().toString());
		assertEquals(UrbanSimulationUnits.PARTS_PER_MILLION.multiply(UrbanSimulationUnits.TON), q.getUnit());
		assertEquals(200, q.getValue());
	}

	@Test
	void testkWhPerCubicMeter() {
64
		Quantity<?> q = Quantities.getQuantity((String) "5.2 kW*h/m³");
65
		assertEquals("[M]/([L]·[T]²)", q.getUnit().getDimension().toString(), "Wrong dimension!");
66
		assertEquals("18720000 W·s/m³", q.toSystemUnit().toString());
67
68
	}

69
70
	@Test
	void testCO2eq() {
71
		Quantity<CarbonEmission> q = Quantities.getQuantity((String) "5200.7 kg CO₂eq").asType(CarbonEmission.class);
72
		assertEquals("[M]", q.getUnit().getDimension().toString(), "Wrong dimension!");
73
		assertTrue(q.isEquivalentTo(Quantities.getQuantity((String) "5.2007 t CO₂eq").asType(CarbonEmission.class)),
74
				"Wrong conversion from kg of CO₂eq to ton of CO₂eq!");
75
76
		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!");
77
78
	}

79
}