Tests for Task 3: Move the simulation forward a single day

This page describes the tests for Task 3. For each task, we provide a short description of the test, information about how to recreate the test in ipython3, and the expected result.

To run the tasks for Task 3, run the following command at the Linux command-line:

$ py.test -xvk one

When you run this command, you’ll see that some tests are labelled as SKIPPED. You can ignore these tests for now,we’ll come back to them later when we introduce vaccines into our simulation.

Test 0

Description: Check that the days contagious for infected people who are not ready to recover are incremented properly.

To run this test in ipython3 :

city = [('I', 0),    # loc: 0
        ('I', 1),    # loc: 1
        ('I', 100)]    # loc: 2
sir.simulate_one_day(city, 200, 0)

Expected result:

[['I', 1],    # loc: 0
 ['I', 2],    # loc: 1
 ['I', 101]]    # loc: 2

Test 1

Description: Check that infected people are converted to the recovered state properly.

To run this test in ipython3 :

city = [('I', 2),    # loc: 0
        ('I', 2),    # loc: 1
        ('I', 2)]    # loc: 2
sir.simulate_one_day(city, 3, 0)

Expected result:

[['R', 0],    # loc: 0
 ['R', 0],    # loc: 1
 ['R', 0]]    # loc: 2

Test 2

Description: Check that the days contagious for recovered people are incremented properly.

To run this test in ipython3 :

city = [('R', 0),    # loc: 0
        ('R', 10),    # loc: 1
        ('R', 100)]    # loc: 2
sir.simulate_one_day(city, 3, 0)

Expected result:

[['R', 1],    # loc: 0
 ['R', 11],    # loc: 1
 ['R', 101]]    # loc: 2

Test 3

Description: Purpose: Check that a susceptible person with infected neighbors becomes infected.

To run this test in ipython3 :

city = [('I', 1),    # loc: 0
        ('S', 0),    # loc: 1
        ('I', 1)]    # loc: 2
sir.simulate_one_day(city, 3, 0)

Expected result:

[['I', 2],    # loc: 0
 ['I', 0],    # loc: 1
 ['I', 2]]    # loc: 2

Test 4

Description: Check that a susceptible person becomes infected, even as its neighbors recover in the same day.

To run this test in ipython3 :

city = [('I', 1),    # loc: 0
        ('S', 0),    # loc: 1
        ('I', 1)]    # loc: 2
sir.simulate_one_day(city, 2, 0)

Expected result:

[['R', 0],    # loc: 0
 ['I', 0],    # loc: 1
 ['R', 0]]    # loc: 2

Test 5

Description: Check that two susceptible people become infected.

To run this test in ipython3 :

city = [('S', 0),    # loc: 0
        ('I', 0),    # loc: 1
        ('S', 0)]    # loc: 2
sir.simulate_one_day(city, 2, 0)

Expected result:

[['I', 0],    # loc: 0
 ['I', 1],    # loc: 1
 ['I', 0]]    # loc: 2

Test 6

Description: Check susceptible people with no infected neighbors.

To run this test in ipython3 :

city = [('S', 0),    # loc: 0
        ('S', 0),    # loc: 1
        ('S', 0)]    # loc: 2
sir.simulate_one_day(city, 2, 0)

Expected result:

[['S', 1],    # loc: 0
 ['S', 1],    # loc: 1
 ['S', 1]]    # loc: 2

Test 7

Description: Check a large city with medium infection rate

To run this test in ipython3 :

city = [('I', 1),    # loc: 0
        ('R', 0),    # loc: 1
        ('S', 0),    # loc: 2
        ('S', 0),    # loc: 3
        ('S', 0),    # loc: 4
        ('R', 0),    # loc: 5
        ('S', 0),    # loc: 6
        ('S', 0),    # loc: 7
        ('S', 0),    # loc: 8
        ('I', 1),    # loc: 9
        ('I', 1),    # loc: 10
        ('R', 0),    # loc: 11
        ('S', 0),    # loc: 12
        ('S', 0),    # loc: 13
        ('S', 0),    # loc: 14
        ('R', 0),    # loc: 15
        ('S', 0),    # loc: 16
        ('S', 0),    # loc: 17
        ('S', 0),    # loc: 18
        ('I', 1),    # loc: 19
        ('S', 0),    # loc: 20
        ('S', 0),    # loc: 21
        ('S', 0),    # loc: 22
        ('I', 1),    # loc: 23
        ('R', 0),    # loc: 24
        ('S', 0),    # loc: 25
        ('S', 0),    # loc: 26
        ('S', 0),    # loc: 27
        ('R', 0),    # loc: 28
        ('S', 0),    # loc: 29
        ('S', 0),    # loc: 30
        ('S', 0),    # loc: 31
        ('I', 1),    # loc: 32
        ('I', 1),    # loc: 33
        ('R', 0),    # loc: 34
        ('S', 0),    # loc: 35
        ('S', 0),    # loc: 36
        ('S', 0),    # loc: 37
        ('R', 0),    # loc: 38
        ('S', 0),    # loc: 39
        ('S', 0),    # loc: 40
        ('S', 0),    # loc: 41
        ('I', 1),    # loc: 42
        ('S', 0),    # loc: 43
        ('S', 0),    # loc: 44
        ('S', 0),    # loc: 45
        ('S', 0),    # loc: 46
        ('S', 0),    # loc: 47
        ('S', 0)]    # loc: 48
