Skip to content

Commit 476cdcc

Browse files
authored
Merge branch 'main' into cameron/remove-coredata-import
2 parents a44d25e + 98bdd52 commit 476cdcc

4 files changed

Lines changed: 44 additions & 40 deletions

File tree

Sources/LoopAlgorithm/AbsoluteScheduleValue.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
import Foundation
88

9-
public struct AbsoluteScheduleValue<T>: TimelineValue {
9+
public struct AbsoluteScheduleValue<T: Sendable>: TimelineValue, Sendable {
1010
public var startDate: Date
1111
public var endDate: Date
1212
public var value: T

Sources/LoopAlgorithm/LoopQuantity.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public struct LoopQuantity: Hashable, Equatable, Comparable, Sendable {
1818
}
1919

2020
public func `is`(compatibleWith unit: LoopUnit) -> Bool {
21-
self.unit.conversionFactor(from: unit) != nil
21+
self.unit.conversionFactor(toUnit: unit) != nil
2222
}
2323

2424
/**
@@ -27,7 +27,7 @@ public struct LoopQuantity: Hashable, Equatable, Comparable, Sendable {
2727
@discussion Throws an exception if the receiver's value cannot be converted to one of the requested unit.
2828
*/
2929
public func doubleValue(for unit: LoopUnit) -> Double {
30-
guard let conversionFactor = self.unit.conversionFactor(from: unit) else {
30+
guard let conversionFactor = self.unit.conversionFactor(toUnit: unit) else {
3131
fatalError("Conversion Error: \(self.unit.unitString) is not compatible with \(unit.unitString).")
3232
}
3333

Sources/LoopAlgorithm/LoopUnit.swift

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ public enum LoopUnit: Sendable, CaseIterable {
3232
self = LoopUnit.allCases.first(where: { $0.unitString == string }) ?? .gram
3333
}
3434

35-
public func conversionFactor(from unit: LoopUnit) -> Double? {
36-
switch (self, unit) {
35+
public func conversionFactor(toUnit: LoopUnit) -> Double? {
36+
switch (self, toUnit) {
3737
case (.gram, .gram),
3838
(.gramsPerUnit, .gramsPerUnit),
3939
(.internationalUnit, .internationalUnit),
@@ -52,34 +52,38 @@ public enum LoopUnit: Sendable, CaseIterable {
5252
(.second, .second):
5353
return 1
5454
case (.milligramsPerDeciliterPerSecond, .milligramsPerDeciliterPerMinute),
55-
(.millimolesPerLiterPerSecond, .millimolesPerLiterPerMinute),
56-
(.second, .minute),
57-
(.minute, .hour):
55+
(.millimolesPerLiterPerSecond, .millimolesPerLiterPerMinute):
5856
return 60
57+
case (.second, .minute),
58+
(.minute, .hour):
59+
return 1/60
5960
case (.milligramsPerDeciliterPerMinute, .milligramsPerDeciliterPerSecond),
60-
(.millimolesPerLiterPerMinute, .millimolesPerLiterPerSecond),
61-
(.minute, .second),
62-
(.hour, .minute):
61+
(.millimolesPerLiterPerMinute, .millimolesPerLiterPerSecond):
6362
return 1/60
63+
case (.minute, .second),
64+
(.hour, .minute):
65+
return 60
6466
case (.second, .hour):
65-
return 3600
66-
case (.hour, .second):
6767
return 1/3600
68+
case (.hour, .second):
69+
return 3600
6870
case (.milligramsPerDeciliter, .millimolesPerLiter),
6971
(.milligramsPerDeciliterPerSecond, .millimolesPerLiterPerSecond),
7072
(.milligramsPerDeciliterPerMinute, .millimolesPerLiterPerMinute),
7173
(.milligramsPerDeciliterPerInternationalUnit, .millimolesPerLiterPerInternationalUnit):
7274
return 1/UnitMolarMassBloodGlucoseDivisible
75+
case (.milligramsPerDeciliterPerSecond, .millimolesPerLiterPerMinute):
76+
return 1/UnitMolarMassBloodGlucoseDivisible / 60
77+
case (.milligramsPerDeciliterPerMinute, .millimolesPerLiterPerSecond):
78+
return 1/UnitMolarMassBloodGlucoseDivisible * 60
7379
case (.millimolesPerLiter, .milligramsPerDeciliter),
7480
(.millimolesPerLiterPerSecond, .milligramsPerDeciliterPerSecond),
7581
(.millimolesPerLiterPerMinute, .milligramsPerDeciliterPerMinute),
7682
(.millimolesPerLiterPerInternationalUnit, .milligramsPerDeciliterPerInternationalUnit):
7783
return UnitMolarMassBloodGlucoseDivisible
78-
case (.milligramsPerDeciliterPerMinute, .millimolesPerLiterPerSecond),
79-
(.millimolesPerLiterPerMinute, .milligramsPerDeciliterPerSecond):
80-
return 1/UnitMolarMassBloodGlucoseDivisible / 60
81-
case (.millimolesPerLiterPerSecond, .milligramsPerDeciliterPerMinute),
82-
(.milligramsPerDeciliterPerSecond, .millimolesPerLiterPerMinute):
84+
case (.millimolesPerLiterPerSecond, .milligramsPerDeciliterPerMinute):
85+
return UnitMolarMassBloodGlucoseDivisible / 60
86+
case (.millimolesPerLiterPerMinute, .milligramsPerDeciliterPerSecond):
8387
return UnitMolarMassBloodGlucoseDivisible * 60
8488
case (.gram, _),
8589
(.gramsPerUnit, _),

Tests/LoopAlgorithmTests/LoopUnitTests.swift

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -143,60 +143,60 @@ class LoopUnitTests: XCTestCase {
143143
func testTimeConversion() {
144144
var unit1 = LoopUnit.second
145145
var unit2 = LoopUnit.minute
146-
XCTAssertEqual(unit1.conversionFactor(from: unit2), 60)
147-
XCTAssertEqual(unit2.conversionFactor(from: unit1), 1/60)
146+
XCTAssertEqual(unit1.conversionFactor(toUnit: unit2), 1/60)
147+
XCTAssertEqual(unit2.conversionFactor(toUnit: unit1), 60)
148148

149149
unit1 = LoopUnit.milligramsPerDeciliterPerSecond
150150
unit2 = LoopUnit.milligramsPerDeciliterPerMinute
151-
XCTAssertEqual(unit1.conversionFactor(from: unit2), 60)
152-
XCTAssertEqual(unit2.conversionFactor(from: unit1), 1/60)
151+
XCTAssertEqual(unit1.conversionFactor(toUnit: unit2), 60)
152+
XCTAssertEqual(unit2.conversionFactor(toUnit: unit1), 1/60)
153153

154154
unit1 = LoopUnit.millimolesPerLiterPerSecond
155155
unit2 = LoopUnit.millimolesPerLiterPerMinute
156-
XCTAssertEqual(unit1.conversionFactor(from: unit2), 60)
157-
XCTAssertEqual(unit2.conversionFactor(from: unit1), 1/60)
156+
XCTAssertEqual(unit1.conversionFactor(toUnit: unit2), 60)
157+
XCTAssertEqual(unit2.conversionFactor(toUnit: unit1), 1/60)
158158

159159
unit1 = LoopUnit.minute
160160
unit2 = LoopUnit.hour
161-
XCTAssertEqual(unit1.conversionFactor(from: unit2), 60)
162-
XCTAssertEqual(unit2.conversionFactor(from: unit1), 1/60)
161+
XCTAssertEqual(unit1.conversionFactor(toUnit: unit2), 1/60)
162+
XCTAssertEqual(unit2.conversionFactor(toUnit: unit1), 60)
163163

164164
unit1 = LoopUnit.second
165165
unit2 = LoopUnit.hour
166-
XCTAssertEqual(unit1.conversionFactor(from: unit2), 3600)
167-
XCTAssertEqual(unit2.conversionFactor(from: unit1), 1/3600)
166+
XCTAssertEqual(unit1.conversionFactor(toUnit: unit2), 1/3600)
167+
XCTAssertEqual(unit2.conversionFactor(toUnit: unit1), 3600)
168168
}
169169

170170
func testGlucoseConversion() {
171171
var unit1 = LoopUnit.milligramsPerDeciliter
172172
var unit2 = LoopUnit.millimolesPerLiter
173-
XCTAssertEqual(unit1.conversionFactor(from: unit2), 1/UnitMolarMassBloodGlucoseDivisible)
174-
XCTAssertEqual(unit2.conversionFactor(from: unit1), UnitMolarMassBloodGlucoseDivisible)
173+
XCTAssertEqual(unit1.conversionFactor(toUnit: unit2), 1/UnitMolarMassBloodGlucoseDivisible)
174+
XCTAssertEqual(unit2.conversionFactor(toUnit: unit1), UnitMolarMassBloodGlucoseDivisible)
175175

176176
unit1 = LoopUnit.milligramsPerDeciliterPerSecond
177177
unit2 = LoopUnit.millimolesPerLiterPerSecond
178-
XCTAssertEqual(unit1.conversionFactor(from: unit2), 1/UnitMolarMassBloodGlucoseDivisible)
179-
XCTAssertEqual(unit2.conversionFactor(from: unit1), UnitMolarMassBloodGlucoseDivisible)
178+
XCTAssertEqual(unit1.conversionFactor(toUnit: unit2), 1/UnitMolarMassBloodGlucoseDivisible)
179+
XCTAssertEqual(unit2.conversionFactor(toUnit: unit1), UnitMolarMassBloodGlucoseDivisible)
180180

181181
unit1 = LoopUnit.milligramsPerDeciliterPerMinute
182182
unit2 = LoopUnit.millimolesPerLiterPerMinute
183-
XCTAssertEqual(unit1.conversionFactor(from: unit2), 1/UnitMolarMassBloodGlucoseDivisible)
184-
XCTAssertEqual(unit2.conversionFactor(from: unit1), UnitMolarMassBloodGlucoseDivisible)
183+
XCTAssertEqual(unit1.conversionFactor(toUnit: unit2), 1/UnitMolarMassBloodGlucoseDivisible)
184+
XCTAssertEqual(unit2.conversionFactor(toUnit: unit1), UnitMolarMassBloodGlucoseDivisible)
185185

186186
unit1 = LoopUnit.milligramsPerDeciliterPerInternationalUnit
187187
unit2 = LoopUnit.millimolesPerLiterPerInternationalUnit
188-
XCTAssertEqual(unit1.conversionFactor(from: unit2), 1/UnitMolarMassBloodGlucoseDivisible)
189-
XCTAssertEqual(unit2.conversionFactor(from: unit1), UnitMolarMassBloodGlucoseDivisible)
188+
XCTAssertEqual(unit1.conversionFactor(toUnit: unit2), 1/UnitMolarMassBloodGlucoseDivisible)
189+
XCTAssertEqual(unit2.conversionFactor(toUnit: unit1), UnitMolarMassBloodGlucoseDivisible)
190190

191191
unit1 = LoopUnit.milligramsPerDeciliterPerMinute
192192
unit2 = LoopUnit.millimolesPerLiterPerSecond
193-
XCTAssertEqual(unit1.conversionFactor(from: unit2), 1/UnitMolarMassBloodGlucoseDivisible / 60)
194-
XCTAssertEqual(unit2.conversionFactor(from: unit1), UnitMolarMassBloodGlucoseDivisible * 60)
193+
XCTAssertEqual(unit1.conversionFactor(toUnit: unit2), 1/UnitMolarMassBloodGlucoseDivisible * 60)
194+
XCTAssertEqual(unit2.conversionFactor(toUnit: unit1), UnitMolarMassBloodGlucoseDivisible / 60)
195195

196196
unit1 = LoopUnit.milligramsPerDeciliterPerSecond
197197
unit2 = LoopUnit.millimolesPerLiterPerMinute
198-
XCTAssertEqual(unit1.conversionFactor(from: unit2), UnitMolarMassBloodGlucoseDivisible * 60)
199-
XCTAssertEqual(unit2.conversionFactor(from: unit1), 1/UnitMolarMassBloodGlucoseDivisible / 60)
198+
XCTAssertEqual(unit1.conversionFactor(toUnit: unit2), 1/UnitMolarMassBloodGlucoseDivisible / 60)
199+
XCTAssertEqual(unit2.conversionFactor(toUnit: unit1), UnitMolarMassBloodGlucoseDivisible * 60)
200200

201201
let quantity1 = LoopQuantity(unit: .millimolesPerLiter, doubleValue: 4)
202202
let quantity2 = LoopQuantity(unit: .milligramsPerDeciliter, doubleValue: 72.06235200002165)

0 commit comments

Comments
 (0)