Skip to content

Commit 7bf326a

Browse files
committed
testing
1 parent 33291f4 commit 7bf326a

File tree

5 files changed

+139
-46
lines changed

5 files changed

+139
-46
lines changed

examples/banananation/src/main/java/gov/nasa/jpl/aerie/banananation/activities/BiteBananaActivity.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
@ActivityType("BiteBanana")
2222
public final class BiteBananaActivity {
2323
@Parameter
24-
2524
@Banannotation("Specifies the size of bite to take")
2625
@Unit("m")
2726
public double biteSize = 1.0;

examples/banananation/src/main/java/gov/nasa/jpl/aerie/banananation/activities/RussianBanana.java

Lines changed: 0 additions & 43 deletions
This file was deleted.
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package gov.nasa.jpl.aerie.banananation.activities;
2+
3+
import gov.nasa.jpl.aerie.banananation.Mission;
4+
import gov.nasa.jpl.aerie.merlin.framework.annotations.ActivityType;
5+
import gov.nasa.jpl.aerie.merlin.framework.annotations.AutoValueMapper;
6+
import gov.nasa.jpl.aerie.merlin.framework.annotations.Export;
7+
import gov.nasa.jpl.aerie.merlin.protocol.types.Duration;
8+
9+
import java.util.List;
10+
import java.util.Optional;
11+
12+
import static gov.nasa.jpl.aerie.banananation.generated.ActivityActions.call;
13+
import static gov.nasa.jpl.aerie.merlin.framework.ModelActions.delay;
14+
15+
/**
16+
* RussianNestingBanana nests activity types as parameters inside an activity
17+
*
18+
* This activity tests the use of activity types as parameters and within compound type parameters. There are a few use cases:
19+
* 1. Basic activity type parameter which is passed through and called without parent level modeling
20+
* 2. List of activity types which are just iterated through and called
21+
* 3. Using a parent level parameter to override information in the call to a child from an activity type parameter
22+
*
23+
* @subsystem fruit
24+
* @contact John Doe
25+
*/
26+
@ActivityType("RussianNestingBanana")
27+
public final class RussianNestingBanana {
28+
29+
/** Record encapsulating an activity type **/
30+
@AutoValueMapper.Record
31+
public record pickBananaWithId(
32+
int id,
33+
PickBananaActivity pickBananaActivity
34+
) {}
35+
36+
/** Record type parameter encapsulating an activity type **/
37+
@Export.Parameter
38+
public pickBananaWithId pickBananaActivityRecord;
39+
40+
/** Parent level override parameter, in this case to override call to peel banana
41+
* found in the pickBannaActivityRecord parameter **/
42+
@Export.Parameter
43+
public int pickBananaQuantityOverride = 0;
44+
45+
/** List of activity type parameter example **/
46+
@Export.Parameter
47+
public List<BiteBananaActivity> biteBananaActivity;
48+
49+
/** Vanilla activity type parameter **/
50+
@Export.Parameter
51+
public PeelBananaActivity peelBananaActivity;
52+
53+
54+
@ActivityType.EffectModel
55+
public void run(final Mission mission) {
56+
// if the pickBananaQuantityOverride is preset use that integer instead of the pickBananaActivityRecord
57+
if(pickBananaQuantityOverride != 0) {
58+
PickBananaActivity pickBananaActivity = pickBananaActivityRecord.pickBananaActivity;
59+
pickBananaActivity.quantity = pickBananaQuantityOverride;
60+
call(mission, pickBananaActivity);
61+
} else { // else use the record type parameter supplied
62+
call(mission, pickBananaActivityRecord.pickBananaActivity());
63+
}
64+
// call a bite banana for each element in the list of biteBanana activities
65+
for (final var bite : biteBananaActivity) {
66+
call(mission, bite);
67+
delay(Duration.of(30, Duration.MINUTE));
68+
}
69+
// call peel banana activity
70+
call(mission, peelBananaActivity);
71+
}
72+
}

examples/banananation/src/main/java/gov/nasa/jpl/aerie/banananation/package-info.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
@WithActivityType(ControllableDurationActivity.class)
2727
@WithActivityType(RipenBananaActivity.class)
2828
@WithActivityType(ExceptionActivity.class)
29-
@WithActivityType(RussianBanana.class)
29+
@WithActivityType(RussianNestingBanana.class)
3030
package gov.nasa.jpl.aerie.banananation;
3131

3232
import gov.nasa.jpl.aerie.banananation.activities.BakeBananaBreadActivity;
@@ -46,7 +46,7 @@
4646
import gov.nasa.jpl.aerie.banananation.activities.PeelBananaActivity;
4747
import gov.nasa.jpl.aerie.banananation.activities.PickBananaActivity;
4848
import gov.nasa.jpl.aerie.banananation.activities.RipenBananaActivity;
49-
import gov.nasa.jpl.aerie.banananation.activities.RussianBanana;
49+
import gov.nasa.jpl.aerie.banananation.activities.RussianNestingBanana;
5050
import gov.nasa.jpl.aerie.banananation.activities.ThrowBananaActivity;
5151
import gov.nasa.jpl.aerie.contrib.serialization.rulesets.BasicValueMappers;
5252
import gov.nasa.jpl.aerie.merlin.framework.annotations.MissionModel;
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package gov.nasa.jpl.aerie.banananation.activities;
2+
3+
import gov.nasa.jpl.aerie.banananation.Configuration;
4+
import gov.nasa.jpl.aerie.banananation.Mission;
5+
import gov.nasa.jpl.aerie.banananation.SimulationUtility;
6+
import gov.nasa.jpl.aerie.banananation.generated.GeneratedModelType;
7+
import gov.nasa.jpl.aerie.banananation.generated.activities.ParameterTestActivityMapper;
8+
import gov.nasa.jpl.aerie.banananation.generated.activities.RussianNestingBananaMapper;
9+
import gov.nasa.jpl.aerie.contrib.serialization.mappers.DurationValueMapper;
10+
import gov.nasa.jpl.aerie.merlin.driver.DirectiveTypeRegistry;
11+
import gov.nasa.jpl.aerie.merlin.driver.MissionModelBuilder;
12+
import gov.nasa.jpl.aerie.merlin.driver.SerializedActivity;
13+
import gov.nasa.jpl.aerie.merlin.framework.Registrar;
14+
import gov.nasa.jpl.aerie.merlin.framework.junit.MerlinExtension;
15+
import gov.nasa.jpl.aerie.merlin.protocol.types.InstantiationException;
16+
import gov.nasa.jpl.aerie.merlin.protocol.types.SerializedValue;
17+
import org.apache.commons.lang3.tuple.Pair;
18+
import org.junit.jupiter.api.Test;
19+
import org.junit.jupiter.api.TestInstance;
20+
import org.junit.jupiter.api.extension.ExtendWith;
21+
22+
import java.nio.file.Path;
23+
import java.time.Instant;
24+
import java.util.HashMap;
25+
import java.util.List;
26+
import java.util.Map;
27+
28+
import static gov.nasa.jpl.aerie.banananation.generated.ActivityActions.call;
29+
import static gov.nasa.jpl.aerie.merlin.protocol.types.Duration.MILLISECONDS;
30+
import static gov.nasa.jpl.aerie.merlin.protocol.types.Duration.SECONDS;
31+
import static gov.nasa.jpl.aerie.merlin.protocol.types.Duration.duration;
32+
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
33+
import static org.junit.jupiter.api.Assertions.assertEquals;
34+
35+
@ExtendWith(MerlinExtension.class)
36+
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
37+
public class RussianNestingActivityTest {
38+
private final RussianNestingBananaMapper mapper;
39+
40+
public RussianNestingActivityTest() {
41+
this.mapper = new RussianNestingBananaMapper();
42+
}
43+
44+
@Test
45+
public void testDefaultSimulationDoesNotThrow() {
46+
final var schedule = SimulationUtility.buildSchedule(
47+
Pair.of(
48+
duration(1100, MILLISECONDS),
49+
new SerializedActivity("RussianNestingBanana",
50+
Map.of("pickBananaActivityRecord",
51+
SerializedValue.of(Map.of("id", SerializedValue.of(2),
52+
"pickBananaActivity", SerializedValue.of(Map.of("quantity", SerializedValue.of(10)))))
53+
, "pickBananaQuantityOverride", SerializedValue.of(0),
54+
"biteBananaActivity", SerializedValue.of(List.of()),
55+
"peelBananaActivity", SerializedValue.of(Map.of("peelDirection", SerializedValue.of("fromStem")))))));
56+
57+
final var simulationDuration = duration(5, SECONDS);
58+
59+
final var simulationResults = SimulationUtility.simulate(schedule, simulationDuration);
60+
61+
System.out.println(simulationResults.discreteProfiles);
62+
System.out.println(simulationResults.realProfiles);
63+
}
64+
65+
}

0 commit comments

Comments
 (0)