예제 #1
0
  public void testFreeAllocation() {
    HandleDataStore hds = new HandleDataStore();

    allocate(hds, 1);
    allocate(hds, 3);
    allocate(hds, 2);
    allocate(hds, 10);
    allocate(hds, 100);
    allocate(hds, 1000);

    deallocate(hds, 100);

    deallocate(hds, 1);
    deallocate(hds, 1000);

    allocate(hds, 1003);
    allocate(hds, 1000);

    int h = hds.preallocate();
    assertEquals(0, hds.allocate(h));
    hds.deallocate(h, true);

    h = hds.allocate();
    hds.deallocate(h);

    int[] right = new int[] {3, 2, 10, 1003, 1000};
    h = hds.first();
    int pos = 0;
    do {
      assertEquals(right[pos++], h);
      h = hds.next(h);
    } while (h != 0 && pos < right.length);

    assertEquals(0, h);
    assertEquals(right.length, pos);
  }
예제 #2
0
 private void allocate(HandleDataStore hds, int handle) {
   assertTrue(hds.allocate(handle) != 0);
   assertTrue(hds.isAllocated(handle));
 }
예제 #3
0
 private void deallocate(HandleDataStore hds, int handle) {
   hds.deallocate(handle);
   assertTrue(!hds.isAllocated(handle));
 }
예제 #4
0
  public void testDefaultAllocation() {
    HandleDataStore hds = new HandleDataStore();
    int i = 1;
    for (; i <= 10000; i++) {
      int handle = hds.allocate();
      assertEquals(i, handle);
    }

    assertEquals(i - 1, hds.size());
    assertEquals(i - 1, hds.last());
    assertEquals(1, hds.first());

    int handle = hds.first();
    assertTrue(hds.isAllocated(handle));
    for (i = 2; i <= 10000; i++) {
      assertEquals(i, handle = hds.next(handle));
      assertTrue(hds.isAllocated(handle));
    }
    assertEquals(0, handle = hds.next(handle));
    assertTrue(!hds.isAllocated(handle));

    handle = hds.last();
    assertTrue(hds.isAllocated(handle));
    for (i = 10000 - 1; i > 0; i--) {
      assertEquals(i, handle = hds.previous(handle));
      assertTrue(hds.isAllocated(handle));
    }
    assertEquals(0, handle = hds.previous(handle));
    assertTrue(!hds.isAllocated(handle));
  }