def testMessages(startLength, finalLength): for l in range(startLength, finalLength + 1): print("Starting", l, datetime.datetime.now()) for n in range(0, 2**l): v = getTestCase(n, l) if dataFromMessage(message(v)) != v: info = "Test Case: " + n + ", " + l + "\n" info += "message: " + str(message(v)) + "\n" info += "data back: " + str(dataFromMessage(message(v))) notifier.sendError(info) return
def fullHammingTest(v): m = message(v) checkVectorIsOnly01(m, v, "message") checkMessageLength(m, v) encoded = hammingEncoder(copy.copy(m)) checkVectorIsOnly01(encoded, v, "hammingEncoder") checkHammingEncoderLength(encoded, v) decoded = hammingDecoder(copy.copy(encoded)) checkVectorIsOnly01(decoded, v, "hammingDecoder") checkHammingDecoderLength(decoded, v) recoveredMessage = messageFromCodeword(copy.copy(decoded)) checkVectorIsOnly01(recoveredMessage, v, "messageFromCodeword") checkMessageFromCodewordLength(recoveredMessage, v) recoveredData = dataFromMessage(copy.copy(recoveredMessage)) checkVectorIsOnly01(recoveredData, v, "dataFromMessage") assert v == recoveredData, { "Test": "comprehensiveHammingTest no noise", "v": v, "message": m, "encoded": encoded, "decoded": decoded, "recoveredMessage": recoveredMessage, "recoveredData": recoveredData } noise = advanced_test.random_noise(copy.copy(encoded), 1) decoded = hammingDecoder(copy.copy(noise)) checkVectorIsOnly01(decoded, v, "hammingDecoder") checkHammingDecoderLength(decoded, v) recoveredMessage = messageFromCodeword(copy.copy(decoded)) checkVectorIsOnly01(recoveredMessage, v, "messageFromCodeword") checkMessageFromCodewordLength(recoveredMessage, v) recoveredData = dataFromMessage(copy.copy(recoveredMessage)) checkVectorIsOnly01(recoveredData, v, "dataFromMessage") assert v == recoveredData, { "Test": "comprehensiveHammingTest with noise", "v": v, "message": m, "encoded": encoded, "noise": noise, "decoded": decoded, "recoveredMessage": recoveredMessage, "recoveredData": recoveredData }
def test_full_ham_encode_cycle(): original = random_message(random.randint(1, 100)) mess = message(original) encoded = hammingEncoder(mess) code_word = hammingDecoder(encoded) mess = messageFromCodeword(code_word) end_data = dataFromMessage(mess) assert original == end_data, "Encoded message but when decoded didn't get same answer %s %s" % ( original, end_data)
def hard_coded_tests(): m = "Failed to encode to repetition code" assert repetitionEncoder([0], 4) == [0, 0, 0, 0], m assert repetitionEncoder([1], 5) == [1, 1, 1, 1, 1], m m = "Failed to decode repetition code" assert repetitionDecoder([1, 1, 1, 1]) == [1], m assert repetitionDecoder([1, 1, 1, 1, 1]) == [1], m assert repetitionDecoder([1, 1, 0, 0]) == [], m assert repetitionDecoder([1, 1, 0, 0, 0]) == [0], m assert repetitionDecoder([0, 0, 0, 0]) == [0], m assert repetitionDecoder([1, 0, 0, 0]) == [0], m assert repetitionDecoder([1, 1, 1, 0]) == [1], m # All from questions m = "Failed correctly encode message to data" assert message([1]) == [0, 0, 1, 1], m assert message([0, 0, 1]) == [0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0], m assert message([0, 1, 1, 0]) == [0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0], m assert message([1, 1, 1, 1, 0, 1]) == [0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0], m assert message([0, 1, 1, 0, 1]) == [0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0], m # All from questions assert dataFromMessage( [1, 0, 0, 1, 0, 1, 1, 0, 1, 0] ) == [], "Failed to spot error when getting data from message when message is too short" assert dataFromMessage( [1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0] ) == [], "Failed to spot error when getting data from message when l>number of bits in message" assert dataFromMessage([0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0 ]) == [0, 1, 1, 0, 1 ], "Failed to get correct data from message" assert hammingEncoder([ 1, 1, 1 ]) == [], "Failed to return error encoding messages of incorrect length" assert hammingEncoder([1, 0, 0, 0]) == [1, 1, 1, 0, 0, 0, 0], "Failed to hamming encode correctly"
def test_message_encode_decode(): original = random_message(random.randint(1, 100)) mes = message(original) decode = dataFromMessage(mes) assert decode == original, "Message failed to get encoded and decoded (no hamming codes) without changing"