summaryrefslogtreecommitdiff
path: root/src/main/java/sevenUnits/unit
diff options
context:
space:
mode:
authorAdrien Hopkins <ahopk127@my.yorku.ca>2021-12-02 16:55:05 -0500
committerAdrien Hopkins <ahopk127@my.yorku.ca>2021-12-02 16:55:05 -0500
commitcc79db65bc347c50267d0a719278ef1d90cf6b1a (patch)
tree65717e8d7e75247ced380a72842c50b94fc61a0e /src/main/java/sevenUnits/unit
parentc4ae6887c32ee8d2e9e8853ffd12721d4db2fd3b (diff)
parent9c30c3ad4d4658964e2bb2bb5be6c2eebbfbe8af (diff)
Merge branch 'release-0.3.2'
Diffstat (limited to 'src/main/java/sevenUnits/unit')
-rw-r--r--src/main/java/sevenUnits/unit/BritishImperial.java39
-rw-r--r--src/main/java/sevenUnits/unit/LinearUnitValue.java17
-rw-r--r--src/main/java/sevenUnits/unit/UnitDatabase.java55
-rw-r--r--src/main/java/sevenUnits/unit/UnitValue.java3
4 files changed, 70 insertions, 44 deletions
diff --git a/src/main/java/sevenUnits/unit/BritishImperial.java b/src/main/java/sevenUnits/unit/BritishImperial.java
index 81a3f2a..743beeb 100644
--- a/src/main/java/sevenUnits/unit/BritishImperial.java
+++ b/src/main/java/sevenUnits/unit/BritishImperial.java
@@ -37,7 +37,7 @@ public final class BritishImperial {
public static final LinearUnit ROOD = Length.ROD.times(Length.FURLONG);
public static final LinearUnit ACRE = Length.FURLONG.times(Length.CHAIN);
}
-
+
/**
* Imperial units that measure length
*
@@ -46,7 +46,8 @@ public final class BritishImperial {
*/
public static final class Length {
/**
- * According to the International Yard and Pound of 1959, a yard is defined as exactly 0.9144 metres.
+ * According to the International Yard and Pound of 1959, a yard is
+ * defined as exactly 0.9144 metres.
*/
public static final LinearUnit YARD = Metric.METRE.times(0.9144);
public static final LinearUnit FOOT = YARD.dividedBy(3);
@@ -56,15 +57,15 @@ public final class BritishImperial {
public static final LinearUnit FURLONG = CHAIN.times(10);
public static final LinearUnit MILE = FURLONG.times(8);
public static final LinearUnit LEAGUE = MILE.times(3);
-
+
public static final LinearUnit NAUTICAL_MILE = Metric.METRE.times(1852);
public static final LinearUnit CABLE = NAUTICAL_MILE.dividedBy(10);
public static final LinearUnit FATHOM = CABLE.dividedBy(100);
-
+
public static final LinearUnit ROD = YARD.times(5.5);
public static final LinearUnit LINK = ROD.dividedBy(25);
}
-
+
/**
* British Imperial units that measure mass.
*
@@ -82,7 +83,7 @@ public final class BritishImperial {
public static final LinearUnit LONG_TON = HUNDREDWEIGHT.times(20);
public static final LinearUnit SLUG = Metric.KILOGRAM.times(14.59390294);
}
-
+
/**
* British Imperial units that measure volume
*
@@ -90,27 +91,33 @@ public final class BritishImperial {
* @since 2019-11-08
*/
public static final class Volume {
- public static final LinearUnit FLUID_OUNCE = Metric.LITRE.withPrefix(Metric.MILLI).times(28.4130625);
+ public static final LinearUnit FLUID_OUNCE = Metric.LITRE
+ .withPrefix(Metric.MILLI).times(28.4130625);
public static final LinearUnit GILL = FLUID_OUNCE.times(5);
public static final LinearUnit PINT = FLUID_OUNCE.times(20);
public static final LinearUnit QUART = PINT.times(2);
public static final LinearUnit GALLON = QUART.times(4);
public static final LinearUnit PECK = GALLON.times(2);
public static final LinearUnit BUSHEL = PECK.times(4);
-
+
public static final LinearUnit CUBIC_INCH = Length.INCH.toExponent(3);
public static final LinearUnit CUBIC_FOOT = Length.FOOT.toExponent(3);
public static final LinearUnit CUBIC_YARD = Length.YARD.toExponent(3);
public static final LinearUnit ACRE_FOOT = Area.ACRE.times(Length.FOOT);
}
-
- public static final LinearUnit OUNCE_FORCE = Mass.OUNCE.times(Metric.Constants.EARTH_GRAVITY);
- public static final LinearUnit POUND_FORCE = Mass.POUND.times(Metric.Constants.EARTH_GRAVITY);
-
- public static final LinearUnit BRITISH_THERMAL_UNIT = Metric.JOULE.times(1055.06);
+
+ public static final LinearUnit OUNCE_FORCE = Mass.OUNCE
+ .times(Metric.Constants.EARTH_GRAVITY);
+ public static final LinearUnit POUND_FORCE = Mass.POUND
+ .times(Metric.Constants.EARTH_GRAVITY);
+
+ public static final LinearUnit BRITISH_THERMAL_UNIT = Metric.JOULE
+ .times(1055.06);
public static final LinearUnit CALORIE = Metric.JOULE.times(4.184);
public static final LinearUnit KILOCALORIE = Metric.JOULE.times(4184);
-
- public static final Unit FAHRENHEIT = Unit.fromConversionFunctions(Metric.KELVIN.getBase(),
- tempK -> tempK * 1.8 - 459.67, tempF -> (tempF + 459.67) / 1.8);
+
+ public static final Unit FAHRENHEIT = Unit
+ .fromConversionFunctions(Metric.KELVIN.getBase(),
+ tempK -> tempK * 1.8 - 459.67, tempF -> (tempF + 459.67) / 1.8)
+ .withName(NameSymbol.of("degrees Fahrenheit", "\u00B0F"));
}
diff --git a/src/main/java/sevenUnits/unit/LinearUnitValue.java b/src/main/java/sevenUnits/unit/LinearUnitValue.java
index a36d568..a50e1f5 100644
--- a/src/main/java/sevenUnits/unit/LinearUnitValue.java
+++ b/src/main/java/sevenUnits/unit/LinearUnitValue.java
@@ -324,17 +324,18 @@ public final class LinearUnitValue {
// get rounded strings
// if showUncertainty is true, add brackets around the string
- final String valueString = showUncertainty ? "("
- : "" + this.value.toString(showUncertainty)
- + (showUncertainty ? ")" : "");
- final String baseValueString = showUncertainty ? "("
- : "" + baseValue.toString(showUncertainty)
- + (showUncertainty ? ")" : "");
+ final String valueString = (showUncertainty ? "(" : "")
+ + this.value.toString(showUncertainty)
+ + (showUncertainty ? ")" : "");
+ final String baseValueString = (showUncertainty ? "(" : "")
+ + baseValue.toString(showUncertainty)
+ + (showUncertainty ? ")" : "");
// create string
- if (primaryName.isEmpty() && symbol.isEmpty())
+ if (chosenName == null)
return String.format("%s unnamed unit (= %s %s)", valueString,
- baseValueString, this.unit.getBase());
+ baseValueString, this.unit.getBase()
+ .toString(unit -> unit.getSymbol().orElseThrow()));
else
return String.format("%s %s", valueString, chosenName);
}
diff --git a/src/main/java/sevenUnits/unit/UnitDatabase.java b/src/main/java/sevenUnits/unit/UnitDatabase.java
index b45d9cf..18ac619 100644
--- a/src/main/java/sevenUnits/unit/UnitDatabase.java
+++ b/src/main/java/sevenUnits/unit/UnitDatabase.java
@@ -243,7 +243,8 @@ public final class UnitDatabase {
return false;
else {
if (this.prefixNames.isEmpty())
- return this.unitNamePosition >= this.unitNames.size() - 1;
+ return this.prefixCoordinates.isEmpty()
+ && this.unitNamePosition < this.unitNames.size();
else
return true;
}
@@ -557,7 +558,8 @@ public final class UnitDatabase {
return false;
else {
if (this.prefixNames.isEmpty())
- return this.unitNamePosition >= this.unitNames.size() - 1;
+ return this.prefixCoordinates.isEmpty()
+ && this.unitNamePosition < this.unitNames.size();
else
return true;
}
@@ -1038,7 +1040,7 @@ public final class UnitDatabase {
@Override
public String toString() {
if (this.units.isEmpty() || this.prefixes.isEmpty())
- return super.toString();
+ return new HashMap<>(this).toString();
else
return String.format(
"Infinite map of name-unit entries created from units %s and prefixes %s",
@@ -1161,7 +1163,7 @@ public final class UnitDatabase {
* @return true if entry represents a removable duplicate entry of unitMap.
* @since 2021-05-22
*/
- private static boolean isRemovableDuplicate(Map<String, Unit> unitMap,
+ static boolean isRemovableDuplicate(Map<String, Unit> unitMap,
Entry<String, Unit> entry) {
for (final Entry<String, Unit> e : unitMap.entrySet()) {
final String name = e.getKey();
@@ -1344,10 +1346,10 @@ public final class UnitDatabase {
final String name = lineMatcher.group(1);
final String expression = lineMatcher.group(2);
- if (name.endsWith(" ")) {
- System.err.printf("Warning - line %d's dimension name ends in a space",
- lineCounter);
- }
+ // if (name.endsWith(" ")) {
+ // System.err.printf("Warning - line %d's dimension name ends in a space",
+ // lineCounter);
+ // }
// if expression is "!", search for an existing dimension
// if no unit found, throw an error
@@ -1360,7 +1362,7 @@ public final class UnitDatabase {
final ObjectProduct<BaseDimension> dimension;
try {
dimension = this.getDimensionFromExpression(expression);
- } catch (final IllegalArgumentException e) {
+ } catch (final IllegalArgumentException | NoSuchElementException e) {
System.err.printf("Parsing error on line %d:%n", lineCounter);
throw e;
}
@@ -1427,10 +1429,11 @@ public final class UnitDatabase {
final String expression = lineMatcher.group(2);
- if (name.endsWith(" ")) {
- System.err.printf("Warning - line %d's unit name ends in a space",
- lineCounter);
- }
+ // this code should never occur
+ // if (name.endsWith(" ")) {
+ // System.err.printf("Warning - line %d's unit name ends in a space",
+ // lineCounter);
+ // }
// if expression is "!", search for an existing unit
// if no unit found, throw an error
@@ -1443,7 +1446,8 @@ public final class UnitDatabase {
final UnitPrefix prefix;
try {
prefix = this.getPrefixFromExpression(expression);
- } catch (final IllegalArgumentException e) {
+ } catch (final IllegalArgumentException
+ | NoSuchElementException e) {
System.err.printf("Parsing error on line %d:%n", lineCounter);
throw e;
}
@@ -1453,7 +1457,8 @@ public final class UnitDatabase {
final Unit unit;
try {
unit = this.getUnitFromExpression(expression);
- } catch (final IllegalArgumentException e) {
+ } catch (final IllegalArgumentException
+ | NoSuchElementException e) {
System.err.printf("Parsing error on line %d:%n", lineCounter);
throw e;
}
@@ -1581,8 +1586,15 @@ public final class UnitDatabase {
}
return base.toExponent(exponent);
+ } else {
+ final ObjectProduct<BaseDimension> dimension = this.dimensions
+ .get(name);
+ if (dimension == null)
+ throw new NoSuchElementException(
+ "No dimension with name \"" + name + "\".");
+ else
+ return dimension;
}
- return this.dimensions.get(name);
}
/**
@@ -1635,7 +1647,7 @@ public final class UnitDatabase {
* @since 2019-03-22
* @since v0.2.0
*/
- private LinearUnit getLinearUnit(final String name) {
+ LinearUnit getLinearUnit(final String name) {
// see if I am using a function-unit like tempC(100)
Objects.requireNonNull(name, "name may not be null");
if (name.contains("(") && name.contains(")")) {
@@ -1670,7 +1682,7 @@ public final class UnitDatabase {
* @return {@code LinearUnitValue} instance
* @since 2020-08-04
*/
- private LinearUnitValue getLinearUnitValue(final String name) {
+ LinearUnitValue getLinearUnitValue(final String name) {
try {
// try to parse it as a number - otherwise it is not a number!
final BigDecimal number = new BigDecimal(name);
@@ -1695,7 +1707,12 @@ public final class UnitDatabase {
try {
return UnitPrefix.valueOf(Double.parseDouble(name));
} catch (final NumberFormatException e) {
- return this.prefixes.get(name);
+ final UnitPrefix prefix = this.prefixes.get(name);
+ if (prefix == null)
+ throw new NoSuchElementException(
+ "No prefix with name \"" + name + "\".");
+ else
+ return prefix;
}
}
diff --git a/src/main/java/sevenUnits/unit/UnitValue.java b/src/main/java/sevenUnits/unit/UnitValue.java
index 2fedd81..f6d18f8 100644
--- a/src/main/java/sevenUnits/unit/UnitValue.java
+++ b/src/main/java/sevenUnits/unit/UnitValue.java
@@ -163,7 +163,8 @@ public final class UnitValue {
if (primaryName.isEmpty() && symbol.isEmpty()) {
final double baseValue = this.getUnit().convertToBase(this.getValue());
return String.format("%s unnamed unit (= %s %s)", this.getValue(),
- baseValue, this.getUnit().getBase());
+ baseValue, this.getUnit().getBase()
+ .toString(unit -> unit.getSymbol().orElseThrow()));
} else {
final String unitName = symbol.orElse(primaryName.get());
return this.getValue() + " " + unitName;