package spimedb.util.bag;
import org.junit.Ignore;
import org.junit.Test;
import java.util.HashMap;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
/**
* Created by me on 1/15/17.
*/
@Ignore
public class PriBagTest {
@Test
public void testPriBag1() {
// HashMap<Object,Float> pri = new HashMap();
// PriBag b = new PriBag(pri::get, 4);
// b.put("a", 0);
PriBag<String> s = new PriBag(3, BudgetMerge.add, new HashMap());
s.put("aa", 0.05f);
s.put("a", 0.05f); s.put("a", 0.05f);
s.put("b", 0.3f);
s.put("c", 0.1f);
s.put("d", 0.4f);
s.put("c", 0.1f);
System.out.println(s);
assertEquals(3, s.size());
assertEquals(0.4, s.priMax(), 0.01f);
assertEquals(0.2, s.priMin(), 0.01f);
assertEquals("d", s.top().id);
assertEquals("c", s.bottom().id);
}
@Test
public void testPriBag2() {
int cap = 8;
int vary = 64;
PriBag<String> s = new PriBag(cap, BudgetMerge.add, new HashMap());
for (int i = 0; i < 32 * 64; i++) {
s.put( "x" + (i % vary), 0.05f + (float)Math.random() );
}
System.out.println(s);
assertEquals(cap, s.size());
assertTrue(s.top().pri > s.bottom().pri);
//TODO fully test monotonically decreasing-ness
}
@Test
public void testPriBagFlat() {
//behave as a FIFO queue if priority is flat:
ObservablePriBag<String> b = new ObservablePriBag<>(3, BudgetMerge.max, new HashMap());
StringBuilder seq = new StringBuilder(1024);
b.ADD.on(v -> seq.append('+').append(v).append(' '));
b.REMOVE.on(v -> seq.append('-').append(v).append(' '));
for (int i = 0; i < 5; i++) {
b.put( "x" + i, 0.5f );
}
assertEquals("x4=0.5, x3=0.5, x2=0.5", b.toString());
assertEquals("+x0 +x1 +x2 -x0 +x3 -x1 +x4 ", seq.toString());
}
@Test
public void testObserveAddRemove() {
ObservablePriBag<String> b = new ObservablePriBag<>(3, BudgetMerge.add, new HashMap<>());
StringBuilder seq = new StringBuilder(1024);
b.ADD.on(v -> seq.append('+').append(v).append(' '));
b.REMOVE.on(v -> seq.append('-').append(v).append(' '));
b.put("a", 0.1f);
b.put("b", 0.1f);
b.put("a", 0.1f); //should not retrigger add event
b.remove("b");
b.clear(); //should register as a removal
assertEquals("+a +b -b -a ", seq.toString());
seq.setLength(0);
b.put("a", 0.15f);
b.put("b", 0.20f);
b.put("c", 0.25f);
b.put("d", 0.25f);
b.put("b", 0.25f); //should not re-trigger since it's already present
assertEquals("+a +b +c -a +d ", seq.toString());
seq.setLength(0);
}
}