Search in sources :

Example 6 with PLink

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);
}
Also used : PLink(jcog.pri.PLink) DefaultHijackBag(jcog.bag.impl.hijack.DefaultHijackBag) HijackBag(jcog.bag.impl.HijackBag) ArrayBag(jcog.bag.impl.ArrayBag) FasterList(jcog.list.FasterList)

Example 7 with PLink

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);
}
Also used : PLink(jcog.pri.PLink) XoRoShiRo128PlusRandom(jcog.math.random.XoRoShiRo128PlusRandom) XorShift128PlusRandom(jcog.math.random.XorShift128PlusRandom) XoRoShiRo128PlusRandom(jcog.math.random.XoRoShiRo128PlusRandom)

Example 8 with PLink

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));
}
Also used : PLink(jcog.pri.PLink) DefaultHijackBag(jcog.bag.impl.hijack.DefaultHijackBag) PriReference(jcog.pri.PriReference)

Example 9 with PLink

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);
}
Also used : PLink(jcog.pri.PLink) ArrayBag(jcog.bag.impl.ArrayBag)

Example 10 with PLink

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());
    }
}
Also used : PLink(jcog.pri.PLink) ArrayBag(jcog.bag.impl.ArrayBag)

Aggregations

PLink (jcog.pri.PLink)16 Test (org.junit.jupiter.api.Test)6 ArrayBag (jcog.bag.impl.ArrayBag)4 PriReference (jcog.pri.PriReference)4 PLinkArrayBag (jcog.bag.impl.PLinkArrayBag)3 DefaultHijackBag (jcog.bag.impl.hijack.DefaultHijackBag)3 Term (nars.term.Term)2 NotNull (org.jetbrains.annotations.NotNull)2 Nullable (org.jetbrains.annotations.Nullable)2 Sets (com.google.common.collect.Sets)1 PhantomReference (java.lang.ref.PhantomReference)1 ReferenceQueue (java.lang.ref.ReferenceQueue)1 SoftReference (java.lang.ref.SoftReference)1 WeakReference (java.lang.ref.WeakReference)1 ArrayList (java.util.ArrayList)1 Collection (java.util.Collection)1 List (java.util.List)1 Set (java.util.Set)1 TreeSet (java.util.TreeSet)1 java.util.concurrent (java.util.concurrent)1