@@ -19,6 +19,10 @@ var _ = Describe("Glucose", func() {
1919 Expect (glucose .Mmoll ).To (Equal ("mmol/l" ))
2020 })
2121
22+ It ("has MmolLMinute" , func () {
23+ Expect (glucose .MmolLMinute ).To (Equal ("mmol/L/minute" ))
24+ })
25+
2226 It ("has MgdL" , func () {
2327 Expect (glucose .MgdL ).To (Equal ("mg/dL" ))
2428 })
@@ -27,6 +31,10 @@ var _ = Describe("Glucose", func() {
2731 Expect (glucose .Mgdl ).To (Equal ("mg/dl" ))
2832 })
2933
34+ It ("has MgdLMinute" , func () {
35+ Expect (glucose .MgdLMinute ).To (Equal ("mg/dL/minute" ))
36+ })
37+
3038 It ("has MmolLMinimum" , func () {
3139 Expect (glucose .MmolLMinimum ).To (Equal (0.0 ))
3240 })
@@ -35,6 +43,14 @@ var _ = Describe("Glucose", func() {
3543 Expect (glucose .MmolLMaximum ).To (Equal (55.0 ))
3644 })
3745
46+ It ("has MmolLMinuteMinimum" , func () {
47+ Expect (glucose .MmolLMinuteMinimum ).To (Equal (- 5.5 ))
48+ })
49+
50+ It ("has MmolLMinuteMaximum" , func () {
51+ Expect (glucose .MmolLMinuteMaximum ).To (Equal (5.5 ))
52+ })
53+
3854 It ("has MgdLMinimum" , func () {
3955 Expect (glucose .MgdLMinimum ).To (Equal (0.0 ))
4056 })
@@ -43,6 +59,14 @@ var _ = Describe("Glucose", func() {
4359 Expect (glucose .MgdLMaximum ).To (Equal (1000.0 ))
4460 })
4561
62+ It ("has MgdLMinuteMinimum" , func () {
63+ Expect (glucose .MgdLMinuteMinimum ).To (Equal (- 100.0 ))
64+ })
65+
66+ It ("has MgdLMinuteMaximum" , func () {
67+ Expect (glucose .MgdLMinuteMaximum ).To (Equal (100.0 ))
68+ })
69+
4670 It ("has MmolLToMgdLConversionFactor" , func () {
4771 Expect (glucose .MmolLToMgdLConversionFactor ).To (Equal (18.01559 ))
4872 })
@@ -57,6 +81,12 @@ var _ = Describe("Glucose", func() {
5781 })
5882 })
5983
84+ Context ("RateUnits" , func () {
85+ It ("returns the expected units" , func () {
86+ Expect (glucose .RateUnits ()).To (ConsistOf ("mmol/L/minute" , "mg/dL/minute" ))
87+ })
88+ })
89+
6090 DescribeTable ("ValueRangeForUnits" ,
6191 func (units * string , expectedLower float64 , expectedUpper float64 ) {
6292 actualLower , actualUpper := glucose .ValueRangeForUnits (units )
@@ -125,28 +155,87 @@ var _ = Describe("Glucose", func() {
125155 }
126156 })
127157 })
158+
128159 Context ("NormalizeValueForUnitsWithFullPrecision" , func () {
129160 DescribeTable ("given value and units" ,
130161 func (value * float64 , units * string , expectedValue * float64 ) {
131162 actualValue := glucose .NormalizeValueForUnitsWithFullPrecision (value , units )
132- if expectedValue == nil {
133- Expect (actualValue ).To (BeNil ())
134- } else {
135- Expect (actualValue ).ToNot (BeNil ())
136- Expect (* actualValue ).To (Equal (* expectedValue ))
137- }
163+ Expect (actualValue ).To (Equal (expectedValue ))
138164 },
139165 Entry ("returns nil for nil value" , nil , pointer .FromString ("mmol/L" ), nil ),
140166 Entry ("returns unchanged value for nil units" , pointer .FromFloat64 (10.0 ), nil , pointer .FromFloat64 (10.0 )),
141167 Entry ("returns unchanged value for unknown units" , pointer .FromFloat64 (10.0 ), pointer .FromString ("unknown" ), pointer .FromFloat64 (10.0 )),
142168 Entry ("returns unchanged value for mmol/L units" , pointer .FromFloat64 (10.0 ), pointer .FromString ("mmol/L" ), pointer .FromFloat64 (10.0 )),
143169 Entry ("returns unchanged value for mmol/l units" , pointer .FromFloat64 (10.0 ), pointer .FromString ("mmol/l" ), pointer .FromFloat64 (10.0 )),
144-
145170 Entry ("returns converted value for mg/dL units" , pointer .FromFloat64 (140.0 ), pointer .FromString ("mg/dL" ), pointer .FromFloat64 (7.771047187463747 )),
146171 Entry ("returns converted value for mg/dL units" , pointer .FromFloat64 (100.0 ), pointer .FromString ("mg/dL" ), pointer .FromFloat64 (5.550747991045533 )),
147172 Entry ("returns converted value for mg/dl units" , pointer .FromFloat64 (80.0 ), pointer .FromString ("mg/dl" ), pointer .FromFloat64 (4.440598392836427 )),
148173 Entry ("returns converted value for mg/dl units" , pointer .FromFloat64 (69.0 ), pointer .FromString ("mg/dl" ), pointer .FromFloat64 (3.830016113821418 )),
149174 Entry ("returns converted value for mg/dl units" , pointer .FromFloat64 (50.0 ), pointer .FromString ("mg/dl" ), pointer .FromFloat64 (2.7753739955227665 )),
150175 )
151176 })
177+
178+ DescribeTable ("ValueRangeForRateUnits" ,
179+ func (rateUnits * string , expectedLower float64 , expectedUpper float64 ) {
180+ actualLower , actualUpper := glucose .ValueRangeForRateUnits (rateUnits )
181+ Expect (actualLower ).To (Equal (expectedLower ))
182+ Expect (actualUpper ).To (Equal (expectedUpper ))
183+ },
184+ Entry ("returns no range for nil" , nil , - math .MaxFloat64 , math .MaxFloat64 ),
185+ Entry ("returns no range for unknown units" , pointer .FromString ("unknown" ), - math .MaxFloat64 , math .MaxFloat64 ),
186+ Entry ("returns expected range for mmol/L/minute units" , pointer .FromString ("mmol/L/minute" ), - 5.5 , 5.5 ),
187+ Entry ("returns expected range for mg/dL/minute units" , pointer .FromString ("mg/dL/minute" ), - 100.0 , 100.0 ),
188+ )
189+
190+ DescribeTable ("NormalizeRateUnits" ,
191+ func (rateUnits * string , expectedRateUnits * string ) {
192+ actualRateUnits := glucose .NormalizeRateUnits (rateUnits )
193+ if expectedRateUnits == nil {
194+ Expect (actualRateUnits ).To (BeNil ())
195+ } else {
196+ Expect (actualRateUnits ).ToNot (BeNil ())
197+ Expect (* actualRateUnits ).To (Equal (* expectedRateUnits ))
198+ }
199+ },
200+ Entry ("returns nil for nil" , nil , nil ),
201+ Entry ("returns unchanged units for unknown units" , pointer .FromString ("unknown" ), pointer .FromString ("unknown" )),
202+ Entry ("returns mmol/L/minute for mmol/L/minute" , pointer .FromString ("mmol/L/minute" ), pointer .FromString ("mmol/L/minute" )),
203+ Entry ("returns mmol/L/minute for mg/dL/minute" , pointer .FromString ("mg/dL/minute" ), pointer .FromString ("mmol/L/minute" )),
204+ )
205+
206+ Context ("NormalizeValueForRateUnits" , func () {
207+ DescribeTable ("given value and units" ,
208+ func (value * float64 , rateUnits * string , expectedValue * float64 ) {
209+ actualValue := glucose .NormalizeValueForRateUnits (value , rateUnits )
210+ if expectedValue == nil {
211+ Expect (actualValue ).To (BeNil ())
212+ } else {
213+ Expect (actualValue ).ToNot (BeNil ())
214+ Expect (* actualValue ).To (Equal (* expectedValue ))
215+ }
216+ },
217+
218+ Entry ("returns nil for nil value" , nil , pointer .FromString ("mmol/L/minute" ), nil ),
219+ Entry ("returns unchanged value for nil units" , pointer .FromFloat64 (1.0 ), nil , pointer .FromFloat64 (1.0 )),
220+ Entry ("returns unchanged value for unknown units" , pointer .FromFloat64 (1.0 ), pointer .FromString ("unknown" ), pointer .FromFloat64 (1.0 )),
221+ Entry ("returns unchanged value for mmol/L/minute units" , pointer .FromFloat64 (1.0 ), pointer .FromString ("mmol/L/minute" ), pointer .FromFloat64 (1.0 )),
222+ Entry ("returns converted value for mg/dL/minute units" , pointer .FromFloat64 (18.0 ), pointer .FromString ("mg/dL/minute" ), pointer .FromFloat64 (0.99913 )),
223+ )
224+
225+ It ("properly normalizes a range of mmol/L/minute values" , func () {
226+ for value := glucose .MmolLMinuteMinimum ; value <= glucose .MmolLMinuteMaximum ; value += 0.1 {
227+ normalizedValue := glucose .NormalizeValueForRateUnits (pointer .FromFloat64 (float64 (value )), pointer .FromString ("mmol/L/minute" ))
228+ Expect (normalizedValue ).ToNot (BeNil ())
229+ Expect (* normalizedValue ).To (Equal (value ))
230+ }
231+ })
232+
233+ It ("properly normalizes a range of mg/dL/minute values" , func () {
234+ for value := int (glucose .MgdLMinuteMinimum ); value <= int (glucose .MgdLMinuteMaximum ); value ++ {
235+ normalizedValue := glucose .NormalizeValueForRateUnits (pointer .FromFloat64 (float64 (value )), pointer .FromString ("mg/dL/minute" ))
236+ Expect (normalizedValue ).ToNot (BeNil ())
237+ Expect (int (* normalizedValue * 18.01559 + math .Copysign (0.5 , float64 (value )))).To (Equal (value ))
238+ }
239+ })
240+ })
152241})
0 commit comments