From ca6dbf3558cec83f1d42a1e5f670c40c5893554e Mon Sep 17 00:00:00 2001 From: Calvin Bochulak Date: Sat, 23 Mar 2024 15:46:54 -0600 Subject: [PATCH] fix(vim.iter): use correct cmp function when truncating tail in `take` (#27998) --- runtime/lua/vim/iter.lua | 3 ++- test/functional/lua/iter_spec.lua | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) 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 @@ -247,6 +247,12 @@ describe('vim.iter', function() eq({ 4, 3, 2, 1 }, vim.iter(t):take(5):totable()) end + 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)