Advertisement
iccaka

Tower of Hanoi (iterative & recursive) - unit tests

Feb 19th, 2025 (edited)
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.32 KB | None | 0 0
  1. import hashlib
  2. import unittest
  3.  
  4. from main import hanoi_recursive, hanoi_iterative
  5.  
  6. EXPECTED_RESULTS = {
  7.     1: '2f3541c4d7a8baaaa02fbe73986bc9ac068cc956a5368bd3b133f4f5f82add0f',
  8.     2: 'c7b0d0d6414614551ee3d29c2a21fac05102debf2e171ae40ef99bcceaddc8e0',
  9.     3: 'f39ad8135915089584cc1bf5467239855808341f6b6f64d26681ff24dc52f0b1',
  10.     4: '2b72adc540de0c3aea7b9271a9e37f39d30f61f0837401ec3c4653a19055422b',
  11.     5: 'bb87110da63f1a44f4339c0fa272d91dacf2c49958f057cfb5bebfa8829ef2d5',
  12.     6: 'c1145c976c05f04d80754152f96fb6cf477390247a121cf3aa87a9af4cb5aa92',
  13.     7: '757e57db73999cd2951336d19bf7af4622dc5df94af5ffb4e489ae150cdb0e91',
  14.     8: 'aac4002299628067e5b01746a88a8a3b6a7fe1e968b8ce45064e79cdc3fcb658',
  15.     9: '559d73a4efc5c162e7d7ae151f394d2e4904e6bcb23c9c6dc232838f20bade8a',
  16.     10: 'db322e1c33f72a671090c85b5117c4a0dfacf23817c16771c9782a5f1b83eb3e',
  17.     11: '907ad9e4e2226ead9b721035c3badd786c90368e4ec87e4d832def3e8276b402',
  18.     12: '3c782aa97c61390c26830c034e9f97806ff7b67dbe0523eed23992a5d511d8ad',
  19.     13: '63c60cb3a79582aff9545e7eeb51de38755388d2148611a69ef60e53fbb402f3',
  20.     14: '1c291f215d8d1390a5f44b16374d2656987453a5cff26a2ca8691e7aaa03d176',
  21.     15: '2d37cccb7ce35a56250d37a9bed2a91185590139d1aafe62e3923787ef50812b',
  22.     16: '60601e352008bb68d0b33168723e52028cf7c26831eca51cb8694b969939ffa8',
  23.     17: 'f02c01bd5a2924a7376d3f802bca90e80d6afc8669453750a5b46575b5802256',
  24.     18: 'f1d81a3cb3e1237e1e2ff3016c8c13b1048014b1fc779db022d3a9ed7a85790e',
  25.     19: '8144bf8944f08dc16c125d5c574e779821066be34ffcf8e906af47d28a449ee8',
  26.     20: 'c4f7c3a34b38b0580c3c9790787f3e86ee4b68eea4d47d660713511878e3ab50'
  27. }
  28.  
  29. def hash_output(input_str: str) -> str:
  30.     return hashlib.sha256(input_str.encode()).hexdigest()
  31.  
  32. class TestHanoi(unittest.TestCase):
  33.     def test_invalid_n_type(self):
  34.         invalid_ns = ['-5', '5', 7.4, None, [], {}]
  35.  
  36.         for n in invalid_ns:
  37.             self.assertRaises(TypeError, hanoi_iterative, n)
  38.             self.assertRaises(TypeError, hanoi_recursive, n)
  39.  
  40.     def test_invalid_n_value(self):
  41.         invalid_ns = [0, -1, -5, -10]
  42.  
  43.         for n in invalid_ns:
  44.             self.assertRaises(ValueError, hanoi_iterative, n)
  45.             self.assertRaises(ValueError, hanoi_recursive, n)
  46.  
  47.     def test_invalid_peg_names_type(self):
  48.         invalid_peg_names = [5, 7.4, None, [], {}]
  49.  
  50.         for n in invalid_peg_names:
  51.             self.assertRaises(TypeError, hanoi_iterative, 5, n, 'B', 'C')
  52.             self.assertRaises(TypeError, hanoi_iterative, 5, 'A', n, 'C')
  53.             self.assertRaises(TypeError, hanoi_iterative, 5, 'A', 'B', n)
  54.  
  55.             self.assertRaises(TypeError, hanoi_recursive, 5, n, 'B', 'C')
  56.             self.assertRaises(TypeError, hanoi_recursive, 5, 'A', n, 'C')
  57.             self.assertRaises(TypeError, hanoi_recursive, 5, 'A', 'B', n)
  58.  
  59.     def test_hanoi_functions(self):
  60.         for n, expected_result in EXPECTED_RESULTS.items():
  61.             with self.subTest(n=n):
  62.                 expected_hash = EXPECTED_RESULTS[n]
  63.                 recursive_hash = hash_output(hanoi_recursive(n))
  64.                 iterative_hash = hash_output(hanoi_iterative(n))
  65.  
  66.                 self.assertEqual(recursive_hash, expected_hash, 'Recursive hash mismatch for n = {}'.format(n))
  67.                 self.assertEqual(iterative_hash, expected_hash, 'Iterative hash mismatch for n = {}'.format(n))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement