def test_postings_file_write_entry_out_of_order():
    filename = 'test'
    with PostingsFile(filename, 'w+') as pfile:
        first_write_location = pfile.pointer
        first_entry = PostingsFileEntry(1)
        first_entry.own_pointer = first_write_location

        pfile.write_entry(first_entry)

        assert_eq(
            PostingsFileEntry(1).to_string(),
            pfile.read_entry(first_write_location))

        second_write_location = pfile.pointer
        second_entry = PostingsFileEntry(2)
        second_entry.own_pointer = second_write_location
        pfile.write_entry(second_entry)

        assert_eq(
            PostingsFileEntry(2).to_string(),
            pfile.read_entry(second_write_location))

        # Update first entry
        first_entry.doc_id = 4
        pfile.write_entry(first_entry)

        assert_eq(
            first_entry.to_string(),
            pfile.read_entry(first_write_location))

        # Add third entry
        third_entry = PostingsFileEntry(3)
        pfile.write_entry(third_entry)

        # Check that second write location was not overwritten.
        assert_eq(
            PostingsFileEntry(2).to_string(),
            pfile.read_entry(second_write_location))

    os.remove(filename)
def test_postings_file_write_entry_out_of_order():
    filename = 'test'
    with PostingsFile(filename, 'w+') as pfile:
        first_write_location = pfile.pointer
        first_entry = PostingsFileEntry(1)
        first_entry.own_pointer = first_write_location

        pfile.write_entry(first_entry)

        assert_eq(
            PostingsFileEntry(1).to_string(),
            pfile.read_entry(first_write_location))

        second_write_location = pfile.pointer
        second_entry = PostingsFileEntry(2)
        second_entry.own_pointer = second_write_location
        pfile.write_entry(second_entry)

        assert_eq(
            PostingsFileEntry(2).to_string(),
            pfile.read_entry(second_write_location))

        # Update first entry
        first_entry.doc_id = 4
        pfile.write_entry(first_entry)

        assert_eq(first_entry.to_string(),
                  pfile.read_entry(first_write_location))

        # Add third entry
        third_entry = PostingsFileEntry(3)
        pfile.write_entry(third_entry)

        # Check that second write location was not overwritten.
        assert_eq(
            PostingsFileEntry(2).to_string(),
            pfile.read_entry(second_write_location))

    os.remove(filename)
def test_postings_file_entry_from_string_with_skip():
    pfe = PostingsFileEntry(1, 10, 111, 123)
    pfe_clone = PostingsFileEntry.from_string(pfe.to_string())
    assert_eq(pfe, pfe_clone)
def test_postings_file_entry_from_string_only_doc_id():
    pfe = PostingsFileEntry(1)
    pfe_clone = PostingsFileEntry.from_string(pfe.to_string())
    assert_eq(pfe, pfe_clone)
def test_postings_file_entry_to_string_with_skip():
    pfe = PostingsFileEntry(11, 10, 1000, 12)
    assert_eq(
        '0000000011 0000000010 0000001000 0000000012\n',
        pfe.to_string())
def test_postings_file_entry_to_string_only_doc_id():
    pfe = PostingsFileEntry(1)
    assert_eq(
        '0000000001 0000000000 0000000000 0000000000\n',
        pfe.to_string())
def test_postings_file_entry_from_string_with_skip():
    pfe = PostingsFileEntry(1, 10, 111, 123)
    pfe_clone = PostingsFileEntry.from_string(pfe.to_string())
    assert_eq(pfe, pfe_clone)
def test_postings_file_entry_from_string_only_doc_id():
    pfe = PostingsFileEntry(1)
    pfe_clone = PostingsFileEntry.from_string(pfe.to_string())
    assert_eq(pfe, pfe_clone)
def test_postings_file_entry_to_string_with_skip():
    pfe = PostingsFileEntry(11, 10, 1000, 12)
    assert_eq('0000000011 0000000010 0000001000 0000000012\n', pfe.to_string())
def test_postings_file_entry_to_string_only_doc_id():
    pfe = PostingsFileEntry(1)
    assert_eq('0000000001 0000000000 0000000000 0000000000\n', pfe.to_string())