From 03e72a4856e4dee739787d28949891cb56898ee0 Mon Sep 17 00:00:00 2001 From: Mike <45243121+tankf33der@users.noreply.github.com> Date: Thu, 10 Jul 2025 08:45:34 +0300 Subject: [PATCH] math.unsigned: fix rotate_left() for uint256, add test (#24872) --- vlib/math/unsigned/uint256.v | 2 +- vlib/math/unsigned/uint256_test.v | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/vlib/math/unsigned/uint256.v b/vlib/math/unsigned/uint256.v index b3ce132936..9046a0d39f 100644 --- a/vlib/math/unsigned/uint256.v +++ b/vlib/math/unsigned/uint256.v @@ -348,7 +348,7 @@ pub fn (u Uint256) rotate_left(k int) Uint256 { return Uint256{u.hi, u.lo} } - return Uint256{Uint128{u.hi.lo << n | u.lo.hi >> (64 - n), u.hi.hi << n | u.hi.lo >> (64 - n)}, Uint128{}} + return Uint256{Uint128{u.hi.lo << n | u.lo.hi >> (64 - n), u.hi.hi << n | u.hi.lo >> (64 - n)}, Uint128{u.lo.lo << n | u.hi.hi >> (64 - n), u.lo.hi << n | u.lo.lo >> (64 - n)}} } n -= 64 if n == 0 { diff --git a/vlib/math/unsigned/uint256_test.v b/vlib/math/unsigned/uint256_test.v index 75a2bb6f9e..7efe4b0226 100644 --- a/vlib/math/unsigned/uint256_test.v +++ b/vlib/math/unsigned/uint256_test.v @@ -303,3 +303,8 @@ fn test_lsh() { assert a.lsh(200).str() == '197653379443855803891661337357963000110230968235283518742069248' assert a.lsh(300) == unsigned.uint256_zero } + +fn test_rotate_left() { + a := unsigned.uint256_from_dec_str('25514942427378518882041616545065271187265095759155217686057363902268374351523')! + assert a.rotate_left(182).str() == '88706376393829417451765793453791860419270208590599379720310994108668904859637' +}