From 29b9d769594f96608d40517ab246941f94ef4000 Mon Sep 17 00:00:00 2001 From: MstrPikachu <31784486+MstrPikachu@users.noreply.github.com> Date: Sat, 22 Jan 2022 23:19:11 -0500 Subject: [PATCH] A1 P1 Q2 Implement unit tests --- assignments/A1/a1_part1_test.py | 62 +++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/assignments/A1/a1_part1_test.py b/assignments/A1/a1_part1_test.py index 4848dd8..efaceb1 100644 --- a/assignments/A1/a1_part1_test.py +++ b/assignments/A1/a1_part1_test.py @@ -36,5 +36,67 @@ def test_all_lists_true() -> None: assert(all(all(x in swap[i] for x in range(i)) for i in range(100))) assert(all(all(x in count[i] for x in range(i)) for i in range(100))) + +def test_all_lists_false() -> None: + movetofront = [MoveToFrontLinkedList(range(i)) for i in range(100)] + swap = [SwapLinkedList(range(i)) for i in range(100)] + count = [CountLinkedList(range(i)) for i in range(100)] + assert(all(all(x not in movetofront[i] for x in range(i, i + 100)) for i in range(100))) + assert(all(all(x not in swap[i] for x in range(i, i + 100)) for i in range(100))) + assert(all(all(x not in count[i] for x in range(i, i + 100)) for i in range(100))) + + +def generate_ordering(n: int): + """generates a pseudorandom ordering of n integers from 0 to n-1, inclusive + + Preconditions: + - n is prime + """ + arr = [(2 << i) % n for i in range(1, n)] + arr.append(0) + assert set(arr) == set(range(n)) + return arr + + +def test_movetofront_mutation() -> None: + lst = MoveToFrontLinkedList(range(101)) + arr = list(range(101)) + operations = generate_ordering(101) + + for x in operations: + i = arr.index(x) # find index + arr.insert(0, arr.pop(i)) # simulate moving to front + x in lst + assert lst.to_list() == arr + + +def test_swap_mutation() -> None: + lst = SwapLinkedList(range(101)) + arr = list(range(101)) + operations = generate_ordering(101) + + for x in operations: + i = arr.index(x) # find index + if i > 0: # simulate swapping + temp = arr[i] + arr[i] = arr[i - 1] + arr[i - 1] = temp + x in lst + assert lst.to_list() == arr + + +def test_count_mutation() -> None: + lst = CountLinkedList(generate_ordering(101)) + operations = list(range(101)) + + for x in operations: + x in lst + assert lst.to_list() == operations + + for x in reversed(range(50)): + x in lst + assert lst.to_list() == list(reversed(range(50))) + list(range(50, 101)) + + if __name__ == '__main__': pytest.main(['a1_part1_test.py', '-v'])