summaryrefslogtreecommitdiff
path: root/src/main/java/sevenUnits/unit/USCustomary.java
blob: ef120432b5bfdd5eb1294d73c6aec52d3018aea2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/**
 * Copyright (C) 2019, 2021, 2024, 2025 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 sevenUnits.unit;

/**
 * A static utility class that contains units in the US Customary system.
 *
 * @author Adrien Hopkins
 * @since 2019-10-21
 * @since v0.3.0
 */
// this class is just constants, most of which are obvious from the variable name
// so no need to check for missing values
@SuppressWarnings("javadoc")
public final class USCustomary {
	/**
	 * US Customary units that measure area
	 *
	 * @author Adrien Hopkins
	 * @since 2019-11-08
	 * @since v0.3.0
	 */
	public static final class Area {
		public static final LinearUnit SQUARE_SURVEY_FOOT = Length.SURVEY_FOOT
				.times(Length.SURVEY_FOOT);
		public static final LinearUnit SQUARE_CHAIN = Length.SURVEY_CHAIN
				.times(Length.SURVEY_CHAIN);
		public static final LinearUnit ACRE = Length.SURVEY_CHAIN
				.times(Length.SURVEY_FURLONG);
		public static final LinearUnit SECTION = Length.SURVEY_MILE
				.times(Length.SURVEY_MILE);
		public static final LinearUnit SURVEY_TOWNSHIP = SECTION.times(36);
	}

	/**
	 * US Customary units that measure length
	 *
	 * @author Adrien Hopkins
	 * @since 2019-10-28
	 * @since v0.3.0
	 */
	public static final class Length {
		public static final LinearUnit FOOT = BritishImperial.Length.FOOT;
		public static final LinearUnit INCH = BritishImperial.Length.INCH;
		public static final LinearUnit HAND = INCH.times(4);
		public static final LinearUnit PICA = INCH.dividedBy(6);
		public static final LinearUnit POINT = PICA.dividedBy(12);
		public static final LinearUnit YARD = BritishImperial.Length.YARD;
		public static final LinearUnit MILE = BritishImperial.Length.MILE;

		public static final LinearUnit SURVEY_FOOT = Metric.METRE
				.times(1200.0 / 3937.0);
		public static final LinearUnit SURVEY_LINK = SURVEY_FOOT
				.times(33.0 / 50.0);
		public static final LinearUnit SURVEY_ROD = SURVEY_FOOT.times(16.5);
		public static final LinearUnit SURVEY_CHAIN = SURVEY_ROD.times(4);
		public static final LinearUnit SURVEY_FURLONG = SURVEY_CHAIN.times(10);
		public static final LinearUnit SURVEY_MILE = SURVEY_FURLONG.times(8);
		public static final LinearUnit SURVEY_LEAGUE = SURVEY_MILE.times(3);

		public static final LinearUnit NAUTICAL_MILE = BritishImperial.Length.NAUTICAL_MILE;
		public static final LinearUnit FATHOM = YARD.times(2);
		public static final LinearUnit CABLE = FATHOM.times(120);
	}

	/**
	 * mass units
	 *
	 * @author Adrien Hopkins
	 * @since 2019-11-08
	 * @since v0.3.0
	 */
	public static final class Mass {
		public static final LinearUnit GRAIN = BritishImperial.Mass.GRAIN;
		public static final LinearUnit DRAM = BritishImperial.Mass.DRACHM;
		public static final LinearUnit OUNCE = BritishImperial.Mass.OUNCE;
		public static final LinearUnit POUND = BritishImperial.Mass.POUND;
		public static final LinearUnit HUNDREDWEIGHT = POUND.times(100);
		public static final LinearUnit SHORT_TON = HUNDREDWEIGHT.times(20);

		// troy system for precious metals
		public static final LinearUnit PENNYWEIGHT = GRAIN.times(24);
		public static final LinearUnit TROY_OUNCE = PENNYWEIGHT.times(20);
		public static final LinearUnit TROY_POUND = TROY_OUNCE.times(12);
	}

	/**
	 * Volume units
	 *
	 * @author Adrien Hopkins
	 * @since 2019-11-08
	 * @since v0.3.0
	 */
	public static final class Volume {
		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 MINIM = Metric.LITRE
				.withPrefix(Metric.MICRO).times(61.611519921875);
		public static final LinearUnit FLUID_DRAM = MINIM.times(60);
		public static final LinearUnit TEASPOON = MINIM.times(80);
		public static final LinearUnit TABLESPOON = TEASPOON.times(3);
		public static final LinearUnit FLUID_OUNCE = TABLESPOON.times(2);
		public static final LinearUnit SHOT = TABLESPOON.times(3);
		public static final LinearUnit GILL = FLUID_OUNCE.times(4);
		public static final LinearUnit CUP = GILL.times(2);
		public static final LinearUnit PINT = CUP.times(2);
		public static final LinearUnit QUART = PINT.times(2);
		public static final LinearUnit GALLON = QUART.times(4);
		public static final LinearUnit BARREL = GALLON.times(31.5);
		public static final LinearUnit OIL_BARREL = GALLON.times(42);
		public static final LinearUnit HOGSHEAD = GALLON.times(63);

		public static final LinearUnit DRY_PINT = Metric.LITRE
				.times(0.5506104713575);
		public static final LinearUnit DRY_QUART = DRY_PINT.times(2);
		public static final LinearUnit DRY_GALLON = DRY_QUART.times(4);
		public static final LinearUnit PECK = DRY_GALLON.times(2);
		public static final LinearUnit BUSHEL = PECK.times(4);
		public static final LinearUnit DRY_BARREL = CUBIC_INCH.times(7056);
	}

	public static final LinearUnit OUNCE_FORCE = BritishImperial.OUNCE_FORCE;
	public static final LinearUnit POUND_FORCE = BritishImperial.POUND_FORCE;

	public static final LinearUnit BRITISH_THERMAL_UNIT = BritishImperial.BRITISH_THERMAL_UNIT;
	public static final LinearUnit CALORIE = BritishImperial.CALORIE;
	public static final LinearUnit KILOCALORIE = BritishImperial.KILOCALORIE;
	public static final LinearUnit FOOT_POUND = POUND_FORCE.times(Length.FOOT);

	public static final LinearUnit HORSEPOWER = Length.FOOT.times(POUND_FORCE)
			.dividedBy(Metric.MINUTE).times(33000);
	public static final LinearUnit POUND_PER_SQUARE_INCH = POUND_FORCE
			.dividedBy(Length.INCH.toExponent(2));

	public static final Unit FAHRENHEIT = BritishImperial.FAHRENHEIT;
}