134 lines
2.9 KiB
Lua
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)
|