2 * Unix SMB/CIFS implementation.
4 * Unit test for sys_rw.c
6 * Copyright (C) Ralph Böhme 2021
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 3 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, see <http://www.gnu.org/licenses/>.
28 #include "lib/replace/replace.h"
29 #include "system/dir.h"
31 #include "lib/util/sys_rw.c"
33 static void test_sys_io_ranges_overlap(void **state
)
38 * sys_io_ranges_overlap() args are:
40 * src size, src offset, dst size, dst offset
43 /* src and dst size 0 => no overlap */
44 overlap
= sys_io_ranges_overlap(0, 0, 0, 0);
45 assert_false(overlap
);
47 /* dst size 0 => no overlap */
48 overlap
= sys_io_ranges_overlap(1, 0, 0, 0);
49 assert_false(overlap
);
51 /* src size 0 => no overlap */
52 overlap
= sys_io_ranges_overlap(0, 0, 1, 0);
53 assert_false(overlap
);
55 /* same range => overlap */
56 overlap
= sys_io_ranges_overlap(1, 0, 1, 0);
62 * src before dst => no overlap
64 overlap
= sys_io_ranges_overlap(1, 0, 1, 1);
65 assert_false(overlap
);
70 * src into dst => overlap
72 overlap
= sys_io_ranges_overlap(2, 0, 2, 1);
78 * src encompasses dst => overlap
80 overlap
= sys_io_ranges_overlap(4, 0, 1, 2);
87 * dst into src => overlap
89 overlap
= sys_io_ranges_overlap(2, 1, 2, 0);
95 * dst encompasses src => overlap
97 overlap
= sys_io_ranges_overlap(2, 1, 4, 0);
101 static void test_sys_block_align(void **state
)
105 asize
= sys_block_align(0, 2);
106 assert_int_equal(asize
, 0);
107 asize
= sys_block_align(1, 2);
108 assert_int_equal(asize
, 2);
109 asize
= sys_block_align(2, 2);
110 assert_int_equal(asize
, 2);
111 asize
= sys_block_align(3, 2);
112 assert_int_equal(asize
, 4);
114 asize
= sys_block_align(0, 4);
115 assert_int_equal(asize
, 0);
116 asize
= sys_block_align(1, 4);
117 assert_int_equal(asize
, 4);
118 asize
= sys_block_align(3, 4);
119 assert_int_equal(asize
, 4);
120 asize
= sys_block_align(4, 4);
121 assert_int_equal(asize
, 4);
122 asize
= sys_block_align(5, 4);
123 assert_int_equal(asize
, 8);
124 asize
= sys_block_align(7, 4);
125 assert_int_equal(asize
, 8);
126 asize
= sys_block_align(8, 4);
127 assert_int_equal(asize
, 8);
128 asize
= sys_block_align(9, 4);
129 assert_int_equal(asize
, 12);
132 static void test_sys_block_align_truncate(void **state
)
136 asize
= sys_block_align_truncate(0, 2);
137 assert_int_equal(asize
, 0);
138 asize
= sys_block_align_truncate(1, 2);
139 assert_int_equal(asize
, 0);
140 asize
= sys_block_align_truncate(2, 2);
141 assert_int_equal(asize
, 2);
142 asize
= sys_block_align_truncate(3, 2);
143 assert_int_equal(asize
, 2);
144 asize
= sys_block_align_truncate(4, 2);
145 assert_int_equal(asize
, 4);
146 asize
= sys_block_align_truncate(5, 2);
147 assert_int_equal(asize
, 4);
149 asize
= sys_block_align_truncate(0, 4);
150 assert_int_equal(asize
, 0);
151 asize
= sys_block_align_truncate(1, 4);
152 assert_int_equal(asize
, 0);
153 asize
= sys_block_align_truncate(3, 4);
154 assert_int_equal(asize
, 0);
155 asize
= sys_block_align_truncate(4, 4);
156 assert_int_equal(asize
, 4);
157 asize
= sys_block_align_truncate(5, 4);
158 assert_int_equal(asize
, 4);
159 asize
= sys_block_align_truncate(7, 4);
160 assert_int_equal(asize
, 4);
161 asize
= sys_block_align_truncate(8, 4);
162 assert_int_equal(asize
, 8);
163 asize
= sys_block_align_truncate(9, 4);
164 assert_int_equal(asize
, 8);
167 int main(int argc
, char **argv
)
169 const struct CMUnitTest tests
[] = {
170 cmocka_unit_test(test_sys_io_ranges_overlap
),
171 cmocka_unit_test(test_sys_block_align
),
172 cmocka_unit_test(test_sys_block_align_truncate
),
175 cmocka_set_message_output(CM_OUTPUT_SUBUNIT
);
177 return cmocka_run_group_tests(tests
, NULL
, NULL
);