Exemplo n.º 1
0
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
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
def test_message_length():
    # max message length 100
    original = random_message(random.randint(1, 100))
    length = len(message(original))

    r = 2
    l = 2**r - 2 * r - 1
    while l < length:
        r += 1
        l = 2**r - r - 1

    assert l == length, "Message failed to encode to an expected length"
Exemplo n.º 4
0
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
    }
Exemplo n.º 5
0
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"
Exemplo n.º 6
0
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"