local Deque = require("plenary.async.structs").Deque local eq = assert.are.same -- just a helper to create the test deque local function new_deque() local deque = Deque.new() eq(deque:len(), 0) deque:pushleft(1) eq(deque:len(), 1) deque:pushleft(2) eq(deque:len(), 2) deque:pushright(3) eq(deque:len(), 3) deque:pushright(4) eq(deque:len(), 4) deque:pushright(5) eq(deque:len(), 5) return deque end describe("deque", function() it("should allow pushing and popping and finding len", function() new_deque() end) it("should be able to iterate from left", function() local deque = new_deque() local iter = deque:ipairs_left() local i, v = iter() eq(i, -2) eq(v, 2) i, v = iter() eq(i, -1) eq(v, 1) i, v = iter() eq(i, 0) eq(v, 3) i, v = iter() eq(i, 1) eq(v, 4) i, v = iter() eq(i, 2) eq(v, 5) end) it("should be able to iterate from right", function() local deque = new_deque() local iter = deque:ipairs_right() local i, v = iter() eq(i, 2) eq(v, 5) i, v = iter() eq(i, 1) eq(v, 4) i, v = iter() eq(i, 0) eq(v, 3) i, v = iter() eq(i, -1) eq(v, 1) i, v = iter() eq(i, -2) eq(v, 2) end) it("should allow clearing", function() local deque = new_deque() deque:clear() assert(deque:is_empty()) end) end)