mirror of
https://github.com/ziglang/zig.git
synced 2026-02-13 04:48:20 +00:00
std.math.isPowerOfTwo: add tests and doc comment and improve assert
The assert is changed from `int != 0` to `int > 0` because negative integers always return `false`. Python's `math.log2` does the same and errors for 0 or negative integers.
This commit is contained in:
parent
c13ac52972
commit
2839e35d1c
@ -1111,9 +1111,22 @@ pub fn alignCast(comptime alignment: u29, ptr: anytype) AlignCastError!@TypeOf(@
|
||||
return @alignCast(alignment, ptr);
|
||||
}
|
||||
|
||||
pub fn isPowerOfTwo(v: anytype) bool {
|
||||
assert(v != 0);
|
||||
return (v & (v - 1)) == 0;
|
||||
/// Asserts `int > 0`.
|
||||
pub fn isPowerOfTwo(int: anytype) bool {
|
||||
assert(int > 0);
|
||||
return (int & (int - 1)) == 0;
|
||||
}
|
||||
|
||||
test isPowerOfTwo {
|
||||
try testing.expect(isPowerOfTwo(@as(u8, 1)));
|
||||
try testing.expect(isPowerOfTwo(2));
|
||||
try testing.expect(!isPowerOfTwo(@as(i16, 3)));
|
||||
try testing.expect(isPowerOfTwo(4));
|
||||
try testing.expect(!isPowerOfTwo(@as(u32, 31)));
|
||||
try testing.expect(isPowerOfTwo(32));
|
||||
try testing.expect(!isPowerOfTwo(@as(i64, 63)));
|
||||
try testing.expect(isPowerOfTwo(128));
|
||||
try testing.expect(isPowerOfTwo(@as(u128, 256)));
|
||||
}
|
||||
|
||||
/// Aligns the given integer type bit width to a width divisible by 8.
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user