package com.billkuker.rocketry.motorsim;\r
\r
+import java.lang.reflect.Field;\r
+import java.lang.reflect.Modifier;\r
import java.text.DecimalFormat;\r
import java.text.NumberFormat;\r
import java.util.HashSet;\r
}\r
return u;\r
}\r
+ \r
+ @SuppressWarnings("unchecked")\r
+ public <T extends Quantity> Unit<T> getPreferredUnit(Class<T> q){\r
+ for( Unit<?> u : units ){\r
+ try {\r
+ return u.asType(q); \r
+ } catch ( ClassCastException e ) {\r
+ //Not compatible\r
+ }\r
+ }\r
+ try {\r
+ Field f = q.getDeclaredField("UNIT");\r
+ if ( Modifier.isStatic(f.getModifiers()) ){\r
+ if ( Unit.class.isAssignableFrom(f.getType())){\r
+ return (Unit<T>)f.get(null);\r
+ }\r
+ }\r
+ } catch (SecurityException e) {\r
+ e.printStackTrace();\r
+ } catch (NoSuchFieldException e) {\r
+ e.printStackTrace();\r
+ } catch (IllegalArgumentException e) {\r
+ // TODO Auto-generated catch block\r
+ e.printStackTrace();\r
+ } catch (IllegalAccessException e) {\r
+ // TODO Auto-generated catch block\r
+ e.printStackTrace();\r
+ }\r
+ return null;\r
+ }\r
}\r
\r
public static <T extends Quantity> String ammountToString(Amount<T> a) {\r
import com.billkuker.rocketry.motorsim.test.CylindricalChamberTest;\r
import com.billkuker.rocketry.motorsim.test.KNSUTest;\r
import com.billkuker.rocketry.motorsim.test.MotorIOTest;\r
+import com.billkuker.rocketry.motorsim.test.RocketScienceTest;\r
import com.billkuker.rocketry.motorsim.test.ShapeUtilTest;\r
\r
@RunWith(Suite.class)\r
@SuiteClasses({ ConvergentDivergentNozzleTest.class,\r
CoredCylindricalGrainTest.class, CylindricalChamberTest.class,\r
- KNSUTest.class, MotorIOTest.class, ShapeUtilTest.class })\r
+ KNSUTest.class, MotorIOTest.class, ShapeUtilTest.class, RocketScienceTest.class })\r
public class UnitTests {\r
\r
}\r
--- /dev/null
+package com.billkuker.rocketry.motorsim.test;\r
+\r
+import javax.measure.quantity.Duration;\r
+import javax.measure.quantity.Length;\r
+import javax.measure.quantity.RadioactiveActivity;\r
+import javax.measure.unit.NonSI;\r
+import javax.measure.unit.SI;\r
+import javax.measure.unit.Unit;\r
+\r
+import junit.framework.Assert;\r
+\r
+import org.junit.Test;\r
+\r
+import com.billkuker.rocketry.motorsim.RocketScience;\r
+\r
+public class RocketScienceTest {\r
+\r
+ @Test\r
+ public void getPreferredUnitByQuantity() throws Exception {\r
+ Unit<Length> l = RocketScience.UnitPreference.SI.getPreferredUnit(Length.class);\r
+ Assert.assertTrue(l.isCompatible(SI.MILLIMETER));\r
+ \r
+ Unit<Duration> t = RocketScience.UnitPreference.SI.getPreferredUnit(Duration.class);\r
+ Assert.assertTrue(t.isCompatible(SI.SECOND));\r
+ \r
+ //Just make sure it'll return for any quantity\r
+ Unit<RadioactiveActivity> r = RocketScience.UnitPreference.SI.getPreferredUnit(RadioactiveActivity.class);\r
+ Assert.assertTrue(r.isCompatible(NonSI.RUTHERFORD));\r
+ }\r
+ \r
+ @Test\r
+ public void getPreferredUnitByUnit() throws Exception {\r
+ Unit<Length> l = RocketScience.UnitPreference.SI.getPreferredUnit(NonSI.INCH);\r
+ Assert.assertTrue(l.isCompatible(SI.MILLIMETER));\r
+ \r
+ Unit<Duration> t = RocketScience.UnitPreference.SI.getPreferredUnit(NonSI.DAY);\r
+ Assert.assertTrue(t.isCompatible(SI.SECOND));\r
+ \r
+ //Just make sure it'll return for any quantity\r
+ Unit<RadioactiveActivity> r = RocketScience.UnitPreference.SI.getPreferredUnit(NonSI.RUTHERFORD);\r
+ Assert.assertTrue(r.isCompatible(NonSI.RUTHERFORD));\r
+ }\r
+}\r