Skip to content

Commit 5d83313

Browse files
Merge pull request #13 from NeedleInAJayStack/feat/info-units
Adds additional Data units
2 parents bc4481b + 33f9fc7 commit 5d83313

4 files changed

Lines changed: 281 additions & 3 deletions

File tree

Sources/Units/Registry.swift

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,11 +144,39 @@ class Registry {
144144
// MARK: Data
145145

146146
DefaultUnits.bit,
147+
DefaultUnits.kilobit,
148+
DefaultUnits.megabit,
149+
DefaultUnits.gigabit,
150+
DefaultUnits.terabit,
151+
DefaultUnits.petabit,
152+
DefaultUnits.exabit,
153+
DefaultUnits.zetabit,
154+
DefaultUnits.yottabit,
155+
DefaultUnits.kibibit,
156+
DefaultUnits.mebibit,
157+
DefaultUnits.gibibit,
158+
DefaultUnits.tebibit,
159+
DefaultUnits.pebibit,
160+
DefaultUnits.exbibit,
161+
DefaultUnits.zebibit,
162+
DefaultUnits.yobibit,
147163
DefaultUnits.byte,
148164
DefaultUnits.kilobyte,
149165
DefaultUnits.megabyte,
150166
DefaultUnits.gigabyte,
167+
DefaultUnits.terabyte,
151168
DefaultUnits.petabyte,
169+
DefaultUnits.exabyte,
170+
DefaultUnits.zetabyte,
171+
DefaultUnits.yottabyte,
172+
DefaultUnits.kibibyte,
173+
DefaultUnits.mebibyte,
174+
DefaultUnits.gibibyte,
175+
DefaultUnits.tebibyte,
176+
DefaultUnits.pebibyte,
177+
DefaultUnits.exbibyte,
178+
DefaultUnits.zebibyte,
179+
DefaultUnits.yobibyte,
152180

153181
// MARK: Electric Potential Difference
154182

Sources/Units/Unit/DefaultUnits.swift

Lines changed: 175 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
1+
import Foundation
2+
13
/// Static type containing this package's pre-defined units
24
enum DefaultUnits {
3-
// MARK: If adding units to this list, add corresponding entries in the `Unit+DefaultUnits.swift` & `Registry.swift` files
5+
// MARK: If adding units to this list, add corresponding entries to the following files:
6+
// - Unit+DefaultUnits.swift
7+
// - Registry.swift
8+
// - DefinitionTests.swift
49

510
// MARK: Acceleration
611

@@ -143,6 +148,102 @@ enum DefaultUnits {
143148
symbol: "bit",
144149
dimension: [.Data: 1]
145150
)
151+
static let kilobit = try! DefinedUnit(
152+
name: "kilobit",
153+
symbol: "kbit",
154+
dimension: [.Data: 1],
155+
coefficient: 1000
156+
)
157+
static let megabit = try! DefinedUnit(
158+
name: "megabit",
159+
symbol: "Mbit",
160+
dimension: [.Data: 1],
161+
coefficient: 1e6
162+
)
163+
static let gigabit = try! DefinedUnit(
164+
name: "gigabit",
165+
symbol: "Gbit",
166+
dimension: [.Data: 1],
167+
coefficient: 1e9
168+
)
169+
static let terabit = try! DefinedUnit(
170+
name: "terabit",
171+
symbol: "Tbit",
172+
dimension: [.Data: 1],
173+
coefficient: 1e12
174+
)
175+
static let petabit = try! DefinedUnit(
176+
name: "petabit",
177+
symbol: "Pbit",
178+
dimension: [.Data: 1],
179+
coefficient: 1e15
180+
)
181+
static let exabit = try! DefinedUnit(
182+
name: "exabit",
183+
symbol: "Ebit",
184+
dimension: [.Data: 1],
185+
coefficient: 1e18
186+
)
187+
static let zetabit = try! DefinedUnit(
188+
name: "zetabit",
189+
symbol: "Zbit",
190+
dimension: [.Data: 1],
191+
coefficient: 1e21
192+
)
193+
static let yottabit = try! DefinedUnit(
194+
name: "yottabit",
195+
symbol: "Ybit",
196+
dimension: [.Data: 1],
197+
coefficient: 1e24
198+
)
199+
static let kibibit = try! DefinedUnit(
200+
name: "kibibit",
201+
symbol: "Kibit",
202+
dimension: [.Data: 1],
203+
coefficient: 1024
204+
)
205+
static let mebibit = try! DefinedUnit(
206+
name: "mebibit",
207+
symbol: "Mibit",
208+
dimension: [.Data: 1],
209+
coefficient: pow(1024, 2)
210+
)
211+
static let gibibit = try! DefinedUnit(
212+
name: "gibibit",
213+
symbol: "Gibit",
214+
dimension: [.Data: 1],
215+
coefficient: pow(1024, 3)
216+
)
217+
static let tebibit = try! DefinedUnit(
218+
name: "tebibit",
219+
symbol: "Tibit",
220+
dimension: [.Data: 1],
221+
coefficient: pow(1024, 4)
222+
)
223+
static let pebibit = try! DefinedUnit(
224+
name: "pebibit",
225+
symbol: "Pibit",
226+
dimension: [.Data: 1],
227+
coefficient: pow(1024, 5)
228+
)
229+
static let exbibit = try! DefinedUnit(
230+
name: "exbibit",
231+
symbol: "Eibit",
232+
dimension: [.Data: 1],
233+
coefficient: pow(1024, 6)
234+
)
235+
static let zebibit = try! DefinedUnit(
236+
name: "zebibit",
237+
symbol: "Zibit",
238+
dimension: [.Data: 1],
239+
coefficient: pow(1024, 7)
240+
)
241+
static let yobibit = try! DefinedUnit(
242+
name: "yobibit",
243+
symbol: "Yibit",
244+
dimension: [.Data: 1],
245+
coefficient: pow(1024, 8)
246+
)
146247
static let byte = try! DefinedUnit(
147248
name: "byte",
148249
symbol: "byte",
@@ -167,11 +268,83 @@ enum DefaultUnits {
167268
dimension: [.Data: 1],
168269
coefficient: 8e9
169270
)
271+
static let terabyte = try! DefinedUnit(
272+
name: "terabyte",
273+
symbol: "TB",
274+
dimension: [.Data: 1],
275+
coefficient: 8e12
276+
)
170277
static let petabyte = try! DefinedUnit(
171278
name: "petabyte",
172279
symbol: "PB",
173280
dimension: [.Data: 1],
174-
coefficient: 8e12
281+
coefficient: 8e15
282+
)
283+
static let exabyte = try! DefinedUnit(
284+
name: "exabyte",
285+
symbol: "EB",
286+
dimension: [.Data: 1],
287+
coefficient: 8e18
288+
)
289+
static let zetabyte = try! DefinedUnit(
290+
name: "zetabyte",
291+
symbol: "ZB",
292+
dimension: [.Data: 1],
293+
coefficient: 8e21
294+
)
295+
static let yottabyte = try! DefinedUnit(
296+
name: "yottabyte",
297+
symbol: "YB",
298+
dimension: [.Data: 1],
299+
coefficient: 8e24
300+
)
301+
static let kibibyte = try! DefinedUnit(
302+
name: "kibibyte",
303+
symbol: "KiB",
304+
dimension: [.Data: 1],
305+
coefficient: 8 * 1024
306+
)
307+
static let mebibyte = try! DefinedUnit(
308+
name: "mebibyte",
309+
symbol: "MiB",
310+
dimension: [.Data: 1],
311+
coefficient: 8 * pow(1024, 2)
312+
)
313+
static let gibibyte = try! DefinedUnit(
314+
name: "gibibyte",
315+
symbol: "GiB",
316+
dimension: [.Data: 1],
317+
coefficient: 8 * pow(1024, 3)
318+
)
319+
static let tebibyte = try! DefinedUnit(
320+
name: "tebibyte",
321+
symbol: "TiB",
322+
dimension: [.Data: 1],
323+
coefficient: 8 * pow(1024, 4)
324+
)
325+
static let pebibyte = try! DefinedUnit(
326+
name: "pebibyte",
327+
symbol: "PiB",
328+
dimension: [.Data: 1],
329+
coefficient: 8 * pow(1024, 5)
330+
)
331+
static let exbibyte = try! DefinedUnit(
332+
name: "exbibyte",
333+
symbol: "EiB",
334+
dimension: [.Data: 1],
335+
coefficient: 8 * pow(1024, 6)
336+
)
337+
static let zebibyte = try! DefinedUnit(
338+
name: "zebibyte",
339+
symbol: "ZiB",
340+
dimension: [.Data: 1],
341+
coefficient: 8 * pow(1024, 7)
342+
)
343+
static let yobibyte = try! DefinedUnit(
344+
name: "yobibyte",
345+
symbol: "YiB",
346+
dimension: [.Data: 1],
347+
coefficient: 8 * pow(1024, 8)
175348
)
176349

177350
// MARK: Electric Potential Difference

Sources/Units/Unit/Unit+DefaultUnits.swift

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
// TODO: Make more
22
// - Concentration Mass
33
// - Dispersion
4-
// - Information Storage: https://developer.apple.com/documentation/foundation/unitinformationstorage
54

65
public extension Unit {
76
// Provided as easy access to UnitRegistry default units
@@ -47,11 +46,39 @@ public extension Unit {
4746
// MARK: Data
4847

4948
static let bit = Unit(definedBy: DefaultUnits.bit)
49+
static let kilobit = Unit(definedBy: DefaultUnits.kilobit)
50+
static let megabit = Unit(definedBy: DefaultUnits.megabit)
51+
static let gigabit = Unit(definedBy: DefaultUnits.gigabit)
52+
static let terabit = Unit(definedBy: DefaultUnits.terabit)
53+
static let petabit = Unit(definedBy: DefaultUnits.petabit)
54+
static let exabit = Unit(definedBy: DefaultUnits.exabit)
55+
static let zetabit = Unit(definedBy: DefaultUnits.zetabit)
56+
static let yottabit = Unit(definedBy: DefaultUnits.yottabit)
57+
static let kibibit = Unit(definedBy: DefaultUnits.kibibit)
58+
static let mebibit = Unit(definedBy: DefaultUnits.mebibit)
59+
static let gibibit = Unit(definedBy: DefaultUnits.gibibit)
60+
static let tebibit = Unit(definedBy: DefaultUnits.tebibit)
61+
static let pebibit = Unit(definedBy: DefaultUnits.pebibit)
62+
static let exbibit = Unit(definedBy: DefaultUnits.exbibit)
63+
static let zebibit = Unit(definedBy: DefaultUnits.zebibit)
64+
static let yobibit = Unit(definedBy: DefaultUnits.yobibit)
5065
static let byte = Unit(definedBy: DefaultUnits.byte)
5166
static let kilobyte = Unit(definedBy: DefaultUnits.kilobyte)
5267
static let megabyte = Unit(definedBy: DefaultUnits.megabyte)
5368
static let gigabyte = Unit(definedBy: DefaultUnits.gigabyte)
69+
static let terabyte = Unit(definedBy: DefaultUnits.terabyte)
5470
static let petabyte = Unit(definedBy: DefaultUnits.petabyte)
71+
static let exabyte = Unit(definedBy: DefaultUnits.exabyte)
72+
static let zetabyte = Unit(definedBy: DefaultUnits.zetabyte)
73+
static let yottabyte = Unit(definedBy: DefaultUnits.yottabyte)
74+
static let kibibyte = Unit(definedBy: DefaultUnits.kibibyte)
75+
static let mebibyte = Unit(definedBy: DefaultUnits.mebibyte)
76+
static let gibibyte = Unit(definedBy: DefaultUnits.gibibyte)
77+
static let tebibyte = Unit(definedBy: DefaultUnits.tebibyte)
78+
static let pebibyte = Unit(definedBy: DefaultUnits.pebibyte)
79+
static let exbibyte = Unit(definedBy: DefaultUnits.exbibyte)
80+
static let zebibyte = Unit(definedBy: DefaultUnits.zebibyte)
81+
static let yobibyte = Unit(definedBy: DefaultUnits.yobibyte)
5582

5683
// MARK: Electric Potential Difference
5784

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import Units
2+
import XCTest
3+
4+
/// Test conversion coefficients, registry inclusion, and default value inclusion for all units
5+
/// To check all 3, we use tests of the form
6+
/// ```swift
7+
/// try XCTAssertEqual(Measurement("1<symbol>"), <coefficient>.measured(in: .<base_unit>).convert(to: .<name>))
8+
/// ```
9+
/// This really is just a double-check that the unit coefficient assigned as expected, and is included in all the appropriate code locations.
10+
class DefinitionTests: XCTestCase {
11+
func testData() throws {
12+
try XCTAssertEqual(Measurement("1bit"), 1.measured(in: .bit).convert(to: .bit))
13+
try XCTAssertEqual(Measurement("1kbit"), 1000.measured(in: .bit).convert(to: .kilobit))
14+
try XCTAssertEqual(Measurement("1Mbit"), 1e6.measured(in: .bit).convert(to: .megabit))
15+
try XCTAssertEqual(Measurement("1Gbit"), 1e9.measured(in: .bit).convert(to: .gigabit))
16+
try XCTAssertEqual(Measurement("1Tbit"), 1e12.measured(in: .bit).convert(to: .terabit))
17+
try XCTAssertEqual(Measurement("1Pbit"), 1e15.measured(in: .bit).convert(to: .petabit))
18+
try XCTAssertEqual(Measurement("1Ebit"), 1e18.measured(in: .bit).convert(to: .exabit))
19+
try XCTAssertEqual(Measurement("1Zbit"), 1e21.measured(in: .bit).convert(to: .zetabit))
20+
try XCTAssertEqual(Measurement("1Ybit"), 1e24.measured(in: .bit).convert(to: .yottabit))
21+
22+
try XCTAssertEqual(Measurement("1Kibit"), 1024.measured(in: .bit).convert(to: .kibibit))
23+
try XCTAssertEqual(Measurement("1Mibit"), pow(1024, 2).measured(in: .bit).convert(to: .mebibit))
24+
try XCTAssertEqual(Measurement("1Gibit"), pow(1024, 3).measured(in: .bit).convert(to: .gibibit))
25+
try XCTAssertEqual(Measurement("1Tibit"), pow(1024, 4).measured(in: .bit).convert(to: .tebibit))
26+
try XCTAssertEqual(Measurement("1Pibit"), pow(1024, 5).measured(in: .bit).convert(to: .pebibit))
27+
try XCTAssertEqual(Measurement("1Eibit"), pow(1024, 6).measured(in: .bit).convert(to: .exbibit))
28+
try XCTAssertEqual(Measurement("1Zibit"), pow(1024, 7).measured(in: .bit).convert(to: .zebibit))
29+
try XCTAssertEqual(Measurement("1Yibit"), pow(1024, 8).measured(in: .bit).convert(to: .yobibit))
30+
31+
try XCTAssertEqual(Measurement("1byte"), 8.measured(in: .bit).convert(to: .byte))
32+
try XCTAssertEqual(Measurement("1kB"), 8000.measured(in: .bit).convert(to: .kilobyte))
33+
try XCTAssertEqual(Measurement("1MB"), 8e6.measured(in: .bit).convert(to: .megabyte))
34+
try XCTAssertEqual(Measurement("1GB"), 8e9.measured(in: .bit).convert(to: .gigabyte))
35+
try XCTAssertEqual(Measurement("1TB"), 8e12.measured(in: .bit).convert(to: .terabyte))
36+
try XCTAssertEqual(Measurement("1PB"), 8e15.measured(in: .bit).convert(to: .petabyte))
37+
try XCTAssertEqual(Measurement("1EB"), 8e18.measured(in: .bit).convert(to: .exabyte))
38+
try XCTAssertEqual(Measurement("1ZB"), 8e21.measured(in: .bit).convert(to: .zetabyte))
39+
try XCTAssertEqual(Measurement("1YB"), 8e24.measured(in: .bit).convert(to: .yottabyte))
40+
41+
try XCTAssertEqual(Measurement("1KiB"), 8 * 1024.measured(in: .bit).convert(to: .kibibyte))
42+
try XCTAssertEqual(Measurement("1MiB"), 8 * pow(1024, 2).measured(in: .bit).convert(to: .mebibyte))
43+
try XCTAssertEqual(Measurement("1GiB"), 8 * pow(1024, 3).measured(in: .bit).convert(to: .gibibyte))
44+
try XCTAssertEqual(Measurement("1TiB"), 8 * pow(1024, 4).measured(in: .bit).convert(to: .tebibyte))
45+
try XCTAssertEqual(Measurement("1PiB"), 8 * pow(1024, 5).measured(in: .bit).convert(to: .pebibyte))
46+
try XCTAssertEqual(Measurement("1EiB"), 8 * pow(1024, 6).measured(in: .bit).convert(to: .exbibyte))
47+
try XCTAssertEqual(Measurement("1ZiB"), 8 * pow(1024, 7).measured(in: .bit).convert(to: .zebibyte))
48+
try XCTAssertEqual(Measurement("1YiB"), 8 * pow(1024, 8).measured(in: .bit).convert(to: .yobibyte))
49+
}
50+
}

0 commit comments

Comments
 (0)