My assessment of why IntegrationTest was failing was incorrect. After perusing the history I found that in repository revision 599, I introduced changes to the computation of Transition volume which accounted for the volume of the shoulders as well as the body of the transition. This change broke the computation of CG. This commit reverts IntegrationTest and adds some cg tests to SymmetricComponentVolumeTest which contains the values produced by the old code. A future commit will correct SymmetricComponent.getCG and all these tests will work again.

This commit is contained in:
Kevin Ruland 2012-05-23 14:23:01 +00:00
parent e10ff31830
commit 0302130c11
2 changed files with 89 additions and 39 deletions

View File

@ -105,8 +105,8 @@ public class IntegrationTest extends BaseTestCase {
// Compute cg+cp + altitude
checkCgCp(0.238, 0.0678, 0.320, 12.0);
checkAlt(44.2);
checkCgCp(0.248, 0.0645, 0.320, 12.0);
checkAlt(48.2);
// Mass modification
@ -117,8 +117,8 @@ public class IntegrationTest extends BaseTestCase {
// Check cg+cp + altitude
checkCgCp(0.223, 0.0778, 0.320, 12.0);
checkAlt(34.2);
checkCgCp(0.230, 0.0745, 0.320, 12.0);
checkAlt(37.2);
// Non-change
@ -134,7 +134,7 @@ public class IntegrationTest extends BaseTestCase {
// Check cg+cp
checkCgCp(0.223, 0.0778, 0.320, 12.0);
checkCgCp(0.230, 0.0745, 0.320, 12.0);
// Aerodynamic modification
@ -156,8 +156,8 @@ public class IntegrationTest extends BaseTestCase {
// Check cg+cp + altitude
checkCgCp(0.223, 0.0778, 0.320, 12.0);
checkAlt(34.0);
checkCgCp(0.230, 0.0745, 0.320, 12.0);
checkAlt(37.2);
// Undo "Name change" change
@ -167,7 +167,7 @@ public class IntegrationTest extends BaseTestCase {
// Check cg+cp
checkCgCp(0.223, 0.0778, 0.320, 12.0);
checkCgCp(0.230, 0.0745, 0.320, 12.0);
// Undo "Modify mass" change
@ -177,8 +177,8 @@ public class IntegrationTest extends BaseTestCase {
// Check cg+cp + altitude
checkCgCp(0.238, 0.0678, 0.320, 12.0);
checkAlt(44.3);
checkCgCp(0.248, 0.0645, 0.320, 12.0);
checkAlt(48.2);
// Redo "Modify mass" change
@ -188,8 +188,8 @@ public class IntegrationTest extends BaseTestCase {
// Check cg+cp + altitude
checkCgCp(0.223, 0.0778, 0.320, 12.0);
checkAlt(34.3);
checkCgCp(0.230, 0.0745, 0.320, 12.0);
checkAlt(37.2);
// Mass modification
@ -200,8 +200,8 @@ public class IntegrationTest extends BaseTestCase {
// Check cg+cp + altitude
checkCgCp(0.216, 0.0828, 0.320, 12.0);
checkAlt(30.2);
checkCgCp(0.223, 0.0795, 0.320, 12.0);
checkAlt(32.7);
// Perform component movement
@ -219,8 +219,9 @@ public class IntegrationTest extends BaseTestCase {
// Check cg+cp + altitude
checkCgCp(0.215, 0.0830, 0.320, 12.0);
checkAlt(30.2);
checkCgCp(0.221, 0.0797, 0.320, 12.0);
checkAlt(32.7);
// Modify mass without setting undo description
massComponent().setComponentMass(0.020);
@ -228,8 +229,8 @@ public class IntegrationTest extends BaseTestCase {
// Check cg+cp + altitude
checkCgCp(0.209, 0.088, 0.320, 12.0);
checkAlt(26.8);
checkCgCp(0.215, 0.0847, 0.320, 12.0);
checkAlt(29.0);
// Undo "Modify mass2" change
@ -239,8 +240,8 @@ public class IntegrationTest extends BaseTestCase {
// Check cg+cp + altitude
checkCgCp(0.215, 0.0830, 0.320, 12.0);
checkAlt(30.2);
checkCgCp(0.221, 0.0797, 0.320, 12.0);
checkAlt(32.7);
// Undo "Move component" change
@ -250,8 +251,8 @@ public class IntegrationTest extends BaseTestCase {
// Check cg+cp + altitude
checkCgCp(0.216, 0.0828, 0.320, 12.0);
checkAlt(30.4);
checkCgCp(0.223, 0.0795, 0.320, 12.0);
checkAlt(32.7);
// Redo "Move component" change
@ -261,8 +262,8 @@ public class IntegrationTest extends BaseTestCase {
// Check cg+cp + altitude
checkCgCp(0.215, 0.0830, 0.320, 12.0);
checkAlt(30.2);
checkCgCp(0.221, 0.0797, 0.320, 12.0);
checkAlt(32.7);
}

View File

@ -2,6 +2,7 @@ package net.sf.openrocket.rocketcomponent;
import static org.junit.Assert.assertEquals;
import net.sf.openrocket.material.Material;
import net.sf.openrocket.util.Coordinate;
import net.sf.openrocket.util.BaseTestCase.BaseTestCase;
import org.junit.Test;
@ -21,7 +22,8 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
nc.setAftRadius(1.0);
nc.setMaterial( new Material.Bulk("test",density,true));
System.out.println( nc.getComponentVolume() );
System.out.println( nc.getComponentVolume() + "\t" + nc.getMass());
System.out.println(nc.getCG());
double volume = Math.PI / 3.0;
@ -31,6 +33,10 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume);
assertEquals( mass, nc.getMass(), epsilonPercent * mass );
Coordinate cg = nc.getCG();
assertEquals( 0.75, cg.x, epsilonPercent * 0.75 );
assertEquals( mass, cg.weight, epsilonPercent * mass);
}
@Test
@ -49,8 +55,8 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
nc.setAftShoulderThickness(1.0);
nc.setMaterial( new Material.Bulk("test",density,true));
System.out.println( nc.getComponentVolume() + "\t" + nc.getMass() );
System.out.println( nc.getComponentVolume() + "\t" + nc.getMass());
System.out.println(nc.getCG());
double volume = Math.PI / 3.0;
volume += Math.PI;
@ -61,6 +67,10 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume);
assertEquals( mass, nc.getMass(), epsilonPercent * mass );
Coordinate cg = nc.getCG();
assertEquals( 1.312, cg.x, epsilonPercent * 1.071 );
assertEquals( mass, cg.weight, epsilonPercent * mass);
}
@Test
@ -76,8 +86,9 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
nc.setType( Transition.Shape.CONICAL );
nc.setMaterial( new Material.Bulk("test",density,true));
System.out.println( nc.getComponentVolume() );
System.out.println( nc.getComponentVolume() + "\t" + nc.getMass());
System.out.println(nc.getCG());
double volume = Math.PI / 3.0; // outer volume
// manually projected Thickness of 0.5 on to radius to determine
@ -94,6 +105,10 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume);
assertEquals( mass, nc.getMass(), epsilonPercent * mass );
Coordinate cg = nc.getCG();
assertEquals( 0.7454, cg.x, epsilonPercent * 0.7454 );
assertEquals( mass, cg.weight, epsilonPercent * mass);
}
@Test
@ -112,8 +127,8 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
nc.setAftShoulderThickness(0.5);
nc.setMaterial( new Material.Bulk("test",density,true));
System.out.println( nc.getComponentVolume() );
System.out.println( nc.getComponentVolume() + "\t" + nc.getMass());
System.out.println(nc.getCG());
double volume = Math.PI / 3.0; // outer volume
@ -134,6 +149,10 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume);
assertEquals( mass, nc.getMass(), epsilonPercent * mass );
Coordinate cg = nc.getCG();
assertEquals( 1.2719, cg.x, epsilonPercent * 1.2719 );
assertEquals( mass, cg.weight, epsilonPercent * mass);
}
@Test
@ -150,8 +169,9 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
nc.setAftRadius(2.0);
nc.setMaterial( new Material.Bulk("test",density,true));
System.out.println( nc.getComponentVolume() );
System.out.println( nc.getComponentVolume() + "\t" + nc.getMass());
System.out.println(nc.getCG());
double volume = Math.PI / 3.0 * (2.0*2.0 + 2.0 * 1.0 + 1.0 * 1.0) * 4.0;
double mass = density * volume;
@ -160,6 +180,10 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume);
assertEquals( mass, nc.getMass(), epsilonPercent * mass );
Coordinate cg = nc.getCG();
assertEquals( 2.4285, cg.x, epsilonPercent * 2.4285 );
assertEquals( mass, cg.weight, epsilonPercent * mass);
}
@Test
@ -182,8 +206,9 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
nc.setForeShoulderThickness(1.0);
nc.setMaterial( new Material.Bulk("test",density,true));
System.out.println( nc.getComponentVolume() );
System.out.println( nc.getComponentVolume() + "\t" + nc.getMass());
System.out.println(nc.getCG());
double volume = Math.PI / 3.0 * (2.0*2.0 + 2.0 * 1.0 + 1.0 * 1.0) * 4.0;
// plus aft shoulder:
volume += Math.PI * 1.0 * 2.0 * 2.0;
@ -196,6 +221,10 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume);
assertEquals( mass, nc.getMass(), epsilonPercent * mass );
Coordinate cg = nc.getCG();
assertEquals( 2.8023, cg.x, epsilonPercent * 2.8023 );
assertEquals( mass, cg.weight, epsilonPercent * mass);
}
@Test
@ -212,7 +241,8 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
nc.setThickness(0.5);
nc.setMaterial( new Material.Bulk("test",density,true));
System.out.println( nc.getComponentVolume() );
System.out.println( nc.getComponentVolume() + "\t" + nc.getMass());
System.out.println(nc.getCG());
// Volume of filled transition =
double filledVolume = Math.PI /3.0 * ( 1.0*1.0 + 1.0 * 0.5 + 0.5 * 0.5 ) * 1.0;
@ -237,6 +267,10 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume);
assertEquals( mass, nc.getMass(), epsilonPercent * mass );
Coordinate cg = nc.getCG();
assertEquals( 0.5884, cg.x, epsilonPercent * 0.5884 );
assertEquals( mass, cg.weight, epsilonPercent * mass);
}
@Test
@ -259,7 +293,8 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
nc.setForeShoulderThickness(0.5); // note this means fore shoulder is filled.
nc.setMaterial( new Material.Bulk("test",density,true));
System.out.println( nc.getComponentVolume() );
System.out.println( nc.getComponentVolume() + "\t" + nc.getMass());
System.out.println(nc.getCG());
// Volume of filled transition =
double filledVolume = Math.PI /3.0 * ( 1.0*1.0 + 1.0 * 0.5 + 0.5 * 0.5 ) * 1.0;
@ -289,6 +324,10 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume);
assertEquals( mass, nc.getMass(), epsilonPercent * mass );
Coordinate cg = nc.getCG();
assertEquals( 0.8581, cg.x, epsilonPercent * 0.8581 );
assertEquals( mass, cg.weight, epsilonPercent * mass);
}
@Test
@ -305,7 +344,8 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
nc.setThickness(0.25);
nc.setMaterial( new Material.Bulk("test",density,true));
System.out.println( nc.getComponentVolume() );
System.out.println( nc.getComponentVolume() + "\t" + nc.getMass());
System.out.println(nc.getCG());
// Volume of filled transition =
double filledVolume = Math.PI /3.0 * ( 1.0*1.0 + 1.0 * 0.5 + 0.5 * 0.5 ) * 1.0;
@ -330,6 +370,10 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume);
assertEquals( mass, nc.getMass(), epsilonPercent * mass );
Coordinate cg = nc.getCG();
assertEquals( 0.56827, cg.x, epsilonPercent * 0.56827 );
assertEquals( mass, cg.weight, epsilonPercent * mass);
}
@Test
@ -353,7 +397,8 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
nc.setMaterial( new Material.Bulk("test",density,true));
System.out.println( nc.getComponentVolume() );
System.out.println( nc.getComponentVolume() + "\t" + nc.getMass());
System.out.println(nc.getCG());
// Volume of filled transition =
double filledVolume = Math.PI /3.0 * ( 1.0*1.0 + 1.0 * 0.5 + 0.5 * 0.5 ) * 1.0;
@ -384,6 +429,10 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume);
assertEquals( mass, nc.getMass(), epsilonPercent * mass );
Coordinate cg = nc.getCG();
assertEquals( 0.7829, cg.x, epsilonPercent * 0.7829 );
assertEquals( mass, cg.weight, epsilonPercent * mass);
}
}