diff --git a/code/tests/test_energy.py b/code/tests/test_energy.py new file mode 100644 index 0000000..31ba875 --- /dev/null +++ b/code/tests/test_energy.py @@ -0,0 +1,27 @@ +import numpy as np +from matplotlib.image import imread +from pathlib import Path + +from MCFF.ising_model import all_up_state, all_down_state, random_state +from MCFF.ising_model import energy, energy_numpy + +# create some test states +all_up = np.ones([100,100]) +all_down = -np.ones([100,100]) +random = np.random.choice([-1, 1], size = (100,100)) +custom = (1 - 2*imread(Path(__file__).parents[2]/'learning/data/test_state.png')[:, :, 0]) #load a 100x100 png, take the red channel, remap 0,1 to -1,1 + +states = [all_up, all_down, random, custom] + +def E_prediction_all_the_same(L): + "The exact energy in for the case where all spins are up or down" + return -(4*(L - 2)**2 + 12*(L-2) + 8) / L**2 + +def test_exact_energies(): + for state in [all_up, all_down]: + L = state.shape[0] + assert energy(state) == E_prediction_all_the_same(L) + +def test_energy_implementations(): + for state in states: + assert np.allclose(energy(state), energy_numpy(state))