diff --git a/dart/packages/fory/lib/src/types/uint16.dart b/dart/packages/fory/lib/src/types/uint16.dart index 1a92db2e65..47bd694257 100644 --- a/dart/packages/fory/lib/src/types/uint16.dart +++ b/dart/packages/fory/lib/src/types/uint16.dart @@ -101,7 +101,9 @@ final class Uint16 implements Comparable { Uint16 operator <<(int shift) => Uint16(value << shift); - Uint16 operator >>(int shift) => Uint16(value >> shift); + Uint16 operator >>(int shift) => Uint16(value >>> shift); + + Uint16 operator >>>(int shift) => Uint16(value >>> shift); bool operator <(Object other) => switch (other) { int otherValue => value < otherValue, diff --git a/dart/packages/fory/lib/src/types/uint32.dart b/dart/packages/fory/lib/src/types/uint32.dart index b8b81c62fa..7da4f5f314 100644 --- a/dart/packages/fory/lib/src/types/uint32.dart +++ b/dart/packages/fory/lib/src/types/uint32.dart @@ -101,7 +101,9 @@ final class Uint32 implements Comparable { Uint32 operator <<(int shift) => Uint32(value << shift); - Uint32 operator >>(int shift) => Uint32(value >> shift); + Uint32 operator >>(int shift) => Uint32(value >>> shift); + + Uint32 operator >>>(int shift) => Uint32(value >>> shift); bool operator <(Object other) => switch (other) { int otherValue => value < otherValue, diff --git a/dart/packages/fory/lib/src/types/uint8.dart b/dart/packages/fory/lib/src/types/uint8.dart index ee88c05402..bde29e6610 100644 --- a/dart/packages/fory/lib/src/types/uint8.dart +++ b/dart/packages/fory/lib/src/types/uint8.dart @@ -101,7 +101,9 @@ final class Uint8 implements Comparable { Uint8 operator <<(int shift) => Uint8(value << shift); - Uint8 operator >>(int shift) => Uint8(value >> shift); + Uint8 operator >>(int shift) => Uint8(value >>> shift); + + Uint8 operator >>>(int shift) => Uint8(value >>> shift); bool operator <(Object other) => switch (other) { int otherValue => value < otherValue, diff --git a/dart/packages/fory/test/numeric_wrapper_test.dart b/dart/packages/fory/test/numeric_wrapper_test.dart index 969919cdf9..f5f0436c85 100644 --- a/dart/packages/fory/test/numeric_wrapper_test.dart +++ b/dart/packages/fory/test/numeric_wrapper_test.dart @@ -172,15 +172,22 @@ void main() { expect(Uint8(0xff) + 1, equals(Uint8(0))); expect(Uint8(0) - 1, equals(Uint8(0xff))); expect(Uint8(0xf0) >> 4, equals(Uint8(0x0f))); + expect(Uint8(0xf0) >>> 4, equals(Uint8(0x0f))); + expect(Uint8(0xff) >> 1, equals(Uint8(0x7f))); + expect(Uint8(0xff) >>> 1, equals(Uint8(0x7f))); expect(-Uint8(1), equals(Uint8(0xff))); expect(Uint16(0xffff) + 1, equals(Uint16(0))); expect(Uint16(0) - 1, equals(Uint16(0xffff))); + expect(Uint16(0xffff) >> 1, equals(Uint16(0x7fff))); + expect(Uint16(0xffff) >>> 1, equals(Uint16(0x7fff))); expect(Uint32(0xffffffff) + 1, equals(Uint32(0))); expect(Uint32(0) - 1, equals(Uint32(0xffffffff))); expect( Uint32(0xf0f0f0f0) & Uint32(0x0ff00ff0), equals(Uint32(0x00f000f0))); + expect(Uint32(0xffffffff) >> 1, equals(Uint32(0x7fffffff))); + expect(Uint32(0xffffffff) >>> 1, equals(Uint32(0x7fffffff))); expect(_u64Hex('ffffffffffffffff') + 1, equals(Uint64(0))); expect(Uint64(0) - 1, equals(_u64Hex('ffffffffffffffff')));