package org.basex.util; import static org.junit.Assert.*; import org.junit.*; /** * Tests for {@link BitArray}. * * @author BaseX Team 2005-17, BSD License * @author Dimitar Popov */ public final class BitArrayTest { /** Test method for {@link BitArray#toArray()}. */ @Test public void getTrimmedWords() { final BitArray ba = new BitArray(); ba.init(new long[] {-1L, 0L}, 64); assertEquals("Array not trimmed correctly", 1, ba.toArray().length); } /** Test method for {@link BitArray#get(int)}. */ @Test public void get() { final BitArray ba = new BitArray(); ba.init(new long[] {-1L, 0L}, 65); assertTrue("Bit 63 is 0", ba.get(63)); assertFalse("Bit 64 is 1", ba.get(64)); } /** Test method for {@link BitArray#set(int)}. */ @Test public void set() { final BitArray ba = new BitArray(); ba.set(128); assertTrue("Bit 128 is 0", ba.get(128)); ba.init(); ba.set(129); assertTrue("Bit 129 is 0", ba.get(129)); } /** Test method for {@link BitArray#clear(int)}. */ @Test public void clear() { final BitArray ba = new BitArray(); ba.init(new long[] {-1L, 0L}, 64); ba.clear(63); assertFalse("Bit 63 is 1", ba.get(63)); } /** Test method for {@link BitArray#nextFree(int)}. */ @Test public void nextFree() { final BitArray ba = new BitArray(); ba.init(new long[] {-1L, 0L}, 64); assertEquals("Incorrect next clear bit", 64, ba.nextFree(0)); } /** Test method for {@link BitArray#nextFree(int)}. */ @Test public void nextSet() { final BitArray ba = new BitArray(); ba.init(new long[] {0L, -1L}, 128); assertEquals("Incorrect next clear bit", 64, ba.nextSet(0)); assertEquals("Incorrect next clear bit", 64, ba.nextSet(64)); assertEquals("Incorrect next clear bit", 67, ba.nextSet(67)); assertEquals("Incorrect next clear bit", -1, ba.nextSet(128)); } /** Test method for {@link BitArray#cardinality()}. */ @Test public void cardinality() { final BitArray ba = new BitArray(); ba.init(new long[] { 0L }, 0); assertEquals(0, ba.cardinality()); ba.set(1); assertEquals(1, ba.cardinality()); ba.set(64); assertEquals(2, ba.cardinality()); ba.set(3); assertEquals(3, ba.cardinality()); ba.clear(64); assertEquals(2, ba.cardinality()); ba.clear(3); assertEquals(1, ba.cardinality()); ba.clear(1); assertEquals(0, ba.cardinality()); } /** Creates the constructor which fills the entries with a specified value. */ @Test public void preFill() { // map with zero entries BitArray ba = new BitArray(0, true); assertEquals("Incorrect value", false, ba.get(0)); // map with one entry ba = new BitArray(1, true); assertEquals("Incorrect value", true, ba.get(0)); assertEquals("Incorrect value", false, ba.get(1)); // map with 63 entries int max = BitArray.WORD_SIZE - 1; ba = new BitArray(max, true); for(int i = 0; i < max; i++) assertEquals("Incorrect value", true, ba.get(i)); assertEquals("Incorrect value", false, ba.get(max)); // map with 64 entries max = BitArray.WORD_SIZE; ba = new BitArray(max, true); for(int i = 0; i < max; i++) assertEquals("Incorrect value", true, ba.get(i)); assertEquals("Incorrect value", false, ba.get(max)); // map with 65 entries max = BitArray.WORD_SIZE + 1; ba = new BitArray(max, true); for(int i = 0; i < max; i++) assertEquals("Incorrect value", true, ba.get(i)); assertEquals("Incorrect value", false, ba.get(max)); // map with 1025 entries max = (BitArray.WORD_SIZE << 4) + 1; ba = new BitArray(max, true); for(int i = 0; i < max; i++) assertEquals("Incorrect value", true, ba.get(i)); assertEquals("Incorrect value", false, ba.get(max)); } }