Skip to content

Commit 9057397

Browse files
authored
test: add unit test for read_*_leb128() functions (#5931)
1 parent 7f55442 commit 9057397

File tree

2 files changed

+136
-0
lines changed

2 files changed

+136
-0
lines changed

test/unit/meson.build

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ if get_option('enable_tests')
8888
'io_ihex',
8989
'itv',
9090
'json',
91+
'leb128',
9192
'list',
9293
'log',
9394
'lzma',

test/unit/test_leb128.c

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
// SPDX-FileCopyrightText: 2026 Farhan-25 <shadowfinder1799@gmail.com>
2+
// SPDX-License-Identifier: LGPL-3.0-only
3+
4+
#include <rz_util.h>
5+
#include "minunit.h"
6+
7+
static bool test_read_u32_single_byte(void) {
8+
ut8 buf[] = { 0x7f };
9+
ut32 value = 0;
10+
11+
size_t n = read_u32_leb128(buf, buf + sizeof(buf), &value);
12+
13+
mu_assert_eq(n, 1, "u32 single: wrong length");
14+
mu_assert_eq(value, 127, "u32 single: wrong value");
15+
mu_end;
16+
}
17+
18+
static bool test_read_u32_multibyte(void) {
19+
ut8 buf[] = { 0xE5, 0x8E, 0x26 };
20+
ut32 value = 0;
21+
22+
size_t n = read_u32_leb128(buf, buf + sizeof(buf), &value);
23+
24+
mu_assert_eq(n, 3, "u32 multi: wrong length");
25+
mu_assert_eq(value, 624485, "u32 multi: wrong value");
26+
mu_end;
27+
}
28+
29+
static bool test_read_i32_positive(void) {
30+
ut8 buf[] = { 0x01 };
31+
st32 value = 0;
32+
33+
size_t n = read_i32_leb128(buf, buf + sizeof(buf), &value);
34+
35+
mu_assert_eq(n, 1, "i32 positive: wrong length");
36+
mu_assert_eq(value, 1, "i32 positive: wrong value");
37+
mu_end;
38+
}
39+
40+
static bool test_read_i32_negative_one(void) {
41+
ut8 buf[] = { 0x7f };
42+
st32 value = 0;
43+
44+
size_t n = read_i32_leb128(buf, buf + sizeof(buf), &value);
45+
46+
mu_assert_eq(n, 1, "i32 -1: wrong length");
47+
mu_assert_eq(value, -1, "i32 -1: wrong value");
48+
mu_end;
49+
}
50+
51+
static bool test_read_i32_multibyte_negative(void) {
52+
ut8 buf[] = { 0x9B, 0xF1, 0x59 };
53+
st32 value = 0;
54+
55+
size_t n = read_i32_leb128(buf, buf + sizeof(buf), &value);
56+
57+
mu_assert_eq(n, 3, "i32 multi neg: wrong length");
58+
mu_assert_eq(value, -624485, "i32 multi neg: wrong value");
59+
mu_end;
60+
}
61+
62+
static bool test_read_u64_single_byte(void) {
63+
ut8 buf[] = { 0x7f };
64+
ut64 value = 0;
65+
66+
size_t n = read_u64_leb128(buf, buf + sizeof(buf), &value);
67+
68+
mu_assert_eq(n, 1, "u64 single: wrong length");
69+
mu_assert_eq(value, 127ULL, "u64 single: wrong value");
70+
mu_end;
71+
}
72+
73+
static bool test_read_u64_multibyte(void) {
74+
ut8 buf[] = { 0xE5, 0x8E, 0x26 };
75+
ut64 value = 0;
76+
77+
size_t n = read_u64_leb128(buf, buf + sizeof(buf), &value);
78+
79+
mu_assert_eq(n, 3, "u64 multi: wrong length");
80+
mu_assert_eq(value, 624485ULL, "u64 multi: wrong value");
81+
mu_end;
82+
}
83+
84+
static bool test_read_i64_positive(void) {
85+
ut8 buf[] = { 0x01 };
86+
st64 value = 0;
87+
88+
size_t n = read_i64_leb128(buf, buf + sizeof(buf), &value);
89+
90+
mu_assert_eq(n, 1, "i64 positive: wrong length");
91+
mu_assert_eq(value, 1LL, "i64 positive: wrong value");
92+
mu_end;
93+
}
94+
95+
static bool test_read_i64_negative_one(void) {
96+
ut8 buf[] = { 0x7f };
97+
st64 value = 0;
98+
99+
size_t n = read_i64_leb128(buf, buf + sizeof(buf), &value);
100+
101+
mu_assert_eq(n, 1, "i64 -1: wrong length");
102+
mu_assert_eq(value, -1LL, "i64 -1: wrong value");
103+
mu_end;
104+
}
105+
106+
static bool test_read_i64_multibyte_negative(void) {
107+
ut8 buf[] = { 0x9B, 0xF1, 0x59 };
108+
st64 value = 0;
109+
110+
size_t n = read_i64_leb128(buf, buf + sizeof(buf), &value);
111+
112+
mu_assert_eq(n, 3, "i64 multi neg: wrong length");
113+
mu_assert_eq(value, -624485LL, "i64 multi neg: wrong value");
114+
mu_end;
115+
}
116+
117+
static bool all_tests(void) {
118+
mu_run_test(test_read_u32_single_byte);
119+
mu_run_test(test_read_u32_multibyte);
120+
121+
mu_run_test(test_read_i32_positive);
122+
mu_run_test(test_read_i32_negative_one);
123+
mu_run_test(test_read_i32_multibyte_negative);
124+
125+
mu_run_test(test_read_u64_single_byte);
126+
mu_run_test(test_read_u64_multibyte);
127+
128+
mu_run_test(test_read_i64_positive);
129+
mu_run_test(test_read_i64_negative_one);
130+
mu_run_test(test_read_i64_multibyte_negative);
131+
132+
return tests_passed != tests_run;
133+
}
134+
135+
mu_main(all_tests)

0 commit comments

Comments
 (0)