// Assert the tuple and check it was added to activation-group-0
node0.assertTuple( tuple,
context0,
workingMemory );
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.retractTuple( tuple,
context0,
workingMemory );
assertEquals( 0,
activationGroup0.size() );
// Assert the tuple again and check it was added to activation-group-0
node0.assertTuple( tuple,
context0,
workingMemory );
assertEquals( 1,
activationGroup0.size() );
// Assert another tuple and check it was added to activation-group-0
node1.assertTuple( tuple,
context1,
workingMemory );
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 );
// 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( rule0,
list.get( 0 ) );
list.clear();
//-------------------
// Now try a more complex scenario involving two Xor Groups and one rule not in a Group
node0.assertTuple( tuple,
context0,
workingMemory );
node1.assertTuple( tuple,
context1,
workingMemory );
node2.assertTuple( tuple,
context2,
workingMemory );
node3.assertTuple( tuple,
context3,
workingMemory );
// 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.clearAgendaGroup( "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 );
assertEquals( 1,
agenda.agendaSize() );