abs insulin tests
This commit is contained in:
parent
2517a10a5c
commit
ccfe03e177
|
@ -446,8 +446,6 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
|
||||||
public IobTotal getAbsoluteIOBTempBasals(long time) {
|
public IobTotal getAbsoluteIOBTempBasals(long time) {
|
||||||
IobTotal total = new IobTotal(time);
|
IobTotal total = new IobTotal(time);
|
||||||
|
|
||||||
PumpInterface pumpInterface = activePlugin.getActivePump();
|
|
||||||
|
|
||||||
for (long i = time - range(); i < time; i += T.mins(5).msecs()) {
|
for (long i = time - range(); i < time; i += T.mins(5).msecs()) {
|
||||||
Profile profile = profileFunction.getProfile(i);
|
Profile profile = profileFunction.getProfile(i);
|
||||||
double basal = profile.getBasal(i);
|
double basal = profile.getBasal(i);
|
||||||
|
@ -456,7 +454,7 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
|
||||||
if (runningTBR != null) {
|
if (runningTBR != null) {
|
||||||
running = runningTBR.tempBasalConvertedToAbsolute(i, profile);
|
running = runningTBR.tempBasalConvertedToAbsolute(i, profile);
|
||||||
}
|
}
|
||||||
Treatment treatment = new Treatment();
|
Treatment treatment = new Treatment(getInjector());
|
||||||
treatment.date = i;
|
treatment.date = i;
|
||||||
treatment.insulin = running * 5.0 / 60.0; // 5 min chunk
|
treatment.insulin = running * 5.0 / 60.0; // 5 min chunk
|
||||||
Iob iob = treatment.iobCalc(i, profile.getDia());
|
Iob iob = treatment.iobCalc(i, profile.getDia());
|
||||||
|
|
|
@ -9,7 +9,10 @@ import info.nightscout.androidaps.interfaces.ActivePluginProvider
|
||||||
import info.nightscout.androidaps.logging.AAPSLogger
|
import info.nightscout.androidaps.logging.AAPSLogger
|
||||||
import info.nightscout.androidaps.logging.AAPSLoggerTest
|
import info.nightscout.androidaps.logging.AAPSLoggerTest
|
||||||
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
|
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
|
||||||
|
import info.nightscout.androidaps.plugins.configBuilder.ProfileFunction
|
||||||
|
import info.nightscout.androidaps.plugins.treatments.Treatment
|
||||||
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin
|
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin
|
||||||
|
import info.nightscout.androidaps.utils.DefaultValueHelper
|
||||||
import info.nightscout.androidaps.utils.FabricPrivacy
|
import info.nightscout.androidaps.utils.FabricPrivacy
|
||||||
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
import info.nightscout.androidaps.utils.resources.ResourceHelper
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
|
@ -23,6 +26,8 @@ open class TestBaseWithProfile : TestBase() {
|
||||||
@Mock lateinit var resourceHelper: ResourceHelper
|
@Mock lateinit var resourceHelper: ResourceHelper
|
||||||
@Mock lateinit var treatmentsPlugin: TreatmentsPlugin
|
@Mock lateinit var treatmentsPlugin: TreatmentsPlugin
|
||||||
@Mock lateinit var fabricPrivacy: FabricPrivacy
|
@Mock lateinit var fabricPrivacy: FabricPrivacy
|
||||||
|
@Mock lateinit var profileFunction: ProfileFunction
|
||||||
|
@Mock lateinit var defaultValueHelper: DefaultValueHelper
|
||||||
|
|
||||||
val rxBus = RxBusWrapper()
|
val rxBus = RxBusWrapper()
|
||||||
|
|
||||||
|
@ -41,6 +46,12 @@ open class TestBaseWithProfile : TestBase() {
|
||||||
it.rxBus = rxBus
|
it.rxBus = rxBus
|
||||||
it.resourceHelper = resourceHelper
|
it.resourceHelper = resourceHelper
|
||||||
}
|
}
|
||||||
|
if (it is Treatment) {
|
||||||
|
it.activePlugin = activePluginProvider
|
||||||
|
it.profileFunction = profileFunction
|
||||||
|
it.defaultValueHelper = defaultValueHelper
|
||||||
|
it.resourceHelper = resourceHelper
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,6 @@ class ConstraintsCheckerTest : TestBaseWithProfile() {
|
||||||
@Mock lateinit var activePlugin: ActivePluginProvider
|
@Mock lateinit var activePlugin: ActivePluginProvider
|
||||||
@Mock lateinit var virtualPumpPlugin: VirtualPumpPlugin
|
@Mock lateinit var virtualPumpPlugin: VirtualPumpPlugin
|
||||||
@Mock lateinit var sp: SP
|
@Mock lateinit var sp: SP
|
||||||
@Mock lateinit var profileFunction: ProfileFunction
|
|
||||||
@Mock lateinit var commandQueue: CommandQueueProvider
|
@Mock lateinit var commandQueue: CommandQueueProvider
|
||||||
@Mock lateinit var detailedBolusInfoStorage: DetailedBolusInfoStorage
|
@Mock lateinit var detailedBolusInfoStorage: DetailedBolusInfoStorage
|
||||||
@Mock lateinit var context: Context
|
@Mock lateinit var context: Context
|
||||||
|
|
|
@ -33,7 +33,6 @@ class APSResultTest : TestBaseWithProfile() {
|
||||||
|
|
||||||
@Mock lateinit var constraintChecker: ConstraintChecker
|
@Mock lateinit var constraintChecker: ConstraintChecker
|
||||||
@Mock lateinit var sp: SP
|
@Mock lateinit var sp: SP
|
||||||
@Mock lateinit var profileFunction: ProfileFunction
|
|
||||||
@Mock lateinit var virtualPumpPlugin: VirtualPumpPlugin
|
@Mock lateinit var virtualPumpPlugin: VirtualPumpPlugin
|
||||||
|
|
||||||
private var closedLoopEnabled = Constraint(false)
|
private var closedLoopEnabled = Constraint(false)
|
||||||
|
|
|
@ -30,7 +30,6 @@ open class ActionsTestBase : TestBaseWithProfile() {
|
||||||
@Mock lateinit var virtualPumpPlugin: VirtualPumpPlugin
|
@Mock lateinit var virtualPumpPlugin: VirtualPumpPlugin
|
||||||
@Mock lateinit var loopPlugin: LoopPlugin
|
@Mock lateinit var loopPlugin: LoopPlugin
|
||||||
@Mock lateinit var activePlugin: ActivePluginProvider
|
@Mock lateinit var activePlugin: ActivePluginProvider
|
||||||
@Mock lateinit var profileFunction: ProfileFunction
|
|
||||||
@Mock lateinit var localProfilePlugin : LocalProfilePlugin
|
@Mock lateinit var localProfilePlugin : LocalProfilePlugin
|
||||||
@Mock lateinit var smsCommunicatorPlugin : SmsCommunicatorPlugin
|
@Mock lateinit var smsCommunicatorPlugin : SmsCommunicatorPlugin
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,6 @@ import org.powermock.core.classloader.annotations.PrepareForTest
|
||||||
@PrepareForTest(LastLocationDataContainer::class, AutomationPlugin::class)
|
@PrepareForTest(LastLocationDataContainer::class, AutomationPlugin::class)
|
||||||
open class TriggerTestBase : TestBaseWithProfile() {
|
open class TriggerTestBase : TestBaseWithProfile() {
|
||||||
|
|
||||||
@Mock lateinit var profileFunction: ProfileFunction
|
|
||||||
@Mock lateinit var sp: SP
|
@Mock lateinit var sp: SP
|
||||||
@Mock lateinit var locationDataContainer: LastLocationDataContainer
|
@Mock lateinit var locationDataContainer: LastLocationDataContainer
|
||||||
@Mock lateinit var activePlugin: ActivePluginProvider
|
@Mock lateinit var activePlugin: ActivePluginProvider
|
||||||
|
|
|
@ -50,13 +50,11 @@ class SmsCommunicatorPluginTest : TestBaseWithProfile() {
|
||||||
|
|
||||||
@Mock lateinit var sp: SP
|
@Mock lateinit var sp: SP
|
||||||
@Mock lateinit var constraintChecker: ConstraintChecker
|
@Mock lateinit var constraintChecker: ConstraintChecker
|
||||||
@Mock lateinit var profileFunction: ProfileFunction
|
|
||||||
@Mock lateinit var activePlugin: ActivePluginProvider
|
@Mock lateinit var activePlugin: ActivePluginProvider
|
||||||
@Mock lateinit var commandQueue: CommandQueueProvider
|
@Mock lateinit var commandQueue: CommandQueueProvider
|
||||||
@Mock lateinit var loopPlugin: LoopPlugin
|
@Mock lateinit var loopPlugin: LoopPlugin
|
||||||
@Mock lateinit var iobCobCalculatorPlugin: IobCobCalculatorPlugin
|
@Mock lateinit var iobCobCalculatorPlugin: IobCobCalculatorPlugin
|
||||||
@Mock lateinit var virtualPumpPlugin: VirtualPumpPlugin
|
@Mock lateinit var virtualPumpPlugin: VirtualPumpPlugin
|
||||||
@Mock lateinit var defaultValueHelper: DefaultValueHelper
|
|
||||||
@Mock lateinit var localProfilePlugin: LocalProfilePlugin
|
@Mock lateinit var localProfilePlugin: LocalProfilePlugin
|
||||||
@Mock lateinit var treatmentService: TreatmentService
|
@Mock lateinit var treatmentService: TreatmentService
|
||||||
@Mock lateinit var otp: OneTimePassword
|
@Mock lateinit var otp: OneTimePassword
|
||||||
|
|
|
@ -30,7 +30,6 @@ class DanaRSPluginTest : DanaRSTestBase() {
|
||||||
|
|
||||||
@Mock lateinit var context: Context
|
@Mock lateinit var context: Context
|
||||||
@Mock lateinit var constraintChecker: ConstraintChecker
|
@Mock lateinit var constraintChecker: ConstraintChecker
|
||||||
@Mock lateinit var profileFunction: ProfileFunction
|
|
||||||
@Mock lateinit var commandQueue: CommandQueueProvider
|
@Mock lateinit var commandQueue: CommandQueueProvider
|
||||||
@Mock lateinit var detailedBolusInfoStorage: DetailedBolusInfoStorage
|
@Mock lateinit var detailedBolusInfoStorage: DetailedBolusInfoStorage
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,6 @@ import org.powermock.modules.junit4.PowerMockRunner
|
||||||
@PrepareForTest(ConstraintChecker::class, DetailedBolusInfoStorage::class)
|
@PrepareForTest(ConstraintChecker::class, DetailedBolusInfoStorage::class)
|
||||||
class DanaRS_Packet_Bolus_Set_Step_Bolus_StartTest : DanaRSTestBase() {
|
class DanaRS_Packet_Bolus_Set_Step_Bolus_StartTest : DanaRSTestBase() {
|
||||||
|
|
||||||
@Mock lateinit var profileFunction: ProfileFunction
|
|
||||||
@Mock lateinit var constraintChecker: ConstraintChecker
|
@Mock lateinit var constraintChecker: ConstraintChecker
|
||||||
@Mock lateinit var commandQueue: CommandQueueProvider
|
@Mock lateinit var commandQueue: CommandQueueProvider
|
||||||
@Mock lateinit var context: Context
|
@Mock lateinit var context: Context
|
||||||
|
|
|
@ -21,8 +21,6 @@ import org.powermock.modules.junit4.PowerMockRunner
|
||||||
@PrepareForTest(RxBusWrapper::class)
|
@PrepareForTest(RxBusWrapper::class)
|
||||||
class DanaRS_Packet_Bolus_Set_Step_Bolus_StopTest : DanaRSTestBase() {
|
class DanaRS_Packet_Bolus_Set_Step_Bolus_StopTest : DanaRSTestBase() {
|
||||||
|
|
||||||
@Mock lateinit var defaultValueHelper: DefaultValueHelper
|
|
||||||
@Mock lateinit var profileFunction: ProfileFunction
|
|
||||||
@Mock lateinit var activePlugin: ActivePluginProvider
|
@Mock lateinit var activePlugin: ActivePluginProvider
|
||||||
@Mock lateinit var danaRSPlugin: DanaRSPlugin
|
@Mock lateinit var danaRSPlugin: DanaRSPlugin
|
||||||
|
|
||||||
|
|
|
@ -22,9 +22,7 @@ import org.powermock.modules.junit4.PowerMockRunner
|
||||||
@PrepareForTest(RxBusWrapper::class)
|
@PrepareForTest(RxBusWrapper::class)
|
||||||
class DanaRS_Packet_Notify_Delivery_CompleteTest : DanaRSTestBase() {
|
class DanaRS_Packet_Notify_Delivery_CompleteTest : DanaRSTestBase() {
|
||||||
|
|
||||||
@Mock lateinit var defaultValueHelper: DefaultValueHelper
|
|
||||||
@Mock lateinit var danaRSPlugin: DanaRSPlugin
|
@Mock lateinit var danaRSPlugin: DanaRSPlugin
|
||||||
@Mock lateinit var profileFunction: ProfileFunction
|
|
||||||
@Mock lateinit var activePlugin: ActivePluginProvider
|
@Mock lateinit var activePlugin: ActivePluginProvider
|
||||||
|
|
||||||
private var treatmentInjector: HasAndroidInjector = HasAndroidInjector {
|
private var treatmentInjector: HasAndroidInjector = HasAndroidInjector {
|
||||||
|
|
|
@ -27,8 +27,6 @@ import org.powermock.modules.junit4.PowerMockRunner
|
||||||
@PrepareForTest(ConstraintChecker::class, RxBusWrapper::class, DetailedBolusInfoStorage::class)
|
@PrepareForTest(ConstraintChecker::class, RxBusWrapper::class, DetailedBolusInfoStorage::class)
|
||||||
class DanaRS_Packet_Notify_Delivery_Rate_DisplayTest : DanaRSTestBase() {
|
class DanaRS_Packet_Notify_Delivery_Rate_DisplayTest : DanaRSTestBase() {
|
||||||
|
|
||||||
@Mock lateinit var defaultValueHelper: DefaultValueHelper
|
|
||||||
@Mock lateinit var profileFunction: ProfileFunction
|
|
||||||
@Mock lateinit var activePlugin: ActivePluginProvider
|
@Mock lateinit var activePlugin: ActivePluginProvider
|
||||||
@Mock lateinit var constraintChecker: ConstraintChecker
|
@Mock lateinit var constraintChecker: ConstraintChecker
|
||||||
@Mock lateinit var commandQueue: CommandQueueProvider
|
@Mock lateinit var commandQueue: CommandQueueProvider
|
||||||
|
|
|
@ -0,0 +1,91 @@
|
||||||
|
package info.nightscout.androidaps.plugins.treatments
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import info.nightscout.androidaps.MainApp
|
||||||
|
import info.nightscout.androidaps.TestBaseWithProfile
|
||||||
|
import info.nightscout.androidaps.db.DatabaseHelper
|
||||||
|
import info.nightscout.androidaps.db.TemporaryBasal
|
||||||
|
import info.nightscout.androidaps.logging.LTag
|
||||||
|
import info.nightscout.androidaps.plugins.insulin.InsulinOrefRapidActingPlugin
|
||||||
|
import info.nightscout.androidaps.utils.DateUtil
|
||||||
|
import info.nightscout.androidaps.utils.FabricPrivacy
|
||||||
|
import info.nightscout.androidaps.utils.T
|
||||||
|
import info.nightscout.androidaps.utils.sharedPreferences.SP
|
||||||
|
import org.junit.Assert
|
||||||
|
import org.junit.Before
|
||||||
|
import org.junit.Test
|
||||||
|
import org.junit.runner.RunWith
|
||||||
|
import org.mockito.ArgumentMatchers
|
||||||
|
import org.mockito.Mock
|
||||||
|
import org.mockito.Mockito
|
||||||
|
import org.mockito.Mockito.`when`
|
||||||
|
import org.powermock.api.mockito.PowerMockito
|
||||||
|
import org.powermock.core.classloader.annotations.PrepareForTest
|
||||||
|
import org.powermock.modules.junit4.PowerMockRunner
|
||||||
|
|
||||||
|
@RunWith(PowerMockRunner::class)
|
||||||
|
@PrepareForTest(FabricPrivacy::class, MainApp::class, DatabaseHelper::class)
|
||||||
|
class TreatmentsPluginTest : TestBaseWithProfile() {
|
||||||
|
|
||||||
|
@Mock lateinit var context: Context
|
||||||
|
@Mock lateinit var sp: SP
|
||||||
|
@Mock lateinit var databaseHelper: DatabaseHelper
|
||||||
|
@Mock lateinit var treatmentService: TreatmentService
|
||||||
|
|
||||||
|
lateinit var insulinOrefRapidActingPlugin: InsulinOrefRapidActingPlugin
|
||||||
|
lateinit var sot: TreatmentsPlugin
|
||||||
|
|
||||||
|
@Before
|
||||||
|
fun prepare() {
|
||||||
|
PowerMockito.mockStatic(MainApp::class.java)
|
||||||
|
`when`(MainApp.getDbHelper()).thenReturn(databaseHelper)
|
||||||
|
|
||||||
|
insulinOrefRapidActingPlugin = InsulinOrefRapidActingPlugin(profileInjector, resourceHelper, profileFunction, rxBus, aapsLogger)
|
||||||
|
|
||||||
|
`when`(profileFunction.getProfile(ArgumentMatchers.anyLong())).thenReturn(validProfile)
|
||||||
|
`when`(activePluginProvider.activeInsulin).thenReturn(insulinOrefRapidActingPlugin)
|
||||||
|
|
||||||
|
sot = TreatmentsPlugin(profileInjector, aapsLogger, rxBus, resourceHelper, context, sp, profileFunction, activePluginProvider, fabricPrivacy)
|
||||||
|
sot.service = treatmentService
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `zero TBR should produce zero absolute insulin`() {
|
||||||
|
val now = DateUtil.now()
|
||||||
|
val tbrs : MutableList<TemporaryBasal> = ArrayList()
|
||||||
|
tbrs.add(TemporaryBasal().date(now - T.hours(30). msecs()).duration(10000).percent(0))
|
||||||
|
|
||||||
|
`when`(databaseHelper.getTemporaryBasalsDataFromTime(ArgumentMatchers.anyLong(), ArgumentMatchers.anyBoolean())).thenReturn(tbrs)
|
||||||
|
sot.initializeData(T.hours(30). msecs())
|
||||||
|
val iob = sot.getAbsoluteIOBTempBasals(now)
|
||||||
|
Assert.assertEquals(0.0, iob.iob, 0.0)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `90% TBR and should produce less absolute insulin`() {
|
||||||
|
val now = DateUtil.now()
|
||||||
|
val tbrs : MutableList<TemporaryBasal> = ArrayList()
|
||||||
|
`when`(databaseHelper.getTemporaryBasalsDataFromTime(ArgumentMatchers.anyLong(), ArgumentMatchers.anyBoolean())).thenReturn(tbrs)
|
||||||
|
sot.initializeData(T.hours(30). msecs())
|
||||||
|
val iob100pct = sot.getAbsoluteIOBTempBasals(now)
|
||||||
|
|
||||||
|
tbrs.add(TemporaryBasal().date(now - T.hours(30). msecs()).duration(10000).percent(90))
|
||||||
|
sot.initializeData(T.hours(30). msecs())
|
||||||
|
val iob90pct = sot.getAbsoluteIOBTempBasals(now)
|
||||||
|
Assert.assertTrue(iob100pct.iob > iob90pct.iob)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `110% TBR and should produce 10% more absolute insulin`() {
|
||||||
|
val now = DateUtil.now()
|
||||||
|
val tbrs : MutableList<TemporaryBasal> = ArrayList()
|
||||||
|
`when`(databaseHelper.getTemporaryBasalsDataFromTime(ArgumentMatchers.anyLong(), ArgumentMatchers.anyBoolean())).thenReturn(tbrs)
|
||||||
|
sot.initializeData(T.hours(30). msecs())
|
||||||
|
val iob100pct = sot.getAbsoluteIOBTempBasals(now)
|
||||||
|
|
||||||
|
tbrs.add(TemporaryBasal().date(now - T.hours(30). msecs()).duration(10000).percent(110))
|
||||||
|
sot.initializeData(T.hours(30). msecs())
|
||||||
|
val iob110pct = sot.getAbsoluteIOBTempBasals(now)
|
||||||
|
Assert.assertEquals(1.1, iob110pct.iob / iob100pct.iob, 0.0001)
|
||||||
|
}
|
||||||
|
}
|
|
@ -36,7 +36,6 @@ import java.util.*
|
||||||
class CommandQueueTest : TestBaseWithProfile() {
|
class CommandQueueTest : TestBaseWithProfile() {
|
||||||
|
|
||||||
@Mock lateinit var constraintChecker: ConstraintChecker
|
@Mock lateinit var constraintChecker: ConstraintChecker
|
||||||
@Mock lateinit var profileFunction: ProfileFunction
|
|
||||||
@Mock lateinit var lazyActivePlugin: Lazy<ActivePluginProvider>
|
@Mock lateinit var lazyActivePlugin: Lazy<ActivePluginProvider>
|
||||||
@Mock lateinit var activePlugin: ActivePluginProvider
|
@Mock lateinit var activePlugin: ActivePluginProvider
|
||||||
@Mock lateinit var context: Context
|
@Mock lateinit var context: Context
|
||||||
|
|
Loading…
Reference in a new issue