00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include <types.h>
00031 #include <lib.h>
00032 #include <array.h>
00033 #include <test.h>
00034
00035 #define TESTSIZE 73
00036
00037 static
00038 void
00039 testa(struct array *a)
00040 {
00041 int testarray[TESTSIZE];
00042 int i, j, n, r, *p;
00043
00044 for (i=0; i<TESTSIZE; i++) {
00045 testarray[i]=i;
00046 }
00047
00048 n = array_num(a);
00049 KASSERT(n==0);
00050
00051 for (i=0; i<TESTSIZE; i++) {
00052 r = array_add(a, &testarray[i], NULL);
00053 KASSERT(r==0);
00054 n = array_num(a);
00055 KASSERT(n==i+1);
00056 }
00057 n = array_num(a);
00058 KASSERT(n==TESTSIZE);
00059
00060 for (i=0; i<TESTSIZE; i++) {
00061 p = array_get(a, i);
00062 KASSERT(*p == i);
00063 }
00064 n = array_num(a);
00065 KASSERT(n==TESTSIZE);
00066
00067 for (j=0; j<TESTSIZE*4; j++) {
00068 i = random()%TESTSIZE;
00069 p = array_get(a, i);
00070 KASSERT(*p == i);
00071 }
00072 n = array_num(a);
00073 KASSERT(n==TESTSIZE);
00074
00075 for (i=0; i<TESTSIZE; i++) {
00076 array_set(a, i, &testarray[TESTSIZE-i-1]);
00077 }
00078
00079 for (i=0; i<TESTSIZE; i++) {
00080 p = array_get(a, i);
00081 KASSERT(*p == TESTSIZE-i-1);
00082 }
00083
00084 r = array_setsize(a, TESTSIZE/2);
00085 KASSERT(r==0);
00086
00087 for (i=0; i<TESTSIZE/2; i++) {
00088 p = array_get(a, i);
00089 KASSERT(*p == TESTSIZE-i-1);
00090 }
00091
00092 array_remove(a, 1);
00093
00094 for (i=1; i<TESTSIZE/2 - 1; i++) {
00095 p = array_get(a, i);
00096 KASSERT(*p == TESTSIZE-i-2);
00097 }
00098 p = array_get(a, 0);
00099 KASSERT(*p == TESTSIZE-1);
00100
00101 array_setsize(a, 2);
00102 p = array_get(a, 0);
00103 KASSERT(*p == TESTSIZE-1);
00104 p = array_get(a, 1);
00105 KASSERT(*p == TESTSIZE-3);
00106
00107 array_set(a, 1, NULL);
00108 array_setsize(a, 2);
00109 p = array_get(a, 0);
00110 KASSERT(*p == TESTSIZE-1);
00111 p = array_get(a, 1);
00112 KASSERT(p==NULL);
00113
00114 array_setsize(a, TESTSIZE*10);
00115 p = array_get(a, 0);
00116 KASSERT(*p == TESTSIZE-1);
00117 p = array_get(a, 1);
00118 KASSERT(p==NULL);
00119 }
00120
00121 int
00122 arraytest(int nargs, char **args)
00123 {
00124 struct array *a;
00125
00126 (void)nargs;
00127 (void)args;
00128
00129 kprintf("Beginning array test...\n");
00130 a = array_create();
00131 KASSERT(a != NULL);
00132
00133 testa(a);
00134
00135 array_setsize(a, 0);
00136
00137 testa(a);
00138
00139 array_setsize(a, 0);
00140 array_destroy(a);
00141
00142 kprintf("Array test complete\n");
00143 return 0;
00144 }