KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > db4o > db4ounit > common > btree > BTreeSimpleTestCase


1 /* Copyright (C) 2004 - 2006 db4objects Inc. http://www.db4o.com
2
3 This file is part of the db4o open source object database.
4
5 db4o is free software; you can redistribute it and/or modify it under
6 the terms of version 2 of the GNU General Public License as published
7 by the Free Software Foundation and as clarified by db4objects' GPL
8 interpretation policy, available at
9 http://www.db4o.com/about/company/legalpolicies/gplinterpretation/
10 Alternatively you can write to db4objects, Inc., 1900 S Norfolk Street,
11 Suite 350, San Mateo, CA 94403, USA.
12
13 db4o is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 for more details.
17
18 You should have received a copy of the GNU General Public License along
19 with this program; if not, write to the Free Software Foundation, Inc.,
20 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */

21 package com.db4o.db4ounit.common.btree;
22
23 import com.db4o.*;
24 import com.db4o.foundation.*;
25 import com.db4o.inside.btree.*;
26
27 import db4ounit.*;
28 import db4ounit.extensions.AbstractDb4oTestCase;
29 import db4ounit.extensions.fixtures.*;
30
31 public class BTreeSimpleTestCase extends AbstractDb4oTestCase implements
32         OptOutDefragSolo, OptOutCS {
33
34     protected static final int BTREE_NODE_SIZE = 4;
35
36     int[] _keys = { 3, 234, 55, 87, 2, 1, 101, 59, 70, 300, 288 };
37
38     int[] _values;
39
40     int[] _sortedKeys = { 1, 2, 3, 55, 59, 70, 87, 101, 234, 288, 300 };
41
42     int[] _sortedValues;
43
44     int[] _keysOnRemoval = { 1, 2, 55, 59, 70, 87, 234, 288, 300 };
45
46     int[] _valuesOnRemoval;
47
48     int[] _one = { 1 };
49
50     int[] _none = {};
51
52     public BTreeSimpleTestCase() {
53         super();
54
55         _values = new int[_keys.length];
56         for (int i = 0; i < _keys.length; i++) {
57             _values[i] = _keys[i];
58         }
59
60         _sortedValues = new int[_sortedKeys.length];
61         for (int i = 0; i < _sortedKeys.length; i++) {
62             _sortedValues[i] = _sortedKeys[i];
63         }
64
65         _valuesOnRemoval = new int[_keysOnRemoval.length];
66         for (int i = 0; i < _keysOnRemoval.length; i++) {
67             _valuesOnRemoval[i] = _keysOnRemoval[i];
68         }
69     }
70
71     public void testIntKeys() throws Exception JavaDoc {
72         BTree btree = BTreeAssert.createIntKeyBTree(stream(), 0,
73                 BTREE_NODE_SIZE);
74         for (int i = 0; i < 5; i++) {
75             btree = cycleIntKeys(btree);
76         }
77     }
78
79     public void testIntKeysIntValues() throws Exception JavaDoc {
80         BTree btree = createIntKeyValueBTree(0);
81         for (int i = 0; i < 5; i++) {
82             btree = cycleIntKeysIntValues(btree);
83         }
84     }
85
86     private BTree cycleIntKeys(BTree btree) throws Exception JavaDoc {
87         addKeys(btree);
88         expectKeys(btree, _sortedKeys);
89
90         btree.commit(trans());
91
92         expectKeys(btree, _sortedKeys);
93
94         removeKeys(btree);
95
96         expectKeys(btree, _keysOnRemoval);
97
98         btree.rollback(trans());
99
100         expectKeys(btree, _sortedKeys);
101
102         int id = btree.getID();
103
104         reopen();
105
106         btree = BTreeAssert.createIntKeyBTree(stream(), id, BTREE_NODE_SIZE);
107
108         expectKeys(btree, _sortedKeys);
109
110         removeKeys(btree);
111
112         expectKeys(btree, _keysOnRemoval);
113
114         btree.commit(trans());
115
116         expectKeys(btree, _keysOnRemoval);
117
118         // remove all but 1
119
for (int i = 1; i < _keysOnRemoval.length; i++) {
120             btree.remove(trans(), new Integer JavaDoc(_keysOnRemoval[i]));
121         }
122
123         expectKeys(btree, _one);
124
125         btree.commit(trans());
126
127         expectKeys(btree, _one);
128
129         btree.remove(trans(), new Integer JavaDoc(1));
130
131         btree.rollback(trans());
132
133         expectKeys(btree, _one);
134
135         btree.remove(trans(), new Integer JavaDoc(1));
136
137         btree.commit(trans());
138
139         expectKeys(btree, _none);
140
141         return btree;
142
143     }
144
145     private BTree cycleIntKeysIntValues(BTree btree) throws Exception JavaDoc {
146
147         addKeysValues(btree);
148         expectKeys(btree, _sortedKeys);
149         expectValues(btree, _sortedValues);
150
151         btree.commit(trans());
152
153         expectKeys(btree, _sortedKeys);
154         expectValues(btree, _sortedValues);
155
156         removeKeys(btree);
157
158         expectKeys(btree, _keysOnRemoval);
159         expectValues(btree, _valuesOnRemoval);
160
161         btree.rollback(trans());
162
163         expectKeys(btree, _sortedKeys);
164         expectValues(btree, _sortedValues);
165
166         int id = btree.getID();
167
168         reopen();
169
170         btree = createIntKeyValueBTree(id);
171
172         expectKeys(btree, _sortedKeys);
173         expectValues(btree, _sortedValues);
174
175         removeKeys(btree);
176
177         expectKeys(btree, _keysOnRemoval);
178         expectValues(btree, _valuesOnRemoval);
179
180         btree.commit(trans());
181
182         expectKeys(btree, _keysOnRemoval);
183         expectValues(btree, _valuesOnRemoval);
184
185         // remove all but 1
186
for (int i = 1; i < _keysOnRemoval.length; i++) {
187             btree.remove(trans(), new Integer JavaDoc(_keysOnRemoval[i]));
188         }
189
190         expectKeys(btree, _one);
191         expectValues(btree, _one);
192
193         btree.commit(trans());
194
195         expectKeys(btree, _one);
196         expectValues(btree, _one);
197
198         btree.remove(trans(), new Integer JavaDoc(1));
199
200         btree.rollback(trans());
201
202         expectKeys(btree, _one);
203         expectValues(btree, _one);
204
205         btree.remove(trans(), new Integer JavaDoc(1));
206
207         btree.commit(trans());
208
209         expectKeys(btree, _none);
210         expectValues(btree, _none);
211
212         return btree;
213     }
214
215     private void removeKeys(BTree btree) {
216         btree.remove(trans(), new Integer JavaDoc(3));
217         btree.remove(trans(), new Integer JavaDoc(101));
218     }
219
220     private void addKeys(BTree btree) {
221         Transaction trans = trans();
222         for (int i = 0; i < _keys.length; i++) {
223             btree.add(trans, new Integer JavaDoc(_keys[i]));
224         }
225     }
226
227     private void addKeysValues(BTree btree) {
228         Transaction trans = trans();
229         for (int i = 0; i < _keys.length; i++) {
230             btree.add(trans, new Integer JavaDoc(_keys[i]), new Integer JavaDoc(_values[i]));
231         }
232     }
233
234     private void expectValues(BTree btree, final int[] values) {
235         final int[] cursor = new int[] { 0 };
236         btree.traverseValues(trans(), new Visitor4() {
237             public void visit(Object JavaDoc obj) {
238                 // System.out.println(obj);
239
Assert.areEqual(values[cursor[0]], ((Integer JavaDoc) obj).intValue());
240                 cursor[0]++;
241             }
242         });
243         Assert.areEqual(values.length, cursor[0]);
244     }
245
246     private BTree createIntKeyValueBTree(int id) {
247         return new BTree(stream().getSystemTransaction(), id,
248                 new YInt(stream()), new YInt(stream()), 7, stream()
249                         .configImpl().bTreeCacheHeight());
250     }
251
252     private void expectKeys(BTree btree, final int[] keys) {
253         BTreeAssert.assertKeys(trans(), btree, keys);
254     }
255 }
256
Popular Tags