package com.senseidb.search.query.filters;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import com.browseengine.bobo.api.BoboIndexReader;
import com.browseengine.bobo.facets.FacetHandler;
import com.browseengine.bobo.facets.data.MultiValueFacetDataCache;
import com.browseengine.bobo.facets.data.TermStringList;
import com.browseengine.bobo.facets.data.TermValueList;
import com.browseengine.bobo.facets.impl.MultiValueFacetHandler;
import static org.easymock.classextension.EasyMock.createMock;
import static org.easymock.classextension.EasyMock.expect;
import static org.easymock.classextension.EasyMock.replay;
import static org.easymock.classextension.EasyMock.reset;
import static org.junit.Assert.assertArrayEquals;
public class TestSenseiTermFilter {
private String[] vals = new String[]{"a", "c", "e"};
private int[] freqs;
TermValueList<String> dictionary = new TermStringList();
@Before
public void setup() {
dictionary = new TermStringList();
freqs = new int[27];
dictionary.add(null);
for(char ch = 'a'; ch <= 'z'; ch++) {
dictionary.add("" + ch);
freqs[1 + ch - 'a'] = 'z' - ch + 1;
}
}
@Test
public void testGetValsByFrequency() {
List<String> dummy = new ArrayList<String>();
DocIdSetCardinality andCardinality = DocIdSetCardinality.one();
String andVals[] = SenseiTermFilter.getValsByFrequency(vals, freqs, 26, andCardinality, dictionary, dummy, true);
assertArrayEquals(andVals, new String[]{"e", "c", "a"});
DocSetAssertions.assertRange(18, 22, 26, andCardinality);
DocIdSetCardinality orCardinality = DocIdSetCardinality.zero();
String orgVals[] = SenseiTermFilter.getValsByFrequency(vals, freqs, 26, orCardinality, dictionary, dummy, false);
assertArrayEquals(orgVals, new String[]{"a", "c", "e"});
DocSetAssertions.assertRange(26, 26, 26, orCardinality);
}
@Test
public void testSenseiTermFilter() throws IOException {
SenseiTermFilter orTermFilter =
new SenseiTermFilter("column", vals, null, false, false);
BoboIndexReader indexReader = createMock(BoboIndexReader.class);
MultiValueFacetDataCache facetDataCache =
new MultiValueFacetDataCache();
facetDataCache.valArray = dictionary;
facetDataCache.freqs = freqs;
FacetHandler facetHandler =
new MultiValueFacetHandler("column", 32);
expect(indexReader.maxDoc()).andReturn(1000).anyTimes();
expect(indexReader.getFacetHandler("column")).andReturn(facetHandler);
expect(indexReader.getFacetData("column")).andReturn(facetDataCache).anyTimes();
replay(indexReader);
SenseiDocIdSet orDocIdSet = orTermFilter.getSenseiDocIdSet(indexReader);
DocSetAssertions.assertRange(26, 72, 1000, orDocIdSet.getCardinalityEstimate());
SenseiTermFilter andTermFilter =
new SenseiTermFilter("column", vals, null, true, false);
reset(indexReader);
expect(indexReader.maxDoc()).andReturn(1000).anyTimes();
expect(indexReader.getFacetHandler("column")).andReturn(facetHandler);
expect(indexReader.getFacetData("column")).andReturn(facetDataCache).anyTimes();
replay(indexReader);
SenseiDocIdSet andDocIdSet = andTermFilter.getSenseiDocIdSet(indexReader);
DocSetAssertions.assertRange(0, 22, 1000, andDocIdSet.getCardinalityEstimate());
}
}