Search in sources :

Example 1 with LibreTrendPoint

use of com.eveningoutpost.dexdrip.utils.LibreTrendPoint in project xDrip by NightscoutFoundation.

the class LibreTrendUtil method get.

@Override
public LibreTrendPoint get(int index) {
    LibreTrendPoint v = super.get(index);
    if (v == null) {
        v = new LibreTrendPoint();
        super.set(index, v);
    }
    return v;
}
Also used : LibreTrendPoint(com.eveningoutpost.dexdrip.utils.LibreTrendPoint)

Example 2 with LibreTrendPoint

use of com.eveningoutpost.dexdrip.utils.LibreTrendPoint in project xDrip by NightscoutFoundation.

the class ReadingDataTest method testClearTrendErrorOnOtherPoint.

@Test
public void testClearTrendErrorOnOtherPoint() {
    // A very simple case, we only have one reading containing sparsed data.
    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);
    }
    // Add a point with an error at 995. It should cause points '2', '4'
    LibreTrendPoint libreTrendPoint = new LibreTrendPoint(995, 0, 0x700, GlucoseData.DataSource.BLE);
    libreTrendPoints.set((int) libreTrendPoint.getSensorTime(), libreTrendPoint);
    readingData.ClearErrors(libreTrendPoints);
    assertWithMessage("5 objects should remain.").that(readingData.trend.size()).isEqualTo(5);
    assertThat(readingData.trend.get(0).sensorTime).isEqualTo(1000);
    assertThat(readingData.trend.get(1).sensorTime).isEqualTo(994);
    assertThat(readingData.trend.get(2).sensorTime).isEqualTo(993);
    assertThat(readingData.trend.get(3).sensorTime).isEqualTo(988);
    assertThat(readingData.trend.get(4).sensorTime).isEqualTo(985);
}
Also used : ArrayList(java.util.ArrayList) LibreTrendPoint(com.eveningoutpost.dexdrip.utils.LibreTrendPoint) LibreTrendPoint(com.eveningoutpost.dexdrip.utils.LibreTrendPoint) Test(org.junit.Test)

Example 3 with LibreTrendPoint

use of com.eveningoutpost.dexdrip.utils.LibreTrendPoint in project xDrip by NightscoutFoundation.

the class ReadingDataTest method testClearErrors.

@Test
public void testClearErrors() {
    ReadingData readingData = new ReadingData();
    readingData.history = new ArrayList<GlucoseData>();
    readingData.history.add(new GlucoseData());
    readingData.history.add(new GlucoseData());
    readingData.history.add(new GlucoseData());
    readingData.history.get(0).sensorTime = 1000;
    readingData.history.get(1).sensorTime = 1015;
    readingData.history.get(2).sensorTime = 1030;
    List<LibreTrendPoint> libreTrendPoints = new ArrayList<LibreTrendPoint>(16 * 24 * 60);
    while (libreTrendPoints.size() < 16 * 24 * 60) {
        libreTrendPoints.add(libreTrendPoints.size(), new LibreTrendPoint());
    }
    LibreTrendPoint libreTrendPoint = new LibreTrendPoint(1000, 1230, 800, GlucoseData.DataSource.FRAM);
    libreTrendPoints.set((int) libreTrendPoint.getSensorTime(), libreTrendPoint);
    libreTrendPoint = new LibreTrendPoint(1015, 1230, 0x700, GlucoseData.DataSource.FRAM);
    libreTrendPoints.set((int) libreTrendPoint.getSensorTime(), libreTrendPoint);
    readingData.ClearErrors(libreTrendPoints);
    assertWithMessage("One object should have been removed").that(readingData.history.size()).isEqualTo(2);
    assertThat(readingData.history.get(0).sensorTime).isEqualTo(1000);
    assertThat(readingData.history.get(1).sensorTime).isEqualTo(1030);
}
Also used : ArrayList(java.util.ArrayList) LibreTrendPoint(com.eveningoutpost.dexdrip.utils.LibreTrendPoint) Test(org.junit.Test)

Example 4 with LibreTrendPoint

use of com.eveningoutpost.dexdrip.utils.LibreTrendPoint in project xDrip by NightscoutFoundation.

