Search in sources :

Example 11 with TupleList

use of org.drools.core.util.index.TupleList in project drools by kiegroup.

the class RightTupleListTest method testEmptyIterator.

@Test
public void testEmptyIterator() {
    final TupleList map = new TupleList();
    final Cheese stilton1 = new Cheese("stilton", 35);
    final InternalFactHandle h1 = new DefaultFactHandle(1, stilton1);
    assertNull(map.getFirst(new LeftTupleImpl(h1, null, true)));
}
Also used : TupleList(org.drools.core.util.index.TupleList) DefaultFactHandle(org.drools.core.common.DefaultFactHandle) LeftTupleImpl(org.drools.core.reteoo.LeftTupleImpl) Cheese(org.drools.core.test.model.Cheese) InternalFactHandle(org.drools.core.common.InternalFactHandle) Test(org.junit.Test)

Example 12 with TupleList

use of org.drools.core.util.index.TupleList in project drools by kiegroup.

the class FieldIndexEntryTest method testThreeEntries.

@Test
public void testThreeEntries() {
    final ClassFieldReader extractor = store.getReader(Cheese.class, "type");
    final FieldIndex fieldIndex = new FieldIndex(extractor, null, MvelConstraint.INDEX_EVALUATOR);
    final SingleIndex singleIndex = new SingleIndex(new FieldIndex[] { fieldIndex }, 1);
    Tuple tuple = new RightTupleImpl(new DefaultFactHandle(1, new Cheese("stilton", 10)));
    final TupleList index = new AbstractHashTable.SingleIndexTupleList(singleIndex, tuple, "stilton".hashCode(), false);
    final Cheese stilton1 = new Cheese("stilton", 35);
    final InternalFactHandle h1 = new DefaultFactHandle(1, stilton1);
    final Cheese stilton2 = new Cheese("stilton", 59);
    final InternalFactHandle h2 = new DefaultFactHandle(2, stilton2);
    final Cheese stilton3 = new Cheese("stilton", 59);
    final InternalFactHandle h3 = new DefaultFactHandle(3, stilton3);
    RightTuple h1RightTuple = new RightTupleImpl(h1, null);
    RightTuple h2RightTuple = new RightTupleImpl(h2, null);
    RightTuple h3RightTuple = new RightTupleImpl(h3, null);
    // test add
    index.add(h1RightTuple);
    index.add(h2RightTuple);
    index.add(h3RightTuple);
    assertEquals(h1, index.getFirst().getFactHandle());
    assertEquals(h2, ((RightTuple) index.getFirst().getNext()).getFactHandle());
    assertEquals(h3, ((RightTuple) index.getFirst().getNext().getNext()).getFactHandle());
    // test get
    assertEquals(h1, index.get(h1).getFactHandle());
    assertEquals(h2, index.get(h2).getFactHandle());
    assertEquals(h3, index.get(h3).getFactHandle());
    // test removal for combinations
    // remove first
    index.remove(h3RightTuple);
    assertEquals(h1, index.getFirst().getFactHandle());
    assertEquals(h2, ((RightTuple) index.getFirst().getNext()).getFactHandle());
    index.add(h3RightTuple);
    index.remove(h2RightTuple);
    assertEquals(h1, index.getFirst().getFactHandle());
    assertEquals(h3, ((RightTuple) index.getFirst().getNext()).getFactHandle());
    index.add(h2RightTuple);
    index.remove(h1RightTuple);
    assertEquals(h3, index.getFirst().getFactHandle());
    assertEquals(h2, ((RightTuple) index.getFirst().getNext()).getFactHandle());
    index.remove(index.getFirst());
    // check index type does not change, as this fact is removed
    stilton2.setType("cheddar");
}
Also used : TupleList(org.drools.core.util.index.TupleList) SingleIndex(org.drools.core.util.AbstractHashTable.SingleIndex) DefaultFactHandle(org.drools.core.common.DefaultFactHandle) FieldIndex(org.drools.core.util.AbstractHashTable.FieldIndex) ClassFieldReader(org.drools.core.base.ClassFieldReader) Cheese(org.drools.core.test.model.Cheese) RightTupleImpl(org.drools.core.reteoo.RightTupleImpl) InternalFactHandle(org.drools.core.common.InternalFactHandle) RightTuple(org.drools.core.reteoo.RightTuple) RightTuple(org.drools.core.reteoo.RightTuple) Tuple(org.drools.core.spi.Tuple) Test(org.junit.Test)

Example 13 with TupleList

use of org.drools.core.util.index.TupleList in project drools by kiegroup.

the class FieldIndexEntryTest method testSingleEntry.