sir.simulate_one_day(city, 2, 0)

Expected result:

[['R', 0],    # loc: 0
 ['R', 1],    # loc: 1
 ['S', 1],    # loc: 2
 ['S', 1],    # loc: 3
 ['S', 1],    # loc: 4
 ['R', 1],    # loc: 5
 ['S', 1],    # loc: 6
 ['S', 1],    # loc: 7
 ['I', 0],    # loc: 8
 ['R', 0],    # loc: 9
 ['R', 0],    # loc: 10
 ['R', 1],    # loc: 11
 ['S', 1],    # loc: 12
 ['S', 1],    # loc: 13
 ['S', 1],    # loc: 14
 ['R', 1],    # loc: 15
 ['S', 1],    # loc: 16
 ['S', 1],    # loc: 17
 ['I', 0],    # loc: 18
 ['R', 0],    # loc: 19
 ['I', 0],    # loc: 20
 ['S', 1],    # loc: 21
 ['I', 0],    # loc: 22
 ['R', 0],    # loc: 23
 ['R', 1],    # loc: 24
 ['S', 1],    # loc: 25
 ['S', 1],    # loc: 26
 ['S', 1],    # loc: 27
 ['R', 1],    # loc: 28
 ['S', 1],    # loc: 29
 ['S', 1],    # loc: 30
 ['I', 0],    # loc: 31
 ['R', 0],    # loc: 32
 ['R', 0],    # loc: 33
 ['R', 1],    # loc: 34
 ['S', 1],    # loc: 35
 ['S', 1],    # loc: 36
 ['S', 1],    # loc: 37
 ['R', 1],    # loc: 38
 ['S', 1],    # loc: 39
 ['S', 1],    # loc: 40
 ['I', 0],    # loc: 41
 ['R', 0],    # loc: 42
 ['I', 0],    # loc: 43
 ['S', 1],    # loc: 44
 ['S', 1],    # loc: 45
 ['S', 1],    # loc: 46
 ['S', 1],    # loc: 47
 ['I', 0]]    # loc: 48

Test 8

Description: Check a large city with medium infection rate. Last person in the city gets infected.

To run this test in ipython3 :

city = [('S', 1),    # loc: 0
        ('R', 0),    # loc: 1
        ('S', 0),    # loc: 2
        ('S', 0),    # loc: 3
        ('S', 0),    # loc: 4
        ('R', 0),    # loc: 5
        ('S', 0),    # loc: 6
        ('S', 0),    # loc: 7
        ('S', 0),    # loc: 8
        ('I', 1),    # loc: 9
        ('I', 1),    # loc: 10
        ('R', 0),    # loc: 11
        ('S', 0),    # loc: 12
        ('S', 0),    # loc: 13
        ('S', 0),    # loc: 14
        ('R', 0),    # loc: 15
        ('S', 0),    # loc: 16
        ('S', 0),    # loc: 17
        ('S', 0),    # loc: 18
        ('I', 1),    # loc: 19
        ('S', 0),    # loc: 20
        ('S', 0),    # loc: 21
        ('S', 0),    # loc: 22
        ('I', 1),    # loc: 23
        ('R', 0),    # loc: 24
        ('S', 0),    # loc: 25
        ('S', 0),    # loc: 26
        ('S', 0),    # loc: 27
        ('R', 0),    # loc: 28
        ('S', 0),    # loc: 29
        ('S', 0),    # loc: 30
        ('S', 0),    # loc: 31
        ('I', 1),    # loc: 32
        ('I', 1),    # loc: 33
        ('R', 0),    # loc: 34
        ('S', 0),    # loc: 35
        ('S', 0),    # loc: 36
        ('S', 0),    # loc: 37
        ('R', 0),    # loc: 38
        ('S', 0),    # loc: 39
        ('S', 0),    # loc: 40
        ('S', 0),    # loc: 41
        ('I', 1),    # loc: 42
        ('S', 0),    # loc: 43
        ('S', 0),    # loc: 44
        ('S', 0),    # loc: 45
        ('R', 0),    # loc: 46
        ('I', 0),    # loc: 47
        ('S', 0)]    # loc: 48
