@@ -31,6 +31,102 @@ var _ = Describe("Glucose", func() {
31
31
bucketTime = time .Date (now .Year (), now .Month (), now .Day (), 0 , 0 , 0 , 0 , time .UTC )
32
32
})
33
33
34
+ Context ("MinMax" , func () {
35
+ Context ("Update" , func () {
36
+
37
+ It ("Adding 1 value" , func () {
38
+ minMax := MinMax {}
39
+ datum := NewGlucoseWithValue (continuous .Type , now , 5 )
40
+
41
+ minMax .Update (datum )
42
+ Expect (minMax .Max ).To (Equal (5.0 ))
43
+ Expect (minMax .Min ).To (Equal (5.0 ))
44
+ })
45
+
46
+ It ("Adding 2 values, replacing Max" , func () {
47
+ minMax := MinMax {}
48
+
49
+ By ("adding the first number" )
50
+ datum := NewGlucoseWithValue (continuous .Type , now , 3 )
51
+ minMax .Update (datum )
52
+ Expect (minMax .Max ).To (Equal (3.0 ))
53
+ Expect (minMax .Min ).To (Equal (3.0 ))
54
+
55
+ By ("adding the second number" )
56
+ datum = NewGlucoseWithValue (continuous .Type , now , 7 )
57
+ minMax .Update (datum )
58
+ Expect (minMax .Max ).To (Equal (7.0 ))
59
+ Expect (minMax .Min ).To (Equal (3.0 ))
60
+ })
61
+
62
+ It ("Adding 2 values, replacing Min" , func () {
63
+ minMax := MinMax {}
64
+
65
+ By ("adding the first number" )
66
+ datum := NewGlucoseWithValue (continuous .Type , now , 7 )
67
+ minMax .Update (datum )
68
+ Expect (minMax .Max ).To (Equal (7.0 ))
69
+ Expect (minMax .Min ).To (Equal (7.0 ))
70
+
71
+ By ("adding the second number" )
72
+ datum = NewGlucoseWithValue (continuous .Type , now , 3 )
73
+ minMax .Update (datum )
74
+ Expect (minMax .Max ).To (Equal (7.0 ))
75
+ Expect (minMax .Min ).To (Equal (3.0 ))
76
+ })
77
+
78
+ It ("Adding one value, leaving unchanged" , func () {
79
+ minMax := MinMax {Min : 3 , Max : 7 }
80
+
81
+ datum := NewGlucoseWithValue (continuous .Type , now , 5 )
82
+ minMax .Update (datum )
83
+ Expect (minMax .Max ).To (Equal (7.0 ))
84
+ Expect (minMax .Min ).To (Equal (3.0 ))
85
+ })
86
+
87
+ })
88
+
89
+ Context ("Add" , func () {
90
+
91
+ It ("replacing Min" , func () {
92
+ minMax := MinMax {Min : 3 , Max : 7 }
93
+ minMaxNew := MinMax {Min : 2 , Max : 7 }
94
+
95
+ minMax .Add (& minMaxNew )
96
+ Expect (minMax .Max ).To (Equal (7.0 ))
97
+ Expect (minMax .Min ).To (Equal (2.0 ))
98
+ })
99
+
100
+ It ("replacing Max" , func () {
101
+ minMax := MinMax {Min : 3 , Max : 4 }
102
+ minMaxNew := MinMax {Min : 3 , Max : 7 }
103
+
104
+ minMax .Add (& minMaxNew )
105
+ Expect (minMax .Max ).To (Equal (7.0 ))
106
+ Expect (minMax .Min ).To (Equal (3.0 ))
107
+ })
108
+
109
+ It ("replacing both" , func () {
110
+ minMax := MinMax {Min : 4 , Max : 5 }
111
+ minMaxNew := MinMax {Min : 3 , Max : 7 }
112
+
113
+ minMax .Add (& minMaxNew )
114
+ Expect (minMax .Max ).To (Equal (7.0 ))
115
+ Expect (minMax .Min ).To (Equal (3.0 ))
116
+ })
117
+
118
+ It ("replacing neither" , func () {
119
+ minMax := MinMax {Min : 3 , Max : 7 }
120
+ minMaxNew := MinMax {Min : 4 , Max : 5 }
121
+
122
+ minMax .Add (& minMaxNew )
123
+ Expect (minMax .Max ).To (Equal (7.0 ))
124
+ Expect (minMax .Min ).To (Equal (3.0 ))
125
+ })
126
+
127
+ })
128
+ })
129
+
34
130
Context ("Range" , func () {
35
131
It ("range.UpdateTotal" , func () {
36
132
glucoseRange := Range {}
@@ -494,10 +590,9 @@ var _ = Describe("Glucose", func() {
494
590
Expect (userBucket .Time ).To (Equal (bucketTime ))
495
591
Expect (userBucket .Data .Target .Records ).To (Equal (1 ))
496
592
Expect (userBucket .Data .Target .Minutes ).To (Equal (5 ))
593
+ Expect (userBucket .Data .Min ).To (Equal (InTargetBloodGlucose ))
594
+ Expect (userBucket .Data .Max ).To (Equal (InTargetBloodGlucose ))
497
595
Expect (userBucket .IsModified ()).To (BeTrue ())
498
-
499
- Expect (userBucket .Data .Target .Records ).To (Equal (userBucket .Data .Total .Records ))
500
- Expect (userBucket .Data .Target .Minutes ).To (Equal (userBucket .Data .Total .Minutes ))
501
596
})
502
597
503
598
It ("With a bgm value" , func () {
@@ -513,10 +608,9 @@ var _ = Describe("Glucose", func() {
513
608
Expect (userBucket .Time ).To (Equal (bucketTime ))
514
609
Expect (userBucket .Data .Target .Records ).To (Equal (1 ))
515
610
Expect (userBucket .Data .Target .Minutes ).To (Equal (0 ))
611
+ Expect (userBucket .Data .Min ).To (Equal (InTargetBloodGlucose ))
612
+ Expect (userBucket .Data .Max ).To (Equal (InTargetBloodGlucose ))
516
613
Expect (userBucket .IsModified ()).To (BeTrue ())
517
-
518
- Expect (userBucket .Data .Target .Records ).To (Equal (userBucket .Data .Total .Records ))
519
- Expect (userBucket .Data .Target .Minutes ).To (Equal (userBucket .Data .Total .Minutes ))
520
614
})
521
615
522
616
It ("With two cgm values within 5 minutes" , func () {
@@ -531,6 +625,8 @@ var _ = Describe("Glucose", func() {
531
625
Expect (userBucket .LastData ).To (Equal (datumTime ))
532
626
Expect (userBucket .Data .Target .Records ).To (Equal (1 ))
533
627
Expect (userBucket .Data .Target .Minutes ).To (Equal (5 ))
628
+ Expect (userBucket .Data .Min ).To (Equal (InTargetBloodGlucose ))
629
+ Expect (userBucket .Data .Max ).To (Equal (InTargetBloodGlucose ))
534
630
535
631
newDatumTime := bucketTime .Add (9 * time .Minute )
536
632
cgmDatum = NewGlucoseWithValue (continuous .Type , newDatumTime , InTargetBloodGlucose )
@@ -541,6 +637,8 @@ var _ = Describe("Glucose", func() {
541
637
Expect (userBucket .LastData ).To (Equal (datumTime ))
542
638
Expect (userBucket .Data .Target .Records ).To (Equal (1 ))
543
639
Expect (userBucket .Data .Target .Minutes ).To (Equal (5 ))
640
+ Expect (userBucket .Data .Min ).To (Equal (InTargetBloodGlucose ))
641
+ Expect (userBucket .Data .Max ).To (Equal (InTargetBloodGlucose ))
544
642
})
545
643
546
644
It ("With two bgm values within 5 minutes" , func () {
@@ -555,6 +653,8 @@ var _ = Describe("Glucose", func() {
555
653
Expect (userBucket .FirstData ).To (Equal (datumTime ))
556
654
Expect (userBucket .Data .Target .Records ).To (Equal (1 ))
557
655
Expect (userBucket .Data .Target .Minutes ).To (Equal (0 ))
656
+ Expect (userBucket .Data .Min ).To (Equal (InTargetBloodGlucose ))
657
+ Expect (userBucket .Data .Max ).To (Equal (InTargetBloodGlucose ))
558
658
559
659
newDatumTime := bucketTime .Add (9 * time .Minute )
560
660
bgmDatum = NewGlucoseWithValue (selfmonitored .Type , newDatumTime , InTargetBloodGlucose )
@@ -565,29 +665,10 @@ var _ = Describe("Glucose", func() {
565
665
Expect (userBucket .LastData ).To (Equal (newDatumTime ))
566
666
Expect (userBucket .Data .Target .Records ).To (Equal (2 ))
567
667
Expect (userBucket .Data .Target .Minutes ).To (Equal (0 ))
668
+ Expect (userBucket .Data .Min ).To (Equal (InTargetBloodGlucose ))
669
+ Expect (userBucket .Data .Max ).To (Equal (InTargetBloodGlucose ))
568
670
})
569
671
570
- // we no longer check this
571
- //It("With a smbg value in a cgm bucket", func() {
572
- // datumTime := bucketTime.Add(5 * time.Minute)
573
- // userBucket = NewBucket[*GlucoseBucket](userId, bucketTime, SummaryTypeCGM)
574
- // bgmDatum := NewGlucoseWithValue(selfmonitored.Type, datumTime, InTargetBloodGlucose)
575
- //
576
- // err = userBucket.Update(bgmDatum)
577
- // Expect(err).To(HaveOccurred())
578
- // Expect(err).To(MatchError("record for cgm calculation is of invald type smbg"))
579
- //})
580
-
581
- //It("With a cbg value in a bgm bucket", func() {
582
- // datumTime := bucketTime.Add(5 * time.Minute)
583
- // userBucket = NewBucket[*GlucoseBucket](userId, bucketTime, SummaryTypeBGM)
584
- // cgmDatum = NewGlucoseWithValue(continuous.Type, datumTime, InTargetBloodGlucose)
585
- //
586
- // err = userBucket.Update(cgmDatum)
587
- // Expect(err).To(HaveOccurred())
588
- // Expect(err).To(MatchError("record for bgm calculation is of invald type cbg"))
589
- //})
590
-
591
672
It ("With two values in a range" , func () {
592
673
datumTime := bucketTime .Add (5 * time .Minute )
593
674
userBucket = NewBucket [* GlucoseBucket ](userId , bucketTime , SummaryTypeCGM )
@@ -603,11 +684,10 @@ var _ = Describe("Glucose", func() {
603
684
Expect (userBucket .Time ).To (Equal (bucketTime ))
604
685
Expect (userBucket .Data .Target .Records ).To (Equal (1 ))
605
686
Expect (userBucket .Data .Target .Minutes ).To (Equal (5 ))
687
+ Expect (userBucket .Data .Min ).To (Equal (InTargetBloodGlucose ))
688
+ Expect (userBucket .Data .Max ).To (Equal (InTargetBloodGlucose ))
606
689
Expect (userBucket .IsModified ()).To (BeTrue ())
607
690
608
- Expect (userBucket .Data .Target .Records ).To (Equal (userBucket .Data .Total .Records ))
609
- Expect (userBucket .Data .Target .Minutes ).To (Equal (userBucket .Data .Total .Minutes ))
610
-
611
691
secondDatumTime := datumTime .Add (5 * time .Minute )
612
692
cgmDatum = NewGlucoseWithValue (continuous .Type , secondDatumTime , InTargetBloodGlucose )
613
693
@@ -621,11 +701,9 @@ var _ = Describe("Glucose", func() {
621
701
Expect (userBucket .Time ).To (Equal (bucketTime ))
622
702
Expect (userBucket .Data .Target .Records ).To (Equal (2 ))
623
703
Expect (userBucket .Data .Target .Minutes ).To (Equal (10 ))
704
+ Expect (userBucket .Data .Min ).To (Equal (InTargetBloodGlucose ))
705
+ Expect (userBucket .Data .Max ).To (Equal (InTargetBloodGlucose ))
624
706
Expect (userBucket .IsModified ()).To (BeTrue ())
625
-
626
- Expect (userBucket .Data .Target .Records ).To (Equal (userBucket .Data .Total .Records ))
627
- Expect (userBucket .Data .Target .Minutes ).To (Equal (userBucket .Data .Total .Minutes ))
628
-
629
707
})
630
708
631
709
It ("With values in all ranges" , func () {
@@ -640,6 +718,9 @@ var _ = Describe("Glucose", func() {
640
718
ExtremeHighBloodGlucose + 0.1 : & userBucket .Data .ExtremeHigh ,
641
719
}
642
720
721
+ expectedMin := 9999.9
722
+ expectedMax := - 1.0
723
+
643
724
expectedGlucose := 0.0
644
725
expectedMinutes := 0
645
726
expectedRecords := 0
@@ -701,7 +782,19 @@ var _ = Describe("Glucose", func() {
701
782
Expect (userBucket .Data .VeryHigh .Records ).To (Equal (expectedVeryHighRecords ))
702
783
Expect (userBucket .Data .VeryHigh .Minutes ).To (Equal (expectedVeryHighMinutes ))
703
784
704
- // we should check that total gets variance
785
+ if k > float64 (expectedMax ) {
786
+ expectedMax = k
787
+ }
788
+ if k < float64 (expectedMin ) {
789
+ expectedMin = k
790
+ }
791
+ Expect (userBucket .Data .Min ).To (Equal (expectedMin ))
792
+ Expect (userBucket .Data .Max ).To (Equal (expectedMax ))
793
+
794
+ if offset > 0 {
795
+ Expect (userBucket .Data .Total .Variance ).ToNot (BeZero ())
796
+ }
797
+
705
798
offset ++
706
799
}
707
800
})
@@ -760,18 +853,24 @@ var _ = Describe("Glucose", func() {
760
853
Expect (period .Target .Records ).To (Equal (1 ))
761
854
Expect (period .HoursWithData ).To (Equal (1 ))
762
855
Expect (period .DaysWithData ).To (Equal (1 ))
856
+ Expect (period .Min ).To (Equal (InTargetBloodGlucose ))
857
+ Expect (period .Max ).To (Equal (InTargetBloodGlucose ))
763
858
764
859
err = period .Update (bucketTwo )
765
860
Expect (err ).ToNot (HaveOccurred ())
766
861
Expect (period .Target .Records ).To (Equal (2 ))
767
862
Expect (period .HoursWithData ).To (Equal (2 ))
768
863
Expect (period .DaysWithData ).To (Equal (1 ))
864
+ Expect (period .Min ).To (Equal (InTargetBloodGlucose ))
865
+ Expect (period .Max ).To (Equal (InTargetBloodGlucose ))
769
866
770
867
err = period .Update (bucketThree )
771
868
Expect (err ).ToNot (HaveOccurred ())
772
869
Expect (period .Target .Records ).To (Equal (3 ))
773
870
Expect (period .HoursWithData ).To (Equal (3 ))
774
871
Expect (period .DaysWithData ).To (Equal (2 ))
872
+ Expect (period .Min ).To (Equal (InTargetBloodGlucose ))
873
+ Expect (period .Max ).To (Equal (InTargetBloodGlucose ))
775
874
})
776
875
777
876
It ("Finalize a 1d period" , func () {
@@ -1130,6 +1229,7 @@ var _ = Describe("Glucose", func() {
1130
1229
Variance : 8 ,
1131
1230
},
1132
1231
},
1232
+ MinMax : MinMax {Min : 3 , Max : 5 },
1133
1233
HoursWithData : 0 ,
1134
1234
DaysWithData : 1 ,
1135
1235
AverageGlucose : 2 ,
@@ -1205,6 +1305,7 @@ var _ = Describe("Glucose", func() {
1205
1305
Variance : 15 ,
1206
1306
},
1207
1307
},
1308
+ MinMax : MinMax {Min : 5 , Max : 6 },
1208
1309
HoursWithData : 99 ,
1209
1310
DaysWithData : 98 ,
1210
1311
AverageGlucose : 97 ,
@@ -1265,6 +1366,7 @@ var _ = Describe("Glucose", func() {
1265
1366
Percent : - 8 ,
1266
1367
},
1267
1368
},
1369
+ MinMax : MinMax {Min : - 2 , Max : - 1 },
1268
1370
HoursWithData : - 99 ,
1269
1371
DaysWithData : - 97 ,
1270
1372
AverageGlucose : - 95 ,
0 commit comments