Merge pull request #1727 from SiboVG/issue-1725
Add unit tests for MassObject auto radius
This commit is contained in:
commit
3816f63663
@ -53,10 +53,10 @@ public abstract class MassObject extends InternalComponent {
|
|||||||
@Override
|
@Override
|
||||||
public double getLength() {
|
public double getLength() {
|
||||||
if (this.autoRadius) {
|
if (this.autoRadius) {
|
||||||
// Calculate the parachute volume using the non auto radius and the non auto length, and transform that back
|
// Calculate the volume using the non auto radius and the non auto length, and transform that back
|
||||||
// to the auto radius situation to get the auto radius length (the volume in both situations is the same).
|
// to the auto radius situation to get the auto radius length (the volume in both situations is the same).
|
||||||
double parachuteVolume = Math.pow(this.radius, 2) * this.length; // Math.PI left out, not needed
|
double volume = Math.pow(this.radius, 2) * this.length; // Math.PI left out, not needed
|
||||||
return parachuteVolume / Math.pow(getRadius(), 2);
|
return volume / Math.pow(getRadius(), 2);
|
||||||
}
|
}
|
||||||
return length;
|
return length;
|
||||||
}
|
}
|
||||||
@ -93,10 +93,10 @@ public abstract class MassObject extends InternalComponent {
|
|||||||
|
|
||||||
length = Math.max(length, 0);
|
length = Math.max(length, 0);
|
||||||
if (this.autoRadius) {
|
if (this.autoRadius) {
|
||||||
// Calculate the parachute volume using the auto radius and the new "auto" length, and transform that back
|
// Calculate the volume using the auto radius and the new "auto" length, and transform that back
|
||||||
// to the non auto radius situation to set this.length (the volume in both situations is the same).
|
// to the non auto radius situation to set this.length (the volume in both situations is the same).
|
||||||
double parachuteVolume = Math.pow(getRadius(), 2) * length; // Math.PI left out, not needed
|
double volume = Math.pow(getRadius(), 2) * length; // Math.PI left out, not needed
|
||||||
double newLength = parachuteVolume / Math.pow(this.radius, 2);
|
double newLength = volume / Math.pow(this.radius, 2);
|
||||||
if (MathUtil.equals(this.length, newLength))
|
if (MathUtil.equals(this.length, newLength))
|
||||||
return;
|
return;
|
||||||
this.length = newLength;
|
this.length = newLength;
|
||||||
@ -168,8 +168,8 @@ public abstract class MassObject extends InternalComponent {
|
|||||||
autoRadius = auto;
|
autoRadius = auto;
|
||||||
|
|
||||||
// Set the length
|
// Set the length
|
||||||
double parachuteVolume = (Math.PI * Math.pow(getRadius(), 2) * length);
|
double volume = (Math.PI * Math.pow(getRadius(), 2) * length);
|
||||||
length = parachuteVolume / (Math.PI * Math.pow(getRadius(), 2));
|
length = volume / (Math.PI * Math.pow(getRadius(), 2));
|
||||||
|
|
||||||
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
fireComponentChangeEvent(ComponentChangeEvent.BOTH_CHANGE);
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,86 @@
|
|||||||
|
package net.sf.openrocket.rocketcomponent;
|
||||||
|
|
||||||
|
import net.sf.openrocket.util.BaseTestCase.BaseTestCase;
|
||||||
|
import net.sf.openrocket.util.MathUtil;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.Assert;
|
||||||
|
|
||||||
|
public class MassObjectTest extends BaseTestCase {
|
||||||
|
@Test
|
||||||
|
public void testAutoRadius() {
|
||||||
|
MassObject sc = new ShockCord();
|
||||||
|
MassObject mc = new MassComponent();
|
||||||
|
MassObject pc = new Parachute();
|
||||||
|
MassObject st = new Streamer();
|
||||||
|
MassObject[] massObjects = {sc, mc, pc, st};
|
||||||
|
|
||||||
|
for (MassObject mo : massObjects) {
|
||||||
|
// Test no auto
|
||||||
|
mo.setRadiusAutomatic(false);
|
||||||
|
mo.setRadius(0.1);
|
||||||
|
mo.setLength(0.1);
|
||||||
|
Assert.assertEquals(String.format(" No auto %s incorrect radius", mo.getClass().getName()),
|
||||||
|
0.1, mo.getRadius(), MathUtil.EPSILON);
|
||||||
|
Assert.assertEquals(String.format(" No auto %s incorrect no auto radius", mo.getClass().getName()),
|
||||||
|
0.1, mo.getRadiusNoAuto(),MathUtil.EPSILON);
|
||||||
|
Assert.assertEquals(String.format(" No auto %s incorrect length", mo.getClass().getName()),
|
||||||
|
0.1, mo.getLength(), MathUtil.EPSILON);
|
||||||
|
Assert.assertEquals(String.format(" No auto %s incorrect no auto length", mo.getClass().getName()),
|
||||||
|
0.1, mo.getLengthNoAuto(), MathUtil.EPSILON);
|
||||||
|
|
||||||
|
mo.setLengthNoAuto(0.1);
|
||||||
|
Assert.assertEquals(String.format(" No auto 2 %s incorrect length", mo.getClass().getName()),
|
||||||
|
0.1, mo.getLength(), MathUtil.EPSILON);
|
||||||
|
Assert.assertEquals(String.format(" No auto 2 %s incorrect no auto length", mo.getClass().getName()),
|
||||||
|
0.1, mo.getLengthNoAuto(), MathUtil.EPSILON);
|
||||||
|
|
||||||
|
// Test auto
|
||||||
|
BodyTube parent = new BodyTube();
|
||||||
|
parent.setOuterRadius(0.05);
|
||||||
|
parent.setInnerRadius(0.05);
|
||||||
|
parent.addChild(mo);
|
||||||
|
mo.setRadiusAutomatic(true);
|
||||||
|
Assert.assertEquals(String.format(" Auto 1 %s incorrect radius", mo.getClass().getName()),
|
||||||
|
0.05, mo.getRadius(), MathUtil.EPSILON);
|
||||||
|
Assert.assertEquals(String.format(" Auto 1 %s incorrect no auto radius", mo.getClass().getName()),
|
||||||
|
0.1, mo.getRadiusNoAuto(), MathUtil.EPSILON);
|
||||||
|
Assert.assertEquals(String.format(" Auto 1 %s incorrect length", mo.getClass().getName()),
|
||||||
|
0.4, mo.getLength(), MathUtil.EPSILON);
|
||||||
|
Assert.assertEquals(String.format(" Auto 1 %s incorrect no auto length", mo.getClass().getName()),
|
||||||
|
0.1, mo.getLengthNoAuto(), MathUtil.EPSILON);
|
||||||
|
|
||||||
|
parent.setOuterRadius(0.1);
|
||||||
|
parent.setInnerRadius(0.1);
|
||||||
|
Assert.assertEquals(String.format(" Auto 2 %s incorrect radius", mo.getClass().getName()),
|
||||||
|
0.1, mo.getRadius(), MathUtil.EPSILON);
|
||||||
|
Assert.assertEquals(String.format(" Auto 2 %s incorrect no auto radius", mo.getClass().getName()),
|
||||||
|
0.1, mo.getRadiusNoAuto(), MathUtil.EPSILON);
|
||||||
|
Assert.assertEquals(String.format(" Auto 2 %s incorrect length", mo.getClass().getName()),
|
||||||
|
0.1, mo.getLength(), MathUtil.EPSILON);
|
||||||
|
Assert.assertEquals(String.format(" Auto 2 %s incorrect no auto length", mo.getClass().getName()),
|
||||||
|
0.1, mo.getLengthNoAuto(), MathUtil.EPSILON);
|
||||||
|
|
||||||
|
parent.setOuterRadius(0.075);
|
||||||
|
parent.setInnerRadius(0.075);
|
||||||
|
mo.setLength(0.075);
|
||||||
|
Assert.assertEquals(String.format(" Auto 3 %s incorrect radius", mo.getClass().getName()),
|
||||||
|
0.075, mo.getRadius(), MathUtil.EPSILON);
|
||||||
|
Assert.assertEquals(String.format(" Auto 3 %s incorrect no auto radius", mo.getClass().getName()),
|
||||||
|
0.1, mo.getRadiusNoAuto(), MathUtil.EPSILON);
|
||||||
|
Assert.assertEquals(String.format(" Auto 3 %s incorrect length", mo.getClass().getName()),
|
||||||
|
0.075, mo.getLength(), MathUtil.EPSILON);
|
||||||
|
Assert.assertEquals(String.format(" Auto 3 %s incorrect no auto length", mo.getClass().getName()),
|
||||||
|
0.0422, mo.getLengthNoAuto(), 0.001);
|
||||||
|
|
||||||
|
mo.setLengthNoAuto(0.05);
|
||||||
|
Assert.assertEquals(String.format(" Auto 4 %s incorrect radius", mo.getClass().getName()),
|
||||||
|
0.075, mo.getRadius(), MathUtil.EPSILON);
|
||||||
|
Assert.assertEquals(String.format(" Auto 4 %s incorrect no auto radius", mo.getClass().getName()),
|
||||||
|
0.1, mo.getRadiusNoAuto(), MathUtil.EPSILON);
|
||||||
|
Assert.assertEquals(String.format(" Auto 4 %s incorrect length", mo.getClass().getName()),
|
||||||
|
0.0889, mo.getLength(), 0.001);
|
||||||
|
Assert.assertEquals(String.format(" Auto 4 %s incorrect no auto length", mo.getClass().getName()),
|
||||||
|
0.05, mo.getLengthNoAuto(), MathUtil.EPSILON);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user