Coverage for test_model.py: 100%

31 statements  

« prev     ^ index     » next       coverage.py v7.6.2, created at 2024-10-11 16:43 +0000

1""" Unit tests for a diffusion model """ 

2 

3from pytest import raises 

4from .model import energy 

5 

6def test_energy_fails_on_non_integer_density(): 

7 with raises(TypeError) as exception: 

8 energy([1.0, 2, 3]) 

9 

10def test_energy_fails_on_negative_density(): 

11 with raises(ValueError) as exception: energy( 

12 [-1, 2, 3]) 

13 

14def test_energy_fails_ndimensional_density(): 

15 with raises(ValueError) as exception: energy( 

16 [[1, 2, 3], [3, 4, 5]]) 

17 

18def test_zero_energy_cases(): 

19 # Zero energy at zero density 

20 densities = [ [], [0], [0, 0, 0] ] 

21 for density in densities: 

22 assert energy(density) == 0 

23 

24def test_derivative(): 

25 from numpy.random import randint 

26 

27 # Loop over vectors of different sizes (but not empty) 

28 for vector_size in randint(1, 1000, size=30): 

29 

30 # Create random density of size N 

31 density = randint(50, size=vector_size) 

32 

33 # will do derivative at this index 

34 element_index = randint(vector_size) 

35 

36 # modified densities 

37 density_plus_one = density.copy() 

38 density_plus_one[element_index] += 1 

39 

40 # Compute and check result 

41 # d(n^2-1)/dn = 2n 

42 expected = (2.0 * density[element_index] 

43 if density[element_index] > 0 

44 else 0 ) 

45 actual = energy(density_plus_one) - energy(density) 

46 assert expected == actual 

47 

48def test_derivative_no_self_energy(): 

49 """ If particle is alone, then its participation to energy is zero """ 

50 from numpy import array 

51 

52 density = array([1, 0, 1, 10, 15, 0]) 

53 density_plus_one = density.copy() 

54 density[1] += 1 

55 

56 expected = 0 

57 actual = energy(density_plus_one) - energy(density) 

58 assert expected == actual