1 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 { 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 { 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 { 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 for (int i = 1; i < _keysOnRemoval.length; i++) { 120 btree.remove(trans(), new Integer (_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 (1)); 130 131 btree.rollback(trans()); 132 133 expectKeys(btree, _one); 134 135 btree.remove(trans(), new Integer (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 { 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 for (int i = 1; i < _keysOnRemoval.length; i++) { 187 btree.remove(trans(), new Integer (_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 (1)); 199 200 btree.rollback(trans()); 201 202 expectKeys(btree, _one); 203 expectValues(btree, _one); 204 205 btree.remove(trans(), new Integer (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 (3)); 217 btree.remove(trans(), new Integer (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 (_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 (_keys[i]), new Integer (_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 obj) { 238 Assert.areEqual(values[cursor[0]], ((Integer ) 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 |