From: Bill Kuker Date: Mon, 25 Oct 2010 15:12:24 +0000 (+0000) Subject: Moved test to separate source folder X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=2e53410c13101e769eaed48f84931ec062b6a716;p=sw%2Fmotorsim Moved test to separate source folder --- diff --git a/.classpath b/.classpath index 51967f3..d75bd09 100644 --- a/.classpath +++ b/.classpath @@ -1,16 +1,17 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + diff --git a/src/com/billkuker/rocketry/motorsim/test/ConvergentDivergentNozzleTest.java b/src/com/billkuker/rocketry/motorsim/test/ConvergentDivergentNozzleTest.java deleted file mode 100644 index f9ee4c2..0000000 --- a/src/com/billkuker/rocketry/motorsim/test/ConvergentDivergentNozzleTest.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.billkuker.rocketry.motorsim.test; - -import javax.measure.quantity.Area; -import javax.measure.quantity.Force; -import javax.measure.quantity.Pressure; -import javax.measure.unit.SI; - -import junit.framework.Assert; - -import org.jscience.physics.amount.Amount; -import org.junit.Test; - -import com.billkuker.rocketry.motorsim.ConvergentDivergentNozzle; -import com.billkuker.rocketry.motorsim.fuel.KNSU; - -public class ConvergentDivergentNozzleTest extends RocketTest { - - ConvergentDivergentNozzle n = new ConvergentDivergentNozzle(); - - { - n.setThroatDiameter(Amount.valueOf(6.6, SI.MILLIMETER)); - n.setExitDiameter(Amount.valueOf(20.87, SI.MILLIMETER)); - n.setEfficiency(0.85); - } - - @Test - public void testThroatArea() { - Amount a = n.throatArea().to(SI.MILLIMETER.pow(2).asType(Area.class)); - assertApproximate(Amount.valueOf(34.2, .1, SI.MILLIMETER.pow(2)), a); - } - - @Test - public void testExitArea() { - Amount a = n.exitArea(); - assertApproximate(Amount.valueOf(342, .1, SI.MILLIMETER.pow(2)), a); - } - - @Test - public void testThrust() { - Amount Patm = Amount.valueOf(101000, SI.PASCAL); - Amount Po = Amount.valueOf(2046491, SI.PASCAL); - Amount Pe = Patm; - - KNSU f = new KNSU(); - - Amount t = n.thrust(Po, Pe, Patm, f.getCombustionProduct().getRatioOfSpecificHeats2Phase()); - - Amount expected = Amount.valueOf(87.2, .1, SI.NEWTON); - - assertApproximate(t, expected); - } - - @Test - public void testThrustCoefficient() { - Amount Patm = Amount.valueOf(101000, SI.PASCAL); - Amount Po = Amount.valueOf(2046491, SI.PASCAL); - Amount Pe = Patm; - - KNSU f = new KNSU(); - - double cF = n.thrustCoefficient(Po, Pe, Patm, f.getCombustionProduct().getRatioOfSpecificHeats2Phase()); - - - Assert.assertEquals(cF, 1.2454812344324655); - } - -} diff --git a/src/com/billkuker/rocketry/motorsim/test/CoredCylindricalGrainTest.java b/src/com/billkuker/rocketry/motorsim/test/CoredCylindricalGrainTest.java deleted file mode 100644 index b20291e..0000000 --- a/src/com/billkuker/rocketry/motorsim/test/CoredCylindricalGrainTest.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.billkuker.rocketry.motorsim.test; - -import java.beans.PropertyVetoException; - -import javax.measure.quantity.Area; -import javax.measure.quantity.Volume; -import javax.measure.unit.SI; - -import org.jscience.physics.amount.Amount; -import org.junit.Test; - -import com.billkuker.rocketry.motorsim.grain.CoredCylindricalGrain; - -public class CoredCylindricalGrainTest extends RocketTest { - - @Test - public void testSurfaceArea() throws PropertyVetoException { - - CoredCylindricalGrain g = new CoredCylindricalGrain(); - - g.setLength(Amount.valueOf(100, SI.MILLIMETER)); - g.setOD(Amount.valueOf(30, SI.MILLIMETER)); - g.setID(Amount.valueOf(10, SI.MILLIMETER)); - - g.setForeEndInhibited(false); - g.setAftEndInhibited(false); - g.setOuterSurfaceInhibited(true); - g.setInnerSurfaceInhibited(false); - - Amount a = g.surfaceArea(Amount.valueOf(6, SI.MILLIMETER)); - assertApproximate(a, Amount.valueOf(6736, sqMM), Amount.valueOf(1, sqMM) ); - } - - - @Test - public void testWebThickness() throws PropertyVetoException { - CoredCylindricalGrain g = new CoredCylindricalGrain(); - - //thin and long - g.setLength(Amount.valueOf(100, SI.MILLIMETER)); - g.setOD(Amount.valueOf(30, SI.MILLIMETER)); - g.setID(Amount.valueOf(10, SI.MILLIMETER)); - - assertApproximate(g.webThickness(), Amount.valueOf("10mm")); - - //thick and short - g.setLength(Amount.valueOf(100, SI.MILLIMETER)); - g.setOD(Amount.valueOf(300, SI.MILLIMETER)); - g.setID(Amount.valueOf(100, SI.MILLIMETER)); - - assertApproximate(g.webThickness(), Amount.valueOf("50mm")); - } - - @Test - public void testVolume() throws PropertyVetoException { - CoredCylindricalGrain g = new CoredCylindricalGrain(); - - //thin and long - g.setLength(Amount.valueOf(100, SI.MILLIMETER)); - g.setOD(Amount.valueOf(30, SI.MILLIMETER)); - g.setID(Amount.valueOf(10, SI.MILLIMETER)); - - g.setForeEndInhibited(false); - g.setAftEndInhibited(false); - g.setOuterSurfaceInhibited(true); - g.setInnerSurfaceInhibited(false); - - Amount v = g.volume(Amount.valueOf(3, SI.MILLIMETER)); - assertApproximate(v, Amount.valueOf(47545, cubeMM), Amount.valueOf(1, cubeMM)); - - v = g.volume(Amount.valueOf(5, SI.MILLIMETER)); - assertApproximate(v, Amount.valueOf(35343, cubeMM), Amount.valueOf(1, cubeMM)); - - v = g.volume(Amount.valueOf(9, SI.MILLIMETER)); - assertApproximate(v, Amount.valueOf(7471, cubeMM), Amount.valueOf(1, cubeMM)); - } - - /* - @Test(expected=MotorPart.Validating.ValidationException.class) - public void testCheckValidity() throws MotorPart.Validating.ValidationException, PropertyVetoException{ - CoredCylindricalGrain g = new CoredCylindricalGrain(); - - //thin and long - g.setLength(Amount.valueOf(100, SI.MILLIMETER)); - g.setOD(Amount.valueOf(10, SI.MILLIMETER)); - g.setID(Amount.valueOf(30, SI.MILLIMETER)); - - g.checkValidity(); - }*/ - -} diff --git a/src/com/billkuker/rocketry/motorsim/test/CylindricalChamberTest.java b/src/com/billkuker/rocketry/motorsim/test/CylindricalChamberTest.java deleted file mode 100644 index 60600a7..0000000 --- a/src/com/billkuker/rocketry/motorsim/test/CylindricalChamberTest.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.billkuker.rocketry.motorsim.test; - -import javax.measure.unit.SI; - -import org.jscience.physics.amount.Amount; -import org.junit.Assert; -import org.junit.Test; - -import com.billkuker.rocketry.motorsim.CylindricalChamber; - -public class CylindricalChamberTest extends RocketTest { - - @Test - public void testBurstPressure() { - Assert.assertNull( new CylindricalChamber().burstPressure() ); - } - - @Test - public void testChamberVolume() { - CylindricalChamber c = new CylindricalChamber(); - - c.setLength(Amount.valueOf(100, SI.MILLIMETER)); - c.setID(Amount.valueOf(20, SI.MILLIMETER)); - - assertApproximate(c.chamberVolume(), Amount.valueOf(10000*Math.PI, SI.MILLIMETER.pow(3))); - } - -} diff --git a/src/com/billkuker/rocketry/motorsim/test/KNSUTest.java b/src/com/billkuker/rocketry/motorsim/test/KNSUTest.java deleted file mode 100644 index 9845a6f..0000000 --- a/src/com/billkuker/rocketry/motorsim/test/KNSUTest.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.billkuker.rocketry.motorsim.test; - -import javax.measure.unit.NonSI; -import javax.measure.unit.SI; - -import org.jscience.physics.amount.Amount; -import org.junit.Test; - -import com.billkuker.rocketry.motorsim.fuel.KNSU; - -public class KNSUTest extends RocketTest { - - @Test - public void testBurnRate() { - KNSU f = new KNSU(); - - System.out.println(f.burnRate(Amount.valueOf(6.89, SI.MEGA(SI.PASCAL) )).to(NonSI.INCH.divide(SI.SECOND))); - } - - @Test - public void testEffectiveMolarWeight(){ - (new KNSU()).getCombustionProduct().getEffectiveMolarWeight(); - } - - @Test - public void testIdealDensity(){ - System.out.println((new KNSU()).getIdealDensity()); - System.out.println((new KNSU()).getIdealDensity().isExact()); - } -} diff --git a/src/com/billkuker/rocketry/motorsim/test/MotorIOTest.java b/src/com/billkuker/rocketry/motorsim/test/MotorIOTest.java deleted file mode 100644 index b401bc5..0000000 --- a/src/com/billkuker/rocketry/motorsim/test/MotorIOTest.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.billkuker.rocketry.motorsim.test; - -import java.beans.PropertyVetoException; -import java.io.File; - -import javax.measure.unit.SI; - -import org.jscience.physics.amount.Amount; -import org.junit.Test; - -import com.billkuker.rocketry.motorsim.ConvergentDivergentNozzle; -import com.billkuker.rocketry.motorsim.CylindricalChamber; -import com.billkuker.rocketry.motorsim.Motor; -import com.billkuker.rocketry.motorsim.fuel.KNSU; -import com.billkuker.rocketry.motorsim.grain.CoredCylindricalGrain; -import com.billkuker.rocketry.motorsim.grain.MultiGrain; -import com.billkuker.rocketry.motorsim.io.MotorIO; - -public class MotorIOTest { - - @Test - public void testReadWrite() throws Exception { - Motor m = new Motor(); - m.setName("IOTestMotor"); - m.setFuel(new KNSU()); - - CylindricalChamber c = new CylindricalChamber(); - c.setLength(Amount.valueOf(200, SI.MILLIMETER)); - c.setID(Amount.valueOf(30, SI.MILLIMETER)); - m.setChamber(c); - - CoredCylindricalGrain g = new CoredCylindricalGrain(); - try { - g.setLength(Amount.valueOf(70, SI.MILLIMETER)); - g.setOD(Amount.valueOf(29, SI.MILLIMETER)); - g.setID(Amount.valueOf(8, SI.MILLIMETER)); - } catch (PropertyVetoException v) { - throw new Error(v); - } - - m.setGrain(new MultiGrain(g, 2)); - - ConvergentDivergentNozzle n = new ConvergentDivergentNozzle(); - n.setThroatDiameter(Amount.valueOf(7.9, SI.MILLIMETER)); - n.setExitDiameter(Amount.valueOf(9, SI.MILLIMETER)); - n.setEfficiency(.87); - m.setNozzle(n); - - File f = new File("MotorIOTest.xml"); - - MotorIO.writeMotor(m, f); - - MotorIO.readMotor(f); - - } -} diff --git a/src/com/billkuker/rocketry/motorsim/test/RocketTest.java b/src/com/billkuker/rocketry/motorsim/test/RocketTest.java deleted file mode 100644 index 149c47e..0000000 --- a/src/com/billkuker/rocketry/motorsim/test/RocketTest.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.billkuker.rocketry.motorsim.test; - -import javax.measure.unit.SI; -import javax.measure.unit.Unit; - -import org.jscience.physics.amount.Amount; -import org.junit.Assert; - -public class RocketTest { - - protected static final Unit sqMM = SI.MILLIMETER.pow(2).asType(javax.measure.quantity.Area.class); - - - protected static final Unit cubeMM = SI.MILLIMETER.pow(3).asType(javax.measure.quantity.Volume.class); - - @SuppressWarnings("unchecked") - protected void assertApproximate(Amount a, Amount b){ - Assert.assertTrue("" + a.to(b.getUnit()) + " !~ " + b , a.approximates(b)); - } - - @SuppressWarnings("unchecked") - protected void assertApproximate(Amount a, Amount b, Amount diff){ - Assert.assertTrue("" + a.to(b.getUnit()) + " !~~ " + b , a.minus(b).abs().isLessThan(diff)); - } -} diff --git a/src/com/billkuker/rocketry/motorsim/test/ShapeUtilTest.java b/src/com/billkuker/rocketry/motorsim/test/ShapeUtilTest.java deleted file mode 100644 index 7971220..0000000 --- a/src/com/billkuker/rocketry/motorsim/test/ShapeUtilTest.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.billkuker.rocketry.motorsim.test; - -import java.awt.geom.Area; -import java.awt.geom.Ellipse2D; -import java.awt.geom.Rectangle2D; - -import org.jscience.physics.amount.Amount; -import org.junit.Test; - -import com.billkuker.rocketry.motorsim.grain.util.ShapeUtil; - - -public class ShapeUtilTest extends RocketTest{ - - Area tenByTen = new Area(new Rectangle2D.Double(-5, -5, 10, 10)); - Area oneByOne = new Area(new Rectangle2D.Double(-.5, -.5, 1, 1)); - Area twoByTwoFar = new Area( new Rectangle2D.Double(30,30,2,2)); - - Area r2Circle = new Area(new Ellipse2D.Double(-2,-2,4,4)); - - - Amount diff = Amount.valueOf(.01, sqMM); - - @Test - public void testArea(){ - assertApproximate(ShapeUtil.area(tenByTen), Amount.valueOf(100, sqMM)); - assertApproximate(ShapeUtil.area(oneByOne), Amount.valueOf(1, sqMM)); - assertApproximate(ShapeUtil.area(twoByTwoFar), Amount.valueOf(4, sqMM)); - assertApproximate(ShapeUtil.area(r2Circle), Amount.valueOf(4*Math.PI, sqMM), diff); - - Area a = new Area(tenByTen); - a.subtract(oneByOne); - - assertApproximate(ShapeUtil.area(a), ShapeUtil.area(tenByTen).minus(ShapeUtil.area(oneByOne))); - - a.add(twoByTwoFar); - - assertApproximate(ShapeUtil.area(a), - ShapeUtil.area(tenByTen) - .minus(ShapeUtil.area(oneByOne)) - .plus(ShapeUtil.area(twoByTwoFar))); - - a = new Area(tenByTen); - a.subtract(r2Circle); - - assertApproximate(ShapeUtil.area(a), ShapeUtil.area(tenByTen).minus(ShapeUtil.area(r2Circle))); - } -} diff --git a/test/com/billkuker/rocketry/motorsim/test/ConvergentDivergentNozzleTest.java b/test/com/billkuker/rocketry/motorsim/test/ConvergentDivergentNozzleTest.java new file mode 100644 index 0000000..f9ee4c2 --- /dev/null +++ b/test/com/billkuker/rocketry/motorsim/test/ConvergentDivergentNozzleTest.java @@ -0,0 +1,67 @@ +package com.billkuker.rocketry.motorsim.test; + +import javax.measure.quantity.Area; +import javax.measure.quantity.Force; +import javax.measure.quantity.Pressure; +import javax.measure.unit.SI; + +import junit.framework.Assert; + +import org.jscience.physics.amount.Amount; +import org.junit.Test; + +import com.billkuker.rocketry.motorsim.ConvergentDivergentNozzle; +import com.billkuker.rocketry.motorsim.fuel.KNSU; + +public class ConvergentDivergentNozzleTest extends RocketTest { + + ConvergentDivergentNozzle n = new ConvergentDivergentNozzle(); + + { + n.setThroatDiameter(Amount.valueOf(6.6, SI.MILLIMETER)); + n.setExitDiameter(Amount.valueOf(20.87, SI.MILLIMETER)); + n.setEfficiency(0.85); + } + + @Test + public void testThroatArea() { + Amount a = n.throatArea().to(SI.MILLIMETER.pow(2).asType(Area.class)); + assertApproximate(Amount.valueOf(34.2, .1, SI.MILLIMETER.pow(2)), a); + } + + @Test + public void testExitArea() { + Amount a = n.exitArea(); + assertApproximate(Amount.valueOf(342, .1, SI.MILLIMETER.pow(2)), a); + } + + @Test + public void testThrust() { + Amount Patm = Amount.valueOf(101000, SI.PASCAL); + Amount Po = Amount.valueOf(2046491, SI.PASCAL); + Amount Pe = Patm; + + KNSU f = new KNSU(); + + Amount t = n.thrust(Po, Pe, Patm, f.getCombustionProduct().getRatioOfSpecificHeats2Phase()); + + Amount expected = Amount.valueOf(87.2, .1, SI.NEWTON); + + assertApproximate(t, expected); + } + + @Test + public void testThrustCoefficient() { + Amount Patm = Amount.valueOf(101000, SI.PASCAL); + Amount Po = Amount.valueOf(2046491, SI.PASCAL); + Amount Pe = Patm; + + KNSU f = new KNSU(); + + double cF = n.thrustCoefficient(Po, Pe, Patm, f.getCombustionProduct().getRatioOfSpecificHeats2Phase()); + + + Assert.assertEquals(cF, 1.2454812344324655); + } + +} diff --git a/test/com/billkuker/rocketry/motorsim/test/CoredCylindricalGrainTest.java b/test/com/billkuker/rocketry/motorsim/test/CoredCylindricalGrainTest.java new file mode 100644 index 0000000..b20291e --- /dev/null +++ b/test/com/billkuker/rocketry/motorsim/test/CoredCylindricalGrainTest.java @@ -0,0 +1,91 @@ +package com.billkuker.rocketry.motorsim.test; + +import java.beans.PropertyVetoException; + +import javax.measure.quantity.Area; +import javax.measure.quantity.Volume; +import javax.measure.unit.SI; + +import org.jscience.physics.amount.Amount; +import org.junit.Test; + +import com.billkuker.rocketry.motorsim.grain.CoredCylindricalGrain; + +public class CoredCylindricalGrainTest extends RocketTest { + + @Test + public void testSurfaceArea() throws PropertyVetoException { + + CoredCylindricalGrain g = new CoredCylindricalGrain(); + + g.setLength(Amount.valueOf(100, SI.MILLIMETER)); + g.setOD(Amount.valueOf(30, SI.MILLIMETER)); + g.setID(Amount.valueOf(10, SI.MILLIMETER)); + + g.setForeEndInhibited(false); + g.setAftEndInhibited(false); + g.setOuterSurfaceInhibited(true); + g.setInnerSurfaceInhibited(false); + + Amount a = g.surfaceArea(Amount.valueOf(6, SI.MILLIMETER)); + assertApproximate(a, Amount.valueOf(6736, sqMM), Amount.valueOf(1, sqMM) ); + } + + + @Test + public void testWebThickness() throws PropertyVetoException { + CoredCylindricalGrain g = new CoredCylindricalGrain(); + + //thin and long + g.setLength(Amount.valueOf(100, SI.MILLIMETER)); + g.setOD(Amount.valueOf(30, SI.MILLIMETER)); + g.setID(Amount.valueOf(10, SI.MILLIMETER)); + + assertApproximate(g.webThickness(), Amount.valueOf("10mm")); + + //thick and short + g.setLength(Amount.valueOf(100, SI.MILLIMETER)); + g.setOD(Amount.valueOf(300, SI.MILLIMETER)); + g.setID(Amount.valueOf(100, SI.MILLIMETER)); + + assertApproximate(g.webThickness(), Amount.valueOf("50mm")); + } + + @Test + public void testVolume() throws PropertyVetoException { + CoredCylindricalGrain g = new CoredCylindricalGrain(); + + //thin and long + g.setLength(Amount.valueOf(100, SI.MILLIMETER)); + g.setOD(Amount.valueOf(30, SI.MILLIMETER)); + g.setID(Amount.valueOf(10, SI.MILLIMETER)); + + g.setForeEndInhibited(false); + g.setAftEndInhibited(false); + g.setOuterSurfaceInhibited(true); + g.setInnerSurfaceInhibited(false); + + Amount v = g.volume(Amount.valueOf(3, SI.MILLIMETER)); + assertApproximate(v, Amount.valueOf(47545, cubeMM), Amount.valueOf(1, cubeMM)); + + v = g.volume(Amount.valueOf(5, SI.MILLIMETER)); + assertApproximate(v, Amount.valueOf(35343, cubeMM), Amount.valueOf(1, cubeMM)); + + v = g.volume(Amount.valueOf(9, SI.MILLIMETER)); + assertApproximate(v, Amount.valueOf(7471, cubeMM), Amount.valueOf(1, cubeMM)); + } + + /* + @Test(expected=MotorPart.Validating.ValidationException.class) + public void testCheckValidity() throws MotorPart.Validating.ValidationException, PropertyVetoException{ + CoredCylindricalGrain g = new CoredCylindricalGrain(); + + //thin and long + g.setLength(Amount.valueOf(100, SI.MILLIMETER)); + g.setOD(Amount.valueOf(10, SI.MILLIMETER)); + g.setID(Amount.valueOf(30, SI.MILLIMETER)); + + g.checkValidity(); + }*/ + +} diff --git a/test/com/billkuker/rocketry/motorsim/test/CylindricalChamberTest.java b/test/com/billkuker/rocketry/motorsim/test/CylindricalChamberTest.java new file mode 100644 index 0000000..60600a7 --- /dev/null +++ b/test/com/billkuker/rocketry/motorsim/test/CylindricalChamberTest.java @@ -0,0 +1,28 @@ +package com.billkuker.rocketry.motorsim.test; + +import javax.measure.unit.SI; + +import org.jscience.physics.amount.Amount; +import org.junit.Assert; +import org.junit.Test; + +import com.billkuker.rocketry.motorsim.CylindricalChamber; + +public class CylindricalChamberTest extends RocketTest { + + @Test + public void testBurstPressure() { + Assert.assertNull( new CylindricalChamber().burstPressure() ); + } + + @Test + public void testChamberVolume() { + CylindricalChamber c = new CylindricalChamber(); + + c.setLength(Amount.valueOf(100, SI.MILLIMETER)); + c.setID(Amount.valueOf(20, SI.MILLIMETER)); + + assertApproximate(c.chamberVolume(), Amount.valueOf(10000*Math.PI, SI.MILLIMETER.pow(3))); + } + +} diff --git a/test/com/billkuker/rocketry/motorsim/test/KNSUTest.java b/test/com/billkuker/rocketry/motorsim/test/KNSUTest.java new file mode 100644 index 0000000..9845a6f --- /dev/null +++ b/test/com/billkuker/rocketry/motorsim/test/KNSUTest.java @@ -0,0 +1,30 @@ +package com.billkuker.rocketry.motorsim.test; + +import javax.measure.unit.NonSI; +import javax.measure.unit.SI; + +import org.jscience.physics.amount.Amount; +import org.junit.Test; + +import com.billkuker.rocketry.motorsim.fuel.KNSU; + +public class KNSUTest extends RocketTest { + + @Test + public void testBurnRate() { + KNSU f = new KNSU(); + + System.out.println(f.burnRate(Amount.valueOf(6.89, SI.MEGA(SI.PASCAL) )).to(NonSI.INCH.divide(SI.SECOND))); + } + + @Test + public void testEffectiveMolarWeight(){ + (new KNSU()).getCombustionProduct().getEffectiveMolarWeight(); + } + + @Test + public void testIdealDensity(){ + System.out.println((new KNSU()).getIdealDensity()); + System.out.println((new KNSU()).getIdealDensity().isExact()); + } +} diff --git a/test/com/billkuker/rocketry/motorsim/test/MotorIOTest.java b/test/com/billkuker/rocketry/motorsim/test/MotorIOTest.java new file mode 100644 index 0000000..b401bc5 --- /dev/null +++ b/test/com/billkuker/rocketry/motorsim/test/MotorIOTest.java @@ -0,0 +1,56 @@ +package com.billkuker.rocketry.motorsim.test; + +import java.beans.PropertyVetoException; +import java.io.File; + +import javax.measure.unit.SI; + +import org.jscience.physics.amount.Amount; +import org.junit.Test; + +import com.billkuker.rocketry.motorsim.ConvergentDivergentNozzle; +import com.billkuker.rocketry.motorsim.CylindricalChamber; +import com.billkuker.rocketry.motorsim.Motor; +import com.billkuker.rocketry.motorsim.fuel.KNSU; +import com.billkuker.rocketry.motorsim.grain.CoredCylindricalGrain; +import com.billkuker.rocketry.motorsim.grain.MultiGrain; +import com.billkuker.rocketry.motorsim.io.MotorIO; + +public class MotorIOTest { + + @Test + public void testReadWrite() throws Exception { + Motor m = new Motor(); + m.setName("IOTestMotor"); + m.setFuel(new KNSU()); + + CylindricalChamber c = new CylindricalChamber(); + c.setLength(Amount.valueOf(200, SI.MILLIMETER)); + c.setID(Amount.valueOf(30, SI.MILLIMETER)); + m.setChamber(c); + + CoredCylindricalGrain g = new CoredCylindricalGrain(); + try { + g.setLength(Amount.valueOf(70, SI.MILLIMETER)); + g.setOD(Amount.valueOf(29, SI.MILLIMETER)); + g.setID(Amount.valueOf(8, SI.MILLIMETER)); + } catch (PropertyVetoException v) { + throw new Error(v); + } + + m.setGrain(new MultiGrain(g, 2)); + + ConvergentDivergentNozzle n = new ConvergentDivergentNozzle(); + n.setThroatDiameter(Amount.valueOf(7.9, SI.MILLIMETER)); + n.setExitDiameter(Amount.valueOf(9, SI.MILLIMETER)); + n.setEfficiency(.87); + m.setNozzle(n); + + File f = new File("MotorIOTest.xml"); + + MotorIO.writeMotor(m, f); + + MotorIO.readMotor(f); + + } +} diff --git a/test/com/billkuker/rocketry/motorsim/test/RocketTest.java b/test/com/billkuker/rocketry/motorsim/test/RocketTest.java new file mode 100644 index 0000000..149c47e --- /dev/null +++ b/test/com/billkuker/rocketry/motorsim/test/RocketTest.java @@ -0,0 +1,25 @@ +package com.billkuker.rocketry.motorsim.test; + +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +import org.jscience.physics.amount.Amount; +import org.junit.Assert; + +public class RocketTest { + + protected static final Unit sqMM = SI.MILLIMETER.pow(2).asType(javax.measure.quantity.Area.class); + + + protected static final Unit cubeMM = SI.MILLIMETER.pow(3).asType(javax.measure.quantity.Volume.class); + + @SuppressWarnings("unchecked") + protected void assertApproximate(Amount a, Amount b){ + Assert.assertTrue("" + a.to(b.getUnit()) + " !~ " + b , a.approximates(b)); + } + + @SuppressWarnings("unchecked") + protected void assertApproximate(Amount a, Amount b, Amount diff){ + Assert.assertTrue("" + a.to(b.getUnit()) + " !~~ " + b , a.minus(b).abs().isLessThan(diff)); + } +} diff --git a/test/com/billkuker/rocketry/motorsim/test/ShapeUtilTest.java b/test/com/billkuker/rocketry/motorsim/test/ShapeUtilTest.java new file mode 100644 index 0000000..7971220 --- /dev/null +++ b/test/com/billkuker/rocketry/motorsim/test/ShapeUtilTest.java @@ -0,0 +1,48 @@ +package com.billkuker.rocketry.motorsim.test; + +import java.awt.geom.Area; +import java.awt.geom.Ellipse2D; +import java.awt.geom.Rectangle2D; + +import org.jscience.physics.amount.Amount; +import org.junit.Test; + +import com.billkuker.rocketry.motorsim.grain.util.ShapeUtil; + + +public class ShapeUtilTest extends RocketTest{ + + Area tenByTen = new Area(new Rectangle2D.Double(-5, -5, 10, 10)); + Area oneByOne = new Area(new Rectangle2D.Double(-.5, -.5, 1, 1)); + Area twoByTwoFar = new Area( new Rectangle2D.Double(30,30,2,2)); + + Area r2Circle = new Area(new Ellipse2D.Double(-2,-2,4,4)); + + + Amount diff = Amount.valueOf(.01, sqMM); + + @Test + public void testArea(){ + assertApproximate(ShapeUtil.area(tenByTen), Amount.valueOf(100, sqMM)); + assertApproximate(ShapeUtil.area(oneByOne), Amount.valueOf(1, sqMM)); + assertApproximate(ShapeUtil.area(twoByTwoFar), Amount.valueOf(4, sqMM)); + assertApproximate(ShapeUtil.area(r2Circle), Amount.valueOf(4*Math.PI, sqMM), diff); + + Area a = new Area(tenByTen); + a.subtract(oneByOne); + + assertApproximate(ShapeUtil.area(a), ShapeUtil.area(tenByTen).minus(ShapeUtil.area(oneByOne))); + + a.add(twoByTwoFar); + + assertApproximate(ShapeUtil.area(a), + ShapeUtil.area(tenByTen) + .minus(ShapeUtil.area(oneByOne)) + .plus(ShapeUtil.area(twoByTwoFar))); + + a = new Area(tenByTen); + a.subtract(r2Circle); + + assertApproximate(ShapeUtil.area(a), ShapeUtil.area(tenByTen).minus(ShapeUtil.area(r2Circle))); + } +}