Merge pull request #597 from triplem/test
Add a unit test for Insulin Plugin
This commit is contained in:
commit
fada51c380
|
@ -12,4 +12,26 @@ public class Iob {
|
||||||
activityContrib += iob.activityContrib;
|
activityContrib += iob.activityContrib;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
|
||||||
|
Iob iob = (Iob) o;
|
||||||
|
|
||||||
|
if (Double.compare(iob.iobContrib, iobContrib) != 0) return false;
|
||||||
|
return Double.compare(iob.activityContrib, activityContrib) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
int result;
|
||||||
|
long temp;
|
||||||
|
temp = Double.doubleToLongBits(iobContrib);
|
||||||
|
result = (int) (temp ^ (temp >>> 32));
|
||||||
|
temp = Double.doubleToLongBits(activityContrib);
|
||||||
|
result = 31 * result + (int) (temp ^ (temp >>> 32));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package info.nightscout.androidaps.plugins.Insulin;
|
package info.nightscout.androidaps.plugins.Insulin;
|
||||||
|
|
||||||
|
import com.squareup.otto.Bus;
|
||||||
|
|
||||||
import info.nightscout.androidaps.MainApp;
|
import info.nightscout.androidaps.MainApp;
|
||||||
import info.nightscout.androidaps.R;
|
import info.nightscout.androidaps.R;
|
||||||
import info.nightscout.androidaps.data.Iob;
|
import info.nightscout.androidaps.data.Iob;
|
||||||
|
@ -44,38 +46,53 @@ public abstract class InsulinOrefBasePlugin implements PluginBase, InsulinInterf
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Bus getBus() {
|
||||||
|
return MainApp.bus();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getDia() {
|
public double getDia() {
|
||||||
double dia = getUserDefinedDia();
|
double dia = getUserDefinedDia();
|
||||||
if(dia >= MIN_DIA){
|
if(dia >= MIN_DIA){
|
||||||
return dia;
|
return dia;
|
||||||
} else {
|
} else {
|
||||||
if((System.currentTimeMillis() - lastWarned) > 60*1000) {
|
sendShortDiaNotification(dia);
|
||||||
lastWarned = System.currentTimeMillis();
|
|
||||||
Notification notification = new Notification(Notification.SHORT_DIA, String.format(MainApp.sResources.getString(R.string.dia_too_short), dia, MIN_DIA), Notification.URGENT);
|
|
||||||
MainApp.bus().post(new EventNewNotification(notification));
|
|
||||||
}
|
|
||||||
return MIN_DIA;
|
return MIN_DIA;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void sendShortDiaNotification(double dia) {
|
||||||
|
if((System.currentTimeMillis() - lastWarned) > 60*1000) {
|
||||||
|
lastWarned = System.currentTimeMillis();
|
||||||
|
Notification notification = new Notification(Notification.SHORT_DIA, String.format(this.getNotificationPattern(), dia, MIN_DIA), Notification.URGENT);
|
||||||
|
this.getBus().post(new EventNewNotification(notification));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNotificationPattern() {
|
||||||
|
return MainApp.sResources.getString(R.string.dia_too_short);
|
||||||
|
}
|
||||||
|
|
||||||
public double getUserDefinedDia() {
|
public double getUserDefinedDia() {
|
||||||
return MainApp.getConfigBuilder().getProfile() != null ? MainApp.getConfigBuilder().getProfile().getDia() : MIN_DIA;
|
return MainApp.getConfigBuilder().getProfile() != null ? MainApp.getConfigBuilder().getProfile().getDia() : MIN_DIA;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Iob iobCalcForTreatment(Treatment treatment, long time) {
|
||||||
|
return this.iobCalcForTreatment(treatment, time, 0d);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Iob iobCalcForTreatment(Treatment treatment, long time, double dia) {
|
public Iob iobCalcForTreatment(Treatment treatment, long time, double dia) {
|
||||||
Iob result = new Iob();
|
Iob result = new Iob();
|
||||||
|
|
||||||
int peak = getPeak();
|
int peak = getPeak();
|
||||||
|
|
||||||
|
|
||||||
if (treatment.insulin != 0d) {
|
if (treatment.insulin != 0d) {
|
||||||
|
|
||||||
long bolusTime = treatment.date;
|
long bolusTime = treatment.date;
|
||||||
double t = (time - bolusTime) / 1000d / 60d;
|
double t = (time - bolusTime) / 1000d / 60d;
|
||||||
|
|
||||||
double td = getDia()*60; //getDIA() always > 5
|
double td = getDia()*60; //getDIA() always >= MIN_DIA
|
||||||
double tp = peak;
|
double tp = peak;
|
||||||
|
|
||||||
// force the IOB to 0 if over DIA hours have passed
|
// force the IOB to 0 if over DIA hours have passed
|
||||||
|
|
|
@ -0,0 +1,153 @@
|
||||||
|
package info.nightscout.androidaps.plugins.Insulin;
|
||||||
|
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import info.nightscout.androidaps.data.Iob;
|
||||||
|
import info.nightscout.androidaps.db.Treatment;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by triplem on 07.01.18.
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class InsulinOrefBasePluginTest extends InsulinOrefBasePlugin {
|
||||||
|
|
||||||
|
private int peak;
|
||||||
|
private double dia;
|
||||||
|
|
||||||
|
private boolean shortDiaNotificationSend;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setUp() throws Exception {
|
||||||
|
this.peak = 0;
|
||||||
|
this.dia = InsulinOrefBasePlugin.MIN_DIA;
|
||||||
|
this.shortDiaNotificationSend = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetDia() throws Exception {
|
||||||
|
assertEquals(InsulinOrefBasePlugin.MIN_DIA, this.getDia(), 0);
|
||||||
|
|
||||||
|
this.dia = InsulinOrefBasePlugin.MIN_DIA + 1;
|
||||||
|
assertEquals(InsulinOrefBasePlugin.MIN_DIA + 1, this.getDia(), 0);
|
||||||
|
|
||||||
|
this.dia = InsulinOrefBasePlugin.MIN_DIA - 1;
|
||||||
|
assertEquals(InsulinOrefBasePlugin.MIN_DIA, this.getDia(), 0);
|
||||||
|
assertTrue(this.shortDiaNotificationSend);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testIobCalcForTreatment() {
|
||||||
|
Treatment treatment = new Treatment();
|
||||||
|
Iob expected = new Iob();
|
||||||
|
|
||||||
|
assertEquals(expected, this.iobCalcForTreatment(treatment, 0, 0d));
|
||||||
|
|
||||||
|
this.peak = 30;
|
||||||
|
this.dia = 4;
|
||||||
|
long time = System.currentTimeMillis();
|
||||||
|
|
||||||
|
// check directly after bolus
|
||||||
|
treatment.date = time;
|
||||||
|
treatment.insulin = 10d;
|
||||||
|
assertEquals(10d, this.iobCalcForTreatment(treatment, time).iobContrib, 0.1);
|
||||||
|
|
||||||
|
// check after 1 hour
|
||||||
|
treatment.date = time - 1 * 60 * 60 * 1000; // 1 hour
|
||||||
|
treatment.insulin = 10d;
|
||||||
|
assertEquals(3.92, this.iobCalcForTreatment(treatment, time).iobContrib, 0.1);
|
||||||
|
|
||||||
|
// check after 2 hour
|
||||||
|
treatment.date = time - 2 * 60 * 60 * 1000; // 1 hour
|
||||||
|
treatment.insulin = 10d;
|
||||||
|
assertEquals(0.77, this.iobCalcForTreatment(treatment, time).iobContrib, 0.1);
|
||||||
|
|
||||||
|
// check after 3 hour
|
||||||
|
treatment.date = time - 3 * 60 * 60 * 1000; // 1 hour
|
||||||
|
treatment.insulin = 10d;
|
||||||
|
assertEquals(0.10, this.iobCalcForTreatment(treatment, time).iobContrib, 0.1);
|
||||||
|
|
||||||
|
// check after dia
|
||||||
|
treatment.date = time - 4 * 60 * 60 * 1000;
|
||||||
|
treatment.insulin = 10d;
|
||||||
|
assertEquals(0d, this.iobCalcForTreatment(treatment, time).iobContrib, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* this method is implemented to allow tests of the iobCalcForTreatment calculation
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
int getPeak() {
|
||||||
|
return this.peak;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Userdefined Dia is implemented to allow tests of the getDia method
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public double getUserDefinedDia() {
|
||||||
|
return this.dia;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sendShortDiaNotification(double dia) {
|
||||||
|
this.shortDiaNotificationSend = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// the following methods are implemented, but not needed...
|
||||||
|
@Override
|
||||||
|
String commentStandardText() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getFragmentClass() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getId() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getFriendlyName() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isEnabled(int type) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isVisibleInTabs(int type) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setFragmentEnabled(int type, boolean fragmentEnabled) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setFragmentVisible(int type, boolean fragmentVisible) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getPreferencesId() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue