package net.sf.openrocket.unit; import static org.junit.Assert.assertEquals; import java.text.DecimalFormat; import org.junit.Test; public class UnitToStringTest { private boolean isPointDecimalSeparator() { return ((DecimalFormat) DecimalFormat.getInstance()).getDecimalFormatSymbols().getDecimalSeparator() == '.'; } @Test public void testPositiveToString() { if (isPointDecimalSeparator()) { testPositiveWithPoint(); } else { testPositiveWithComma(); } // very small positive numbers ( < 0.0005) are returned as "0" assertEquals("0", Unit.NOUNIT.toString(0.00040)); assertEquals("0", Unit.NOUNIT.toString(0.00050)); // check boundary of change in format // positive numbers <= 1E6 assertEquals("123", Unit.NOUNIT.toString(123.20)); assertEquals("124", Unit.NOUNIT.toString(123.50)); // round to even assertEquals("124", Unit.NOUNIT.toString(123.55)); assertEquals("124", Unit.NOUNIT.toString(124.20)); assertEquals("124", Unit.NOUNIT.toString(124.50)); // round to even assertEquals("125", Unit.NOUNIT.toString(124.55)); assertEquals("1234", Unit.NOUNIT.toString(1234.2)); assertEquals("1234", Unit.NOUNIT.toString(1234.5)); // round to even assertEquals("1235", Unit.NOUNIT.toString(1234.6)); assertEquals("1235", Unit.NOUNIT.toString(1235.2)); assertEquals("1236", Unit.NOUNIT.toString(1235.5)); // round to even assertEquals("1236", Unit.NOUNIT.toString(1235.6)); assertEquals("123457", Unit.NOUNIT.toString(123456.789)); assertEquals("1000000", Unit.NOUNIT.toString(1000000)); // boundary check } private void testPositiveWithPoint() { // positive number < 0.095 use 3 digit decimal format assertEquals("0.001", Unit.NOUNIT.toString(0.00051)); // check boundary of change in format assertEquals("0.001", Unit.NOUNIT.toString(0.00060)); // rounding at third digit. assertEquals("0.001", Unit.NOUNIT.toString(0.0014)); assertEquals("0.002", Unit.NOUNIT.toString(0.0015)); // round to even assertEquals("0.002", Unit.NOUNIT.toString(0.0016)); assertEquals("0.002", Unit.NOUNIT.toString(0.0024)); assertEquals("0.002", Unit.NOUNIT.toString(0.0025)); // round to even assertEquals("0.003", Unit.NOUNIT.toString(0.0026)); assertEquals("0.009", Unit.NOUNIT.toString(0.0094)); assertEquals("0.01", Unit.NOUNIT.toString(0.0095)); // no trailing zeros after rounding assertEquals("0.011", Unit.NOUNIT.toString(0.0114)); assertEquals("0.012", Unit.NOUNIT.toString(0.0115)); // round to even assertEquals("0.012", Unit.NOUNIT.toString(0.0119)); assertEquals("0.012", Unit.NOUNIT.toString(0.0124)); assertEquals("0.012", Unit.NOUNIT.toString(0.0125)); // round to even assertEquals("0.013", Unit.NOUNIT.toString(0.0129)); assertEquals("0.095", Unit.NOUNIT.toString(0.0949)); // boundary check // positive numbers < 100 assertEquals("0.01", Unit.NOUNIT.toString(0.0095)); // boundary check assertEquals("0.111", Unit.NOUNIT.toString(0.1111)); assertEquals("0.112", Unit.NOUNIT.toString(0.1115)); // round to even assertEquals("0.112", Unit.NOUNIT.toString(0.1117)); assertEquals("0.112", Unit.NOUNIT.toString(0.1121)); assertEquals("0.112", Unit.NOUNIT.toString(0.1125)); // round to even assertEquals("0.113", Unit.NOUNIT.toString(0.1127)); assertEquals("1.11", Unit.NOUNIT.toString(1.113)); assertEquals("1.12", Unit.NOUNIT.toString(1.115)); // round to even assertEquals("1.12", Unit.NOUNIT.toString(1.117)); assertEquals("1.12", Unit.NOUNIT.toString(1.123)); assertEquals("1.12", Unit.NOUNIT.toString(1.125)); // round to even assertEquals("1.13", Unit.NOUNIT.toString(1.127)); assertEquals("12.3", Unit.NOUNIT.toString(12.320)); assertEquals("12.4", Unit.NOUNIT.toString(12.350)); // round to even assertEquals("12.4", Unit.NOUNIT.toString(12.355)); assertEquals("12.4", Unit.NOUNIT.toString(12.420)); assertEquals("12.4", Unit.NOUNIT.toString(12.450)); // round to even assertEquals("12.5", Unit.NOUNIT.toString(12.455)); // positive numbers > 1E6 assertEquals("1.23E6", Unit.NOUNIT.toString(1234567.89)); assertEquals("1.23E7", Unit.NOUNIT.toString(12345678.9)); // Inch precision assertEquals("25.125", UnitGroup.UNITS_LENGTH.findApproximate("in").toString(25.125 * 25.4 / 1000)); } private void testPositiveWithComma() { // positive number < 0.095 use 3 digit decimal format assertEquals("0,001", Unit.NOUNIT.toString(0.00051)); // check boundary of change in format assertEquals("0,001", Unit.NOUNIT.toString(0.00060)); // rounding at third digit. assertEquals("0,001", Unit.NOUNIT.toString(0.0014)); assertEquals("0,002", Unit.NOUNIT.toString(0.0015)); // round to even assertEquals("0,002", Unit.NOUNIT.toString(0.0016)); assertEquals("0,002", Unit.NOUNIT.toString(0.0024)); assertEquals("0,002", Unit.NOUNIT.toString(0.0025)); // round to even assertEquals("0,003", Unit.NOUNIT.toString(0.0026)); assertEquals("0,009", Unit.NOUNIT.toString(0.0094)); assertEquals("0,01", Unit.NOUNIT.toString(0.0095)); // no trailing zeros after rounding assertEquals("0,011", Unit.NOUNIT.toString(0.0114)); assertEquals("0,012", Unit.NOUNIT.toString(0.0115)); // round to even assertEquals("0,012", Unit.NOUNIT.toString(0.0119)); assertEquals("0,012", Unit.NOUNIT.toString(0.0124)); assertEquals("0,012", Unit.NOUNIT.toString(0.0125)); // round to even assertEquals("0,013", Unit.NOUNIT.toString(0.0129)); assertEquals("0,095", Unit.NOUNIT.toString(0.0949)); // boundary check // positive numbers < 100 assertEquals("0,01", Unit.NOUNIT.toString(0.0095)); // boundary check assertEquals("0,111", Unit.NOUNIT.toString(0.1111)); assertEquals("0,112", Unit.NOUNIT.toString(0.1115)); // round to even assertEquals("0,112", Unit.NOUNIT.toString(0.1117)); assertEquals("0,112", Unit.NOUNIT.toString(0.1121)); assertEquals("0,112", Unit.NOUNIT.toString(0.1125)); // round to even assertEquals("0,113", Unit.NOUNIT.toString(0.1127)); assertEquals("1,11", Unit.NOUNIT.toString(1.113)); assertEquals("1,12", Unit.NOUNIT.toString(1.115)); // round to even assertEquals("1,12", Unit.NOUNIT.toString(1.117)); assertEquals("1,12", Unit.NOUNIT.toString(1.123)); assertEquals("1,12", Unit.NOUNIT.toString(1.125)); // round to even assertEquals("1,13", Unit.NOUNIT.toString(1.127)); assertEquals("12,3", Unit.NOUNIT.toString(12.320)); assertEquals("12,4", Unit.NOUNIT.toString(12.350)); // round to even assertEquals("12,4", Unit.NOUNIT.toString(12.355)); assertEquals("12,4", Unit.NOUNIT.toString(12.420)); assertEquals("12,4", Unit.NOUNIT.toString(12.450)); // round to even assertEquals("12,5", Unit.NOUNIT.toString(12.455)); // positive numbers > 1E6 assertEquals("1,23E6", Unit.NOUNIT.toString(1234567.89)); assertEquals("1,23E7", Unit.NOUNIT.toString(12345678.9)); // Inch precision assertEquals("25,125", UnitGroup.UNITS_LENGTH.findApproximate("in").toString(25.125 * 25.4 / 1000)); } @Test public void testNegativeToString() { if (isPointDecimalSeparator()) { testNegativeWithPoint(); } else { testNegativeWithComma(); } // very small negative numbers ( < 0.0005) are returned as "0" assertEquals("0", Unit.NOUNIT.toString(-0.00040)); assertEquals("0", Unit.NOUNIT.toString(-0.00050)); // check boundary of change in format // negative numbers <= 1E6 assertEquals("-123", Unit.NOUNIT.toString(-123.20)); assertEquals("-124", Unit.NOUNIT.toString(-123.50)); // round to even assertEquals("-124", Unit.NOUNIT.toString(-123.55)); assertEquals("-124", Unit.NOUNIT.toString(-124.20)); assertEquals("-124", Unit.NOUNIT.toString(-124.50)); // round to even assertEquals("-125", Unit.NOUNIT.toString(-124.55)); assertEquals("-1234", Unit.NOUNIT.toString(-1234.2)); assertEquals("-1234", Unit.NOUNIT.toString(-1234.5)); // round to even assertEquals("-1235", Unit.NOUNIT.toString(-1234.6)); assertEquals("-1235", Unit.NOUNIT.toString(-1235.2)); assertEquals("-1236", Unit.NOUNIT.toString(-1235.5)); // round to even assertEquals("-1236", Unit.NOUNIT.toString(-1235.6)); assertEquals("-123457", Unit.NOUNIT.toString(-123456.789)); assertEquals("-1000000", Unit.NOUNIT.toString(-1000000)); // boundary check } private void testNegativeWithComma() { // negative number < 0.095 use 3 digit decimal format assertEquals("-0,001", Unit.NOUNIT.toString(-0.00051)); // check boundary of change in format assertEquals("-0,001", Unit.NOUNIT.toString(-0.00060)); // rounding at third digit. assertEquals("-0,001", Unit.NOUNIT.toString(-0.0014)); assertEquals("-0,002", Unit.NOUNIT.toString(-0.0015)); // round to even assertEquals("-0,002", Unit.NOUNIT.toString(-0.0016)); assertEquals("-0,002", Unit.NOUNIT.toString(-0.0024)); assertEquals("-0,002", Unit.NOUNIT.toString(-0.0025)); // round to even assertEquals("-0,003", Unit.NOUNIT.toString(-0.0026)); assertEquals("-0,009", Unit.NOUNIT.toString(-0.0094)); assertEquals("-0,01", Unit.NOUNIT.toString(-0.0095)); // no trailing zeros after rounding assertEquals("-0,011", Unit.NOUNIT.toString(-0.0114)); assertEquals("-0,012", Unit.NOUNIT.toString(-0.0115)); // round to even assertEquals("-0,012", Unit.NOUNIT.toString(-0.0119)); assertEquals("-0,012", Unit.NOUNIT.toString(-0.0124)); assertEquals("-0,012", Unit.NOUNIT.toString(-0.0125)); // round to even assertEquals("-0,013", Unit.NOUNIT.toString(-0.0129)); assertEquals("-0,095", Unit.NOUNIT.toString(-0.0949)); // boundary check // negative numbers < 100 assertEquals("-0,01", Unit.NOUNIT.toString(-0.0095)); // boundary check assertEquals("-0,111", Unit.NOUNIT.toString(-0.1111)); assertEquals("-0,112", Unit.NOUNIT.toString(-0.1115)); // round to even assertEquals("-0,112", Unit.NOUNIT.toString(-0.1117)); assertEquals("-0,112", Unit.NOUNIT.toString(-0.1121)); assertEquals("-0,112", Unit.NOUNIT.toString(-0.1125)); // round to even assertEquals("-0,113", Unit.NOUNIT.toString(-0.1127)); assertEquals("-1,11", Unit.NOUNIT.toString(-1.113)); assertEquals("-1,12", Unit.NOUNIT.toString(-1.115)); // round to even assertEquals("-1,12", Unit.NOUNIT.toString(-1.117)); assertEquals("-1,12", Unit.NOUNIT.toString(-1.123)); assertEquals("-1,12", Unit.NOUNIT.toString(-1.125)); // round to even assertEquals("-1,13", Unit.NOUNIT.toString(-1.127)); assertEquals("-12,3", Unit.NOUNIT.toString(-12.320)); assertEquals("-12,4", Unit.NOUNIT.toString(-12.350)); // round to even assertEquals("-12,4", Unit.NOUNIT.toString(-12.355)); assertEquals("-12,4", Unit.NOUNIT.toString(-12.420)); assertEquals("-12,4", Unit.NOUNIT.toString(-12.450)); // round to even assertEquals("-12,5", Unit.NOUNIT.toString(-12.455)); // negative numbers > 1E6 assertEquals("-1,23E6", Unit.NOUNIT.toString(-1234567.89)); assertEquals("-1,23E7", Unit.NOUNIT.toString(-12345678.9)); } private void testNegativeWithPoint() { // negative number < 0.095 use 3 digit decimal format assertEquals("-0.001", Unit.NOUNIT.toString(-0.00051)); // check boundary of change in format assertEquals("-0.001", Unit.NOUNIT.toString(-0.00060)); // rounding at third digit. assertEquals("-0.001", Unit.NOUNIT.toString(-0.0014)); assertEquals("-0.002", Unit.NOUNIT.toString(-0.0015)); // round to even assertEquals("-0.002", Unit.NOUNIT.toString(-0.0016)); assertEquals("-0.002", Unit.NOUNIT.toString(-0.0024)); assertEquals("-0.002", Unit.NOUNIT.toString(-0.0025)); // round to even assertEquals("-0.003", Unit.NOUNIT.toString(-0.0026)); assertEquals("-0.009", Unit.NOUNIT.toString(-0.0094)); assertEquals("-0.01", Unit.NOUNIT.toString(-0.0095)); // no trailing zeros after rounding assertEquals("-0.011", Unit.NOUNIT.toString(-0.0114)); assertEquals("-0.012", Unit.NOUNIT.toString(-0.0115)); // round to even assertEquals("-0.012", Unit.NOUNIT.toString(-0.0119)); assertEquals("-0.012", Unit.NOUNIT.toString(-0.0124)); assertEquals("-0.012", Unit.NOUNIT.toString(-0.0125)); // round to even assertEquals("-0.013", Unit.NOUNIT.toString(-0.0129)); assertEquals("-0.095", Unit.NOUNIT.toString(-0.0949)); // boundary check // negative numbers < 100 assertEquals("-0.01", Unit.NOUNIT.toString(-0.0095)); // boundary check assertEquals("-0.111", Unit.NOUNIT.toString(-0.1111)); assertEquals("-0.112", Unit.NOUNIT.toString(-0.1115)); // round to even assertEquals("-0.112", Unit.NOUNIT.toString(-0.1117)); assertEquals("-0.112", Unit.NOUNIT.toString(-0.1121)); assertEquals("-0.112", Unit.NOUNIT.toString(-0.1125)); // round to even assertEquals("-0.113", Unit.NOUNIT.toString(-0.1127)); assertEquals("-1.11", Unit.NOUNIT.toString(-1.113)); assertEquals("-1.12", Unit.NOUNIT.toString(-1.115)); // round to even assertEquals("-1.12", Unit.NOUNIT.toString(-1.117)); assertEquals("-1.12", Unit.NOUNIT.toString(-1.123)); assertEquals("-1.12", Unit.NOUNIT.toString(-1.125)); // round to even assertEquals("-1.13", Unit.NOUNIT.toString(-1.127)); assertEquals("-12.3", Unit.NOUNIT.toString(-12.320)); assertEquals("-12.4", Unit.NOUNIT.toString(-12.350)); // round to even assertEquals("-12.4", Unit.NOUNIT.toString(-12.355)); assertEquals("-12.4", Unit.NOUNIT.toString(-12.420)); assertEquals("-12.4", Unit.NOUNIT.toString(-12.450)); // round to even assertEquals("-12.5", Unit.NOUNIT.toString(-12.455)); // negative numbers > 1E6 assertEquals("-1.23E6", Unit.NOUNIT.toString(-1234567.89)); assertEquals("-1.23E7", Unit.NOUNIT.toString(-12345678.9)); } }