use of jcog.pri.PLink in project narchy by automenta.
the class BagTest method testPutMinMaxAndUniqueness.
public static void testPutMinMaxAndUniqueness(Bag<Integer, PriReference<Integer>> a) {
float pri = 0.5f;
// insert enough to fully cover all slots. strings have bad hashcode when input iteratively so this may need to be a high multiple
int n = a.capacity() * 16;
for (int i = 0; i < n; i++) {
a.put(new PLink((i), pri));
}
// commit but dont forget
a.commit(null);
assertEquals(a.capacity(), a.size());
if (a instanceof ArrayBag)
assertSorted((ArrayBag) a);
// a.print();
// System.out.println(n + " " + a.size());
List<Integer> keys = new FasterList(a.capacity());
a.forEachKey(keys::add);
assertEquals(a.size(), keys.size());
assertEquals(new HashSet(keys).size(), keys.size());
assertEquals(pri, a.priMin(), 0.01f);
assertEquals(a.priMin(), a.priMax(), 0.08f);
if (a instanceof HijackBag)
assertTrue(((HijackBag) a).density() > 0.75f);
}
use of jcog.pri.PLink in project narchy by automenta.
the class BagTest method fillRandom.
public static void fillRandom(CurveBag<PLink<String>> bag) {
assertTrue(bag.isEmpty());
int c = bag.capacity();
Random rng = new XoRoShiRo128PlusRandom(1);
// insert biggest items first
for (int i = c - 1; i >= 0; i--) {
PLink inserted = bag.put(new PLink(i + "x", rng.nextFloat()));
if (inserted == null) {
fail("");
}
}
bag.commit(null);
assertEquals(c, bag.size());
assertSorted(bag);
}
use of jcog.pri.PLink in project narchy by automenta.
the class BagTest method testBasicInsertionRemoval.
public static void testBasicInsertionRemoval(Bag<String, PriReference<String>> c) {
assertEquals(1, c.capacity());
if (!(c instanceof DefaultHijackBag)) {
assertEquals(0, c.size());
assertTrue(c.isEmpty());
}
// insert an item with (nearly) zero budget
PLink x0 = new PLink("x", 2 * Prioritized.EPSILON);
PriReference added = c.put(x0);
assertSame(added, x0);
c.commit();
assertEquals(1, c.size());
assertEquals(0, c.priMin(), Prioritized.EPSILON * 2);
PriReference<String> x = c.get("x");
assertNotNull(x);
assertSame(x, x0);
assertTrue(Util.equals(Prioritized.Zero.priElseNeg1(), x.priElseNeg1(), 0.01f));
}
use of jcog.pri.PLink in project narchy by automenta.
the class BagTest method fillLinear.
/**
* fill it exactly to capacity
*/
public static void fillLinear(Bag<PLink<String>, PLink<String>> bag, int c) {
assertTrue(bag.isEmpty());
// insert biggest items first
for (int i = c - 1; i >= 0; i--) {
// midpoint of (i,i+1)
PLink inserted = bag.put(new PLink(i + "x", (i + 0.5f) / c));
if (inserted == null) {
fail("");
}
}
bag.commit(null);
assertEquals(c, bag.size());
assertEquals(0.5f / c, bag.priMin(), 0.03f);
// no pressure should have been applied because capacity was only reached after the last put
assertEquals(1 - 1f / (c * 2f), bag.priMax(), 0.03f);
if (bag instanceof ArrayBag)
assertSorted((ArrayBag) bag);
}
use of jcog.pri.PLink in project narchy by automenta.
the class BagTest method testRemoveByKey.
public static void testRemoveByKey(Bag<String, PriReference<String>> a) {
a.put(new PLink("x", 0.1f));
a.commit();
assertEquals(1, a.size());
a.remove("x");
a.commit();
assertEquals(0, a.size());
assertTrue(a.isEmpty());
if (a instanceof ArrayBag) {
assertTrue(((ArrayBag) a).listCopy().isEmpty());
assertTrue(((ArrayBag) a).keySet().isEmpty());
}
}
Aggregations