package org.schmivits.dynonskyview;
import java.lang.reflect.Field;
import junit.framework.TestCase;
public class FormatTest extends TestCase {
private void assertFloatEquals(String msg, float expected, float actual) {
float error = (actual - expected) / expected;
if (error > 0.0001f) {
fail(msg + " expected <" + expected + "> but was <" + actual + ">");
}
}
private void assertBlockEquals(ADAHRSDataBlock expected, ADAHRSDataBlock actual) {
for (Field f : ADAHRSDataBlock.class.getFields()) {
try {
assertFloatEquals(
"Field " + f.getName(),
f.getFloat(expected), f.getFloat(actual));
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
}
private void assertEquivalent(ADAHRSDataBlock block, String word) {
assertBlockEquals(block, DynonSerialFormat.wordToData(word));
assertEquals(word, DynonSerialFormat.dataToWord(block));
}
public void testSimpleCorrectValuesA() {
ADAHRSDataBlock block = new ADAHRSDataBlock();
String word = "";
block.time =
((39L * 3600L + 29L * 60L + 19L) * 1000L)
+ (long) (8.0 / 64.0 * 1000.0);
word += "39291908";
block.pitch = -78.9f;
word += "-789";
block.roll = -128.9f;
word += "-1289";
block.yaw = 259f;
word += "259";
block.airspeed = 179.5f;
word += "1795";
block.displayedAltitude = -8765f;
word += "-8765";
block.pressureAltitude = Float.NaN;
block.turnRate = -87.9f;
word += "-879";
block.verticalSpeed = Float.NaN;
block.lateralAcceleration = -0.79f;
word += "-79";
block.verticalAcceleration = -7.9f;
word += "-79";
block.angleOfAttack = 0.59f;
word += "59";
// Status
word += "000000";
// Internal use
word += "00";
word += DynonSerialFormat.makeChecksum(word);
assertEquivalent(block, word);
}
public void testSimpleCorrectValuesB() {
ADAHRSDataBlock block = new ADAHRSDataBlock();
String word = "";
block.time =
((39L * 3600L + 29L * 60L + 19L) * 1000L)
+ (long) (8.0 / 64.0 * 1000.0);
word += "39291908";
block.pitch = -78.9f;
word += "-789";
block.roll = -128.9f;
word += "-1289";
block.yaw = 259f;
word += "259";
block.airspeed = 179.5f;
word += "1795";
block.displayedAltitude = Float.NaN;
block.pressureAltitude = -8765f;;
word += "-8765";
block.turnRate = Float.NaN;
block.verticalSpeed = -87.9f;
word += "-879";
block.lateralAcceleration = -0.79f;
word += "-79";
block.verticalAcceleration = -7.9f;
word += "-79";
block.angleOfAttack = 0.59f;
word += "59";
// Status
word += "000001";
// Internal use
word += "00";
word += DynonSerialFormat.makeChecksum(word);
assertEquivalent(block, word);
}
}