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)));
}
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");
}
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());
}
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());
}
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());
}
Aggregations