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

View File

@ -2,6 +2,7 @@ package net.sf.openrocket.rocketcomponent;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import net.sf.openrocket.material.Material; import net.sf.openrocket.material.Material;
import net.sf.openrocket.util.Coordinate;
import net.sf.openrocket.util.BaseTestCase.BaseTestCase; import net.sf.openrocket.util.BaseTestCase.BaseTestCase;
import org.junit.Test; import org.junit.Test;
@ -21,7 +22,8 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
nc.setAftRadius(1.0); nc.setAftRadius(1.0);
nc.setMaterial( new Material.Bulk("test",density,true)); 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; double volume = Math.PI / 3.0;
@ -31,6 +33,10 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume); assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume);
assertEquals( mass, nc.getMass(), epsilonPercent * mass ); 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 @Test
@ -49,8 +55,8 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
nc.setAftShoulderThickness(1.0); nc.setAftShoulderThickness(1.0);
nc.setMaterial( new Material.Bulk("test",density,true)); 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; double volume = Math.PI / 3.0;
volume += Math.PI; volume += Math.PI;
@ -61,6 +67,10 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume); assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume);
assertEquals( mass, nc.getMass(), epsilonPercent * mass ); 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 @Test
@ -76,7 +86,8 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
nc.setType( Transition.Shape.CONICAL ); nc.setType( Transition.Shape.CONICAL );
nc.setMaterial( new Material.Bulk("test",density,true)); 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 double volume = Math.PI / 3.0; // outer volume
@ -94,6 +105,10 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume); assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume);
assertEquals( mass, nc.getMass(), epsilonPercent * mass ); 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 @Test
@ -112,8 +127,8 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
nc.setAftShoulderThickness(0.5); nc.setAftShoulderThickness(0.5);
nc.setMaterial( new Material.Bulk("test",density,true)); nc.setMaterial( new Material.Bulk("test",density,true));
System.out.println( nc.getComponentVolume() + "\t" + nc.getMass());
System.out.println( nc.getComponentVolume() ); System.out.println(nc.getCG());
double volume = Math.PI / 3.0; // outer volume double volume = Math.PI / 3.0; // outer volume
@ -134,6 +149,10 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume); assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume);
assertEquals( mass, nc.getMass(), epsilonPercent * mass ); 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 @Test
@ -150,7 +169,8 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
nc.setAftRadius(2.0); nc.setAftRadius(2.0);
nc.setMaterial( new Material.Bulk("test",density,true)); 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 volume = Math.PI / 3.0 * (2.0*2.0 + 2.0 * 1.0 + 1.0 * 1.0) * 4.0;
@ -160,6 +180,10 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume); assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume);
assertEquals( mass, nc.getMass(), epsilonPercent * mass ); 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 @Test
@ -182,7 +206,8 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
nc.setForeShoulderThickness(1.0); nc.setForeShoulderThickness(1.0);
nc.setMaterial( new Material.Bulk("test",density,true)); 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 volume = Math.PI / 3.0 * (2.0*2.0 + 2.0 * 1.0 + 1.0 * 1.0) * 4.0;
// plus aft shoulder: // plus aft shoulder:
@ -196,6 +221,10 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume); assertEquals( volume, nc.getComponentVolume(), epsilonPercent * volume);
assertEquals( mass, nc.getMass(), epsilonPercent * mass ); 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 @Test
@ -212,7 +241,8 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
nc.setThickness(0.5); nc.setThickness(0.5);
nc.setMaterial( new Material.Bulk("test",density,true)); 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 = // Volume of filled transition =
double filledVolume = Math.PI /3.0 * ( 1.0*1.0 + 1.0 * 0.5 + 0.5 * 0.5 ) * 1.0; 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( volume, nc.getComponentVolume(), epsilonPercent * volume);
assertEquals( mass, nc.getMass(), epsilonPercent * mass ); 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 @Test
@ -259,7 +293,8 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
nc.setForeShoulderThickness(0.5); // note this means fore shoulder is filled. nc.setForeShoulderThickness(0.5); // note this means fore shoulder is filled.
nc.setMaterial( new Material.Bulk("test",density,true)); 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 = // Volume of filled transition =
double filledVolume = Math.PI /3.0 * ( 1.0*1.0 + 1.0 * 0.5 + 0.5 * 0.5 ) * 1.0; 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( volume, nc.getComponentVolume(), epsilonPercent * volume);
assertEquals( mass, nc.getMass(), epsilonPercent * mass ); 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 @Test
@ -305,7 +344,8 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
nc.setThickness(0.25); nc.setThickness(0.25);
nc.setMaterial( new Material.Bulk("test",density,true)); 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 = // Volume of filled transition =
double filledVolume = Math.PI /3.0 * ( 1.0*1.0 + 1.0 * 0.5 + 0.5 * 0.5 ) * 1.0; 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( volume, nc.getComponentVolume(), epsilonPercent * volume);
assertEquals( mass, nc.getMass(), epsilonPercent * mass ); 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 @Test
@ -353,7 +397,8 @@ public class SymmetricComponentVolumeTest extends BaseTestCase {
nc.setMaterial( new Material.Bulk("test",density,true)); 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 = // Volume of filled transition =
double filledVolume = Math.PI /3.0 * ( 1.0*1.0 + 1.0 * 0.5 + 0.5 * 0.5 ) * 1.0; 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( volume, nc.getComponentVolume(), epsilonPercent * volume);
assertEquals( mass, nc.getMass(), epsilonPercent * mass ); assertEquals( mass, nc.getMass(), epsilonPercent * mass );
Coordinate cg = nc.getCG();
assertEquals( 0.7829, cg.x, epsilonPercent * 0.7829 );
assertEquals( mass, cg.weight, epsilonPercent * mass);
} }
} }