sir.simulate_one_day(city, 2, 0)

Expected result:

[['S', 2],    # loc: 0
 ['R', 1],    # loc: 1
 ['S', 1],    # loc: 2
 ['S', 1],    # loc: 3
 ['S', 1],    # loc: 4
 ['R', 1],    # loc: 5
 ['S', 1],    # loc: 6
 ['S', 1],    # loc: 7
 ['I', 0],    # loc: 8
 ['R', 0],    # loc: 9
 ['R', 0],    # loc: 10
 ['R', 1],    # loc: 11
 ['S', 1],    # loc: 12
 ['S', 1],    # loc: 13
 ['S', 1],    # loc: 14
 ['R', 1],    # loc: 15
 ['S', 1],    # loc: 16
 ['S', 1],    # loc: 17
 ['I', 0],    # loc: 18
 ['R', 0],    # loc: 19
 ['I', 0],    # loc: 20
 ['S', 1],    # loc: 21
 ['I', 0],    # loc: 22
 ['R', 0],    # loc: 23
 ['R', 1],    # loc: 24
 ['S', 1],    # loc: 25
 ['S', 1],    # loc: 26
 ['S', 1],    # loc: 27
 ['R', 1],    # loc: 28
 ['S', 1],    # loc: 29
 ['S', 1],    # loc: 30
 ['I', 0],    # loc: 31
 ['R', 0],    # loc: 32
 ['R', 0],    # loc: 33
 ['R', 1],    # loc: 34
 ['S', 1],    # loc: 35
 ['S', 1],    # loc: 36
 ['S', 1],    # loc: 37
 ['R', 1],    # loc: 38
 ['S', 1],    # loc: 39
 ['S', 1],    # loc: 40
 ['I', 0],    # loc: 41
 ['R', 0],    # loc: 42
 ['I', 0],    # loc: 43
 ['S', 1],    # loc: 44
 ['S', 1],    # loc: 45
 ['R', 1],    # loc: 46
 ['I', 1],    # loc: 47
 ['I', 0]]    # loc: 48

Tests for Task 3, Part 2: Adding vaccinated people

This section describes tests for Part 2, which includes vaccinated people. Work through these tests after you have completed Part 1 (Tasks 1-5).

To run the tasks for Part 2, run the following command at the Linux command-line:

$ py.test -xvk one --runvax

Test 0

Description: Check that the days in state gets incremented properly for vaxxed people.

To run this test in ipython3 :

random.seed(0)
city = [('V', 0),    # loc: 0
        ('V', 1),    # loc: 1
        ('V', 100)]    # loc: 2
sir.simulate_one_day(city, 200, 0)

Expected result:

[['V', 1],    # loc: 0
 ['V', 2],    # loc: 1
 ['V', 101]]    # loc: 2

Test 1

Description: Purpose: Check that susceptible person with an infected neighbor becomes infected, but that the vaxxed person with low infection probability does not.

To run this test in ipython3 :

random.seed(0)
city = [('S', 0),    # loc: 0
        ('I', 0),    # loc: 1
        ('V', 0)]    # loc: 2
sir.simulate_one_day(city, 2, 0.1)

Expected result:

[['I', 0],    # loc: 0
 ['I', 1],    # loc: 1
 ['V', 1]]    # loc: 2

Test 2

Description: Purpose: Check that susceptible person with an infected neighbor and vaxxed person become infected.

To run this test in ipython3 :

random.seed(25)
city = [('S', 0),    # loc: 0
        ('I', 0),    # loc: 1
        ('V', 0)]    # loc: 2
sir.simulate_one_day(city, 2, 0.5)

Expected result:

[['I', 0],    # loc: 0
 ['I', 1],    # loc: 1
 ['I', 0]]    # loc: 2

Test 3

Description: Purpose: Check that first vaxxed person with an infected neighbor becomes infected, but that second vaxxed person does not.

To run this test in ipython3 :

random.seed(25)
city = [('V', 0),    # loc: 0
        ('I', 0),    # loc: 1
        ('V', 0)]    # loc: 2
sir.simulate_one_day(city, 2, 0.5)

Expected result:

[['I', 0],    # loc: 0
 ['I', 1],    # loc: 1
 ['V', 1]]    # loc: 2

Test 4

Description: Purpose: Check that first vaxxed person with an infected neighbor does not become infected, but that the second vaxxed person does.

