mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
math.bits: tests
This commit is contained in:
parent
f76651604d
commit
9845fd1cf5
140
vlib/math/bits/bits_test.v
Normal file
140
vlib/math/bits/bits_test.v
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
module bits
|
||||||
|
|
||||||
|
fn test_bits(){
|
||||||
|
mut i := 0
|
||||||
|
mut i1:= u64(0)
|
||||||
|
//
|
||||||
|
// --- LeadingZeros ---
|
||||||
|
//
|
||||||
|
|
||||||
|
// 8 bit
|
||||||
|
i = 1
|
||||||
|
for x in 0..8 {
|
||||||
|
//C.printf("x:%02x lz: %d cmp: %d\n",i<<x,leading_zeros_8(i<<x), 7-x)
|
||||||
|
assert leading_zeros_8(byte(i<<x)) == 7 - x
|
||||||
|
}
|
||||||
|
// 16 bit
|
||||||
|
i = 1
|
||||||
|
for x in 0..16 {
|
||||||
|
//C.printf("x:%04x lz: %d cmp: %d\n",u16(i)<<x,leading_zeros_16(u16(i)<<x), 15-x)
|
||||||
|
assert leading_zeros_16(u16(i)<<x) == 15 - x
|
||||||
|
}
|
||||||
|
// 32 bit
|
||||||
|
i = 1
|
||||||
|
for x in 0..32 {
|
||||||
|
//C.printf("x:%08x lz: %d cmp: %d\n",u32(i)<<x,leading_zeros_32(u32(i)<<x), 31-x)
|
||||||
|
assert leading_zeros_32(u32(i)<<x) == 31 - x
|
||||||
|
}
|
||||||
|
// 64 bit
|
||||||
|
i = 1
|
||||||
|
for x in 0..64 {
|
||||||
|
//C.printf("x:%016llx lz: %llu cmp: %d\n",u64(i)<<x,leading_zeros_64(u64(i)<<x), 63-x)
|
||||||
|
assert leading_zeros_64(u64(i)<<x) == 63 - x
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// --- ones_count ---
|
||||||
|
//
|
||||||
|
|
||||||
|
// 8 bit
|
||||||
|
i = 0
|
||||||
|
for x in 0..9 {
|
||||||
|
//C.printf("x:%02x lz: %llu cmp: %d\n",byte(i),ones_count_8(byte(i)), x)
|
||||||
|
assert ones_count_8(byte(i)) == x
|
||||||
|
i = (i << 1) + 1
|
||||||
|
}
|
||||||
|
// 16 bit
|
||||||
|
i = 0
|
||||||
|
for x in 0..17 {
|
||||||
|
//C.printf("x:%04x lz: %llu cmp: %d\n",u16(i),ones_count_16(u16(i)), x)
|
||||||
|
assert ones_count_16(u16(i)) == x
|
||||||
|
i = (i << 1) + 1
|
||||||
|
}
|
||||||
|
// 32 bit
|
||||||
|
i = 0
|
||||||
|
for x in 0..33 {
|
||||||
|
//C.printf("x:%08x lz: %llu cmp: %d\n",u32(i),ones_count_32(u32(i)), x)
|
||||||
|
assert ones_count_32(u32(i)) == x
|
||||||
|
i = (i << 1) + 1
|
||||||
|
}
|
||||||
|
// 64 bit
|
||||||
|
i1 = 0
|
||||||
|
for x in 0..65 {
|
||||||
|
//C.printf("x:%016llx lz: %llu cmp: %d\n",u64(i1),ones_count_64(u64(i1)), x)
|
||||||
|
assert ones_count_64(u64(i1)) == x
|
||||||
|
i1 = (i1 << 1) + 1
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// --- rotate_left/right ---
|
||||||
|
//
|
||||||
|
assert rotate_left_8( 0x12 , 4) == 0x21
|
||||||
|
assert rotate_left_16( 0x1234 , 8) == 0x3412
|
||||||
|
assert rotate_left_32( 0x12345678 , 16) == 0x56781234
|
||||||
|
assert rotate_left_64( 0x1234567887654321 , 32) == 0x8765432112345678
|
||||||
|
|
||||||
|
//
|
||||||
|
// --- reverse ---
|
||||||
|
//
|
||||||
|
|
||||||
|
// 8 bit
|
||||||
|
i = 0
|
||||||
|
for x in 0..9 {
|
||||||
|
mut rv := byte(0)
|
||||||
|
mut bc := 0
|
||||||
|
mut n := i
|
||||||
|
for bc < 8 {
|
||||||
|
rv = (rv << 1) | (n & 0x01)
|
||||||
|
bc++
|
||||||
|
n = n >> 1
|
||||||
|
}
|
||||||
|
//C.printf("x:%02x lz: %llu cmp: %d\n",byte(i),reverse_8(byte(i)), rv)
|
||||||
|
assert reverse_8(byte(i)) == rv
|
||||||
|
i = (i << 1) + 1
|
||||||
|
}
|
||||||
|
// 16 bit
|
||||||
|
i = 0
|
||||||
|
for x in 0..17 {
|
||||||
|
mut rv := u16(0)
|
||||||
|
mut bc := 0
|
||||||
|
mut n := i
|
||||||
|
for bc < 16 {
|
||||||
|
rv = (rv << 1) | (n & 0x01)
|
||||||
|
bc++
|
||||||
|
n = n >> 1
|
||||||
|
}
|
||||||
|
//C.printf("x:%04x lz: %llu cmp: %d\n",u16(i),reverse_16(u16(i)), rv)
|
||||||
|
assert reverse_16(u16(i)) == rv
|
||||||
|
i = (i << 1) + 1
|
||||||
|
}
|
||||||
|
// 32 bit
|
||||||
|
i = 0
|
||||||
|
for x in 0..33 {
|
||||||
|
mut rv := u32(0)
|
||||||
|
mut bc := 0
|
||||||
|
mut n := i
|
||||||
|
for bc < 32 {
|
||||||
|
rv = (rv << 1) | (n & 0x01)
|
||||||
|
bc++
|
||||||
|
n = n >> 1
|
||||||
|
}
|
||||||
|
//C.printf("x:%08x lz: %llu cmp: %d\n",u32(i),reverse_32(u32(i)), rv)
|
||||||
|
assert reverse_32(u32(i)) == rv
|
||||||
|
i = (i << 1) + 1
|
||||||
|
}
|
||||||
|
// 64 bit
|
||||||
|
i1 = 0
|
||||||
|
for x in 0..64 {
|
||||||
|
mut rv := u64(0)
|
||||||
|
mut bc := 0
|
||||||
|
mut n := i1
|
||||||
|
for bc < 64 {
|
||||||
|
rv = (rv << 1) | (n & 0x01)
|
||||||
|
bc++
|
||||||
|
n = n >> 1
|
||||||
|
}
|
||||||
|
//C.printf("x:%016llx lz: %016llx cmp: %016llx\n",u64(i1),reverse_64(u64(i1)), rv)
|
||||||
|
assert reverse_64(u64(i1)) == rv
|
||||||
|
i1 = (i1 << 1) + 1
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user