Mixed Data

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import sys
import unittest
from dataclasses import dataclass
from typing import *
sys.setrecursionlimit(10**6)

## mixed data is represented by sum types; in Python
## we express this using Union

## PLEASE PLEASE no undeclared sentinel values

MaybeYear = Union[int,None]

# has it been 10 years since the thing happened?
def ten_years_elapsed(thing_year : MaybeYear, this_year : int) -> bool:
    match thing_year:
        case None:
            return False
        case i:
            return (this_year - i) > 10


class MyTests(unittest.TestCase):
    def test_ten_years_elapsed(self):
        self.assertEqual(False,ten_years_elapsed(None,2025))
        self.assertEqual(False,ten_years_elapsed(2023,2025))
        self.assertEqual(True,ten_years_elapsed(2010,2025))