To run this test in ipython3 :

random.seed(15)
city = [('V', 0),    # loc: 0
        ('I', 0),    # loc: 1
        ('V', 0)]    # loc: 2
sir.simulate_one_day(city, 2, 0.5)

Expected result:

[['V', 1],    # loc: 0
 ['I', 1],    # loc: 1
 ['I', 0]]    # loc: 2

Test 5

Description: Large city with medium infection rate and low infection probability. All the susceptible people are protected by vaxxed and recovered neighbors.

To run this test in ipython3 :

random.seed(0)
city = [('I', 1),    # loc: 0
        ('R', 0),    # loc: 1
        ('S', 0),    # loc: 2
        ('S', 0),    # loc: 3
        ('S', 0),    # loc: 4
        ('R', 0),    # loc: 5
        ('S', 0),    # loc: 6
        ('S', 0),    # loc: 7
        ('V', 0),    # loc: 8
        ('I', 1),    # loc: 9
        ('I', 1),    # loc: 10
        ('R', 0),    # loc: 11
        ('S', 0),    # loc: 12
        ('S', 0),    # loc: 13
        ('S', 0),    # loc: 14
        ('R', 0),    # loc: 15
        ('S', 0),    # loc: 16
        ('S', 0),    # loc: 17
        ('V', 0),    # loc: 18
        ('I', 1),    # loc: 19
        ('V', 0),    # loc: 20
        ('S', 0),    # loc: 21
        ('V', 0),    # loc: 22
        ('I', 1),    # loc: 23
        ('R', 0),    # loc: 24
        ('S', 0),    # loc: 25
        ('S', 0),    # loc: 26
        ('S', 0),    # loc: 27
        ('R', 0),    # loc: 28
        ('S', 0),    # loc: 29
        ('S', 0),    # loc: 30
        ('V', 0),    # loc: 31
        ('I', 1),    # loc: 32
        ('I', 1),    # loc: 33
        ('R', 0),    # loc: 34
        ('S', 0),    # loc: 35
        ('S', 0),    # loc: 36
        ('S', 0),    # loc: 37
        ('R', 0),    # loc: 38
        ('S', 0),    # loc: 39
        ('S', 0),    # loc: 40
        ('V', 0),    # loc: 41
        ('I', 1),    # loc: 42
        ('V', 0),    # loc: 43
        ('S', 0),    # loc: 44
        ('S', 0),    # loc: 45
        ('S', 0),    # loc: 46
        ('S', 0),    # loc: 47
        ('V', 0)]    # loc: 48
sir.simulate_one_day(city, 2, 0.1)

Expected result:

[['R', 0],    # loc: 0
 ['R', 1],    # loc: 1
 ['S', 1],    # loc: 2
 ['S', 1],    # loc: 3
 ['S', 1],    # loc: 4
 ['R', 1],    # loc: 5
 ['S', 1],    # loc: 6
 ['S', 1],    # loc: 7
 ['V', 1],    # loc: 8
 ['R', 0],    # loc: 9
 ['R', 0],    # loc: 10
 ['R', 1],    # loc: 11
 ['S', 1],    # loc: 12
 ['S', 1],    # loc: 13
 ['S', 1],    # loc: 14
 ['R', 1],    # loc: 15
 ['S', 1],    # loc: 16
 ['S', 1],    # loc: 17
 ['V', 1],    # loc: 18
 ['R', 0],    # loc: 19
 ['V', 1],    # loc: 20
 ['S', 1],    # loc: 21
 ['V', 1],    # loc: 22
 ['R', 0],    # loc: 23
 ['R', 1],    # loc: 24
 ['S', 1],    # loc: 25
 ['S', 1],    # loc: 26
 ['S', 1],    # loc: 27
 ['R', 1],    # loc: 28
 ['S', 1],    # loc: 29
 ['S', 1],    # loc: 30
 ['V', 1],    # loc: 31
 ['R', 0],    # loc: 32
 ['R', 0],    # loc: 33
 ['R', 1],    # loc: 34
 ['S', 1],    # loc: 35
 ['S', 1],    # loc: 36
 ['S', 1],    # loc: 37
 ['R', 1],    # loc: 38
 ['S', 1],    # loc: 39
 ['S', 1],    # loc: 40
 ['V', 1],    # loc: 41
 ['R', 0],    # loc: 42
 ['V', 1],    # loc: 43
 ['S', 1],    # loc: 44
 ['S', 1],    # loc: 45
 ['S', 1],    # loc: 46
 ['S', 1],    # loc: 47
 ['V', 1]]    # loc: 48