xref: /qemu/tests/unit/test-bufferiszero.c (revision da668aa15b99150a8595c491aee00d5d2426aaf9)
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