import pytest import stuff import stdlib @pytest.mark.parametrize( ("n", "expected"), [ (0, 0), (1, 1), (5, 2), (4, 2), (8, 2), (9, 3), ], ) def test_find_sqrt_ish(n: int, expected: int): assert stuff.find_sqrt_ish(n) == expected @pytest.mark.parametrize( ("n", "expected"), [ (3, "III"), (58, "LVIII"), (1994, "MCMXCIV"), ], ) def test_int_to_roman(n: int, expected: str): assert stuff.Roman.i2r(n) == expected @pytest.mark.parametrize( ("ops", "expected"), [ ( ( [ ("new",), ("push", -2), ("push", 0), ("push", -3), ("getMin",), ("pop",), ("top",), ("getMin",), ] ), [ None, None, None, None, -3, None, 0, -2, ], ) ], ) def test_min_stack(ops: list[tuple[str] | tuple[str, int]], expected: list[int | None]): returned: list[int | None] = [] inst: stuff.MinStack | None = None for op in ops: if len(op) == 1: if op[0] == "new": inst = stuff.MinStack() returned.append(None) continue returned.append(getattr(inst, op[0])()) continue method, arg = op returned.append(getattr(inst, method)(arg)) assert returned == expected @pytest.mark.parametrize( ("head", "expected"), [ (None, None), ( stdlib.ListNode( 4, stdlib.ListNode(2, stdlib.ListNode(1, stdlib.ListNode(3))) ), stdlib.ListNode( 1, stdlib.ListNode(2, stdlib.ListNode(3, stdlib.ListNode(4))) ), ), ( stdlib.ListNode( 4, stdlib.ListNode( 19, stdlib.ListNode( 14, stdlib.ListNode( 5, stdlib.ListNode( -3, stdlib.ListNode( 1, stdlib.ListNode( 8, stdlib.ListNode( 5, stdlib.ListNode(11, stdlib.ListNode(15)) ), ), ), ), ), ), ), ), stdlib.ListNode( -3, stdlib.ListNode( 1, stdlib.ListNode( 4, stdlib.ListNode( 5, stdlib.ListNode( 5, stdlib.ListNode( 8, stdlib.ListNode( 11, stdlib.ListNode( 14, stdlib.ListNode(15, stdlib.ListNode(19)) ), ), ), ), ), ), ), ), ), ], ) def test_sort_linked_list(head: stdlib.ListNode | None, expected: stdlib.ListNode | None): if head is None: assert stuff.sort_linked_list(head) == expected return assert stuff.linked_list_to_list( stuff.sort_linked_list(head) ) == stuff.linked_list_to_list(expected)