Skip to content

Commit 905b36d

Browse files
committed
Add DecisionModel.addReward(reward, decisionId)
1 parent b3e6510 commit 905b36d

File tree

5 files changed

+103
-6
lines changed

5 files changed

+103
-6
lines changed

improveai-android/src/androidTest/java/ai/improve/android/AppGivensProviderTest.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,18 @@ public void testAddReward_decisionModel() {
9292
", new reward: " + newTotalRewardsOfModel);
9393
}
9494

95+
@Test
96+
public void testAddRewardForDecision() {
97+
String modelName = "hello";
98+
DecisionModel decisionModel = new DecisionModel(modelName);
99+
double oldTotalRewards = AppGivensProviderUtils.rewardOfModel(modelName);
100+
decisionModel.addReward(0.1, "decision_id");
101+
double newTotalRewards = AppGivensProviderUtils.rewardOfModel(modelName);
102+
assertEquals(oldTotalRewards+0.1, newTotalRewards, 0.000000000001);
103+
IMPLog.d(Tag, "old reward: " + oldTotalRewards +
104+
", new reward: " + newTotalRewards);
105+
}
106+
95107
@Test
96108
public void testVersion_string_length() throws JSONException {
97109
double v = AppGivensProviderUtils.versionToNumber("7.1.2");

improveai/src/main/java/ai/improve/Decision.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,6 @@ public void addReward(double reward) {
8484
throw new IllegalStateException("id can't be null. Make sure that addReward() is " +
8585
"called after get(); and the trackURL is set in the DecisionModel.");
8686
}
87-
model.addRewardForDecision(id, reward);
87+
model.addReward(reward, id);
8888
}
8989
}

improveai/src/main/java/ai/improve/DecisionModel.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -530,17 +530,21 @@ public void addReward(double reward) {
530530
}
531531

532532
/**
533-
* @param decisionId unique id of a decision.
533+
* Add reward for the provided decisionId
534534
* @param reward reward for the decision.
535+
* @param decisionId unique id of a decision.
536+
* @throws IllegalArgumentException Thrown if decisionId is null or empty; Thrown if reward
537+
* is NaN or Infinity.
538+
* @throws IllegalStateException Thrown if trackURL is null.
535539
* Adds the reward to a specific decision
536540
*/
537-
protected void addRewardForDecision(String decisionId, double reward) {
541+
public void addReward(double reward, String decisionId) {
538542
if(Double.isInfinite(reward) || Double.isNaN(reward)) {
539543
throw new IllegalArgumentException("reward must not be NaN or infinity");
540544
}
541545

542-
if(DecisionTracker.persistenceProvider == null) {
543-
throw new RuntimeException("DecisionModel.addReward() is only available for Android.");
546+
if(Utils.isEmpty(decisionId)) {
547+
throw new IllegalArgumentException("decisionId can't be null or empty");
544548
}
545549

546550
if(tracker == null) {

improveai/src/main/java/ai/improve/DecisionTracker.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,9 @@ public void addRewardForDecision(String modelName, String decisionId, double rew
219219

220220
postTrackingRequest(body);
221221

222-
persistenceProvider.addRewardForModel(modelName, reward);
222+
if(persistenceProvider != null) {
223+
persistenceProvider.addRewardForModel(modelName, reward);
224+
}
223225
}
224226

225227
protected Map getAddDecisionRewardRequestBody(String ksuid, String modelName, String decisionId, double reward) {

improveai/src/test/java/ai/improve/DecisionModelTest.java

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1069,6 +1069,85 @@ public void testAddReward_non_Android() {
10691069
fail(DefaultFailMessage);
10701070
}
10711071

1072+
@Test
1073+
public void testAddRewardForDecision() {
1074+
DecisionModel decisionModel = new DecisionModel("greetings");
1075+
decisionModel.addReward(1.0, "abcd");
1076+
}
1077+
1078+
@Test
1079+
public void testAddRewardForDecision_empty_decisionId() {
1080+
DecisionModel decisionModel = new DecisionModel("greetings");
1081+
try {
1082+
decisionModel.addReward(1.0, "");
1083+
} catch (IllegalArgumentException e) {
1084+
e.printStackTrace();
1085+
return ;
1086+
}
1087+
fail(DefaultFailMessage);
1088+
}
1089+
1090+
@Test
1091+
public void testAddRewardForDecision_null_decisionId() {
1092+
DecisionModel decisionModel = new DecisionModel("greetings");
1093+
try {
1094+
decisionModel.addReward(1.0, null);
1095+
} catch (IllegalArgumentException e) {
1096+
e.printStackTrace();
1097+
return ;
1098+
}
1099+
fail(DefaultFailMessage);
1100+
}
1101+
1102+
@Test
1103+
public void testAddRewardForDecision_nan() {
1104+
DecisionModel decisionModel = new DecisionModel("greetings");
1105+
try {
1106+
decisionModel.addReward(Double.NaN, "abcd");
1107+
} catch (IllegalArgumentException e) {
1108+
e.printStackTrace();
1109+
return ;
1110+
}
1111+
fail(DefaultFailMessage);
1112+
}
1113+
1114+
@Test
1115+
public void testAddRewardForDecision_positive_infinity() {
1116+
DecisionModel decisionModel = new DecisionModel("greetings");
1117+
try {
1118+
decisionModel.addReward(Double.POSITIVE_INFINITY, "abcd");
1119+
} catch (IllegalArgumentException e) {
1120+
e.printStackTrace();
1121+
return ;
1122+
}
1123+
fail(DefaultFailMessage);
1124+
}
1125+
1126+
@Test
1127+
public void testAddRewardForDecision_negative_infinity() {
1128+
DecisionModel decisionModel = new DecisionModel("greetings");
1129+
try {
1130+
decisionModel.addReward(Double.POSITIVE_INFINITY, "abcd");
1131+
} catch (IllegalArgumentException e) {
1132+
e.printStackTrace();
1133+
return ;
1134+
}
1135+
fail(DefaultFailMessage);
1136+
}
1137+
1138+
@Test
1139+
public void testAddRewardForDecision_null_trackURL() {
1140+
DecisionModel decisionModel = new DecisionModel("greetings");
1141+
decisionModel.setTrackURL(null);
1142+
try {
1143+
decisionModel.addReward(1.0, "abcd");
1144+
} catch (IllegalStateException e) {
1145+
e.printStackTrace();
1146+
return ;
1147+
}
1148+
fail(DefaultFailMessage);
1149+
}
1150+
10721151
@Test
10731152
public void testGivensProvider_getter_setter() {
10741153
DecisionModel decisionModel = new DecisionModel("hello");

0 commit comments

Comments
 (0)