// Assert the tuple and check it was added to activation-group-0
node0.assertLeftTuple(tuple1,
context0,
workingMemory);
agenda.unstageActivations();
final ActivationGroup activationGroup0 = agenda.getActivationGroup("activation-group-0");
assertEquals(1,
activationGroup0.size());
// Removing a tuple should remove the activation from the activation-group-0 again
node0.retractLeftTuple(tuple1,
context0,
workingMemory);
assertEquals(0,
activationGroup0.size());
// Assert the tuple again and check it was added to activation-group-0
node0.assertLeftTuple(tuple3,
context0,
workingMemory);
agenda.unstageActivations();
assertEquals(1,
activationGroup0.size());
// Assert another tuple and check it was added to activation-group-0
node1.assertLeftTuple(tuple4,
context1,
workingMemory);
agenda.unstageActivations();
assertEquals(2,
activationGroup0.size());
// There should now be two potential activations to fire
assertEquals(2,
agenda.focusStackSize());
// The first tuple should fire, adding itself to the List and clearing and cancelling the other Activations in the activation-group-0
agenda.fireNextItem(null, 0, -1);
// Make sure the activation-group-0 is clear
assertEquals(0,
activationGroup0.size());
// Make sure the Agenda is empty
assertEquals(0,
agenda.focusStackSize());
// List should only have a single item, "rule0"
assertEquals(1,
list.size());
assertSame(rule1,
list.get(0));
list.clear();
//-------------------
// Now try a more complex scenario involving two Xor Groups and one rule not in a Group
node0.assertLeftTuple(tuple5,
context0,
workingMemory);
node1.assertLeftTuple(tuple6,
context1,
workingMemory);
node2.assertLeftTuple(tuple7,
context2,
workingMemory);
node3.assertLeftTuple(tuple8,
context3,
workingMemory);
agenda.unstageActivations();
// activation-group-0 should be populated again
assertEquals(2,
activationGroup0.size());
// make sure the activation-group-3 is cleared when we can clear the Agenda Group for the activation that is in both
final ActivationGroup activationGroup3 = agenda.getActivationGroup("activation-group-3");
assertEquals(4,
agenda.agendaSize());
assertEquals(1,
activationGroup3.size());
agenda.clearAndCancelAgendaGroup("agendaGroup3");
assertEquals(3,
agenda.agendaSize());
assertEquals(0,
activationGroup3.size());
// Activation for activation-group-0 should be next - the activation in no activation/agenda group should remain on the agenda
agenda.fireNextItem(null, 0, -1);
assertEquals(1,
agenda.agendaSize());