public void testFilteringWithParticleSetsForRobotHmm()
{
Randomizer r = new MockRandomizer(new double[] { 0.1, 0.2, 0.3, 0.4,
0.5, 0.6, 0.7, 0.8, 0.9 });
ParticleSet starting = robot.prior().toParticleSet(robot, r, 100);
Assert.AreEqual(56, starting
.numberOfParticlesWithState(HmmConstants.DOOR_OPEN));
Assert.AreEqual(44, starting
.numberOfParticlesWithState(HmmConstants.DOOR_CLOSED));
// step one = robot takes no action but senses open door
ParticleSet afterStepOne = starting.filter(HmmConstants.SEE_DOOR_OPEN,
r);
Assert.AreEqual(66, afterStepOne
.numberOfParticlesWithState(HmmConstants.DOOR_OPEN));
Assert.AreEqual(34, afterStepOne
.numberOfParticlesWithState(HmmConstants.DOOR_CLOSED));
// step two = robot pushes the door and then senses open door
ParticleSet afterStepTwo = starting.filter(HmmConstants.PUSH_DOOR,
HmmConstants.SEE_DOOR_OPEN, r);
Assert.AreEqual(100, afterStepTwo
.numberOfParticlesWithState(HmmConstants.DOOR_OPEN));
Assert.AreEqual(0, afterStepTwo
.numberOfParticlesWithState(HmmConstants.DOOR_CLOSED));
}