aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCalvin Bochulak <calvin.bochulak@gmail.com>2024-03-23 15:46:54 -0600
committerGitHub <noreply@github.com>2024-03-23 16:46:54 -0500
commitca6dbf3558cec83f1d42a1e5f670c40c5893554e (patch)
tree0a2a0cb5d4e2f1e498db062b5c5b20c319e32f86
parent3d9c028a4ce1557af7f7269968db5dd0c480f270 (diff)
downloadrneovim-ca6dbf3558cec83f1d42a1e5f670c40c5893554e.tar.gz
rneovim-ca6dbf3558cec83f1d42a1e5f670c40c5893554e.tar.bz2
rneovim-ca6dbf3558cec83f1d42a1e5f670c40c5893554e.zip
fix(vim.iter): use correct cmp function when truncating tail in `take` (#27998)
-rw-r--r--runtime/lua/vim/iter.lua3
-rw-r--r--test/functional/lua/iter_spec.lua6
2 files changed, 8 insertions, 1 deletions
diff --git a/runtime/lua/vim/iter.lua b/runtime/lua/vim/iter.lua
index a37b7f7858..2f2c21aee8 100644
--- 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
index 8d6cf1264b..6d8a37f022 100644
--- 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()