Files
telescope.nvim/lua/tests/automated/linked_list_spec.lua
Simon Hauser 79644ab677 chore: use stylua for formatting (#1040)
* chore: stylua job and config

* reformat with stylua
2021-07-23 11:42:37 -04:00

134 lines
2.9 KiB
Lua

local LinkedList = require "telescope.algos.linked_list"
describe("LinkedList", function()
it("can create a list", function()
local l = LinkedList:new()
assert.are.same(0, l.size)
end)
it("can add a single entry to the list", function()
local l = LinkedList:new()
l:append "hello"
assert.are.same(1, l.size)
end)
it("can iterate over one item", function()
local l = LinkedList:new()
l:append "hello"
for val in l:iter() do
assert.are.same("hello", val)
end
end)
it("iterates in order", function()
local l = LinkedList:new()
l:append "hello"
l:append "world"
local x = {}
for val in l:iter() do
table.insert(x, val)
end
assert.are.same({ "hello", "world" }, x)
end)
it("iterates in order, for prepend", function()
local l = LinkedList:new()
l:prepend "world"
l:prepend "hello"
local x = {}
for val in l:iter() do
table.insert(x, val)
end
assert.are.same({ "hello", "world" }, x)
end)
it("iterates in order, for combo", function()
local l = LinkedList:new()
l:prepend "world"
l:prepend "hello"
l:append "last"
l:prepend "first"
local x = {}
for val in l:iter() do
table.insert(x, val)
end
assert.are.same({ "first", "hello", "world", "last" }, x)
assert.are.same(#x, l.size)
end)
it("has ipairs", function()
local l = LinkedList:new()
l:prepend "world"
l:prepend "hello"
l:append "last"
l:prepend "first"
local x = {}
for v in l:iter() do
table.insert(x, v)
end
assert.are.same({ "first", "hello", "world", "last" }, x)
local expected = {}
for i, v in ipairs(x) do
table.insert(expected, { i, v })
end
local actual = {}
for i, v in l:ipairs() do
table.insert(actual, { i, v })
end
assert.are.same(expected, actual)
end)
describe("track_at", function()
it("should update tracked when only appending", function()
local l = LinkedList:new { track_at = 2 }
l:append "first"
l:append "second"
l:append "third"
assert.are.same("second", l.tracked)
end)
it("should update tracked when first some prepend and then append", function()
local l = LinkedList:new { track_at = 2 }
l:prepend "first"
l:append "second"
l:append "third"
assert.are.same("second", l.tracked)
end)
it("should update when only prepending", function()
local l = LinkedList:new { track_at = 2 }
l:prepend "third"
l:prepend "second"
l:prepend "first"
assert.are.same("second", l.tracked)
end)
it("should update when lots of prepend and append", function()
local l = LinkedList:new { track_at = 2 }
l:prepend "third"
l:prepend "second"
l:prepend "first"
l:append "fourth"
l:prepend "zeroth"
assert.are.same("first", l.tracked)
end)
end)
end)