def test_init(self): kh = KnotHash(5) lst = kh.circular_list self.assertEqual(5, len(lst)) self.assertEqual([0, 1, 2, 3, 4], lst) self.assertEqual(0, kh.current_position) self.assertEqual(0, kh.skip_size)
class KnotTest(unittest.TestCase): def setUp(self): self.knot_hash = KnotHash() self.knot_hash.ring = Ring(range(5)) def test_individual_example_knots(self): self.knot_hash.tie_knot(position=0, length=3) self.assertEqual(self.knot_hash.ring._ring, [2, 1, 0, 3, 4]) self.knot_hash.tie_knot(position=3, length=4) self.assertEqual(self.knot_hash.ring._ring, [4, 3, 0, 1, 2]) self.knot_hash.tie_knot(position=3, length=1) self.assertEqual(self.knot_hash.ring._ring, [4, 3, 0, 1, 2]) self.knot_hash.tie_knot(position=1, length=5) self.assertEqual(self.knot_hash.ring._ring, [3, 4, 2, 1, 0]) def test_tie_all_knots(self): self.knot_hash.tie_all_knots(lengths=[3, 4, 1, 5]) self.assertEqual(self.knot_hash.ring._ring, [3, 4, 2, 1, 0])
def test_processing(self): kh = KnotHash(5) kh.process(3) self.assertEqual([2, 1, 0, 3, 4], kh.circular_list) self.assertEqual(3, kh.current_position) self.assertEqual(1, kh.skip_size) kh.process(4) self.assertEqual([4, 3, 0, 1, 2], kh.circular_list) self.assertEqual(3, kh.current_position) self.assertEqual(2, kh.skip_size) kh.process(1) self.assertEqual([4, 3, 0, 1, 2], kh.circular_list) self.assertEqual(1, kh.current_position) self.assertEqual(3, kh.skip_size) kh.process(5) self.assertEqual([3, 4, 2, 1, 0], kh.circular_list) self.assertEqual(4, kh.current_position) self.assertEqual(4, kh.skip_size)
class KnotHashTest(unittest.TestCase): def setUp(self): self.knot_hash = KnotHash() def test_get_lengths_from_string(self): lengths = self.knot_hash.get_lengths_from_string('1,2,3') self.assertEqual(lengths, [49, 44, 50, 44, 51, 17, 31, 73, 47, 23]) def test_preserve_skip_and_position(self): self.assertEqual(self.knot_hash.position, 0) self.assertEqual(self.knot_hash.skip, 0) self.knot_hash.tie_all_knots(lengths=[3, 4]) self.assertEqual(self.knot_hash.position, 3 + 4 + 1) self.assertEqual(self.knot_hash.skip, 2) def test_reduce_sparse_hash(self): # Change single value, otherwise the result will be zero self.knot_hash.ring[47] = 1 hash_values = self.knot_hash.reduce_sparse_hash() # Calculated manually self.assertEqual(hash_values[2], 46) def test_example_hashes(self): knot_hash = KnotHash() h = knot_hash.calculate_hash('') self.assertEqual(h, 'a2582a3a0e66e6e86e3812dcb672a272') knot_hash = KnotHash() h = knot_hash.calculate_hash('AoC 2017') self.assertEqual(h, '33efeb34ea91902bb2f59c9920caa6cd') knot_hash = KnotHash() h = knot_hash.calculate_hash('1,2,3') self.assertEqual(h, '3efbe78a8d82f29979031a4aa0b16a9d') knot_hash = KnotHash() h = knot_hash.calculate_hash('1,2,4') self.assertEqual(h, '63960835bcdc130f0b66d7ff4f6a5a8e')
def test_bitwise_xor(self): result = 65 ^ 27 ^ 9 ^ 1 ^ 4 ^ 3 ^ 40 ^ 50 ^ 91 ^ 7 ^ 6 ^ 0 ^ 2 ^ 5 ^ 68 ^ 22 self.assertEqual(64, result) input = [65, 27, 9, 1, 4, 3, 40, 50, 91, 7, 6, 0, 2, 5, 68, 22] self.assertEqual(64, KnotHash.bitwise_xor(input))
def x_test_multiple_runs(self): kh = KnotHash(10) for length in [49, 44, 50, 44, 51, 17, 31, 73, 47, 23]: kh.process(length) self.assertEqual([3, 4, 1, 5, 17, 31, 73, 47, 23], kh.circular_list)
def test_hex_conversion(self): self.assertEqual('40', KnotHash.conver_to_hex(64)) self.assertEqual('07', KnotHash.conver_to_hex(7)) self.assertEqual('ff', KnotHash.conver_to_hex(255))
def test_ascii_conversion(self): self.assertEqual(49, KnotHash.convert_to_ascii('1')) self.assertEqual(44, KnotHash.convert_to_ascii(',')) self.assertEqual(50, KnotHash.convert_to_ascii('2')) self.assertEqual(51, KnotHash.convert_to_ascii('3'))
def test_whole(self): kh = KnotHash(5) for length in [3, 4, 1, 5]: kh.process(length) result = kh.circular_list[0] * kh.circular_list[1] self.assertEqual(12, result)
def test_raises_exception_if_length_to_long(self): kh = KnotHash(5) self.assertRaises(Exception, kh.process, 6)
def setUp(self): self.knot_hash = KnotHash()
def setUp(self): self.knot_hash = KnotHash() self.knot_hash.ring = Ring(range(5))
def test_example_hashes(self): knot_hash = KnotHash() h = knot_hash.calculate_hash('') self.assertEqual(h, 'a2582a3a0e66e6e86e3812dcb672a272') knot_hash = KnotHash() h = knot_hash.calculate_hash('AoC 2017') self.assertEqual(h, '33efeb34ea91902bb2f59c9920caa6cd') knot_hash = KnotHash() h = knot_hash.calculate_hash('1,2,3') self.assertEqual(h, '3efbe78a8d82f29979031a4aa0b16a9d') knot_hash = KnotHash() h = knot_hash.calculate_hash('1,2,4') self.assertEqual(h, '63960835bcdc130f0b66d7ff4f6a5a8e')