aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/ifuzz/riscv64/util_test.go
blob: 554ffca126b40bb8b928425800cabea56e6f57ba (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// Copyright 2026 syzkaller project authors. All rights reserved.
// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.

package riscv64

import "testing"

func extractBitsOne(t *testing.T, from uint32, start, size uint, expect uint32) {
	ret := extractBits(from, start, size)
	if ret != expect {
		t.Fatalf("extractBits(%08x, %d, %d) = %x, want %x",
			from, start, size, ret, expect)
	}
}

func TestExtractBits(t *testing.T) {
	extractBitsOne(t, 0, 0, 0, 0)
	extractBitsOne(t, 0xffffffff, 0, 0, 0)

	for i := uint(0); i <= 31; i++ {
		extractBitsOne(t, 0xffffffff, i, 1, 1)
	}

	extractBitsOne(t, 0xf0f0f0f0, 31, 5, 0b11110)

	extractBitsOne(t, 0xf0f0f0f0, 25, 4, 0b0011)

	extractBitsOne(t, 0xf0f0f0f0, 21, 4, 0b1100)

	val := uint32(0b0000000_00011_00010_000_00001_0110011)

	extractBitsOne(t, val, 24, 5, 3)
	extractBitsOne(t, val, 19, 5, 2)
	extractBitsOne(t, val, 11, 5, 1)
}