commit ca6dbf3558cec83f1d42a1e5f670c40c5893554e
parent 3d9c028a4ce1557af7f7269968db5dd0c480f270
Author: Calvin Bochulak <calvin.bochulak@gmail.com>
Date: Sat, 23 Mar 2024 15:46:54 -0600
fix(vim.iter): use correct cmp function when truncating tail in `take` (#27998)
Diffstat:
2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/runtime/lua/vim/iter.lua b/runtime/lua/vim/iter.lua
@@ -709,7 +709,8 @@ end
---@private
function ListIter:take(n)
local inc = self._head < self._tail and 1 or -1
- self._tail = math.min(self._tail, self._head + n * inc)
+ local cmp = self._head < self._tail and math.min or math.max
+ self._tail = cmp(self._tail, self._head + n * inc)
return self
end
diff --git a/test/functional/lua/iter_spec.lua b/test/functional/lua/iter_spec.lua
@@ -249,6 +249,12 @@ describe('vim.iter', function()
do
local t = { 4, 3, 2, 1 }
+ eq({ 1, 2, 3 }, vim.iter(t):rev():take(3):totable())
+ eq({ 2, 3, 4 }, vim.iter(t):take(3):rev():totable())
+ end
+
+ do
+ local t = { 4, 3, 2, 1 }
local it = vim.iter(t)
eq({ 4, 3 }, it:take(2):totable())
-- tail is already set from the previous take()