@Test public void ContainerFactory() { MappeableBitmapContainer bc1, bc2, bc3; MappeableArrayContainer ac1, ac2, ac3; bc1 = new MappeableBitmapContainer(); bc2 = new MappeableBitmapContainer(); bc3 = new MappeableBitmapContainer(); ac1 = new MappeableArrayContainer(); ac2 = new MappeableArrayContainer(); ac3 = new MappeableArrayContainer(); for (short i = 0; i < 5000; i++) bc1.add((short) (i * 70)); for (short i = 0; i < 5000; i++) bc2.add((short) (i * 70)); for (short i = 0; i < 5000; i++) bc3.add((short) (i * 70)); for (short i = 0; i < 4000; i++) ac1.add((short) (i * 50)); for (short i = 0; i < 4000; i++) ac2.add((short) (i * 50)); for (short i = 0; i < 4000; i++) ac3.add((short) (i * 50)); MappeableBitmapContainer rbc; rbc = ac1.clone().toBitmapContainer(); Assert.assertTrue(validate(rbc, ac1)); rbc = ac2.clone().toBitmapContainer(); Assert.assertTrue(validate(rbc, ac2)); rbc = ac3.clone().toBitmapContainer(); Assert.assertTrue(validate(rbc, ac3)); }
@Override public MappeableContainer flip(short x) { if (BufferUtil.isBackedBySimpleArray(this.content)) { short[] sarray = content.array(); int loc = Util.unsignedBinarySearch(sarray, 0, cardinality, x); if (loc < 0) { // Transform the ArrayContainer to a BitmapContainer // when cardinality = DEFAULT_MAX_SIZE if (cardinality >= DEFAULT_MAX_SIZE) { MappeableBitmapContainer a = this.toBitmapContainer(); a.add(x); return a; } if (cardinality >= sarray.length) { increaseCapacity(); sarray = content.array(); } // insertion : shift the elements > x by one position to // the right // and put x in it's appropriate place System.arraycopy(sarray, -loc - 1, sarray, -loc, cardinality + loc + 1); sarray[-loc - 1] = x; ++cardinality; } else { System.arraycopy(sarray, loc + 1, sarray, loc, cardinality - loc - 1); --cardinality; } return this; } else { int loc = BufferUtil.unsignedBinarySearch(content, 0, cardinality, x); if (loc < 0) { // Transform the ArrayContainer to a BitmapContainer // when cardinality = DEFAULT_MAX_SIZE if (cardinality >= DEFAULT_MAX_SIZE) { MappeableBitmapContainer a = this.toBitmapContainer(); a.add(x); return a; } if (cardinality >= content.limit()) { increaseCapacity(); } // insertion : shift the elements > x by one position to // the right // and put x in it's appropriate place for (int k = cardinality; k > -loc - 1; --k) content.put(k, content.get(k - 1)); content.put(-loc - 1, x); ++cardinality; } else { for (int k = loc + 1; k < cardinality; --k) { content.put(k - 1, content.get(k)); } --cardinality; } return this; } }
@Test public void BitmapContainerCardinalityTest() { final MappeableBitmapContainer ac = new MappeableBitmapContainer(); for (short k = 0; k < 100; ++k) { ac.add(k); Assert.assertEquals(ac.getCardinality(), k + 1); } for (short k = 0; k < 100; ++k) { ac.add(k); Assert.assertEquals(ac.getCardinality(), 100); } }
@Test public void bitmaptest() { final MappeableBitmapContainer rr = new MappeableBitmapContainer(); rr.add((short) 110); rr.add((short) 114); rr.add((short) 115); final short[] array = new short[3]; int pos = 0; for (final short i : rr) array[pos++] = i; Assert.assertEquals(array[0], (short) 110); Assert.assertEquals(array[1], (short) 114); Assert.assertEquals(array[2], (short) 115); }