xref: /kvm-unit-tests/common/sieve.c (revision 7d36db351752e29ad27eaafe3f102de7064e429b)
1*7d36db35SAvi Kivity #include "vm.h"
2*7d36db35SAvi Kivity #include "libcflat.h"
3*7d36db35SAvi Kivity 
4*7d36db35SAvi Kivity int sieve(char* data, int size)
5*7d36db35SAvi Kivity {
6*7d36db35SAvi Kivity     int i, j, r = 0;
7*7d36db35SAvi Kivity 
8*7d36db35SAvi Kivity     for (i = 0; i < size; ++i)
9*7d36db35SAvi Kivity 	data[i] = 1;
10*7d36db35SAvi Kivity 
11*7d36db35SAvi Kivity     data[0] = data[1] = 0;
12*7d36db35SAvi Kivity 
13*7d36db35SAvi Kivity     for (i = 2; i < size; ++i)
14*7d36db35SAvi Kivity 	if (data[i]) {
15*7d36db35SAvi Kivity 	    ++r;
16*7d36db35SAvi Kivity 	    for (j = i*2; j < size; j += i)
17*7d36db35SAvi Kivity 		data[j] = 0;
18*7d36db35SAvi Kivity 	}
19*7d36db35SAvi Kivity     return r;
20*7d36db35SAvi Kivity }
21*7d36db35SAvi Kivity 
22*7d36db35SAvi Kivity void test_sieve(const char *msg, char *data, int size)
23*7d36db35SAvi Kivity {
24*7d36db35SAvi Kivity     int r;
25*7d36db35SAvi Kivity 
26*7d36db35SAvi Kivity     printf("%s:", msg);
27*7d36db35SAvi Kivity     r = sieve(data, size);
28*7d36db35SAvi Kivity     printf("%d out of %d\n", r, size);
29*7d36db35SAvi Kivity }
30*7d36db35SAvi Kivity 
31*7d36db35SAvi Kivity #define STATIC_SIZE 1000000
32*7d36db35SAvi Kivity #define VSIZE 100000000
33*7d36db35SAvi Kivity char static_data[STATIC_SIZE];
34*7d36db35SAvi Kivity 
35*7d36db35SAvi Kivity int main()
36*7d36db35SAvi Kivity {
37*7d36db35SAvi Kivity     void *v;
38*7d36db35SAvi Kivity     int i;
39*7d36db35SAvi Kivity 
40*7d36db35SAvi Kivity     printf("starting sieve\n");
41*7d36db35SAvi Kivity     test_sieve("static", static_data, STATIC_SIZE);
42*7d36db35SAvi Kivity     setup_vm();
43*7d36db35SAvi Kivity     test_sieve("mapped", static_data, STATIC_SIZE);
44*7d36db35SAvi Kivity     for (i = 0; i < 3; ++i) {
45*7d36db35SAvi Kivity 	v = vmalloc(VSIZE);
46*7d36db35SAvi Kivity 	test_sieve("virtual", v, VSIZE);
47*7d36db35SAvi Kivity 	vfree(v);
48*7d36db35SAvi Kivity     }
49*7d36db35SAvi Kivity 
50*7d36db35SAvi Kivity     return 0;
51*7d36db35SAvi Kivity }
52