From 4b1035f7ba94a1d247e4be3c4636f0b6fcab210c Mon Sep 17 00:00:00 2001 From: Mike <45243121+tankf33der@users.noreply.github.com> Date: Mon, 20 Oct 2025 11:43:02 +0300 Subject: [PATCH] arrays: fix rotate_left() and rotate_right(), add test (#25539) --- vlib/arrays/arrays.v | 2 +- vlib/arrays/arrays_test.v | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/vlib/arrays/arrays.v b/vlib/arrays/arrays.v index b45c815e4..bea985957 100644 --- a/vlib/arrays/arrays.v +++ b/vlib/arrays/arrays.v @@ -633,7 +633,7 @@ fn memswap(x voidptr, y voidptr, len usize) { unsafe { vmemcpy(t, voidptr(xi), block_size) vmemcpy(voidptr(xi), voidptr(yi), block_size) - vmemcpy(t, voidptr(yi), block_size) + vmemcpy(voidptr(yi), t, block_size) } i += usize(block_size) } diff --git a/vlib/arrays/arrays_test.v b/vlib/arrays/arrays_test.v index 690e100e1..d0969901f 100644 --- a/vlib/arrays/arrays_test.v +++ b/vlib/arrays/arrays_test.v @@ -325,6 +325,24 @@ fn test_rotate_right() { assert x == [5, 6, 1, 2, 3, 4] } +fn test_rotate_right_long() { + mut x := []u64{len: 128, init: 255} + x[0] = 0 + x[1] = 0 + x[2] = 0 + rotate_right(mut x, 64) + assert x.len == 128 + idx := index_of_first(x, fn (idx int, x u64) bool { + return x == 0 + }) + assert idx == 64 + assert x[idx - 1] == 255 + assert x[idx] == 0 + assert x[idx + 1] == 0 + assert x[idx + 2] == 0 + assert x[idx + 3] == 255 +} + fn test_rotate_left() { mut x := [1, 2, 3, 4, 5, 6] rotate_left(mut x, 2) -- 2.39.5