Tests for Task 5: Run simulation

This page describes the tests for Task 5. 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 5, run the following command at the Linux command-line:

$ py.test -xvk 'run'

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: No one is infected. The simulation stops immediately.

To run this test in ipython3 :

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

Expected result:

([('S', 0),    # loc: 0
  ('S', 0),    # loc: 1
  ('S', 0),    # loc: 2
  ('R', 0)],    # loc: 3
 0)

Test 1

Description: No one is susceptible. The simulation stops immediately.

To run this test in ipython3 :

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

Expected result:

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

Test 2

Description: Susceptible folks get infected on the first day.

To run this test in ipython3 :

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

Expected result:

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

Test 3

Description: Susceptible person gets infected on the first day. Infected person, recovers

To run this test in ipython3 :

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

Expected result:

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

Test 4

Description: Medium city: The suspectible person in the middle gets infected, while the susceptible person at the end is protected by recovered neighbors.

To run this test in ipython3 :

city = [('R', 0),    # loc: 0
        ('I', 0),    # loc: 1
        ('S', 0),    # loc: 2
        ('I', 1),    # loc: 3
        ('S', 0),    # loc: 4
        ('R', 0),    # loc: 5
        ('S', 0)]    # loc: 6
sir.run_simulation(city, 5)

Expected result:

([('R', 1),    # loc: 0
  ('I', 1),    # loc: 1
  ('I', 0),    # loc: 2
  ('I', 2),    # loc: 3
  ('I', 0),    # loc: 4
  ('R', 1),    # loc: 5
  ('S', 1)],    # loc: 6
 1)

Test 5

Description: Medium city: infection ripples through the city. Recovered person at the end prevents wrap-around infections

To run this test in ipython3 :

city = [('I', 0),    # loc: 0
        ('S', 0),    # loc: 1
        ('S', 0),    # loc: 2
        ('S', 1),    # loc: 3
        ('S', 0),    # loc: 4
        ('S', 0),    # loc: 5
        ('S', 0),    # loc: 6
        ('R', 0)]    # loc: 7
sir.run_simulation(city, 3)

Expected result:

([('R', 3),    # loc: 0
  ('R', 2),    # loc: 1
  ('R', 1),    # loc: 2
  ('R', 0),    # loc: 3
  ('I', 2),    # loc: 4
  ('I', 1),    # loc: 5
  ('I', 0),    # loc: 6
  ('R', 6)],    # loc: 7
 6)

Test 6

Description: Medium city: infection ripples through the city from both directions due to wrap-around

To run this test in ipython3 :

city = [('I', 0),    # loc: 0
        ('S', 0),    # loc: 1
        ('S', 0),    # loc: 2
        ('S', 1),    # loc: 3
        ('S', 0),    # loc: 4
        ('S', 0),    # loc: 5
        ('S', 0),    # loc: 6
        ('S', 0)]    # loc: 7
sir.run_simulation(city, 3)

Expected result:

([('R', 1),    # loc: 0
  ('R', 0),    # loc: 1
  ('I', 2),    # loc: 2
  ('I', 1),    # loc: 3
  ('I', 0),    # loc: 4
  ('I', 1),    # loc: 5
  ('I', 2),    # loc: 6
  ('R', 0)],    # loc: 7
 4)

Test 7

Description: Large city. Some susceptible people get infected. Others are protected by recovered people.

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.run_simulation(city, 2)

Expected result:

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

Tests for Task 6-5: add vaxxed people

This section describes tests for Task 5 that include vaccinated people. Work through these tests after you have completed Tasks 1-5.

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

$ py.test -xvk run --runvax

Test 0

Description: No one is infected. The simulation stops immediately.

To run this test in ipython3 :

city = [('V', 0),    # loc: 0
        ('S', 0),    # loc: 1
        ('S', 0),    # loc: 2
        ('R', 0)]    # loc: 3
sir.run_simulation(city, 3)

Expected result:

([('V', 0),    # loc: 0
  ('S', 0),    # loc: 1
  ('S', 0),    # loc: 2
  ('R', 0)],    # loc: 3
 0)

Test 1

Description: No one is susceptible. The simulation stops immediately.

To run this test in ipython3 :

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

Expected result:

([('V', 0),    # loc: 0
  ('I', 0),    # loc: 1
  ('R', 0),    # loc: 2
  ('R', 0)],    # loc: 3
 0)

Test 2

Description: Susceptible person gets infected on the first day. Infected person, recovers

To run this test in ipython3 :

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

Expected result:

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

Test 3

Description: One susceptible person get infected on the first day. The other gets infected on the second day

To run this test in ipython3 :

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

Expected result:

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

Test 4

Description: Medium city: susceptible person at the end is protected by V’s.

To run this test in ipython3 :

city = [('V', 0),    # loc: 0
        ('I', 0),    # loc: 1
        ('S', 0),    # loc: 2
        ('I', 1),    # loc: 3
        ('S', 0),    # loc: 4
        ('V', 0),    # loc: 5
        ('S', 0)]    # loc: 6
sir.run_simulation(city, 5)

Expected result:

([('V', 1),    # loc: 0
  ('I', 1),    # loc: 1
  ('I', 0),    # loc: 2
  ('I', 2),    # loc: 3
  ('I', 0),    # loc: 4
  ('V', 1),    # loc: 5
  ('S', 1)],    # loc: 6
 1)

Test 5

Description: Medium city: infection ripples through the city. Vaxxed person at the end prevents wrap-around infections

To run this test in ipython3 :

city = [('I', 0),    # loc: 0
        ('S', 0),    # loc: 1
        ('S', 0),    # loc: 2
        ('S', 1),    # loc: 3
        ('S', 0),    # loc: 4
        ('S', 0),    # loc: 5
        ('S', 0),    # loc: 6
        ('V', 0)]    # loc: 7
sir.run_simulation(city, 3)

Expected result:

([('R', 3),    # loc: 0
  ('R', 2),    # loc: 1
  ('R', 1),    # loc: 2
  ('R', 0),    # loc: 3
  ('I', 2),    # loc: 4
  ('I', 1),    # loc: 5
  ('I', 0),    # loc: 6
  ('V', 6)],    # loc: 7
 6)

Test 6

Description: Medium city: infection ripples through the city from both directions due to wrap-around

To run this test in ipython3 :

city = [('I', 0),    # loc: 0
        ('S', 0),    # loc: 1
        ('S', 0),    # loc: 2
        ('V', 1),    # loc: 3
        ('S', 0),    # loc: 4
        ('S', 0),    # loc: 5
        ('S', 0),    # loc: 6
        ('S', 0)]    # loc: 7
sir.run_simulation(city, 3)

Expected result:

([('R', 1),    # loc: 0
  ('R', 0),    # loc: 1
  ('I', 2),    # loc: 2
  ('V', 5),    # loc: 3
  ('I', 0),    # loc: 4
  ('I', 1),    # loc: 5
  ('I', 2),    # loc: 6
  ('R', 0)],    # loc: 7
 4)

Test 7

Description: Large city: some susceptible people get infected, others don’t.

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
        ('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.run_simulation(city, 2)

Expected result:

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