Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
script3r
GitHub Repository: script3r/os161
Path: blob/master/kern/test/bitmaptest.c
2091 views
1
/*
2
* Copyright (c) 2000, 2001, 2002, 2003, 2004, 2005, 2008, 2009
3
* The President and Fellows of Harvard College.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions
7
* are met:
8
* 1. Redistributions of source code must retain the above copyright
9
* notice, this list of conditions and the following disclaimer.
10
* 2. Redistributions in binary form must reproduce the above copyright
11
* notice, this list of conditions and the following disclaimer in the
12
* documentation and/or other materials provided with the distribution.
13
* 3. Neither the name of the University nor the names of its contributors
14
* may be used to endorse or promote products derived from this software
15
* without specific prior written permission.
16
*
17
* THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY AND CONTRIBUTORS ``AS IS'' AND
18
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20
* ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY OR CONTRIBUTORS BE LIABLE
21
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27
* SUCH DAMAGE.
28
*/
29
30
#include <types.h>
31
#include <lib.h>
32
#include <bitmap.h>
33
#include <test.h>
34
35
#define TESTSIZE 533
36
37
int
38
bitmaptest(int nargs, char **args)
39
{
40
struct bitmap *b;
41
char data[TESTSIZE];
42
uint32_t x;
43
int i;
44
45
(void)nargs;
46
(void)args;
47
48
kprintf("Starting bitmap test...\n");
49
50
for (i=0; i<TESTSIZE; i++) {
51
data[i] = random()%2;
52
}
53
54
b = bitmap_create(TESTSIZE);
55
KASSERT(b != NULL);
56
57
for (i=0; i<TESTSIZE; i++) {
58
KASSERT(bitmap_isset(b, i)==0);
59
}
60
61
for (i=0; i<TESTSIZE; i++) {
62
if (data[i]) {
63
bitmap_mark(b, i);
64
}
65
}
66
for (i=0; i<TESTSIZE; i++) {
67
if (data[i]) {
68
KASSERT(bitmap_isset(b, i));
69
}
70
else {
71
KASSERT(bitmap_isset(b, i)==0);
72
}
73
}
74
75
for (i=0; i<TESTSIZE; i++) {
76
if (data[i]) {
77
bitmap_unmark(b, i);
78
}
79
else {
80
bitmap_mark(b, i);
81
}
82
}
83
for (i=0; i<TESTSIZE; i++) {
84
if (data[i]) {
85
KASSERT(bitmap_isset(b, i)==0);
86
}
87
else {
88
KASSERT(bitmap_isset(b, i));
89
}
90
}
91
92
while (bitmap_alloc(b, &x)==0) {
93
KASSERT(x < TESTSIZE);
94
KASSERT(bitmap_isset(b, x));
95
KASSERT(data[x]==1);
96
data[x] = 0;
97
}
98
99
for (i=0; i<TESTSIZE; i++) {
100
KASSERT(bitmap_isset(b, i));
101
KASSERT(data[i]==0);
102
}
103
104
kprintf("Bitmap test complete\n");
105
return 0;
106
}
107
108