/*1* Copyright (c) 2000, 2001, 2002, 2003, 2004, 2005, 2008, 20092* The President and Fellows of Harvard College.3*4* Redistribution and use in source and binary forms, with or without5* modification, are permitted provided that the following conditions6* are met:7* 1. Redistributions of source code must retain the above copyright8* notice, this list of conditions and the following disclaimer.9* 2. Redistributions in binary form must reproduce the above copyright10* notice, this list of conditions and the following disclaimer in the11* documentation and/or other materials provided with the distribution.12* 3. Neither the name of the University nor the names of its contributors13* may be used to endorse or promote products derived from this software14* without specific prior written permission.15*16* THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY AND CONTRIBUTORS ``AS IS'' AND17* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE18* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE19* ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY OR CONTRIBUTORS BE LIABLE20* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL21* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS22* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)23* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT24* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY25* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF26* SUCH DAMAGE.27*/2829#include <types.h>30#include <lib.h>31#include <bitmap.h>32#include <test.h>3334#define TESTSIZE 5333536int37bitmaptest(int nargs, char **args)38{39struct bitmap *b;40char data[TESTSIZE];41uint32_t x;42int i;4344(void)nargs;45(void)args;4647kprintf("Starting bitmap test...\n");4849for (i=0; i<TESTSIZE; i++) {50data[i] = random()%2;51}5253b = bitmap_create(TESTSIZE);54KASSERT(b != NULL);5556for (i=0; i<TESTSIZE; i++) {57KASSERT(bitmap_isset(b, i)==0);58}5960for (i=0; i<TESTSIZE; i++) {61if (data[i]) {62bitmap_mark(b, i);63}64}65for (i=0; i<TESTSIZE; i++) {66if (data[i]) {67KASSERT(bitmap_isset(b, i));68}69else {70KASSERT(bitmap_isset(b, i)==0);71}72}7374for (i=0; i<TESTSIZE; i++) {75if (data[i]) {76bitmap_unmark(b, i);77}78else {79bitmap_mark(b, i);80}81}82for (i=0; i<TESTSIZE; i++) {83if (data[i]) {84KASSERT(bitmap_isset(b, i)==0);85}86else {87KASSERT(bitmap_isset(b, i));88}89}9091while (bitmap_alloc(b, &x)==0) {92KASSERT(x < TESTSIZE);93KASSERT(bitmap_isset(b, x));94KASSERT(data[x]==1);95data[x] = 0;96}9798for (i=0; i<TESTSIZE; i++) {99KASSERT(bitmap_isset(b, i));100KASSERT(data[i]==0);101}102103kprintf("Bitmap test complete\n");104return 0;105}106107108