@Test
public void testSingleEntry() {
    final ClassFieldReader extractor = store.getReader(Cheese.class, "type");
    final FieldIndex fieldIndex = new FieldIndex(extractor, null, MvelConstraint.INDEX_EVALUATOR);
    final SingleIndex singleIndex = new SingleIndex(new FieldIndex[] { fieldIndex }, 1);
    Tuple tuple = new RightTupleImpl(new DefaultFactHandle(1, new Cheese("stilton", 10)));
    final TupleList index = new AbstractHashTable.SingleIndexTupleList(singleIndex, tuple, "stilton".hashCode(), false);
    // Test initial construction
    assertNull(index.getFirst());
    assertEquals("stilton".hashCode(), index.hashCode());
    final Cheese stilton1 = new Cheese("stilton", 35);
    final InternalFactHandle h1 = new DefaultFactHandle(1, stilton1);
    // test add
    RightTuple h1RightTuple = new RightTupleImpl(h1, null);
    index.add(h1RightTuple);
    final Tuple entry1 = index.getFirst();
    assertSame(h1, entry1.getFactHandle());
    assertNull(entry1.getNext());
    assertSame(entry1, index.get(h1));
    // test get
    final Tuple entry2 = index.get(new RightTupleImpl(h1, null));
    assertSame(entry1, entry2);
    // test remove
    index.remove(h1RightTuple);
    assertNull(index.getFirst());
}
Also used : TupleList(org.drools.core.util.index.TupleList) SingleIndex(org.drools.core.util.AbstractHashTable.SingleIndex) DefaultFactHandle(org.drools.core.common.DefaultFactHandle) FieldIndex(org.drools.core.util.AbstractHashTable.FieldIndex) ClassFieldReader(org.drools.core.base.ClassFieldReader) Cheese(org.drools.core.test.model.Cheese) RightTupleImpl(org.drools.core.reteoo.RightTupleImpl) InternalFactHandle(org.drools.core.common.InternalFactHandle) RightTuple(org.drools.core.reteoo.RightTuple) RightTuple(org.drools.core.reteoo.RightTuple) Tuple(org.drools.core.spi.Tuple) Test(org.junit.Test)

Example 14 with TupleList

use of org.drools.core.util.index.TupleList in project drools by kiegroup.

the class IndexedHashtableIteratorTest method testCanReachAllEntriesInLastTableRowRightTupleIndexHashTable.

@Test
public void testCanReachAllEntriesInLastTableRowRightTupleIndexHashTable() {
    // Construct a table with one row, containing one list, containing three entries.
    int numEntries = 3;
    TupleList[] table = new TupleList[3];
    TupleList rtList = new TupleList();
    table[0] = rtList;
    for (int i = 0; i < numEntries; i++) {
        RightTuple rightTuple = new RightTupleImpl();
        rightTuple.setMemory(rtList);
        rtList.add(rightTuple);
    }
    rtList = new TupleList();
    table[2] = rtList;
    for (int i = 0; i < numEntries; i++) {
        RightTuple rightTuple = new RightTupleImpl();
        rightTuple.setMemory(rtList);
        rtList.add(rightTuple);
    }
    rtList = new TupleList();
    table[2].setNext(rtList);
    for (int i = 0; i < numEntries; i++) {
        RightTuple rightTuple = new RightTupleImpl();
        rightTuple.setMemory(rtList);
        rtList.add(rightTuple);
    }
    // test fast
    TupleIndexHashTable.FullFastIterator iter = new TupleIndexHashTable.FullFastIterator(table);
    List<RightTuple> list = new ArrayList<RightTuple>();
    for (RightTuple rightTuple = (RightTuple) iter.next(null); rightTuple != null; rightTuple = (RightTuple) iter.next(rightTuple)) {
        // ensure no duplicate
        assertFalse(contains(list, rightTuple));
        list.add(rightTuple);
    }
    // test normal
    TupleIndexHashTable rthTable = new TupleIndexHashTable();
    rthTable.init(table, 3, numEntries * 3);
    TupleIndexHashTable.FieldIndexHashTableFullIterator iter2 = new TupleIndexHashTable.FieldIndexHashTableFullIterator(rthTable);
    list = new ArrayList<RightTuple>();
    for (RightTuple rightTuple = (RightTuple) iter2.next(); rightTuple != null; rightTuple = (RightTuple) iter2.next()) {
        // ensure no duplicate
        assertFalse(contains(list, rightTuple));
        list.add(rightTuple);
    }
    assertEquals(numEntries * 3, list.size());
}
Also used : ArrayList(java.util.ArrayList) RightTupleImpl(org.drools.core.reteoo.RightTupleImpl) TupleIndexHashTable(org.drools.core.util.index.TupleIndexHashTable) RightTuple(org.drools.core.reteoo.RightTuple) TupleList(org.drools.core.util.index.TupleList) Test(org.junit.Test)

