# High Five Solution¶

## Solution 1¶

test_highfive.py
from highfive import is_highfive

def test_105():
assert is_highfive(105)

def test_100():
assert not is_highfive(100)

def test_106():
assert not is_highfive(106)


### Explanation¶

How to run these tests
Shell / Terminal
cd path/to/highfive/
pytest


(You should see three green dots indicating that each test passed.)

def test_is_highfive():
assert is_highfive(105)
assert not is_highfive(100)
assert not is_highfive(106)


When you put multiple assertions in one test function, if one of the assertions fails, the function stops executing and none of the remaining assertions are tested. In other words, test functions pass or fail "as a whole". Sometimes this is desirable, but in this example we wanted each test to run, regardless of whether one of them fails.

## Solution 2¶

test_highfive.py
import pytest
from highfive import is_highfive

@pytest.mark.parametrize(
"test_input, expected",
[(105, True), (100, False), (106, False)]
)
def test_is_highfive(test_input, expected):
assert is_highfive(test_input) == expected


### Explanation¶

This is equivalent to Solution 1 but less wordy.

1. Define a generic test function with two parameters: test_input and expected.

from highfive import is_highfive

def test_is_highfive(test_input, expected):
assert is_highfive(test_input) == expected

2. Decorate the function with the @pytest.mark.parametrize decorator, passing in

1. a string representation of the input parameters
2. a list of (a, b) tuples representing each (test_input, expected) pair
import pytest
from highfive import is_highfive

@pytest.mark.parametrize(
"test_input, expected",
[(105, True), (100, False), (106, False)]
)
def test_is_highfive(test_input, expected):
assert is_highfive(test_input) == expected


Note that using the parametrize decorator requires us to import pytest.