use of com.eveningoutpost.dexdrip.utils.LibreTrendPoint in project xDrip by NightscoutFoundation.
the class ReadingDataTest method testCalculateSmoothDataImproved.
@Test
public void testCalculateSmoothDataImproved() {
// A very simple case, we only have one reading containing sparsed data, no errors
ReadingData readingData = new ReadingData();
readingData.trend = new ArrayList<GlucoseData>();
List<LibreTrendPoint> libreTrendPoints = new ArrayList<LibreTrendPoint>(16 * 24 * 60);
while (libreTrendPoints.size() < 16 * 24 * 60) {
libreTrendPoints.add(libreTrendPoints.size(), new LibreTrendPoint());
}
int[] times = { 0, 2, 4, 6, 7, 12, 15 };
int[] data = { 200, 210, 222, 230, 240, 250, 260 };
for (int i = 0; i < times.length; i++) {
readingData.trend.add(new GlucoseData());
readingData.trend.get(i).sensorTime = 1000 - times[i];
readingData.trend.get(i).glucoseLevelRaw = data[i];
LibreTrendPoint libreTrendPoint = new LibreTrendPoint(1000 - times[i], data[i], 0x700, GlucoseData.DataSource.BLE);
libreTrendPoints.set((int) libreTrendPoint.getSensorTime(), libreTrendPoint);
}
readingData.calculateSmoothDataImproved(libreTrendPoints);
assertWithMessage("First 4 values should be used").that(readingData.trend.get(0).glucoseLevelRawSmoothed).isEqualTo((200 + 210 + 222 + 230) / 4);
}
use of com.eveningoutpost.dexdrip.utils.LibreTrendPoint in project xDrip by NightscoutFoundation.
the class ReadingDataTest method testCalculateSmoothDataAllValues.
@Test
public void testCalculateSmoothDataAllValues() {
// Having a normal reading data. All data exists (due to further readings).
// No errors.
ReadingData readingData = new ReadingData();
readingData.trend = new ArrayList<GlucoseData>();
List<LibreTrendPoint> libreTrendPoints = new ArrayList<LibreTrendPoint>(16 * 24 * 60);
while (libreTrendPoints.size() < 16 * 24 * 60) {
libreTrendPoints.add(libreTrendPoints.size(), new LibreTrendPoint());
}
int[] times = { 0, 2, 4, 6, 7, 12, 15 };
int[] data = { 200, 220, 240, 260, 270, 320, 350 };
for (int i = 0; i < times.length; i++) {
readingData.trend.add(new GlucoseData());
readingData.trend.get(i).sensorTime = 1000 - times[i];
readingData.trend.get(i).glucoseLevelRaw = data[i];
LibreTrendPoint libreTrendPoint = new LibreTrendPoint(1000 - times[i], data[i], 0x700, GlucoseData.DataSource.BLE);
libreTrendPoints.set((int) libreTrendPoint.getSensorTime(), libreTrendPoint);
}
// for LibreTrendPoint add data to fill the gap.
times = new int[] { 1, 3, 5, 8, 9, 10, 11, 13, 14, 16 };
data = new int[] { 210, 230, 250, 280, 290, 300, 310, 330, 340, 360 };
for (int i = 0; i < times.length; i++) {
LibreTrendPoint libreTrendPoint = new LibreTrendPoint(1000 - times[i], data[i], 0x700, GlucoseData.DataSource.BLE);
libreTrendPoints.set((int) libreTrendPoint.getSensorTime(), libreTrendPoint);
}
for (int i = 0; i < 20; i++) System.err.println(1000 - i + " " + libreTrendPoints.get(1000 - i).rawSensorValue);
readingData.calculateSmoothDataImproved(libreTrendPoints);
assertWithMessage("First 5 values should be used").that(readingData.trend.get(0).glucoseLevelRawSmoothed).isEqualTo((200 + 210 + 220 + 230 + 240) / 5);
assertWithMessage("First 5 values should be used (point 2)").that(readingData.trend.get(1).glucoseLevelRawSmoothed).isEqualTo((220 + 230 + 240 + 250 + 260) / 5);
assertWithMessage("First 5 values should be used (point 4)").that(readingData.trend.get(2).glucoseLevelRawSmoothed).isEqualTo((240 + 250 + 260 + 270 + 280) / 5);
assertWithMessage("First 5 values should be used (point 6)").that(readingData.trend.get(3).glucoseLevelRawSmoothed).isEqualTo((260 + 270 + 280 + 290 + 300) / 5);
assertWithMessage("First 5 values should be used (point 7)").that(readingData.trend.get(4).glucoseLevelRawSmoothed).isEqualTo((270 + 280 + 290 + 300 + 310) / 5);
assertWithMessage("First 5 values should be used (point 12)").that(readingData.trend.get(5).glucoseLevelRawSmoothed).isEqualTo((320 + 330 + 340 + 350 + 360) / 5);
assertWithMessage("First 5 values should be used (point 15)").that(readingData.trend.get(6).glucoseLevelRawSmoothed).isEqualTo((350 + 360) / 2);
}
use of com.eveningoutpost.dexdrip.utils.LibreTrendPoint in project xDrip by NightscoutFoundation.
the class ReadingDataTest method testCalculateSmoothDataAllValuesOneError.
@Test
public void testCalculateSmoothDataAllValuesOneError() {
// Having a normal reading data. All data exists (due to further readings).
// No errors.
ReadingData readingData = new ReadingData();
readingData.trend = new ArrayList<GlucoseData>();
List<LibreTrendPoint> libreTrendPoints = new ArrayList<LibreTrendPoint>(16 * 24 * 60);
while (libreTrendPoints.size() < 16 * 24 * 60) {
libreTrendPoints.add(libreTrendPoints.size(), new LibreTrendPoint());
}
int[] times = { 0, 2, 4, 6, 7, 12, 15 };
int[] data = { 200, 220, 240, 260, 270, 320, 350 };
for (int i = 0; i < times.length; i++) {
readingData.trend.add(new GlucoseData());
readingData.trend.get(i).sensorTime = 1000 - times[i];
readingData.trend.get(i).glucoseLevelRaw = data[i];
LibreTrendPoint libreTrendPoint = new LibreTrendPoint(1000 - times[i], data[i], 0x700, GlucoseData.DataSource.BLE);
libreTrendPoints.set((int) libreTrendPoint.getSensorTime(), libreTrendPoint);
}
// for LibreTrendPoint add data to fill the gap.
times = new int[] { 1, 3, 5, 8, 9, 10, 11, 13, 14, 16 };
data = new int[] { 210, 230, 250, 280, 290, 300, 310, 330, 340, 360 };
for (int i = 0; i < times.length; i++) {
LibreTrendPoint libreTrendPoint = new LibreTrendPoint(1000 - times[i], data[i], 0x700, GlucoseData.DataSource.BLE);
libreTrendPoints.set((int) libreTrendPoint.getSensorTime(), libreTrendPoint);
}
// The Sixth value has an error
libreTrendPoints.get(992).rawSensorValue = 0;
for (int i = 0; i < 20; i++) System.err.println(1000 - i + " " + libreTrendPoints.get(1000 - i).rawSensorValue);
readingData.calculateSmoothDataImproved(libreTrendPoints);
// Here is how things should look like
// reading 0 1 2 3 4 5 6
// point 1000 999 998 997 996 995 994 993 992 991 990 989 988 987 986 985 984 983
// raw 200 210 220 230 240 250 260 270 280 290 300 310 320 330 340 350 360 370
// isError f f f f f t t t t f f f f f f f f f
assertWithMessage("First 5 values should be used").that(readingData.trend.get(0).glucoseLevelRawSmoothed).isEqualTo((200 + 210 + 220 + 230 + 240) / 5);
assertWithMessage("First 3 values should be used (point 2)").that(readingData.trend.get(1).glucoseLevelRawSmoothed).isEqualTo((220 + 230 + 240) / 3);
assertWithMessage("First value used then 2 at the end (point 4)").that(readingData.trend.get(2).glucoseLevelRawSmoothed).isEqualTo((240 + 290 + 300) / 3);
assertWithMessage("3 first points ignored, then 4 used values should be used (point 6)").that(readingData.trend.get(3).glucoseLevelRawSmoothed).isEqualTo((290 + 300 + 310 + 320) / 4);
assertWithMessage("2 first points ignored, then 5 used values should be used (point 7)").that(readingData.trend.get(4).glucoseLevelRawSmoothed).isEqualTo((290 + 300 + 310 + 320 + 330) / 5);
assertWithMessage("First 5 values should be used (point 12)").that(readingData.trend.get(5).glucoseLevelRawSmoothed).isEqualTo((320 + 330 + 340 + 350 + 360) / 5);
assertWithMessage("First 5 values should be used (point 15)").that(readingData.trend.get(6).glucoseLevelRawSmoothed).isEqualTo((350 + 360) / 2);
}
use of com.eveningoutpost.dexdrip.utils.LibreTrendPoint in project xDrip-plus by jamorham.
the class ReadingDataTest method testCalculateSmoothDataAllValuesTwoErrors.
@Test
public void testCalculateSmoothDataAllValuesTwoErrors() {
// Having a normal reading data. All data exists (due to further readings).
// No errors.
ReadingData readingData = new ReadingData();
readingData.trend = new ArrayList<GlucoseData>();
List<LibreTrendPoint> libreTrendPoints = new ArrayList<LibreTrendPoint>(16 * 24 * 60);
while (libreTrendPoints.size() < 16 * 24 * 60) {
libreTrendPoints.add(libreTrendPoints.size(), new LibreTrendPoint());
}
int[] times = { 0, 2, 4, 6, 7, 12, 15 };
int[] data = { 200, 220, 240, 260, 270, 320, 350 };
for (int i = 0; i < times.length; i++) {
readingData.trend.add(new GlucoseData());
readingData.trend.get(i).sensorTime = 1000 - times[i];
readingData.trend.get(i).glucoseLevelRaw = data[i];
LibreTrendPoint libreTrendPoint = new LibreTrendPoint(1000 - times[i], data[i], 0x700, GlucoseData.DataSource.BLE);
libreTrendPoints.set((int) libreTrendPoint.getSensorTime(), libreTrendPoint);
}
// for LibreTrendPoint add data to fill the gap.
times = new int[] { 1, 3, 5, 8, 9, 10, 11, 13, 14, 16 };
data = new int[] { 210, 230, 250, 280, 290, 300, 310, 330, 340, 360 };
for (int i = 0; i < times.length; i++) {
LibreTrendPoint libreTrendPoint = new LibreTrendPoint(1000 - times[i], data[i], 0x700, GlucoseData.DataSource.BLE);
libreTrendPoints.set((int) libreTrendPoint.getSensorTime(), libreTrendPoint);
}
// Two errors from 992 to 998
libreTrendPoints.get(992).rawSensorValue = 0;
libreTrendPoints.get(995).rawSensorValue = 0;
for (int i = 0; i < 20; i++) System.err.println(1000 - i + " " + libreTrendPoints.get(1000 - i).rawSensorValue);
readingData.calculateSmoothDataImproved(libreTrendPoints);
// Here is how things should look like
// reading 0 1 2 3 4 5 6
// point 1000 999 998 997 996 995 994 993 992 991 990 989 988 987 986 985 984 983
// raw 200 210 220 230 240 250 260 270 280 290 300 310 320 330 340 350 360 370
// isError f f t t t t t t t f f f f f f f f f
// Make sure that one reading data was removed, due to no valid data
assertWithMessage("One object was removed").that(readingData.trend.size()).isEqualTo(6);
assertWithMessage("First 2 values should be used").that(readingData.trend.get(0).glucoseLevelRawSmoothed).isEqualTo((200 + 210) / 2);
assertWithMessage("5 values should be ingnored then 2 used (point 4)").that(readingData.trend.get(1).glucoseLevelRawSmoothed).isEqualTo((290 + 300) / 2);
assertWithMessage("3 first points ignored, then 4 used values should be used (point 6)").that(readingData.trend.get(2).glucoseLevelRawSmoothed).isEqualTo((290 + 300 + 310 + 320) / 4);
assertWithMessage("2 first points ignored, then 5 used values should be used (point 7)").that(readingData.trend.get(3).glucoseLevelRawSmoothed).isEqualTo((290 + 300 + 310 + 320 + 330) / 5);
assertWithMessage("First 5 values should be used (point 12)").that(readingData.trend.get(4).glucoseLevelRawSmoothed).isEqualTo((320 + 330 + 340 + 350 + 360) / 5);
assertWithMessage("First 5 values should be used (point 15)").that(readingData.trend.get(5).glucoseLevelRawSmoothed).isEqualTo((350 + 360) / 2);
}
use of com.eveningoutpost.dexdrip.utils.LibreTrendPoint in project xDrip-plus by jamorham.
the class ReadingDataTest method testlibreTrendPointIsError.
// A test for libreTrendPoint.isError
@Test
public void testlibreTrendPointIsError() {
LibreTrendPoint libreTrendPoint = new LibreTrendPoint(1000, 0, 0x700, GlucoseData.DataSource.BLE);
assertWithMessage("rawsensorvalue").that(libreTrendPoint.isError()).isTrue();
libreTrendPoint = new LibreTrendPoint(1000, 100, 0x700, GlucoseData.DataSource.BLE);
assertWithMessage("rawsensorvalue").that(libreTrendPoint.isError()).isFalse();
libreTrendPoint = new LibreTrendPoint(1000, 0, 0x700, GlucoseData.DataSource.FRAM);
assertWithMessage("rawsensorvalue").that(libreTrendPoint.isError()).isTrue();
libreTrendPoint = new LibreTrendPoint(1000, 100, 0x700, GlucoseData.DataSource.FRAM);
assertWithMessage("rawsensorvalue").that(libreTrendPoint.isError()).isTrue();
libreTrendPoint = new LibreTrendPoint(1000, 100, 800, GlucoseData.DataSource.FRAM);
assertWithMessage("rawsensorvalue").that(libreTrendPoint.isError()).isFalse();
libreTrendPoint = new LibreTrendPoint(1000, 100, 0, GlucoseData.DataSource.FRAM);
assertWithMessage("rawsensorvalue").that(libreTrendPoint.isError()).isFalse();
libreTrendPoint = new LibreTrendPoint();
assertWithMessage("Empty point has no error.").that(libreTrendPoint.isError()).isFalse();
}
Aggregations