Source

bx-python-nhgri / lib / bx / interval_index_file_tests.py

import interval_index_file
from interval_index_file import Indexes
from tempfile import mktemp
import random

def test_offsets():
    assert interval_index_file.offsets_for_max_size( 512*1024*1024  - 1 ) == [ 512 + 64 + 8 + 1, 64 + 8 + 1, 8 + 1, 1, 0 ]

def test_interval_index_file():
    ix = Indexes()
    chrs = []
    for i in range( 5 ):
        intervals = []
        name = "seq%d" % i
        max = random.randint( 0, interval_index_file.MAX )
        # print name, "size", max
        for i in range( 500 ):
            start = random.randint( 0, max )
            end = random.randint( 0, max )
            if end < start:
                end, start = start, end
            ix.add( name, start, end, i, max=interval_index_file.MAX )
            intervals.append( ( start, end, i ) )
        chrs.append( intervals )
    fname = mktemp()
    f = open( fname, "w" )
    ix.write( f )
    f.close()
    del ix
    
    ix = Indexes( fname )
    for i in range( 5 ):
        intervals = chrs[i]
        name = "seq%d" % i
        for i in range( 100 ):
            start = random.randint( 0, max )
            end = random.randint( 0, max )
            if end < start:
                end, start = start, end
            query_intervals = set()
            for ( s, e, i ) in intervals:
                if e > start and s < end:
                    query_intervals.add( ( s, e, i ) )
            result = ix.find( name, start, end )
            for inter in result:
                assert inter in query_intervals