001/* 002 * Units of Measurement TCK 003 * Copyright © 2005-2023, Jean-Marie Dautelle, Werner Keil, Otavio Santana. 004 * 005 * All rights reserved. 006 * 007 * Redistribution and use in source and binary forms, with or without modification, 008 * are permitted provided that the following conditions are met: 009 * 010 * 1. Redistributions of source code must retain the above copyright notice, 011 * this list of conditions and the following disclaimer. 012 * 013 * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions 014 * and the following disclaimer in the documentation and/or other materials provided with the distribution. 015 * 016 * 3. Neither the name of JSR-385 nor the names of its contributors may be used to endorse or promote products 017 * derived from this software without specific prior written permission. 018 * 019 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 020 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 021 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 022 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 023 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 024 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 025 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 026 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 027 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 028 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 029 */ 030package tech.units.tck.tests.quantity; 031 032import static org.testng.Assert.assertEquals; 033import static org.testng.Assert.assertNotNull; 034import static tech.units.tck.TCKRunner.SPEC_ID; 035import static tech.units.tck.TCKRunner.SPEC_VERSION; 036 037import java.util.Collection; 038import java.util.HashMap; 039import java.util.Map; 040 041import org.jboss.test.audit.annotations.SpecAssertion; 042import org.jboss.test.audit.annotations.SpecVersion; 043import org.slf4j.Logger; 044import org.slf4j.LoggerFactory; 045import org.testng.annotations.Test; 046 047import tech.units.tck.TCKSetup; 048 049import javax.measure.Dimension; 050import javax.measure.Quantity; 051import javax.measure.Unit; 052 053/** 054 * Test class for quantities 055 * @author Werner Keil 056 * @version 2.0, August 31, 2023 057 * @since 1.0 058 */ 059@SpecVersion(spec = SPEC_ID, version = SPEC_VERSION) 060public class QuantityTypesTest { 061 private static final Logger logger = LoggerFactory.getLogger(QuantityTypesTest.class); 062 063 // ************************ 4.4 Supported Quantities 064 // ************************ 065 private static final String SECTION_NUM = "4.4"; 066 067 /** 068 * Check if all SI Base Quantities are used. 069 */ 070 @Test(groups = { "base_quantity" }, description = SECTION_NUM + " Ensure all SI Base Quantities are used by an implementation") 071 @SpecAssertion(section = SECTION_NUM, id = "44-A1") 072 public void testContainsBaseDimensions() { 073 final Collection<Dimension> baseDimensions = TCKSetup.getConfiguration().getBaseDimensions(); 074 final Map<Dimension, Unit<?>> foundUnits = new HashMap<>(); 075 assertEquals(7, baseDimensions.size(), "Section " + SECTION_NUM + ": Number of SI Base Dimensions does not match"); 076 final Collection<? extends Unit<?>> units = TCKSetup.getConfiguration().getUnits4Test(); 077 for (Unit<?> unit : units) { 078 Dimension dim = unit.getDimension(); 079 logger.debug(unit + "D: "+ dim + " (" + unit.getClass() + ")"); 080 if (baseDimensions.contains(dim)) { 081 foundUnits.put(dim, unit); 082 } 083 } 084 for (Dimension dimension : baseDimensions) { 085 final Unit<?> unit = foundUnits.get(dimension); 086 assertNotNull(unit, "Section " + SECTION_NUM + ": SI Base Dimension " + dimension + " not found"); 087 } 088 } 089 090 /** 091 * Ensure all Supported Quantities are used by an implementation. 092 */ 093 @Test(groups = { "derived_quantity" }, description = SECTION_NUM + " Ensure all Supported Quantities are used by an implementation") 094 @SpecAssertion(section = SECTION_NUM, id = "44-A2") 095 @SuppressWarnings({ "unchecked", "rawtypes" }) 096 public void testContainsQuantities() { 097 final Collection<Class<? extends Quantity>> quantityTypes = TCKSetup.getConfiguration().getSupportedQuantityTypes(); 098 for (Class c : quantityTypes) { 099 final Unit unit = TCKSetup.getConfiguration().getUnit4Type(c); 100 assertNotNull(unit, "Section " + SECTION_NUM + ": Quantity type " + c + " not found"); 101 } 102 } 103}