Skip to content

Commit

Permalink
433: Unit cd parsed incorrectly in v2.2.2 with SimpleUnitFormat
Browse files Browse the repository at this point in the history
Task-Url: #433
  • Loading branch information
keilw committed Jan 28, 2025
1 parent 8b29dd9 commit 2b723a2
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 14 deletions.
20 changes: 8 additions & 12 deletions src/main/java/tech/units/indriya/format/SimpleUnitFormat.java
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@
* @author <a href="mailto:[email protected]">Werner Keil</a>
* @author Eric Russell
* @author Andi Huber
* @version 2.15, Nov 24, 2024
* @version 2.16, Jan 28 24, 2025
* @since 1.0
*/
public abstract class SimpleUnitFormat extends AbstractUnitFormat {
Expand Down Expand Up @@ -442,18 +442,18 @@ private DefaultFormat init() {
label(Units.PERCENT, "%");
labelWithPrefixes(Units.MINUTE, "min");
labelWithPrefixes(Units.HOUR, "h");
labelWithPrefixes(Units.DAY, "d");
label(Units.DAY, "d"); // no prefixes here, see https://github.com/unitsofmeasurement/indriya/issues/433
aliasWithPrefixes(Units.DAY, "day");
labelWithPrefixes(Units.WEEK, "wk");
aliasWithPrefixes(Units.WEEK, "week");
label(Units.YEAR, "yr");
labelWithPrefixes(Units.YEAR, "yr");
alias(Units.YEAR, "y");
alias(Units.YEAR, "year");
aliasWithPrefixes(Units.YEAR, "year");
alias(Units.YEAR, "days365");
alias(Units.YEAR, "a");
label(Units.MONTH, "mo");
alias(Units.MONTH, "mon");
alias(Units.MONTH, "month");
aliasWithPrefixes(Units.YEAR, "a");
labelWithPrefixes(Units.MONTH, "mo");
aliasWithPrefixes(Units.MONTH, "mon");
aliasWithPrefixes(Units.MONTH, "month");
label(Units.KILOMETRE_PER_HOUR, "km/h");
labelWithPrefixes(Units.SQUARE_METRE, "\u33A1");
aliasWithPrefixes(Units.SQUARE_METRE, "m2");
Expand All @@ -462,10 +462,6 @@ private DefaultFormat init() {
labelWithPrefixes(Units.LITRE, "l");

label(AbstractUnit.ONE, "one");
//label(Units.NEWTON, "N");
//label(Units.RADIAN, "rad");
//label(Units.METRE, "m");
//label(Units.SECOND, "s");

return this;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ public void testParseInverses() {
assertNotNull(v);
logger.log(Level.FINER, v.toString());
} catch (MeasurementParseException pex) {
logger.log(Level.WARNING, String.format(" %s parsing %s", pex, u));
logger.log(Level.WARNING, String.format("%s parsing %s", pex, u));
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,15 @@

import static javax.measure.BinaryPrefix.KIBI;
import static javax.measure.BinaryPrefix.TEBI;
import static javax.measure.MetricPrefix.CENTI;
import static javax.measure.MetricPrefix.GIGA;
import static javax.measure.MetricPrefix.KILO;
import static javax.measure.MetricPrefix.MEGA;
import static javax.measure.MetricPrefix.MICRO;
import static javax.measure.MetricPrefix.MILLI;
import static javax.measure.MetricPrefix.NANO;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
Expand Down Expand Up @@ -218,6 +220,8 @@ public void testParsePowerAndRoot() {
assertEquals("1/m^19:31", format.format(format.parse("m^12:31").divide(METRE)));
}



@Test
public void testFormatNewLabeledUnits() {
logger.log(LOG_LEVEL, "== Use case 1: playing with base units ==");
Expand Down Expand Up @@ -325,6 +329,8 @@ public void testPrefix() {
public void testFormatDay() {
logger.log(LOG_LEVEL, format.format(DAY));
assertEquals("d", format.format(DAY));

assertEquals("cd", format.format(CENTI(DAY)));
}

@Test
Expand All @@ -350,6 +356,11 @@ public void testParseDay() {
logger.log(LOG_LEVEL, format.format(DAY));
assertEquals(DAY, format.parse("d"));
assertEquals(DAY, format.parse("day"));
// CENTI(DAY) is NOT symmetric, because "cd" overlaps with CANDELA, hence it prints "cd" but won't parse,
// because we cannot parse with more than one outcome, see https://github.com/unitsofmeasurement/indriya/issues/433
assertNotEquals(CENTI(DAY), format.parse("cd"));
// Instead we have to use the alias "cday" for parsing.
assertEquals(CENTI(DAY), format.parse("cday"));
}

@Test
Expand All @@ -374,6 +385,12 @@ public void testParseMonth() {
assertEquals(MONTH, format.parse("mo"));
}

@Test
public void testParseCandela() {
//assertEquals(CANDELA, format.parse("cd"));
final UnitFormat newFormat = SimpleUnitFormat.getNewInstance();
assertEquals(CANDELA, newFormat.parse("cd"));
}

@Test
public void testFormatNewInstance() {
Expand Down Expand Up @@ -426,7 +443,7 @@ public void testRepeatingLabels() {

logger.log(LOG_LEVEL, "Now we set another label");
format.label(CANDELA, "can");
assertEquals("can", format.format(CANDELA));
assertEquals("can", format.format(CANDELA));
assertEquals("can", CANDELA.toString());
assertNotNull(format.parse("can"));
// The old one still remains like an alias
Expand Down

0 comments on commit 2b723a2

Please sign in to comment.