public void runZebraTests(boolean isBruteOnly) {
    runZebraDiscard(create(1024, 1, 1024, false, isBruteOnly), 32, 16, 1);
    runZebraDiscard(create(1024, 1, 1024, false, isBruteOnly), 64, 8, 1);
    runZebraDiscard(create(1024, 1, 1024, false, isBruteOnly), 32, 16, 2);
    runZebraDiscard(create(1024, 1, 1024, false, isBruteOnly), 32, 16, 4);

    runZebraDiscard(create(512, 2, 1024, false, isBruteOnly), 32, 16, 1);
    runZebraDiscard(create(512, 2, 1024, false, isBruteOnly), 64, 8, 1);
    runZebraDiscard(create(512, 2, 1024, false, isBruteOnly), 32, 16, 2);

    runZebraDiscard(create(256, 4, 1024, false, isBruteOnly), 32, 16, 2);
    runZebraDiscard(create(256, 4, 1024, false, isBruteOnly), 32, 16, 4);
  }
This relies on allocations basically being sequential, no internal reordering. Rather,
the specific paths it takes do; all the scenarios should work regardless of allocation.
llap-server/src/test/org/apache/hadoop/hive/llap/cache/TestBuddyAllocatorForceEvict.java