summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/org/unitConverter/math/UncertainDouble.java13
-rw-r--r--src/org/unitConverter/unit/BaseUnit.java86
-rw-r--r--src/org/unitConverter/unit/NameSymbol.java193
3 files changed, 124 insertions, 168 deletions
diff --git a/src/org/unitConverter/math/UncertainDouble.java b/src/org/unitConverter/math/UncertainDouble.java
index 9601c75..3651bd5 100644
--- a/src/org/unitConverter/math/UncertainDouble.java
+++ b/src/org/unitConverter/math/UncertainDouble.java
@@ -164,11 +164,9 @@ public final class UncertainDouble implements Comparable<UncertainDouble> {
if (!(obj instanceof UncertainDouble))
return false;
final UncertainDouble other = (UncertainDouble) obj;
- if (Double.doubleToLongBits(this.uncertainty) != Double
- .doubleToLongBits(other.uncertainty))
+ if (Double.compare(this.value, other.value) != 0)
return false;
- if (Double.doubleToLongBits(this.value) != Double
- .doubleToLongBits(other.value))
+ if (Double.compare(this.uncertainty, other.uncertainty) != 0)
return false;
return true;
}
@@ -216,11 +214,8 @@ public final class UncertainDouble implements Comparable<UncertainDouble> {
public final int hashCode() {
final int prime = 31;
int result = 1;
- long temp;
- temp = Double.doubleToLongBits(this.uncertainty);
- result = prime * result + (int) (temp ^ temp >>> 32);
- temp = Double.doubleToLongBits(this.value);
- result = prime * result + (int) (temp ^ temp >>> 32);
+ result = prime * result + Double.hashCode(this.value);
+ result = prime * result + Double.hashCode(this.uncertainty);
return result;
}
diff --git a/src/org/unitConverter/unit/BaseUnit.java b/src/org/unitConverter/unit/BaseUnit.java
index d9f7965..6757bd0 100644
--- a/src/org/unitConverter/unit/BaseUnit.java
+++ b/src/org/unitConverter/unit/BaseUnit.java
@@ -23,8 +23,9 @@ import java.util.Set;
/**
* A unit that other units are defined by.
* <p>
- * Note that BaseUnits <b>must</b> have names and symbols. This is because they are used for toString code. Therefore,
- * the Optionals provided by {@link #getPrimaryName} and {@link #getSymbol} will always contain a value.
+ * Note that BaseUnits <b>must</b> have names and symbols. This is because they
+ * are used for toString code. Therefore, the Optionals provided by
+ * {@link #getPrimaryName} and {@link #getSymbol} will always contain a value.
*
* @author Adrien Hopkins
* @since 2019-10-16
@@ -33,63 +34,56 @@ public final class BaseUnit extends Unit {
/**
* Gets a base unit from the dimension it measures, its name and its symbol.
*
- * @param dimension
- * dimension measured by this unit
- * @param name
- * name of unit
- * @param symbol
- * symbol of unit
+ * @param dimension dimension measured by this unit
+ * @param name name of unit
+ * @param symbol symbol of unit
* @return base unit
* @since 2019-10-16
*/
- public static BaseUnit valueOf(final BaseDimension dimension, final String name, final String symbol) {
+ public static BaseUnit valueOf(final BaseDimension dimension,
+ final String name, final String symbol) {
return new BaseUnit(dimension, name, symbol, new HashSet<>());
}
-
+
/**
* Gets a base unit from the dimension it measures, its name and its symbol.
*
- * @param dimension
- * dimension measured by this unit
- * @param name
- * name of unit
- * @param symbol
- * symbol of unit
+ * @param dimension dimension measured by this unit
+ * @param name name of unit
+ * @param symbol symbol of unit
* @return base unit
* @since 2019-10-21
*/
- public static BaseUnit valueOf(final BaseDimension dimension, final String name, final String symbol,
- final Set<String> otherNames) {
+ public static BaseUnit valueOf(final BaseDimension dimension,
+ final String name, final String symbol, final Set<String> otherNames) {
return new BaseUnit(dimension, name, symbol, otherNames);
}
-
+
/**
* The dimension measured by this base unit.
*/
private final BaseDimension dimension;
-
+
/**
* Creates the {@code BaseUnit}.
*
- * @param dimension
- * dimension of unit
- * @param primaryName
- * name of unit
- * @param symbol
- * symbol of unit
- * @throws NullPointerException
- * if any argument is null
+ * @param dimension dimension of unit
+ * @param primaryName name of unit
+ * @param symbol symbol of unit
+ * @throws NullPointerException if any argument is null
* @since 2019-10-16
*/
- private BaseUnit(final BaseDimension dimension, final String primaryName, final String symbol,
- final Set<String> otherNames) {
+ private BaseUnit(final BaseDimension dimension, final String primaryName,
+ final String symbol, final Set<String> otherNames) {
super(primaryName, symbol, otherNames);
- this.dimension = Objects.requireNonNull(dimension, "dimension must not be null.");
+ this.dimension = Objects.requireNonNull(dimension,
+ "dimension must not be null.");
}
-
+
/**
- * Returns a {@code LinearUnit} with this unit as a base and a conversion factor of 1. This operation must be done
- * in order to allow units to be created with operations.
+ * Returns a {@code LinearUnit} with this unit as a base and a conversion
+ * factor of 1. This operation must be done in order to allow units to be
+ * created with operations.
*
* @return this unit as a {@code LinearUnit}
* @since 2019-10-16
@@ -97,17 +91,17 @@ public final class BaseUnit extends Unit {
public LinearUnit asLinearUnit() {
return LinearUnit.valueOf(this.getBase(), 1);
}
-
+
@Override
- public double convertFromBase(final double value) {
+ protected double convertFromBase(final double value) {
return value;
}
-
+
@Override
- public double convertToBase(final double value) {
+ protected double convertToBase(final double value) {
return value;
}
-
+
/**
* @return dimension
* @since 2019-10-16
@@ -115,21 +109,25 @@ public final class BaseUnit extends Unit {
public final BaseDimension getBaseDimension() {
return this.dimension;
}
-
+
@Override
public String toString() {
return this.getPrimaryName().orElse("Unnamed unit")
- + (this.getSymbol().isPresent() ? String.format(" (%s)", this.getSymbol().get()) : "");
+ + (this.getSymbol().isPresent()
+ ? String.format(" (%s)", this.getSymbol().get())
+ : "");
}
-
+
@Override
public BaseUnit withName(final NameSymbol ns) {
Objects.requireNonNull(ns, "ns must not be null.");
if (!ns.getPrimaryName().isPresent())
- throw new IllegalArgumentException("BaseUnits must have primary names.");
+ throw new IllegalArgumentException(
+ "BaseUnits must have primary names.");
if (!ns.getSymbol().isPresent())
throw new IllegalArgumentException("BaseUnits must have symbols.");
- return BaseUnit.valueOf(this.getBaseDimension(), ns.getPrimaryName().get(), ns.getSymbol().get(),
+ return BaseUnit.valueOf(this.getBaseDimension(),
+ ns.getPrimaryName().get(), ns.getSymbol().get(),
ns.getOtherNames());
}
}
diff --git a/src/org/unitConverter/unit/NameSymbol.java b/src/org/unitConverter/unit/NameSymbol.java
index 7fa5304..8d8302a 100644
--- a/src/org/unitConverter/unit/NameSymbol.java
+++ b/src/org/unitConverter/unit/NameSymbol.java
@@ -31,32 +31,36 @@ import java.util.Set;
* @since 2019-10-21
*/
public final class NameSymbol {
- public static final NameSymbol EMPTY = new NameSymbol(Optional.empty(), Optional.empty(), new HashSet<>());
-
+ public static final NameSymbol EMPTY = new NameSymbol(Optional.empty(),
+ Optional.empty(), new HashSet<>());
+
/**
* Creates a {@code NameSymbol}, ensuring that if primaryName is null and
* otherNames is not empty, one name is moved from otherNames to primaryName
*
* Ensure that otherNames is a copy of the inputted argument.
*/
- private static final NameSymbol create(final String name, final String symbol, final Set<String> otherNames) {
+ private static final NameSymbol create(final String name,
+ final String symbol, final Set<String> otherNames) {
final Optional<String> primaryName;
-
+
if (name == null && !otherNames.isEmpty()) {
// get primary name and remove it from savedNames
- Iterator<String> it = otherNames.iterator();
+ final Iterator<String> it = otherNames.iterator();
assert it.hasNext();
primaryName = Optional.of(it.next());
otherNames.remove(primaryName.get());
} else {
primaryName = Optional.ofNullable(name);
}
-
- return new NameSymbol(primaryName, Optional.ofNullable(symbol), otherNames);
+
+ return new NameSymbol(primaryName, Optional.ofNullable(symbol),
+ otherNames);
}
-
+
/**
- * Gets a {@code NameSymbol} with a primary name, a symbol and no other names.
+ * Gets a {@code NameSymbol} with a primary name, a symbol and no other
+ * names.
*
* @param name name to use
* @param symbol symbol to use
@@ -65,11 +69,13 @@ public final class NameSymbol {
* @throws NullPointerException if name or symbol is null
*/
public static final NameSymbol of(final String name, final String symbol) {
- return new NameSymbol(Optional.of(name), Optional.of(symbol), new HashSet<>());
+ return new NameSymbol(Optional.of(name), Optional.of(symbol),
+ new HashSet<>());
}
-
+
/**
- * Gets a {@code NameSymbol} with a primary name, a symbol and additional names.
+ * Gets a {@code NameSymbol} with a primary name, a symbol and additional
+ * names.
*
* @param name name to use
* @param symbol symbol to use
@@ -78,11 +84,13 @@ public final class NameSymbol {
* @since 2019-10-21
* @throws NullPointerException if any argument is null
*/
- public static final NameSymbol of(final String name, final String symbol, final Set<String> otherNames) {
+ public static final NameSymbol of(final String name, final String symbol,
+ final Set<String> otherNames) {
return new NameSymbol(Optional.of(name), Optional.of(symbol),
- new HashSet<>(Objects.requireNonNull(otherNames, "otherNames must not be null.")));
+ new HashSet<>(Objects.requireNonNull(otherNames,
+ "otherNames must not be null.")));
}
-
+
/**
* h * Gets a {@code NameSymbol} with a primary name, a symbol and additional
* names.
@@ -94,72 +102,16 @@ public final class NameSymbol {
* @since 2019-10-21
* @throws NullPointerException if any argument is null
*/
- public static final NameSymbol of(final String name, final String symbol, final String... otherNames) {
+ public static final NameSymbol of(final String name, final String symbol,
+ final String... otherNames) {
return new NameSymbol(Optional.of(name), Optional.of(symbol),
- new HashSet<>(Arrays.asList(Objects.requireNonNull(otherNames, "otherNames must not be null."))));
+ new HashSet<>(Arrays.asList(Objects.requireNonNull(otherNames,
+ "otherNames must not be null."))));
}
-
- /**
- * Gets a {@code NameSymbol} with a primary name, a symbol and an additional
- * name.
- *
- * @param name name to use
- * @param symbol symbol to use
- * @param otherNames other names to use
- * @param name2 alternate name
- * @return NameSymbol instance
- * @since 2019-10-21
- * @throws NullPointerException if any argument is null
- */
- public static final NameSymbol of(final String name, final String symbol, final String name2) {
- final Set<String> otherNames = new HashSet<>();
- otherNames.add(Objects.requireNonNull(name2, "name2 must not be null."));
- return new NameSymbol(Optional.of(name), Optional.of(symbol), otherNames);
- }
-
- /**
- * Gets a {@code NameSymbol} with a primary name, a symbol and additional names.
- *
- * @param name name to use
- * @param symbol symbol to use
- * @param otherNames other names to use
- * @param name2 alternate name
- * @param name3 alternate name
- * @return NameSymbol instance
- * @since 2019-10-21
- * @throws NullPointerException if any argument is null
- */
- public static final NameSymbol of(final String name, final String symbol, final String name2, final String name3) {
- final Set<String> otherNames = new HashSet<>();
- otherNames.add(Objects.requireNonNull(name2, "name2 must not be null."));
- otherNames.add(Objects.requireNonNull(name3, "name3 must not be null."));
- return new NameSymbol(Optional.of(name), Optional.of(symbol), otherNames);
- }
-
- /**
- * Gets a {@code NameSymbol} with a primary name, a symbol and additional names.
- *
- * @param name name to use
- * @param symbol symbol to use
- * @param otherNames other names to use
- * @param name2 alternate name
- * @param name3 alternate name
- * @param name4 alternate name
- * @return NameSymbol instance
- * @since 2019-10-21
- * @throws NullPointerException if any argument is null
- */
- public static final NameSymbol of(final String name, final String symbol, final String name2, final String name3,
- final String name4) {
- final Set<String> otherNames = new HashSet<>();
- otherNames.add(Objects.requireNonNull(name2, "name2 must not be null."));
- otherNames.add(Objects.requireNonNull(name3, "name3 must not be null."));
- otherNames.add(Objects.requireNonNull(name4, "name4 must not be null."));
- return new NameSymbol(Optional.of(name), Optional.of(symbol), otherNames);
- }
-
+
/**
- * Gets a {@code NameSymbol} with a primary name, no symbol, and no other names.
+ * Gets a {@code NameSymbol} with a primary name, no symbol, and no other
+ * names.
*
* @param name name to use
* @return NameSymbol instance
@@ -167,17 +119,19 @@ public final class NameSymbol {
* @throws NullPointerException if name is null
*/
public static final NameSymbol ofName(final String name) {
- return new NameSymbol(Optional.of(name), Optional.empty(), new HashSet<>());
+ return new NameSymbol(Optional.of(name), Optional.empty(),
+ new HashSet<>());
}
-
+
/**
- * Gets a {@code NameSymbol} with a primary name, a symbol and additional names.
+ * Gets a {@code NameSymbol} with a primary name, a symbol and additional
+ * names.
* <p>
* If any argument is null, this static factory replaces it with an empty
* Optional or empty Set.
* <p>
- * If {@code name} is null and {@code otherNames} is not empty, a primary name
- * will be picked from {@code otherNames}. This name will not appear in
+ * If {@code name} is null and {@code otherNames} is not empty, a primary
+ * name will be picked from {@code otherNames}. This name will not appear in
* getOtherNames().
*
* @param name name to use
@@ -186,10 +140,12 @@ public final class NameSymbol {
* @return NameSymbol instance
* @since 2019-11-26
*/
- public static final NameSymbol ofNullable(final String name, final String symbol, final Set<String> otherNames) {
- return NameSymbol.create(name, symbol, otherNames == null ? new HashSet<>() : new HashSet<>(otherNames));
+ public static final NameSymbol ofNullable(final String name,
+ final String symbol, final Set<String> otherNames) {
+ return NameSymbol.create(name, symbol,
+ otherNames == null ? new HashSet<>() : new HashSet<>(otherNames));
}
-
+
/**
* h * Gets a {@code NameSymbol} with a primary name, a symbol and additional
* names.
@@ -197,8 +153,8 @@ public final class NameSymbol {
* If any argument is null, this static factory replaces it with an empty
* Optional or empty Set.
* <p>
- * If {@code name} is null and {@code otherNames} is not empty, a primary name
- * will be picked from {@code otherNames}. This name will not appear in
+ * If {@code name} is null and {@code otherNames} is not empty, a primary
+ * name will be picked from {@code otherNames}. This name will not appear in
* getOtherNames().
*
* @param name name to use
@@ -207,10 +163,12 @@ public final class NameSymbol {
* @return NameSymbol instance
* @since 2019-11-26
*/
- public static final NameSymbol ofNullable(final String name, final String symbol, final String... otherNames) {
- return create(name, symbol, otherNames == null ? new HashSet<>() : new HashSet<>(Arrays.asList(otherNames)));
+ public static final NameSymbol ofNullable(final String name,
+ final String symbol, final String... otherNames) {
+ return create(name, symbol, otherNames == null ? new HashSet<>()
+ : new HashSet<>(Arrays.asList(otherNames)));
}
-
+
/**
* Gets a {@code NameSymbol} with a symbol and no names.
*
@@ -220,59 +178,61 @@ public final class NameSymbol {
* @throws NullPointerException if symbol is null
*/
public static final NameSymbol ofSymbol(final String symbol) {
- return new NameSymbol(Optional.empty(), Optional.of(symbol), new HashSet<>());
+ return new NameSymbol(Optional.empty(), Optional.of(symbol),
+ new HashSet<>());
}
-
+
private final Optional<String> primaryName;
private final Optional<String> symbol;
-
+
private final Set<String> otherNames;
-
+
/**
* Creates the {@code NameSymbol}.
*
* @param primaryName primary name of unit
* @param symbol symbol used to represent unit
- * @param otherNames other names and/or spellings, should be a mutable copy of
- * the argument
+ * @param otherNames other names and/or spellings, should be a mutable copy
+ * of the argument
* @since 2019-10-21
*/
- private NameSymbol(final Optional<String> primaryName, final Optional<String> symbol,
- final Set<String> otherNames) {
+ private NameSymbol(final Optional<String> primaryName,
+ final Optional<String> symbol, final Set<String> otherNames) {
this.primaryName = primaryName;
this.symbol = symbol;
otherNames.remove(null);
this.otherNames = Collections.unmodifiableSet(otherNames);
- if (this.primaryName.isEmpty())
+ if (this.primaryName.isEmpty()) {
assert this.otherNames.isEmpty();
+ }
}
-
+
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (!(obj instanceof NameSymbol))
return false;
- NameSymbol other = (NameSymbol) obj;
- if (otherNames == null) {
+ final NameSymbol other = (NameSymbol) obj;
+ if (this.otherNames == null) {
if (other.otherNames != null)
return false;
- } else if (!otherNames.equals(other.otherNames))
+ } else if (!this.otherNames.equals(other.otherNames))
return false;
- if (primaryName == null) {
+ if (this.primaryName == null) {
if (other.primaryName != null)
return false;
- } else if (!primaryName.equals(other.primaryName))
+ } else if (!this.primaryName.equals(other.primaryName))
return false;
- if (symbol == null) {
+ if (this.symbol == null) {
if (other.symbol != null)
return false;
- } else if (!symbol.equals(other.symbol))
+ } else if (!this.symbol.equals(other.symbol))
return false;
return true;
}
-
+
/**
* @return otherNames
* @since 2019-10-21
@@ -280,7 +240,7 @@ public final class NameSymbol {
public final Set<String> getOtherNames() {
return this.otherNames;
}
-
+
/**
* @return primaryName
* @since 2019-10-21
@@ -296,17 +256,20 @@ public final class NameSymbol {
public final Optional<String> getSymbol() {
return this.symbol;
}
-
+
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
- result = prime * result + ((otherNames == null) ? 0 : otherNames.hashCode());
- result = prime * result + ((primaryName == null) ? 0 : primaryName.hashCode());
- result = prime * result + ((symbol == null) ? 0 : symbol.hashCode());
+ result = prime * result
+ + (this.otherNames == null ? 0 : this.otherNames.hashCode());
+ result = prime * result
+ + (this.primaryName == null ? 0 : this.primaryName.hashCode());
+ result = prime * result
+ + (this.symbol == null ? 0 : this.symbol.hashCode());
return result;
}
-
+
/**
* @return true iff this {@code NameSymbol} contains no names or symbols.
*/