-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
- <classpathentry kind="src" path="src"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
- <classpathentry kind="lib" path="jscience.jar"/>
- <classpathentry kind="lib" path="jfreechart-1.0.12.jar"/>
- <classpathentry kind="lib" path="jcommon-1.0.15.jar"/>
- <classpathentry kind="lib" path="log4j-1.2.15.jar"/>
- <classpathentry kind="lib" path="l2fprod-common-sheet.jar"/>
- <classpathentry kind="lib" path="xstream-1.3.jar"/>
- <classpathentry kind="lib" path="xpp3_min-1.1.4c.jar"/>
- <classpathentry kind="lib" path="rsyntaxtextarea.jar"/>
- <classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
- <classpathentry kind="con" path="org.eclipse.ajdt.core.ASPECTJRT_CONTAINER"/>
- <classpathentry kind="output" path="bin"/>
-</classpath>
+<?xml version="1.0" encoding="UTF-8"?>\r
+<classpath>\r
+ <classpathentry kind="src" path="src"/>\r
+ <classpathentry kind="src" path="test"/>\r
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>\r
+ <classpathentry kind="lib" path="jscience.jar"/>\r
+ <classpathentry kind="lib" path="jfreechart-1.0.12.jar"/>\r
+ <classpathentry kind="lib" path="jcommon-1.0.15.jar"/>\r
+ <classpathentry kind="lib" path="log4j-1.2.15.jar"/>\r
+ <classpathentry kind="lib" path="l2fprod-common-sheet.jar"/>\r
+ <classpathentry kind="lib" path="xstream-1.3.jar"/>\r
+ <classpathentry kind="lib" path="xpp3_min-1.1.4c.jar"/>\r
+ <classpathentry kind="lib" path="rsyntaxtextarea.jar"/>\r
+ <classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>\r
+ <classpathentry kind="con" path="org.eclipse.ajdt.core.ASPECTJRT_CONTAINER"/>\r
+ <classpathentry kind="output" path="bin"/>\r
+</classpath>\r
+++ /dev/null
-package com.billkuker.rocketry.motorsim.test;\r
-\r
-import javax.measure.quantity.Area;\r
-import javax.measure.quantity.Force;\r
-import javax.measure.quantity.Pressure;\r
-import javax.measure.unit.SI;\r
-\r
-import junit.framework.Assert;\r
-\r
-import org.jscience.physics.amount.Amount;\r
-import org.junit.Test;\r
-\r
-import com.billkuker.rocketry.motorsim.ConvergentDivergentNozzle;\r
-import com.billkuker.rocketry.motorsim.fuel.KNSU;\r
-\r
-public class ConvergentDivergentNozzleTest extends RocketTest {\r
- \r
- ConvergentDivergentNozzle n = new ConvergentDivergentNozzle();\r
- \r
- {\r
- n.setThroatDiameter(Amount.valueOf(6.6, SI.MILLIMETER));\r
- n.setExitDiameter(Amount.valueOf(20.87, SI.MILLIMETER));\r
- n.setEfficiency(0.85);\r
- }\r
-\r
- @Test\r
- public void testThroatArea() {\r
- Amount<Area> a = n.throatArea().to(SI.MILLIMETER.pow(2).asType(Area.class));\r
- assertApproximate(Amount.valueOf(34.2, .1, SI.MILLIMETER.pow(2)), a);\r
- }\r
-\r
- @Test\r
- public void testExitArea() {\r
- Amount<Area> a = n.exitArea();\r
- assertApproximate(Amount.valueOf(342, .1, SI.MILLIMETER.pow(2)), a);\r
- }\r
-\r
- @Test\r
- public void testThrust() {\r
- Amount<Pressure> Patm = Amount.valueOf(101000, SI.PASCAL);\r
- Amount<Pressure> Po = Amount.valueOf(2046491, SI.PASCAL);\r
- Amount<Pressure> Pe = Patm;\r
-\r
- KNSU f = new KNSU();\r
- \r
- Amount<Force> t = n.thrust(Po, Pe, Patm, f.getCombustionProduct().getRatioOfSpecificHeats2Phase());\r
- \r
- Amount<Force> expected = Amount.valueOf(87.2, .1, SI.NEWTON);\r
- \r
- assertApproximate(t, expected);\r
- }\r
-\r
- @Test\r
- public void testThrustCoefficient() {\r
- Amount<Pressure> Patm = Amount.valueOf(101000, SI.PASCAL);\r
- Amount<Pressure> Po = Amount.valueOf(2046491, SI.PASCAL);\r
- Amount<Pressure> Pe = Patm;\r
-\r
- KNSU f = new KNSU();\r
- \r
- double cF = n.thrustCoefficient(Po, Pe, Patm, f.getCombustionProduct().getRatioOfSpecificHeats2Phase());\r
- \r
- \r
- Assert.assertEquals(cF, 1.2454812344324655);\r
- }\r
-\r
-}\r
+++ /dev/null
-package com.billkuker.rocketry.motorsim.test;\r
-\r
-import java.beans.PropertyVetoException;\r
-\r
-import javax.measure.quantity.Area;\r
-import javax.measure.quantity.Volume;\r
-import javax.measure.unit.SI;\r
-\r
-import org.jscience.physics.amount.Amount;\r
-import org.junit.Test;\r
-\r
-import com.billkuker.rocketry.motorsim.grain.CoredCylindricalGrain;\r
-\r
-public class CoredCylindricalGrainTest extends RocketTest {\r
-\r
- @Test\r
- public void testSurfaceArea() throws PropertyVetoException {\r
- \r
- CoredCylindricalGrain g = new CoredCylindricalGrain();\r
- \r
- g.setLength(Amount.valueOf(100, SI.MILLIMETER));\r
- g.setOD(Amount.valueOf(30, SI.MILLIMETER));\r
- g.setID(Amount.valueOf(10, SI.MILLIMETER));\r
- \r
- g.setForeEndInhibited(false);\r
- g.setAftEndInhibited(false);\r
- g.setOuterSurfaceInhibited(true);\r
- g.setInnerSurfaceInhibited(false);\r
- \r
- Amount<Area> a = g.surfaceArea(Amount.valueOf(6, SI.MILLIMETER));\r
- assertApproximate(a, Amount.valueOf(6736, sqMM), Amount.valueOf(1, sqMM) );\r
- }\r
- \r
-\r
- @Test\r
- public void testWebThickness() throws PropertyVetoException {\r
- CoredCylindricalGrain g = new CoredCylindricalGrain();\r
- \r
- //thin and long\r
- g.setLength(Amount.valueOf(100, SI.MILLIMETER));\r
- g.setOD(Amount.valueOf(30, SI.MILLIMETER));\r
- g.setID(Amount.valueOf(10, SI.MILLIMETER));\r
- \r
- assertApproximate(g.webThickness(), Amount.valueOf("10mm"));\r
- \r
- //thick and short\r
- g.setLength(Amount.valueOf(100, SI.MILLIMETER));\r
- g.setOD(Amount.valueOf(300, SI.MILLIMETER));\r
- g.setID(Amount.valueOf(100, SI.MILLIMETER));\r
- \r
- assertApproximate(g.webThickness(), Amount.valueOf("50mm"));\r
- }\r
-\r
- @Test\r
- public void testVolume() throws PropertyVetoException {\r
- CoredCylindricalGrain g = new CoredCylindricalGrain();\r
- \r
- //thin and long\r
- g.setLength(Amount.valueOf(100, SI.MILLIMETER));\r
- g.setOD(Amount.valueOf(30, SI.MILLIMETER));\r
- g.setID(Amount.valueOf(10, SI.MILLIMETER));\r
- \r
- g.setForeEndInhibited(false);\r
- g.setAftEndInhibited(false);\r
- g.setOuterSurfaceInhibited(true);\r
- g.setInnerSurfaceInhibited(false);\r
- \r
- Amount<Volume> v = g.volume(Amount.valueOf(3, SI.MILLIMETER));\r
- assertApproximate(v, Amount.valueOf(47545, cubeMM), Amount.valueOf(1, cubeMM));\r
- \r
- v = g.volume(Amount.valueOf(5, SI.MILLIMETER));\r
- assertApproximate(v, Amount.valueOf(35343, cubeMM), Amount.valueOf(1, cubeMM));\r
- \r
- v = g.volume(Amount.valueOf(9, SI.MILLIMETER));\r
- assertApproximate(v, Amount.valueOf(7471, cubeMM), Amount.valueOf(1, cubeMM));\r
- }\r
-\r
- /*\r
- @Test(expected=MotorPart.Validating.ValidationException.class)\r
- public void testCheckValidity() throws MotorPart.Validating.ValidationException, PropertyVetoException{\r
- CoredCylindricalGrain g = new CoredCylindricalGrain();\r
- \r
- //thin and long\r
- g.setLength(Amount.valueOf(100, SI.MILLIMETER));\r
- g.setOD(Amount.valueOf(10, SI.MILLIMETER));\r
- g.setID(Amount.valueOf(30, SI.MILLIMETER));\r
- \r
- g.checkValidity();\r
- }*/\r
-\r
-}\r
+++ /dev/null
-package com.billkuker.rocketry.motorsim.test;\r
-\r
-import javax.measure.unit.SI;\r
-\r
-import org.jscience.physics.amount.Amount;\r
-import org.junit.Assert;\r
-import org.junit.Test;\r
-\r
-import com.billkuker.rocketry.motorsim.CylindricalChamber;\r
-\r
-public class CylindricalChamberTest extends RocketTest {\r
-\r
- @Test\r
- public void testBurstPressure() {\r
- Assert.assertNull( new CylindricalChamber().burstPressure() );\r
- }\r
-\r
- @Test\r
- public void testChamberVolume() {\r
- CylindricalChamber c = new CylindricalChamber();\r
- \r
- c.setLength(Amount.valueOf(100, SI.MILLIMETER));\r
- c.setID(Amount.valueOf(20, SI.MILLIMETER));\r
- \r
- assertApproximate(c.chamberVolume(), Amount.valueOf(10000*Math.PI, SI.MILLIMETER.pow(3)));\r
- }\r
-\r
-}\r
+++ /dev/null
-package com.billkuker.rocketry.motorsim.test;\r
-\r
-import javax.measure.unit.NonSI;\r
-import javax.measure.unit.SI;\r
-\r
-import org.jscience.physics.amount.Amount;\r
-import org.junit.Test;\r
-\r
-import com.billkuker.rocketry.motorsim.fuel.KNSU;\r
-\r
-public class KNSUTest extends RocketTest {\r
-\r
- @Test\r
- public void testBurnRate() {\r
- KNSU f = new KNSU();\r
- \r
- System.out.println(f.burnRate(Amount.valueOf(6.89, SI.MEGA(SI.PASCAL) )).to(NonSI.INCH.divide(SI.SECOND)));\r
- }\r
-\r
- @Test\r
- public void testEffectiveMolarWeight(){\r
- (new KNSU()).getCombustionProduct().getEffectiveMolarWeight();\r
- }\r
- \r
- @Test\r
- public void testIdealDensity(){\r
- System.out.println((new KNSU()).getIdealDensity());\r
- System.out.println((new KNSU()).getIdealDensity().isExact());\r
- }\r
-}\r
+++ /dev/null
-package com.billkuker.rocketry.motorsim.test;\r
-\r
-import java.beans.PropertyVetoException;\r
-import java.io.File;\r
-\r
-import javax.measure.unit.SI;\r
-\r
-import org.jscience.physics.amount.Amount;\r
-import org.junit.Test;\r
-\r
-import com.billkuker.rocketry.motorsim.ConvergentDivergentNozzle;\r
-import com.billkuker.rocketry.motorsim.CylindricalChamber;\r
-import com.billkuker.rocketry.motorsim.Motor;\r
-import com.billkuker.rocketry.motorsim.fuel.KNSU;\r
-import com.billkuker.rocketry.motorsim.grain.CoredCylindricalGrain;\r
-import com.billkuker.rocketry.motorsim.grain.MultiGrain;\r
-import com.billkuker.rocketry.motorsim.io.MotorIO;\r
-\r
-public class MotorIOTest {\r
-\r
- @Test\r
- public void testReadWrite() throws Exception {\r
- Motor m = new Motor();\r
- m.setName("IOTestMotor");\r
- m.setFuel(new KNSU());\r
-\r
- CylindricalChamber c = new CylindricalChamber();\r
- c.setLength(Amount.valueOf(200, SI.MILLIMETER));\r
- c.setID(Amount.valueOf(30, SI.MILLIMETER));\r
- m.setChamber(c);\r
-\r
- CoredCylindricalGrain g = new CoredCylindricalGrain();\r
- try {\r
- g.setLength(Amount.valueOf(70, SI.MILLIMETER));\r
- g.setOD(Amount.valueOf(29, SI.MILLIMETER));\r
- g.setID(Amount.valueOf(8, SI.MILLIMETER));\r
- } catch (PropertyVetoException v) {\r
- throw new Error(v);\r
- }\r
-\r
- m.setGrain(new MultiGrain(g, 2));\r
-\r
- ConvergentDivergentNozzle n = new ConvergentDivergentNozzle();\r
- n.setThroatDiameter(Amount.valueOf(7.9, SI.MILLIMETER));\r
- n.setExitDiameter(Amount.valueOf(9, SI.MILLIMETER));\r
- n.setEfficiency(.87);\r
- m.setNozzle(n);\r
-\r
- File f = new File("MotorIOTest.xml");\r
-\r
- MotorIO.writeMotor(m, f);\r
-\r
- MotorIO.readMotor(f);\r
-\r
- }\r
-}\r
+++ /dev/null
-package com.billkuker.rocketry.motorsim.test;\r
-\r
-import javax.measure.unit.SI;\r
-import javax.measure.unit.Unit;\r
-\r
-import org.jscience.physics.amount.Amount;\r
-import org.junit.Assert;\r
-\r
-public class RocketTest {\r
- \r
- protected static final Unit<javax.measure.quantity.Area> sqMM = SI.MILLIMETER.pow(2).asType(javax.measure.quantity.Area.class);\r
- \r
- \r
- protected static final Unit<javax.measure.quantity.Volume> cubeMM = SI.MILLIMETER.pow(3).asType(javax.measure.quantity.Volume.class);\r
-\r
- @SuppressWarnings("unchecked")\r
- protected void assertApproximate(Amount a, Amount b){\r
- Assert.assertTrue("" + a.to(b.getUnit()) + " !~ " + b , a.approximates(b));\r
- }\r
- \r
- @SuppressWarnings("unchecked")\r
- protected void assertApproximate(Amount a, Amount b, Amount diff){\r
- Assert.assertTrue("" + a.to(b.getUnit()) + " !~~ " + b , a.minus(b).abs().isLessThan(diff));\r
- }\r
-}\r
+++ /dev/null
-package com.billkuker.rocketry.motorsim.test;\r
-\r
-import java.awt.geom.Area;\r
-import java.awt.geom.Ellipse2D;\r
-import java.awt.geom.Rectangle2D;\r
-\r
-import org.jscience.physics.amount.Amount;\r
-import org.junit.Test;\r
-\r
-import com.billkuker.rocketry.motorsim.grain.util.ShapeUtil;\r
-\r
-\r
-public class ShapeUtilTest extends RocketTest{\r
-\r
- Area tenByTen = new Area(new Rectangle2D.Double(-5, -5, 10, 10));\r
- Area oneByOne = new Area(new Rectangle2D.Double(-.5, -.5, 1, 1));\r
- Area twoByTwoFar = new Area( new Rectangle2D.Double(30,30,2,2));\r
- \r
- Area r2Circle = new Area(new Ellipse2D.Double(-2,-2,4,4));\r
-\r
-\r
- Amount<javax.measure.quantity.Area> diff = Amount.valueOf(.01, sqMM);\r
- \r
- @Test\r
- public void testArea(){\r
- assertApproximate(ShapeUtil.area(tenByTen), Amount.valueOf(100, sqMM));\r
- assertApproximate(ShapeUtil.area(oneByOne), Amount.valueOf(1, sqMM));\r
- assertApproximate(ShapeUtil.area(twoByTwoFar), Amount.valueOf(4, sqMM));\r
- assertApproximate(ShapeUtil.area(r2Circle), Amount.valueOf(4*Math.PI, sqMM), diff);\r
- \r
- Area a = new Area(tenByTen);\r
- a.subtract(oneByOne);\r
- \r
- assertApproximate(ShapeUtil.area(a), ShapeUtil.area(tenByTen).minus(ShapeUtil.area(oneByOne)));\r
- \r
- a.add(twoByTwoFar);\r
- \r
- assertApproximate(ShapeUtil.area(a), \r
- ShapeUtil.area(tenByTen)\r
- .minus(ShapeUtil.area(oneByOne))\r
- .plus(ShapeUtil.area(twoByTwoFar)));\r
- \r
- a = new Area(tenByTen);\r
- a.subtract(r2Circle);\r
- \r
- assertApproximate(ShapeUtil.area(a), ShapeUtil.area(tenByTen).minus(ShapeUtil.area(r2Circle)));\r
- }\r
-}\r
--- /dev/null
+package com.billkuker.rocketry.motorsim.test;\r
+\r
+import javax.measure.quantity.Area;\r
+import javax.measure.quantity.Force;\r
+import javax.measure.quantity.Pressure;\r
+import javax.measure.unit.SI;\r
+\r
+import junit.framework.Assert;\r
+\r
+import org.jscience.physics.amount.Amount;\r
+import org.junit.Test;\r
+\r
+import com.billkuker.rocketry.motorsim.ConvergentDivergentNozzle;\r
+import com.billkuker.rocketry.motorsim.fuel.KNSU;\r
+\r
+public class ConvergentDivergentNozzleTest extends RocketTest {\r
+ \r
+ ConvergentDivergentNozzle n = new ConvergentDivergentNozzle();\r
+ \r
+ {\r
+ n.setThroatDiameter(Amount.valueOf(6.6, SI.MILLIMETER));\r
+ n.setExitDiameter(Amount.valueOf(20.87, SI.MILLIMETER));\r
+ n.setEfficiency(0.85);\r
+ }\r
+\r
+ @Test\r
+ public void testThroatArea() {\r
+ Amount<Area> a = n.throatArea().to(SI.MILLIMETER.pow(2).asType(Area.class));\r
+ assertApproximate(Amount.valueOf(34.2, .1, SI.MILLIMETER.pow(2)), a);\r
+ }\r
+\r
+ @Test\r
+ public void testExitArea() {\r
+ Amount<Area> a = n.exitArea();\r
+ assertApproximate(Amount.valueOf(342, .1, SI.MILLIMETER.pow(2)), a);\r
+ }\r
+\r
+ @Test\r
+ public void testThrust() {\r
+ Amount<Pressure> Patm = Amount.valueOf(101000, SI.PASCAL);\r
+ Amount<Pressure> Po = Amount.valueOf(2046491, SI.PASCAL);\r
+ Amount<Pressure> Pe = Patm;\r
+\r
+ KNSU f = new KNSU();\r
+ \r
+ Amount<Force> t = n.thrust(Po, Pe, Patm, f.getCombustionProduct().getRatioOfSpecificHeats2Phase());\r
+ \r
+ Amount<Force> expected = Amount.valueOf(87.2, .1, SI.NEWTON);\r
+ \r
+ assertApproximate(t, expected);\r
+ }\r
+\r
+ @Test\r
+ public void testThrustCoefficient() {\r
+ Amount<Pressure> Patm = Amount.valueOf(101000, SI.PASCAL);\r
+ Amount<Pressure> Po = Amount.valueOf(2046491, SI.PASCAL);\r
+ Amount<Pressure> Pe = Patm;\r
+\r
+ KNSU f = new KNSU();\r
+ \r
+ double cF = n.thrustCoefficient(Po, Pe, Patm, f.getCombustionProduct().getRatioOfSpecificHeats2Phase());\r
+ \r
+ \r
+ Assert.assertEquals(cF, 1.2454812344324655);\r
+ }\r
+\r
+}\r
--- /dev/null
+package com.billkuker.rocketry.motorsim.test;\r
+\r
+import java.beans.PropertyVetoException;\r
+\r
+import javax.measure.quantity.Area;\r
+import javax.measure.quantity.Volume;\r
+import javax.measure.unit.SI;\r
+\r
+import org.jscience.physics.amount.Amount;\r
+import org.junit.Test;\r
+\r
+import com.billkuker.rocketry.motorsim.grain.CoredCylindricalGrain;\r
+\r
+public class CoredCylindricalGrainTest extends RocketTest {\r
+\r
+ @Test\r
+ public void testSurfaceArea() throws PropertyVetoException {\r
+ \r
+ CoredCylindricalGrain g = new CoredCylindricalGrain();\r
+ \r
+ g.setLength(Amount.valueOf(100, SI.MILLIMETER));\r
+ g.setOD(Amount.valueOf(30, SI.MILLIMETER));\r
+ g.setID(Amount.valueOf(10, SI.MILLIMETER));\r
+ \r
+ g.setForeEndInhibited(false);\r
+ g.setAftEndInhibited(false);\r
+ g.setOuterSurfaceInhibited(true);\r
+ g.setInnerSurfaceInhibited(false);\r
+ \r
+ Amount<Area> a = g.surfaceArea(Amount.valueOf(6, SI.MILLIMETER));\r
+ assertApproximate(a, Amount.valueOf(6736, sqMM), Amount.valueOf(1, sqMM) );\r
+ }\r
+ \r
+\r
+ @Test\r
+ public void testWebThickness() throws PropertyVetoException {\r
+ CoredCylindricalGrain g = new CoredCylindricalGrain();\r
+ \r
+ //thin and long\r
+ g.setLength(Amount.valueOf(100, SI.MILLIMETER));\r
+ g.setOD(Amount.valueOf(30, SI.MILLIMETER));\r
+ g.setID(Amount.valueOf(10, SI.MILLIMETER));\r
+ \r
+ assertApproximate(g.webThickness(), Amount.valueOf("10mm"));\r
+ \r
+ //thick and short\r
+ g.setLength(Amount.valueOf(100, SI.MILLIMETER));\r
+ g.setOD(Amount.valueOf(300, SI.MILLIMETER));\r
+ g.setID(Amount.valueOf(100, SI.MILLIMETER));\r
+ \r
+ assertApproximate(g.webThickness(), Amount.valueOf("50mm"));\r
+ }\r
+\r
+ @Test\r
+ public void testVolume() throws PropertyVetoException {\r
+ CoredCylindricalGrain g = new CoredCylindricalGrain();\r
+ \r
+ //thin and long\r
+ g.setLength(Amount.valueOf(100, SI.MILLIMETER));\r
+ g.setOD(Amount.valueOf(30, SI.MILLIMETER));\r
+ g.setID(Amount.valueOf(10, SI.MILLIMETER));\r
+ \r
+ g.setForeEndInhibited(false);\r
+ g.setAftEndInhibited(false);\r
+ g.setOuterSurfaceInhibited(true);\r
+ g.setInnerSurfaceInhibited(false);\r
+ \r
+ Amount<Volume> v = g.volume(Amount.valueOf(3, SI.MILLIMETER));\r
+ assertApproximate(v, Amount.valueOf(47545, cubeMM), Amount.valueOf(1, cubeMM));\r
+ \r
+ v = g.volume(Amount.valueOf(5, SI.MILLIMETER));\r
+ assertApproximate(v, Amount.valueOf(35343, cubeMM), Amount.valueOf(1, cubeMM));\r
+ \r
+ v = g.volume(Amount.valueOf(9, SI.MILLIMETER));\r
+ assertApproximate(v, Amount.valueOf(7471, cubeMM), Amount.valueOf(1, cubeMM));\r
+ }\r
+\r
+ /*\r
+ @Test(expected=MotorPart.Validating.ValidationException.class)\r
+ public void testCheckValidity() throws MotorPart.Validating.ValidationException, PropertyVetoException{\r
+ CoredCylindricalGrain g = new CoredCylindricalGrain();\r
+ \r
+ //thin and long\r
+ g.setLength(Amount.valueOf(100, SI.MILLIMETER));\r
+ g.setOD(Amount.valueOf(10, SI.MILLIMETER));\r
+ g.setID(Amount.valueOf(30, SI.MILLIMETER));\r
+ \r
+ g.checkValidity();\r
+ }*/\r
+\r
+}\r
--- /dev/null
+package com.billkuker.rocketry.motorsim.test;\r
+\r
+import javax.measure.unit.SI;\r
+\r
+import org.jscience.physics.amount.Amount;\r
+import org.junit.Assert;\r
+import org.junit.Test;\r
+\r
+import com.billkuker.rocketry.motorsim.CylindricalChamber;\r
+\r
+public class CylindricalChamberTest extends RocketTest {\r
+\r
+ @Test\r
+ public void testBurstPressure() {\r
+ Assert.assertNull( new CylindricalChamber().burstPressure() );\r
+ }\r
+\r
+ @Test\r
+ public void testChamberVolume() {\r
+ CylindricalChamber c = new CylindricalChamber();\r
+ \r
+ c.setLength(Amount.valueOf(100, SI.MILLIMETER));\r
+ c.setID(Amount.valueOf(20, SI.MILLIMETER));\r
+ \r
+ assertApproximate(c.chamberVolume(), Amount.valueOf(10000*Math.PI, SI.MILLIMETER.pow(3)));\r
+ }\r
+\r
+}\r
--- /dev/null
+package com.billkuker.rocketry.motorsim.test;\r
+\r
+import javax.measure.unit.NonSI;\r
+import javax.measure.unit.SI;\r
+\r
+import org.jscience.physics.amount.Amount;\r
+import org.junit.Test;\r
+\r
+import com.billkuker.rocketry.motorsim.fuel.KNSU;\r
+\r
+public class KNSUTest extends RocketTest {\r
+\r
+ @Test\r
+ public void testBurnRate() {\r
+ KNSU f = new KNSU();\r
+ \r
+ System.out.println(f.burnRate(Amount.valueOf(6.89, SI.MEGA(SI.PASCAL) )).to(NonSI.INCH.divide(SI.SECOND)));\r
+ }\r
+\r
+ @Test\r
+ public void testEffectiveMolarWeight(){\r
+ (new KNSU()).getCombustionProduct().getEffectiveMolarWeight();\r
+ }\r
+ \r
+ @Test\r
+ public void testIdealDensity(){\r
+ System.out.println((new KNSU()).getIdealDensity());\r
+ System.out.println((new KNSU()).getIdealDensity().isExact());\r
+ }\r
+}\r
--- /dev/null
+package com.billkuker.rocketry.motorsim.test;\r
+\r
+import java.beans.PropertyVetoException;\r
+import java.io.File;\r
+\r
+import javax.measure.unit.SI;\r
+\r
+import org.jscience.physics.amount.Amount;\r
+import org.junit.Test;\r
+\r
+import com.billkuker.rocketry.motorsim.ConvergentDivergentNozzle;\r
+import com.billkuker.rocketry.motorsim.CylindricalChamber;\r
+import com.billkuker.rocketry.motorsim.Motor;\r
+import com.billkuker.rocketry.motorsim.fuel.KNSU;\r
+import com.billkuker.rocketry.motorsim.grain.CoredCylindricalGrain;\r
+import com.billkuker.rocketry.motorsim.grain.MultiGrain;\r
+import com.billkuker.rocketry.motorsim.io.MotorIO;\r
+\r
+public class MotorIOTest {\r
+\r
+ @Test\r
+ public void testReadWrite() throws Exception {\r
+ Motor m = new Motor();\r
+ m.setName("IOTestMotor");\r
+ m.setFuel(new KNSU());\r
+\r
+ CylindricalChamber c = new CylindricalChamber();\r
+ c.setLength(Amount.valueOf(200, SI.MILLIMETER));\r
+ c.setID(Amount.valueOf(30, SI.MILLIMETER));\r
+ m.setChamber(c);\r
+\r
+ CoredCylindricalGrain g = new CoredCylindricalGrain();\r
+ try {\r
+ g.setLength(Amount.valueOf(70, SI.MILLIMETER));\r
+ g.setOD(Amount.valueOf(29, SI.MILLIMETER));\r
+ g.setID(Amount.valueOf(8, SI.MILLIMETER));\r
+ } catch (PropertyVetoException v) {\r
+ throw new Error(v);\r
+ }\r
+\r
+ m.setGrain(new MultiGrain(g, 2));\r
+\r
+ ConvergentDivergentNozzle n = new ConvergentDivergentNozzle();\r
+ n.setThroatDiameter(Amount.valueOf(7.9, SI.MILLIMETER));\r
+ n.setExitDiameter(Amount.valueOf(9, SI.MILLIMETER));\r
+ n.setEfficiency(.87);\r
+ m.setNozzle(n);\r
+\r
+ File f = new File("MotorIOTest.xml");\r
+\r
+ MotorIO.writeMotor(m, f);\r
+\r
+ MotorIO.readMotor(f);\r
+\r
+ }\r
+}\r
--- /dev/null
+package com.billkuker.rocketry.motorsim.test;\r
+\r
+import javax.measure.unit.SI;\r
+import javax.measure.unit.Unit;\r
+\r
+import org.jscience.physics.amount.Amount;\r
+import org.junit.Assert;\r
+\r
+public class RocketTest {\r
+ \r
+ protected static final Unit<javax.measure.quantity.Area> sqMM = SI.MILLIMETER.pow(2).asType(javax.measure.quantity.Area.class);\r
+ \r
+ \r
+ protected static final Unit<javax.measure.quantity.Volume> cubeMM = SI.MILLIMETER.pow(3).asType(javax.measure.quantity.Volume.class);\r
+\r
+ @SuppressWarnings("unchecked")\r
+ protected void assertApproximate(Amount a, Amount b){\r
+ Assert.assertTrue("" + a.to(b.getUnit()) + " !~ " + b , a.approximates(b));\r
+ }\r
+ \r
+ @SuppressWarnings("unchecked")\r
+ protected void assertApproximate(Amount a, Amount b, Amount diff){\r
+ Assert.assertTrue("" + a.to(b.getUnit()) + " !~~ " + b , a.minus(b).abs().isLessThan(diff));\r
+ }\r
+}\r
--- /dev/null
+package com.billkuker.rocketry.motorsim.test;\r
+\r
+import java.awt.geom.Area;\r
+import java.awt.geom.Ellipse2D;\r
+import java.awt.geom.Rectangle2D;\r
+\r
+import org.jscience.physics.amount.Amount;\r
+import org.junit.Test;\r
+\r
+import com.billkuker.rocketry.motorsim.grain.util.ShapeUtil;\r
+\r
+\r
+public class ShapeUtilTest extends RocketTest{\r
+\r
+ Area tenByTen = new Area(new Rectangle2D.Double(-5, -5, 10, 10));\r
+ Area oneByOne = new Area(new Rectangle2D.Double(-.5, -.5, 1, 1));\r
+ Area twoByTwoFar = new Area( new Rectangle2D.Double(30,30,2,2));\r
+ \r
+ Area r2Circle = new Area(new Ellipse2D.Double(-2,-2,4,4));\r
+\r
+\r
+ Amount<javax.measure.quantity.Area> diff = Amount.valueOf(.01, sqMM);\r
+ \r
+ @Test\r
+ public void testArea(){\r
+ assertApproximate(ShapeUtil.area(tenByTen), Amount.valueOf(100, sqMM));\r
+ assertApproximate(ShapeUtil.area(oneByOne), Amount.valueOf(1, sqMM));\r
+ assertApproximate(ShapeUtil.area(twoByTwoFar), Amount.valueOf(4, sqMM));\r
+ assertApproximate(ShapeUtil.area(r2Circle), Amount.valueOf(4*Math.PI, sqMM), diff);\r
+ \r
+ Area a = new Area(tenByTen);\r
+ a.subtract(oneByOne);\r
+ \r
+ assertApproximate(ShapeUtil.area(a), ShapeUtil.area(tenByTen).minus(ShapeUtil.area(oneByOne)));\r
+ \r
+ a.add(twoByTwoFar);\r
+ \r
+ assertApproximate(ShapeUtil.area(a), \r
+ ShapeUtil.area(tenByTen)\r
+ .minus(ShapeUtil.area(oneByOne))\r
+ .plus(ShapeUtil.area(twoByTwoFar)));\r
+ \r
+ a = new Area(tenByTen);\r
+ a.subtract(r2Circle);\r
+ \r
+ assertApproximate(ShapeUtil.area(a), ShapeUtil.area(tenByTen).minus(ShapeUtil.area(r2Circle)));\r
+ }\r
+}\r