public float ApplyModifiersOnValue(float value, List<aModifyCpnValue> modifiers, List<aModifyType> aModifyTypeList, tSepsisPresentation sepsis, List<ktTempSite> ktTempSite) { //Apply each modifer on value foreach (aModifyCpnValue m in modifiers) { //Get name on modifier string modifyType = aModifyTypeList.Where(x => x.ModifyTypeID == m.ModifyTypeID).Select(x => x.ModifyType).SingleOrDefault(); switch (modifyType) { case "TempSite": //Get where measurement was made byte tempSite = (byte)sepsis.TempSite; //Get offset value from tempSite by "tempSiteID" float offsetTempSite = (float)ktTempSite.Where(x => x.ID == tempSite).Select(x => x.OffsetValue).SingleOrDefault(); value = AddOffsetToValue(value, offsetTempSite); break; case "Offset": float offset = (float)m.Value; value = AddOffsetToValue(value, offset); break; case "Multiply": float multiplyValue = (float)m.Value; value = MultiplyValue(value, multiplyValue); break; case "NaturalLog": value = ApplyNaturalLog(value); break; } } return value; }
public void TestApplyModifiers() { List<aModifyType> aModifyTypeList = new List<aModifyType>(); aModifyTypeList.Add(new aModifyType { ModifyTypeID = 0, ModifyType = "TempSite" }); aModifyTypeList.Add(new aModifyType { ModifyTypeID = 1, ModifyType = "Offset" }); aModifyTypeList.Add(new aModifyType { ModifyTypeID = 2, ModifyType = "Multiply" }); aModifyTypeList.Add(new aModifyType { ModifyTypeID = 3, ModifyType = "NaturalLog" }); List<aModifyCpnValue> modifiers = new List<aModifyCpnValue>(); //Types of modifers //0 = TempSite (offset) //1 = Offset //2 = Multiply //3 = NaturalLog modifiers.Add(new aModifyCpnValue{ NodeID = "test1", ModifyTypeID = 0, Order = 0, Value = null }); modifiers.Add(new aModifyCpnValue{ NodeID = "test2", ModifyTypeID = 1, Order = 1, Value = 1.5f }); modifiers.Add(new aModifyCpnValue{ NodeID = "test3", ModifyTypeID = 2, Order = 2, Value = 3f }); modifiers.Add(new aModifyCpnValue{ NodeID = "test4", ModifyTypeID = 3, Order = 3, Value = null }); List<ktTempSite> ktTempSiteLookup = new List<ktTempSite>(); ktTempSiteLookup.Add(new ktTempSite{ ID = 0, OffsetValue = 0f, }); ktTempSiteLookup.Add(new ktTempSite{ ID = 1, OffsetValue = 0f, }); ktTempSiteLookup.Add(new ktTempSite{ ID = 2, OffsetValue = 0.4f, }); ktTempSiteLookup.Add(new ktTempSite{ ID = 3, OffsetValue = 0f, }); ktTempSiteLookup.Add(new ktTempSite{ ID = 4, OffsetValue = 0f, }); ktTempSiteLookup.Add(new ktTempSite{ ID = 5, OffsetValue = 0f, }); tSepsisPresentation sepsisRelatedInfo = new tSepsisPresentation(); sepsisRelatedInfo.TempSite = 3; float value = 20f; float result = testSepsisController.ApplyModifiersOnValue(value, modifiers, aModifyTypeList, sepsisRelatedInfo, ktTempSiteLookup); float expected = 4.1666652238017268054508556288102f; Assert.AreEqual(expected, result, "Apply offsets, multiply and natural log on 20f should for this particular patient produce 4,1666652238017268054508556288102"); float notExpected = 4.1666658f; Assert.AreNotEqual(notExpected, result, "Should round up to 4.166666 and therefore not equal"); }