001: /*
002: * Copyright 2004-2008 H2 Group. Licensed under the H2 License, Version 1.0
003: * (license2)
004: * Initial Developer: H2 Group
005: */
006: package org.h2.test.unit;
007:
008: import java.util.Arrays;
009: import java.util.Random;
010: import org.h2.test.TestBase;
011: import org.h2.util.IntArray;
012:
013: /**
014: * Tests the IntArray class.
015: */
016: public class TestIntArray extends TestBase {
017:
018: public void test() throws Exception {
019: testRandom();
020: }
021:
022: private void testRandom() throws Exception {
023: IntArray array = new IntArray();
024: int[] test = new int[0];
025: Random random = new Random(1);
026: for (int i = 0; i < 10000; i++) {
027: int idx = test.length == 0 ? 0 : random
028: .nextInt(test.length);
029: int v = random.nextInt(100);
030: int op = random.nextInt(9);
031: switch (op) {
032: case 0:
033: array.add(idx, v);
034: test = add(test, idx, v);
035: break;
036: case 1:
037: array.add(v);
038: test = add(test, v);
039: break;
040: case 2:
041: array.sort();
042: test = sort(test);
043: array.addValueSorted(v);
044: test = addValueSorted(test, v);
045: break;
046: case 3:
047: array.sort();
048: test = sort(test);
049: int a = array.findNextValueIndex(v);
050: int b = findNextValueIndex(test, v);
051: check(a, b);
052: break;
053: case 4:
054: if (test.length > idx) {
055: check(array.get(idx), get(test, idx));
056: }
057: break;
058: case 5:
059: array.remove(idx);
060: test = remove(test, idx);
061: break;
062: case 6:
063: if (test.length > idx) {
064: v = test[idx];
065: array.removeValue(v);
066: test = removeValue(test, v);
067: }
068: break;
069: case 7:
070: array.set(idx, v);
071: test = set(test, idx, v);
072: break;
073: case 8:
074: check(array.size(), test.length);
075: break;
076: }
077: check(array.size(), test.length);
078: for (int j = 0; j < test.length; j++) {
079: check(test[j], array.get(j));
080: }
081:
082: }
083: }
084:
085: int[] add(int[] array, int i, int value) {
086: int[] a2 = new int[array.length + 1];
087: System.arraycopy(array, 0, a2, 0, array.length);
088: if (i < array.length) {
089: System.arraycopy(a2, i, a2, i + 1, a2.length - i - 1);
090: }
091: array = a2;
092: array[i] = value;
093: return array;
094: }
095:
096: int[] add(int[] array, int value) {
097: return add(array, array.length, value);
098: }
099:
100: int[] addValueSorted(int[] array, int value) {
101: for (int i = 0; i < array.length; i++) {
102: if (array[i] < value) {
103: continue;
104: }
105: if (array[i] == value) {
106: return array;
107: } else {
108: return add(array, i, value);
109: }
110: }
111: return add(array, value);
112: }
113:
114: int findNextValueIndex(int[] array, int value) {
115: for (int i = 0; i < array.length; i++) {
116: if (array[i] >= value) {
117: return i;
118: }
119: }
120: return array.length;
121: }
122:
123: int get(int[] array, int i) {
124: return array[i];
125: }
126:
127: int[] remove(int[] array, int i) {
128: int[] a2 = new int[array.length - 1];
129: System.arraycopy(array, 0, a2, 0, i);
130: if (i < a2.length) {
131: System.arraycopy(array, i + 1, a2, i, array.length - i - 1);
132: }
133: return a2;
134: }
135:
136: int[] removeValue(int[] array, int value) {
137: for (int i = 0; i < array.length; i++) {
138: if (array[i] == value) {
139: return remove(array, i);
140: }
141: }
142: return array;
143: }
144:
145: int[] set(int[] array, int i, int value) {
146: array[i] = value;
147: return array;
148: }
149:
150: int size(int[] array) {
151: return array.length;
152: }
153:
154: int[] sort(int[] array) {
155: Arrays.sort(array);
156: return array;
157: }
158:
159: }
|