Skip to content

Latest commit

 

History

History
82 lines (57 loc) · 1.66 KB

tombola_tests.rst

File metadata and controls

82 lines (57 loc) · 1.66 KB

Tombola tests

Every concrete subclass of Tombola should pass these tests.

Create and load instance from iterable:

>>> balls = list(range(3))
>>> globe = ConcreteTombola(balls)
>>> globe.loaded()
True
>>> sorted(globe.inspect())
[0, 1, 2]

Pick and collect balls:

>>> picks = []
>>> picks.append(globe.pick())
>>> picks.append(globe.pick())
>>> picks.append(globe.pick())

Check state and results:

>>> globe.loaded()
False
>>> sorted(picks) == balls
True

Reload:

>>> globe.load(balls)
>>> globe.loaded()
True
>>> picks = [globe.pick() for i in balls]
>>> globe.loaded()
False

Check that LookupError (or a subclass) is the exception thrown when the device is empty:

>>> globe = ConcreteTombola([])
>>> try:
...     globe.pick()
... except LookupError as exc:
...     print('OK')
OK

Load and pick 100 balls to verify that they all come out:

>>> balls = list(range(100))
>>> globe = ConcreteTombola(balls)
>>> picks = []
>>> while globe.inspect():
...     picks.append(globe.pick())
>>> len(picks) == len(balls)
True
>>> set(picks) == set(balls)
True

Check that the order has changed and is not simply reversed:

>>> picks != balls
True
>>> picks[::-1] != balls
True

Note: the previous 2 tests have a very small chance of failing even if the implementation is OK. The probability of the 100 balls coming out, by chance, in the order they were inspect is 1/100!, or approximately 1.07e-158. It's much easier to win the Lotto or to become a billionaire working as a programmer.

THE END