local binary = require('cmp.utils.binary')

describe('utils.binary', function()
  it('insort', function()
    local func = function(a, b)
      return a.score - b.score
    end
    local list = {}
    binary.insort(list, { id = 'a', score = 1 }, func)
    binary.insort(list, { id = 'b', score = 5 }, func)
    binary.insort(list, { id = 'c', score = 2.5 }, func)
    binary.insort(list, { id = 'd', score = 2 }, func)
    binary.insort(list, { id = 'e', score = 8 }, func)
    binary.insort(list, { id = 'g', score = 8 }, func)
    binary.insort(list, { id = 'h', score = 7 }, func)
    binary.insort(list, { id = 'i', score = 6 }, func)
    binary.insort(list, { id = 'j', score = 4 }, func)
    assert.are.equal(list[1].id, 'a')
    assert.are.equal(list[2].id, 'd')
    assert.are.equal(list[3].id, 'c')
    assert.are.equal(list[4].id, 'j')
    assert.are.equal(list[5].id, 'b')
    assert.are.equal(list[6].id, 'i')
    assert.are.equal(list[7].id, 'h')
    assert.are.equal(list[8].id, 'e')
    assert.are.equal(list[9].id, 'g')
  end)
end)
