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