def test_equal_probability(): """ Check particles have equal probability of movement. """ from numpy import array, sqrt, count_nonzero energy = MagicMock() density = array([1, 0, 99]) mc = MonteCarlo(energy, density) changes_at_zero = [(density - mc.change_density(density))[0] != 0 for i in range(10000)] assert count_nonzero(changes_at_zero) == approx( 0.01 * len(changes_at_zero), 0.5 * sqrt(len(changes_at_zero)))
def test_move_particle_one_over(): """ Check density is change by a particle hopping left or right. """ from numpy import nonzero, multiply from numpy.random import randint energy = MagicMock() for i in range(100): # Do this n times, to avoid # issues with random numbers # Create density density = randint(50, size=randint(2, 6)) mc = MonteCarlo(energy, density) # Change it new_density = mc.change_density(density) # Make sure any movement is by one indices = nonzero(density - new_density)[0] assert len(indices) == 2, "densities differ in two places" assert (multiply.reduce( (density - new_density)[indices]) == -1), "densities differ by + and - 1"