diff options
| author | Adrien Hopkins <ahopk127@my.yorku.ca> | 2021-05-22 14:05:44 -0500 | 
|---|---|---|
| committer | Adrien Hopkins <ahopk127@my.yorku.ca> | 2021-05-22 14:05:44 -0500 | 
| commit | 8645325803f8580c823cc4c2cec2ad76906b52bb (patch) | |
| tree | fff893611dfd82aca4af5e677ab782045d5543d9 /src/org/unitConverter/unit/LinearUnitValue.java | |
| parent | 184b7cc697ffc2dcbd49cfb3d0fd7b14bdac8803 (diff) | |
| parent | 277500e27010839e03659870bc5890f1535aa8c8 (diff) | |
Merge branch 'develop' into feature-settings-tab
Diffstat (limited to 'src/org/unitConverter/unit/LinearUnitValue.java')
| -rw-r--r-- | src/org/unitConverter/unit/LinearUnitValue.java | 341 | 
1 files changed, 0 insertions, 341 deletions
| diff --git a/src/org/unitConverter/unit/LinearUnitValue.java b/src/org/unitConverter/unit/LinearUnitValue.java deleted file mode 100644 index 8de734e..0000000 --- a/src/org/unitConverter/unit/LinearUnitValue.java +++ /dev/null @@ -1,341 +0,0 @@ -/** - * Copyright (C) 2019 Adrien Hopkins - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program.  If not, see <https://www.gnu.org/licenses/>. - */ -package org.unitConverter.unit; - -import java.util.Objects; -import java.util.Optional; - -import org.unitConverter.math.DecimalComparison; -import org.unitConverter.math.UncertainDouble; - -/** - * A possibly uncertain value expressed in a linear unit. - *  - * Unless otherwise indicated, all methods in this class throw a - * {@code NullPointerException} when an argument is null. - *  - * @author Adrien Hopkins - * @since 2020-07-26 - */ -public final class LinearUnitValue { -	public static final LinearUnitValue ONE = getExact(SI.ONE, 1); -	 -	/** -	 * Gets an exact {@code LinearUnitValue} -	 *  -	 * @param unit  unit to express with -	 * @param value value to express -	 * @return exact {@code LinearUnitValue} instance -	 * @since 2020-07-26 -	 */ -	public static final LinearUnitValue getExact(final LinearUnit unit, -			final double value) { -		return new LinearUnitValue( -				Objects.requireNonNull(unit, "unit must not be null"), -				UncertainDouble.of(value, 0)); -	} -	 -	/** -	 * Gets an uncertain {@code LinearUnitValue} -	 *  -	 * @param unit        unit to express with -	 * @param value       value to express -	 * @param uncertainty absolute uncertainty of value -	 * @return uncertain {@code LinearUnitValue} instance -	 * @since 2020-07-26 -	 */ -	public static final LinearUnitValue of(final LinearUnit unit, -			final UncertainDouble value) { -		return new LinearUnitValue( -				Objects.requireNonNull(unit, "unit must not be null"), -				Objects.requireNonNull(value, "value may not be null")); -	} -	 -	private final LinearUnit unit; -	 -	private final UncertainDouble value; -	 -	/** -	 * @param unit  unit to express as -	 * @param value value to express -	 * @since 2020-07-26 -	 */ -	private LinearUnitValue(final LinearUnit unit, final UncertainDouble value) { -		this.unit = unit; -		this.value = value; -	} -	 -	/** -	 * @return this value as a {@code UnitValue}. All uncertainty information is -	 *         removed from the returned value. -	 * @since 2020-08-04 -	 */ -	public final UnitValue asUnitValue() { -		return UnitValue.of(this.unit, this.value.value()); -	} -	 -	/** -	 * @param other a {@code LinearUnit} -	 * @return true iff this value can be represented with {@code other}. -	 * @since 2020-07-26 -	 */ -	public final boolean canConvertTo(final LinearUnit other) { -		return this.unit.canConvertTo(other); -	} -	 -	/** -	 * Returns a LinearUnitValue that represents the same value expressed in a -	 * different unit -	 *  -	 * @param other new unit to express value in -	 * @return value expressed in {@code other} -	 * @since 2020-07-26 -	 */ -	public final LinearUnitValue convertTo(final LinearUnit other) { -		return LinearUnitValue.of(other, this.unit.convertTo(other, this.value)); -	} -	 -	/** -	 * Divides this value by a scalar -	 *  -	 * @param divisor value to divide by -	 * @return multiplied value -	 * @since 2020-07-28 -	 */ -	public LinearUnitValue dividedBy(final double divisor) { -		return LinearUnitValue.of(this.unit, this.value.dividedByExact(divisor)); -	} -	 -	/** -	 * Divides this value by another value -	 *  -	 * @param divisor value to multiply by -	 * @return quotient -	 * @since 2020-07-28 -	 */ -	public LinearUnitValue dividedBy(final LinearUnitValue divisor) { -		return LinearUnitValue.of(this.unit.dividedBy(divisor.unit), -				this.value.dividedBy(divisor.value)); -	} -	 -	/** -	 * Returns true if this and obj represent the same value, regardless of -	 * whether or not they are expressed in the same unit. So (1000 m).equals(1 -	 * km) returns true. -	 *  -	 * @since 2020-07-26 -	 * @see #equals(Object, boolean) -	 */ -	@Override -	public boolean equals(final Object obj) { -		if (!(obj instanceof LinearUnitValue)) -			return false; -		final LinearUnitValue other = (LinearUnitValue) obj; -		return Objects.equals(this.unit.getBase(), other.unit.getBase()) -				&& this.unit.convertToBase(this.value) -						.equals(other.unit.convertToBase(other.value)); -	} -	 -	/** -	 * Returns true if this and obj represent the same value, regardless of -	 * whether or not they are expressed in the same unit. So (1000 m).equals(1 -	 * km) returns true. -	 * <p> -	 * If avoidFPErrors is true, this method will attempt to avoid floating-point -	 * errors, at the cost of not always being transitive. -	 *  -	 * @since 2020-07-28 -	 */ -	public boolean equals(final Object obj, final boolean avoidFPErrors) { -		if (!avoidFPErrors) -			return this.equals(obj); -		if (!(obj instanceof LinearUnitValue)) -			return false; -		final LinearUnitValue other = (LinearUnitValue) obj; -		return Objects.equals(this.unit.getBase(), other.unit.getBase()) -				&& DecimalComparison.equals(this.unit.convertToBase(this.value), -						other.unit.convertToBase(other.value)); -	} -	 -	/** -	 * @param other another {@code LinearUnitValue} -	 * @return true iff this and other are within each other's uncertainty range -	 *  -	 * @since 2020-07-26 -	 */ -	public boolean equivalent(final LinearUnitValue other) { -		if (other == null -				|| !Objects.equals(this.unit.getBase(), other.unit.getBase())) -			return false; -		final LinearUnit base = LinearUnit.valueOf(this.unit.getBase(), 1); -		final LinearUnitValue thisBase = this.convertTo(base); -		final LinearUnitValue otherBase = other.convertTo(base); -		 -		return thisBase.value.equivalent(otherBase.value); -	} -	 -	/** -	 * @return the unit -	 * @since 2020-09-29 -	 */ -	public final LinearUnit getUnit() { -		return this.unit; -	} -	 -	/** -	 * @return the value -	 * @since 2020-09-29 -	 */ -	public final UncertainDouble getValue() { -		return this.value; -	} -	 -	/** -	 * @return the exact value -	 * @since 2020-09-07 -	 */ -	public final double getValueExact() { -		return this.value.value(); -	} -	 -	@Override -	public int hashCode() { -		return Objects.hash(this.unit.getBase(), -				this.unit.convertToBase(this.getValue())); -	} -	 -	/** -	 * Returns the difference of this value and another, expressed in this -	 * value's unit -	 *  -	 * @param subtrahend value to subtract -	 * @return difference of values -	 * @throws IllegalArgumentException if {@code subtrahend} has a unit that is -	 *                                  not compatible for addition -	 * @since 2020-07-26 -	 */ -	public LinearUnitValue minus(final LinearUnitValue subtrahend) { -		Objects.requireNonNull(subtrahend, "subtrahend may not be null"); -		 -		if (!this.canConvertTo(subtrahend.unit)) -			throw new IllegalArgumentException(String.format( -					"Incompatible units for subtraction \"%s\" and \"%s\".", -					this.unit, subtrahend.unit)); -		 -		final LinearUnitValue otherConverted = subtrahend.convertTo(this.unit); -		return LinearUnitValue.of(this.unit, -				this.value.minus(otherConverted.value)); -	} -	 -	/** -	 * Returns the sum of this value and another, expressed in this value's unit -	 *  -	 * @param addend value to add -	 * @return sum of values -	 * @throws IllegalArgumentException if {@code addend} has a unit that is not -	 *                                  compatible for addition -	 * @since 2020-07-26 -	 */ -	public LinearUnitValue plus(final LinearUnitValue addend) { -		Objects.requireNonNull(addend, "addend may not be null"); -		 -		if (!this.canConvertTo(addend.unit)) -			throw new IllegalArgumentException(String.format( -					"Incompatible units for addition \"%s\" and \"%s\".", this.unit, -					addend.unit)); -		 -		final LinearUnitValue otherConverted = addend.convertTo(this.unit); -		return LinearUnitValue.of(this.unit, -				this.value.plus(otherConverted.value)); -	} -	 -	/** -	 * Multiplies this value by a scalar -	 *  -	 * @param multiplier value to multiply by -	 * @return multiplied value -	 * @since 2020-07-28 -	 */ -	public LinearUnitValue times(final double multiplier) { -		return LinearUnitValue.of(this.unit, this.value.timesExact(multiplier)); -	} -	 -	/** -	 * Multiplies this value by another value -	 *  -	 * @param multiplier value to multiply by -	 * @return product -	 * @since 2020-07-28 -	 */ -	public LinearUnitValue times(final LinearUnitValue multiplier) { -		return LinearUnitValue.of(this.unit.times(multiplier.unit), -				this.value.times(multiplier.value)); -	} -	 -	/** -	 * Raises a value to an exponent -	 *  -	 * @param exponent exponent to raise to -	 * @return result of exponentiation -	 * @since 2020-07-28 -	 */ -	public LinearUnitValue toExponent(final int exponent) { -		return LinearUnitValue.of(this.unit.toExponent(exponent), -				this.value.toExponentExact(exponent)); -	} -	 -	@Override -	public String toString() { -		return this.toString(!this.value.isExact()); -	} -	 -	/** -	 * Returns a string representing the object. <br> -	 * If the attached unit has a name or symbol, the string looks like "12 km". -	 * Otherwise, it looks like "13 unnamed unit (= 2 m/s)". -	 * <p> -	 * If showUncertainty is true, strings like "35 ± 8" are shown instead of -	 * single numbers. -	 * <p> -	 * Non-exact values are rounded intelligently based on their uncertainty. -	 *  -	 * @since 2020-07-26 -	 */ -	public String toString(final boolean showUncertainty) { -		final Optional<String> primaryName = this.unit.getPrimaryName(); -		final Optional<String> symbol = this.unit.getSymbol(); -		final String chosenName = symbol.orElse(primaryName.orElse(null)); -		 -		final UncertainDouble baseValue = this.unit.convertToBase(this.value); -		 -		// 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 ? ")" : ""); -		 -		// create string -		if (primaryName.isEmpty() && symbol.isEmpty()) -			return String.format("%s unnamed unit (= %s %s)", valueString, -					baseValueString, this.unit.getBase()); -		else -			return String.format("%s %s", valueString, chosenName); -	} -} | 
