1efad6682SRichard Henderson /*
2efad6682SRichard Henderson * QEMU buffer_is_zero test
3efad6682SRichard Henderson *
4efad6682SRichard Henderson * Copyright (c) 2016 Red Hat, Inc.
5efad6682SRichard Henderson *
6efad6682SRichard Henderson * This library is free software; you can redistribute it and/or
7efad6682SRichard Henderson * modify it under the terms of the GNU Lesser General Public
8efad6682SRichard Henderson * License as published by the Free Software Foundation; either
9*8cbff3c1SGan Qixin * version 2.1 of the License, or (at your option) any later version.
10efad6682SRichard Henderson *
11efad6682SRichard Henderson * This library is distributed in the hope that it will be useful,
12efad6682SRichard Henderson * but WITHOUT ANY WARRANTY; without even the implied warranty of
13efad6682SRichard Henderson * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14efad6682SRichard Henderson * Lesser General Public License for more details.
15efad6682SRichard Henderson *
16efad6682SRichard Henderson * You should have received a copy of the GNU Lesser General Public
17efad6682SRichard Henderson * License along with this library; if not, see <http://www.gnu.org/licenses/>.
18efad6682SRichard Henderson *
19efad6682SRichard Henderson */
20efad6682SRichard Henderson
21efad6682SRichard Henderson #include "qemu/osdep.h"
22efad6682SRichard Henderson #include "qemu/cutils.h"
23efad6682SRichard Henderson
24efad6682SRichard Henderson static char buffer[8 * 1024 * 1024];
25efad6682SRichard Henderson
test_1(void)26efad6682SRichard Henderson static void test_1(void)
27efad6682SRichard Henderson {
28efad6682SRichard Henderson size_t s, a, o;
29efad6682SRichard Henderson
30efad6682SRichard Henderson /* Basic positive test. */
31efad6682SRichard Henderson g_assert(buffer_is_zero(buffer, sizeof(buffer)));
32efad6682SRichard Henderson
33efad6682SRichard Henderson /* Basic negative test. */
34efad6682SRichard Henderson buffer[sizeof(buffer) - 1] = 1;
35efad6682SRichard Henderson g_assert(!buffer_is_zero(buffer, sizeof(buffer)));
36efad6682SRichard Henderson buffer[sizeof(buffer) - 1] = 0;
37efad6682SRichard Henderson
38efad6682SRichard Henderson /* Positive tests for size and alignment. */
39efad6682SRichard Henderson for (a = 1; a <= 64; a++) {
40efad6682SRichard Henderson for (s = 1; s < 1024; s++) {
41efad6682SRichard Henderson buffer[a - 1] = 1;
42efad6682SRichard Henderson buffer[a + s] = 1;
43efad6682SRichard Henderson g_assert(buffer_is_zero(buffer + a, s));
44efad6682SRichard Henderson buffer[a - 1] = 0;
45efad6682SRichard Henderson buffer[a + s] = 0;
46efad6682SRichard Henderson }
47efad6682SRichard Henderson }
48efad6682SRichard Henderson
49efad6682SRichard Henderson /* Negative tests for size, alignment, and the offset of the marker. */
50efad6682SRichard Henderson for (a = 1; a <= 64; a++) {
51efad6682SRichard Henderson for (s = 1; s < 1024; s++) {
52efad6682SRichard Henderson for (o = 0; o < s; ++o) {
53efad6682SRichard Henderson buffer[a + o] = 1;
54efad6682SRichard Henderson g_assert(!buffer_is_zero(buffer + a, s));
55efad6682SRichard Henderson buffer[a + o] = 0;
56efad6682SRichard Henderson }
57efad6682SRichard Henderson }
58efad6682SRichard Henderson }
59efad6682SRichard Henderson }
60efad6682SRichard Henderson
test_2(void)61efad6682SRichard Henderson static void test_2(void)
62efad6682SRichard Henderson {
63efad6682SRichard Henderson if (g_test_perf()) {
64efad6682SRichard Henderson test_1();
65efad6682SRichard Henderson } else {
66efad6682SRichard Henderson do {
67efad6682SRichard Henderson test_1();
68efad6682SRichard Henderson } while (test_buffer_is_zero_next_accel());
69efad6682SRichard Henderson }
70efad6682SRichard Henderson }
71efad6682SRichard Henderson
main(int argc,char ** argv)72efad6682SRichard Henderson int main(int argc, char **argv)
73efad6682SRichard Henderson {
74efad6682SRichard Henderson g_test_init(&argc, &argv, NULL);
75efad6682SRichard Henderson g_test_add_func("/cutils/bufferiszero", test_2);
76efad6682SRichard Henderson
77efad6682SRichard Henderson return g_test_run();
78efad6682SRichard Henderson }
79