From 3b08227089ea2631a1092fb93febb7162e2aa3f9 Mon Sep 17 00:00:00 2001 From: Bill Kuker Date: Wed, 15 Apr 2009 18:27:34 +0000 Subject: [PATCH] Added better tests --- .../test/CoredCylindricalGrainTest.java | 34 +++++++++---- .../rocketry/motorsim/test/RocketTest.java | 14 ++++- .../rocketry/motorsim/test/ShapeUtilTest.java | 51 +++++++++++++++++++ 3 files changed, 89 insertions(+), 10 deletions(-) create mode 100644 src/com/billkuker/rocketry/motorsim/test/ShapeUtilTest.java diff --git a/src/com/billkuker/rocketry/motorsim/test/CoredCylindricalGrainTest.java b/src/com/billkuker/rocketry/motorsim/test/CoredCylindricalGrainTest.java index f54bd1d..ca7d804 100644 --- a/src/com/billkuker/rocketry/motorsim/test/CoredCylindricalGrainTest.java +++ b/src/com/billkuker/rocketry/motorsim/test/CoredCylindricalGrainTest.java @@ -2,7 +2,9 @@ package com.billkuker.rocketry.motorsim.test; import java.beans.PropertyVetoException; +import javax.measure.quantity.Area; import javax.measure.quantity.Length; +import javax.measure.quantity.Volume; import javax.measure.unit.SI; import org.jscience.physics.amount.Amount; @@ -15,18 +17,20 @@ public class CoredCylindricalGrainTest extends RocketTest { @Test public void testSurfaceArea() throws PropertyVetoException { + CoredCylindricalGrain g = new CoredCylindricalGrain(); - g.setLength(Amount.valueOf(70, SI.MILLIMETER)); - - g.setOD(Amount.valueOf(23.5, SI.MILLIMETER)); + g.setLength(Amount.valueOf(100, SI.MILLIMETER)); + g.setOD(Amount.valueOf(30, SI.MILLIMETER)); + g.setID(Amount.valueOf(10, SI.MILLIMETER)); - g.setID(Amount.valueOf(7.9375, SI.MILLIMETER)); + g.setForeEndInhibited(false); + g.setAftEndInhibited(false); + g.setOuterSurfaceInhibited(true); + g.setInnerSurfaceInhibited(false); - for ( int mm = 0; mm < 15; mm++ ){ - Amount r = Amount.valueOf(mm, SI.MILLIMETER); - System.out.println( r + ", " + g.surfaceArea(r).to(SI.MILLIMETER.pow(2)) + ", " + g.volume(r) ); - } + Amount a = g.surfaceArea(Amount.valueOf(6, SI.MILLIMETER)); + assertApproximate(a, Amount.valueOf(6736, sqMM), Amount.valueOf(1, sqMM) ); } @@ -58,7 +62,19 @@ public class CoredCylindricalGrainTest extends RocketTest { g.setOD(Amount.valueOf(30, SI.MILLIMETER)); g.setID(Amount.valueOf(10, SI.MILLIMETER)); - System.out.println(g.volume(Amount.valueOf(0, 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) diff --git a/src/com/billkuker/rocketry/motorsim/test/RocketTest.java b/src/com/billkuker/rocketry/motorsim/test/RocketTest.java index 99f1cb8..5c06288 100644 --- a/src/com/billkuker/rocketry/motorsim/test/RocketTest.java +++ b/src/com/billkuker/rocketry/motorsim/test/RocketTest.java @@ -1,11 +1,23 @@ 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); protected void assertApproximate(Amount a, Amount b){ - Assert.assertTrue("" + a + " !~ " + b , a.approximates(b)); + Assert.assertTrue("" + a.to(b.getUnit()) + " !~ " + b , a.approximates(b)); + } + + 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 new file mode 100644 index 0000000..d8a2be4 --- /dev/null +++ b/src/com/billkuker/rocketry/motorsim/test/ShapeUtilTest.java @@ -0,0 +1,51 @@ +package com.billkuker.rocketry.motorsim.test; + +import java.awt.geom.Area; +import java.awt.geom.Ellipse2D; +import java.awt.geom.Rectangle2D; + +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +import org.jscience.physics.amount.Amount; +import org.junit.Test; + +import com.billkuker.rocketry.motorsim.grain.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))); + } +} -- 2.47.2