package mf; /*Generated by MPS */ public class Quantity { protected double myAmount; protected Unit myUnit; protected Quantity() { } public Quantity(double amount, Unit unit) { requireNonNull(unit); myAmount = amount; myUnit = unit; } public Quantity(int amount, Unit unit) { this((double) amount, unit); } public Quantity(String amountString, Unit unit) { this(new Double(amountString), unit); } public Quantity abs() { return ((isPositive()) ? this : newObject(Math.abs(getAmount()), myUnit)); } public Quantity add(Quantity arg) { requireSameUnitsAs(arg); return newObject(getAmount() + arg.getAmount(), myUnit); } public String amountString() { return String.valueOf(getAmount()); } public Quantity divide(double arg) { return newObject(getAmount() / arg, myUnit); } @Override public boolean equals(Object arg) { if (!((arg instanceof Quantity))) { return false; } Quantity other = (Quantity) arg; return (myUnit.equals(other.myUnit) && (getAmount() == other.getAmount())); } public double getAmount() { return myAmount; } public boolean isGreaterThan(Quantity arg) { requireSameUnitsAs(arg); return !(isLessThanOrEqualTo(arg)); } public boolean isGreaterThanOrEqualTo(Quantity arg) { requireSameUnitsAs(arg); return !(isLessThan(arg)); } public boolean isLessThan(Quantity arg) { requireSameUnitsAs(arg); return getAmount() < arg.getAmount(); } public boolean isLessThanOrEqualTo(Quantity arg) { requireSameUnitsAs(arg); return isLessThan(arg) || equals(arg); } public boolean isNegative() { return (getAmount() < 0); } public boolean isNull() { return false; } public boolean isPositive() { return !(isNegative()); } public Quantity max(Quantity arg) { return ((isGreaterThan(arg)) ? this : arg); } public Quantity min(Quantity arg) { return ((isLessThan(arg)) ? this : arg); } public Quantity multiply(double arg) { return newObject(getAmount() * arg, myUnit); } protected Quantity newObject(double amount, Unit unit) { return new Quantity(amount, unit); } public boolean notEquals(Quantity arg) { return !(this.equals(arg)); } protected void requireNonNull(Object arg) { if (arg == null) { throw new NullPointerException(toString() + " ran into nil"); } } protected void requireSameUnitsAs(Quantity arg) { if (!(myUnit.equals(arg.unit()))) { throw new IllegalArgumentException(); } } public Quantity subtract(Quantity arg) { requireSameUnitsAs(arg); return newObject(getAmount() - arg.getAmount(), myUnit); } @Override public String toString() { return String.valueOf(getAmount()) + " " + myUnit.toString(); } public Unit unit() { return myUnit; } }