public void testFilteringWithParticleSetsWorksForRainmanHmm()
{
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 = rainman.prior().toParticleSet(rainman, r, 100);
Assert.AreEqual(56, starting
.numberOfParticlesWithState(HmmConstants.RAINING));
Assert.AreEqual(44, starting
.numberOfParticlesWithState(HmmConstants.NOT_RAINING));
ParticleSet afterSeeingUmbrella = starting.filter(
HmmConstants.SEE_UMBRELLA, r);
Assert.AreEqual(84, afterSeeingUmbrella
.numberOfParticlesWithState(HmmConstants.RAINING));
Assert.AreEqual(16, afterSeeingUmbrella
.numberOfParticlesWithState(HmmConstants.NOT_RAINING));
// or alternatively
ParticleSet afterNotSeeingUmbrella = starting.filter(
HmmConstants.SEE_NO_UMBRELLA, r);
Assert.AreEqual(12, afterNotSeeingUmbrella
.numberOfParticlesWithState(HmmConstants.RAINING));
Assert.AreEqual(88, afterNotSeeingUmbrella
.numberOfParticlesWithState(HmmConstants.NOT_RAINING));
}