Example 15 with TupleList

use of org.drools.core.util.index.TupleList in project drools by kiegroup.

the class IndexedHashtableIteratorTest method testCanReachAllEntriesInLastTableRowLeftTupleIndexHashTable.

@Test
public void testCanReachAllEntriesInLastTableRowLeftTupleIndexHashTable() {
    // Construct a table with one row, containing one list, containing three entries.
    int numEntries = 3;
    TupleList[] table = new TupleList[3];
    TupleList rtList = new TupleList();
    table[0] = rtList;
    for (int i = 0; i < numEntries; i++) {
        LeftTupleImpl leftTuple = new LeftTupleImpl();
        leftTuple.setMemory(rtList);
        rtList.add(leftTuple);
    }
    rtList = new TupleList();
    table[2] = rtList;
    for (int i = 0; i < numEntries; i++) {
        LeftTupleImpl leftTuple = new LeftTupleImpl();
        leftTuple.setMemory(rtList);
        rtList.add(leftTuple);
    }
    rtList = new TupleList();
    table[2].setNext(rtList);
    for (int i = 0; i < numEntries; i++) {
        LeftTupleImpl leftTuple = new LeftTupleImpl();
        leftTuple.setMemory(rtList);
        rtList.add(leftTuple);
    }
    // test fast
    TupleIndexHashTable.FullFastIterator iter = new TupleIndexHashTable.FullFastIterator(table);
    List<LeftTupleImpl> list = new ArrayList<LeftTupleImpl>();
    for (LeftTupleImpl leftTuple = (LeftTupleImpl) iter.next(null); leftTuple != null; leftTuple = (LeftTupleImpl) iter.next(leftTuple)) {
        // ensure no duplicate
        assertFalse(contains(list, leftTuple));
        list.add(leftTuple);
    }
    assertEquals(numEntries * 3, list.size());
    // test normal
    TupleIndexHashTable lthTable = new TupleIndexHashTable();
    lthTable.init(table, 3, numEntries * 3);
    TupleIndexHashTable.FieldIndexHashTableFullIterator iter2 = new TupleIndexHashTable.FieldIndexHashTableFullIterator(lthTable);
    list = new ArrayList<LeftTupleImpl>();
    for (LeftTupleImpl leftTuple = (LeftTupleImpl) iter2.next(); leftTuple != null; leftTuple = (LeftTupleImpl) iter2.next()) {
        // ensure no duplicate
        assertFalse(contains(list, leftTuple));
        list.add(leftTuple);
    }
    assertEquals(numEntries * 3, list.size());
}
Also used : TupleList(org.drools.core.util.index.TupleList) ArrayList(java.util.ArrayList) LeftTupleImpl(org.drools.core.reteoo.LeftTupleImpl) TupleIndexHashTable(org.drools.core.util.index.TupleIndexHashTable) Test(org.junit.Test)

Aggregations

TupleList (org.drools.core.util.index.TupleList)18 Test (org.junit.Test)12 InternalFactHandle (org.drools.core.common.InternalFactHandle)7 TupleIndexHashTable (org.drools.core.util.index.TupleIndexHashTable)7 RightTuple (org.drools.core.reteoo.RightTuple)6 RightTupleImpl (org.drools.core.reteoo.RightTupleImpl)6 ArrayList (java.util.ArrayList)5 DefaultFactHandle (org.drools.core.common.DefaultFactHandle)5 LeftTupleImpl (org.drools.core.reteoo.LeftTupleImpl)5 FieldIndex (org.drools.core.util.AbstractHashTable.FieldIndex)5 BetaMemory (org.drools.core.reteoo.BetaMemory)4 Tuple (org.drools.core.spi.Tuple)4 Cheese (org.drools.core.test.model.Cheese)4 FieldIndexHashTableFullIterator (org.drools.core.util.index.TupleIndexHashTable.FieldIndexHashTableFullIterator)4 RuleBaseConfiguration (org.drools.core.RuleBaseConfiguration)3 ClassFieldReader (org.drools.core.base.ClassFieldReader)3 SingleBetaConstraints (org.drools.core.common.SingleBetaConstraints)3 LeftTuple (org.drools.core.reteoo.LeftTuple)3 BetaNodeFieldConstraint (org.drools.core.spi.BetaNodeFieldConstraint)3 SingleIndex (org.drools.core.util.AbstractHashTable.SingleIndex)3