the class ReadingDataTest method testClearTrendErrors.

@Test
public void testClearTrendErrors() {
    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());
    }
    // Create a list of 10 points.
    for (int i = 0; i < 10; i++) {
        readingData.trend.add(new GlucoseData());
        readingData.trend.get(i).sensorTime = 1000 + i;
        libreTrendPoints.get((int) readingData.trend.get(i).sensorTime).rawSensorValue = 220;
    }
    LibreTrendPoint libreTrendPoint = new LibreTrendPoint(1000, 1230, 800, GlucoseData.DataSource.FRAM);
    libreTrendPoints.set((int) libreTrendPoint.getSensorTime(), libreTrendPoint);
    libreTrendPoint = new LibreTrendPoint(1005, 1230, 0x700, GlucoseData.DataSource.FRAM);
    libreTrendPoints.set((int) libreTrendPoint.getSensorTime(), libreTrendPoint);
    readingData.ClearErrors(libreTrendPoints);
    assertWithMessage("6 objects should remain.").that(readingData.trend.size()).isEqualTo(6);
    // object #6 is bad, so last goog object is 5.
    assertWithMessage("span serialize reformed matches").that(readingData.trend.get(4).sensorTime).isEqualTo(1004);
    // Next good object is 1009 (1005-1008 were removed)
    assertWithMessage("span serialize reformed matches").that(readingData.trend.get(5).sensorTime).isEqualTo(1009);
}
Also used : ArrayList(java.util.ArrayList) LibreTrendPoint(com.eveningoutpost.dexdrip.utils.LibreTrendPoint) LibreTrendPoint(com.eveningoutpost.dexdrip.utils.LibreTrendPoint) Test(org.junit.Test)

Example 5 with LibreTrendPoint

use of com.eveningoutpost.dexdrip.utils.LibreTrendPoint in project xDrip by NightscoutFoundation.

the class ReadingDataTest method testCalculateSmoothDataImprovedOneError.

@Test
public void testCalculateSmoothDataImprovedOneError() {
    // Using sparse data.
    // The first value contains an error.
    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);
    }
    // The first value has an error
    libreTrendPoints.get(1000).rawSensorValue = 0;
    readingData.calculateSmoothDataImproved(libreTrendPoints);
    assertWithMessage("3 values should be used").that(readingData.trend.get(0).glucoseLevelRawSmoothed).isEqualTo((210 + 222 + 230) / 3);
    assertWithMessage("4 values should be used").that(readingData.trend.get(1).glucoseLevelRawSmoothed).isEqualTo((210 + 222 + 230 + 240) / 4);
    assertWithMessage("3 values should be used").that(readingData.trend.get(2).glucoseLevelRawSmoothed).isEqualTo((222 + 230 + 240) / 3);
    assertWithMessage("3 values should be used").that(readingData.trend.get(3).glucoseLevelRawSmoothed).isEqualTo((230 + 240 + 250) / 3);
    assertWithMessage("2 values should be used").that(readingData.trend.get(4).glucoseLevelRawSmoothed).isEqualTo((240 + 250) / 2);
    assertWithMessage("2 values should be used").that(readingData.trend.get(5).glucoseLevelRawSmoothed).isEqualTo((250 + 260) / 2);
    assertWithMessage("1 value should be used").that(readingData.trend.get(6).glucoseLevelRawSmoothed).isEqualTo((260) / 1);
}
Also used : ArrayList(java.util.ArrayList) LibreTrendPoint(com.eveningoutpost.dexdrip.utils.LibreTrendPoint) LibreTrendPoint(com.eveningoutpost.dexdrip.utils.LibreTrendPoint) Test(org.junit.Test)

Aggregations

LibreTrendPoint (com.eveningoutpost.dexdrip.utils.LibreTrendPoint)30 Test (org.junit.Test)20 ArrayList (java.util.ArrayList)18 LibreBlock (com.eveningoutpost.dexdrip.Models.LibreBlock)4 LibreTrendUtil (com.eveningoutpost.dexdrip.utils.LibreTrendUtil)2 HashSet (java.util.HashSet)2